您的当前位置:首页正文

单片机最小系统程序

来源:画鸵萌宠网


1

TEMP EQU 30H ;七段数码管缓冲区,连续8个字节

TEMP_NUM EQU 38H ;按键数据缓冲区,第8位(新输入的值)

KEY_NO EQU 40H ;按键值

FKEY EQU 20H.0 ORG 0000H

AJMP START

START:

MOV SP,#60H MOV A,#0AH

START1:

MOV R0,#TEMP

MOV R4,#8

INITIAL:

;按键标志,若有按键为1

;定义堆栈指针地址

2

MOV @R0,A

INC R0

DJNZ R4,INITIAL ;对七段缓冲区消隐,全部赋值为10

;*****************************扫描程序**********************************

SCAN:

CLR FKEY

SCAN0:

ACALL DISP ;调用扫描子程序

ACALL KEY_SCAN ;调用扫描子程序

SCAN1:

JB FKEY,WAIT_OFF ;若有按键就等待按键放开,无则继续扫描显示器和键盘

AJMP SCAN

WAIT_OFF:

3

ACALL DISP

ACALL KEY_SCAN

JB FKEY,WAIT_OFF

WAIT:

MOV A,KEY_NO NEXT: CJNE A,#0AH,NEXT0

ACALL ML NEXT0:

CJNE A,#0BH,NEXT1

ACALL MR NEXT1:

CJNE A,#0CH,NEXT2

;按键松开后

;键值判断,分支跳转

;左移

;右移

4

ACALL SHINE ;闪烁

NEXT2:

CJNE A,#0DH,NEXT3

ACALL NORMOL ;静止显示

NEXT3:

CJNE A,#0EH,NEXT4

ACALL CLEAR ;清零;NEXT4:

NEXT4:CJNE A,#0FH,NEXT5

ACALL HIDE ;消隐

NEXT5:

CALL NUM_OUT ;数字键直接输出

AJMP SCAN

;*******************************显示扫描子程序***********************

5

DISP:

MOV R2,#00H

MOV R0,#TEMP

SCAN_LED: MOV A,R2

SWAP A

MOV R3,A

MOV A,@R0

ADD A,R3

MOV P2,A

MOV R5,#5

ACALL DELAY INC R2

;数据输出至4511及74138端口,使数码管显示相应值

;延时1ms,清抖作用

6

INC R0

CJNE R2,#8,SCAN_LED ;缓存区数据依次从低位开始输出

MOV P2,#0FFH ;消除余辉

RET

;*******************************A、CONTROL:

MOV R4,#90

L1:

ACALL DISP

DJNZ R4, L1

MOV R0,#75

L2:

ACALL KEY_SCAN

B控制键需调用的子程序*************

7

JNB FKEY,L4

L3:

ACALL KEY_SCAN

JB FKEY,L3

ACALL COMPARE

JMP WAIT

L4:

DJNZ R0,L2

RET

;*******************************************

COMPARE:

MOV A,KEY_NO

CLR C

8

SUBB A,#0AH

JC RESTART

RET

;******************************闪烁程序*****************************

SHINE:

MOV R4,#90

LL1:

ACALL DISP

DJNZ R4, LL1

MOV R0,#200

LL2:

ACALL KEY_SCAN

JB FKEY,WAIT_OFF

9

DJNZ R0,LL2

JMP SHINE

RET

;***************************消隐程序********************************

HIDE:

MOV P2,#0FFH

CALL KEY_SCAN

H1:

MOV A,KEY_NO

CJNE A,#0DH,H2

AJMP WAIT_OFF

H2:

CJNE A,#0EH,HIDE

10

AJMP WAIT_OFF

RET

;*************************键盘扫描子程序****************************

KEY_SCAN:

MOV R3,#0EFH MOV R4,#0

MOV R1,#4

CLR PSW.5

S1:

MOV A,R3 MOV P1,A

MOV R5,#1

ACALL DELAY

;加载扫描输出初始信号11101111B

;循环扫描16个按键

11

MOV A,P1 ;读取P1口数据判断按键是否有效

ANL A,#0FH

MOV R2,#4

S2:

JB ACC.0,N1 ;判断有无按键, 若为1则表示没按键按下 MOV KEY_NO,R4

SETB PSW.5

N1:

INC R4

RR A

DJNZ R2,S2 ;对一行进行扫描

MOV A,R3

RL A ;移至下一行扫描

12

MOV R3,A

DJNZ R1,S1

BACK:

JNB PSW.5,NO_KEY

SETB FKEY

RET

NO_KEY:

CLR FKEY

RET

;***************************左移程序********************************

ML:

MOV TEMP_NUM,TEMP+7

MOV TEMP+7, TEMP+6

13

MOV TEMP+6, TEMP+5

MOV TEMP+5, TEMP+4

MOV TEMP+4, TEMP+3

MOV TEMP+3, TEMP+2

MOV TEMP+2, TEMP+1

MOV TEMP+1, TEMP

MOV TEMP,TEMP_NUM

ACALL CONTROL

JMP ML

RET

;**************************右移程序**********************************

MR:

MOV TEMP_NUM,TEMP

14

MOV TEMP,TEMP+1

MOV TEMP+1,TEMP+2

MOV TEMP+2,TEMP+3

MOV TEMP+3,TEMP+4

MOV TEMP+4,TEMP+5

MOV TEMP+5,TEMP+6

MOV TEMP+6,TEMP+7

MOV TEMP+7,TEMP_NUM

ACALL CONTROL

JMP MR

RET

;******* ************静止显示程序*************************

NORMOL:

15

AJMP SCAN

RET

;**********清零程序********

CLEAR:

MOV A,#0

AJMP START1

RET

;********* *数字输出程序******

NUM_OUT:

MOV A,KEY_NO

MOV DPTR,#TABLE

MOVC A,@A+DPTRS

MOV TEMP_NUM,A

16

MOV TEMP, TEMP+1

MOV TEMP+1, TEMP+2

MOV TEMP+2, TEMP+3

MOV TEMP+3, TEMP+4

MOV TEMP+4, TEMP+5

MOV TEMP+5, TEMP+6

MOV TEMP+6, TEMP+7

MOV TEMP+7,TEMP_NUM ;显示自动左移 RET

;*******************************************

RESTART:

ACALL NUM_OUT

MOV R4,#7

17

MOV R0,#31H

RES:

MOV @R0,#10

INC R0

DJNZ R4,RES

JMP SCAN

;******************************延时子程序程序**************************

DELAY: ;延时R5*0.2ms

MOV R6,#1

DELAY0:

MOV R7,#100

DJNZ R7,$

DJNZ R6,DELAY0

18

DJNZ R5,DELAY

RET

;******** ***表格 ************************

TABLE: DB 00H,01H,02H,03H,04H

DB 05H,06H,07H,08H,09H

EN

19

20

因篇幅问题不能全部显示,请点此查看更多更全内容

Top