单片机按键如何控制流水灯
时间:10-02
整理:3721RD
点击:
一个朋友 学习单片机的感悟 应我的要求贴上来分享给大家,下面开始原文:也欢迎大家把学习感悟发上来。
最近学习单片机,感觉进步好小,自己玩了个流水灯。就在原来流水灯的程序的基础上加了四个按键。每个按键对应一个子程序,当按键不同是,流水灯亮的花样也不同。另外P2口接一个数码管,按部同按键时显示不同的值,对应四个按键分别是1,2,3,4. 四段子程序的流水灯的控制码是用查表的方式取得,每一个子程序的延时也不同,大家可以在本文最后看程序代码。
程序是汇编写的,比较繁杂。
新加上去的四个按键,接在P1口上
第一个按键控制的第一段子程序
第二段子程序
第三段子程序
第四段子程序
下面是汇编语言写的程序代码
ORG 0000H
LJMP START
LED EQU P0
START: MOV P2,#00H
MOV LED,#0FFH ;LED灭
MOV A,#0FFH
MOV P1,A
LOOP: MOV A,P1 ;读键盘状况
CJNE A,#0FFH,LP0
JMP LOOP
LP0: ACALL DELAY0
MOV A,P1
CJNE A,#0FFH,LP1
JMP LOOP
LP1: JNB P1.0,A1
JNB P1.1,A2
JNB P1.2,A3
JNB P1.3,A4
JMP START
A1: MOV DPTR,#TAB1
MOV R0,#0
LOOP2: MOV A,R0
MOVC A,@A+DPTR
MOV LED,A
MOV P2,#06H
ACALL DELAY1
INC R0
CJNE R0,#28,LOOP2
JMP START
A2: MOV DPTR,#TAB2
MOV R0,#0
LOOP3: MOV A,R0
MOVC A,@A+DPTR
MOV LED,A
MOV P2,#5BH
ACALL DELAY2
INC R0
CJNE R0,#36,LOOP3
JMP START
A3: MOV DPTR,#TAB3
MOV R0,#0
LOOP4: MOV A,R0
MOVC A,@A+DPTR
MOV LED, A
MOV P2,#4FH
ACALL DELAY3
INC R0
CJNE R0,#87,LOOP4
JMP START
A4: MOV DPTR,#TAB4
MOV R0,#0
LOOP5: MOV A,R0
MOVC A,@A+DPTR
MOV LED,A
MOV P2,#66H
ACALL DELAY4
INC R0
CJNE R0,#69,LOOP5
JMP START
DELAY0:MOV R3,#40
D2: MOV R4,#250
DJNZ R4,$
DJNZ R3,D2
RET
DELAY1: MOV R5,#10
DLY1: MOV R6,#200
DLY2: MOV R7,#200
DJNZ R7,$
DJNZ R6,DLY2
DJNZ R5,DLY1
RET
DELAY2:MOV R5,#8
DY1: MOV R6,#200
DY2: MOV R7,#200
DJNZ R7,$
DJNZ R6,DY2
DJNZ R5,DY1
RET
DELAY3:MOV R5,#3
DL1: MOV R6,#200
DL2: MOV R7,#200
DJNZ R7,$
DJNZ R6,DL2
DJNZ R5,DL1
RET
DELAY4:MOV R5,#9
LY1: MOV R6,#200
LY2: MOV R7,#200
DJNZ R7,$
DJNZ R6,LY2
DJNZ R5,LY1
RET
TAB1: DB 0AAH,0CAH,52H,3CH
DB 5AH,66H,99H,0C3H
DB 59H,52H,92H,51H
DB 8AH,3CH,1FH,0F0H
DB 8FH,0F1H,0E3H,0FH
DB 0F0H,87H,0E1H,0C3H
DB 3CH,0C3H,3CH,0C3H
TAB2: DB 0FEH,0F7H,0BFH,0FDH
DB 0DFH,7FH,0FBH,0EFH
DB 0F6H,0B7H,0DDH,5FH
DB 7DH,0B6H,5DH,0EBH
DB 7EH,0BDH,0DBH,0E7H
DB 0DBH,0BDH,7EH,1FH
DB 0F8H,8FH,0F1H,0C7H
DB 0E3H,0FH,0F0H,0FH
DB 0F0H,7H,0E0H,0C3H
TAB3: DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,7FH
DB 0FFH,00H,0FFH,7FH,0BFH,0DFH
DB 0EFH,0F7H,0FBH,0FDH
DB 0FEH,0FFH,00H,0FFH
DB 0FEH,0FCH,0F8H,0F0H
DB 0E0H,0C0H,80H,00H
DB 80H,0C0H,0E0H,0F0H
DB 0F8H,0FCH,0FEH,0FFH
DB 7EH,3CH,18H,00H
DB 00H,18H,3CH,7EH
DB 0FFH,0AAH,55H,0FFH
DB 0FCH,0F9H,0F3H,0E7H
DB 0CFH,9FH,3FH,3FH
DB 1FH,8FH,0C7H
DB 0E3H,0F1H,0F8H,0F8H
DB 0F0H,0E1H,0C3H,87H
DB 0FH,0FH,7H,83H
DB 0C1H,0E0H,0E0H,0C0H
DB 81H,3H,3H,1H
DB 80H,80H,00H,00H
DB 0FFH,00H,0FFH
TAB4: DB 0B6H,36H,96H,0A6H
DB 0B2H,0B4H,0FFH,5DH
DB 55H,4DH,1DH,59H
DB 5CH,0FFH,0EBH,0ABH
DB 0E3H,0EAH,6BH,0CBH
DB 0E9H,0FFH,4BH,0C9H
DB 69H,0A3H,0AAH,0E2H
DB 0FFH,17H,56H,1EH
DB 95H,0D4H,9CH,35H
DB 3CH,74H,0FFH,0B6H
DB 36H,96H,0B4H,0A6H
DB 0B2H,0FFH,5DH,1DH
DB 55H,5CH,4DH,59H
DB 0FFH
DB 49H
DB 0A2H,0FFH,5DH,0B6H
DB 0AAH,55H,0FFH,00H
DB 0FFH
END
最近学习单片机,感觉进步好小,自己玩了个流水灯。就在原来流水灯的程序的基础上加了四个按键。每个按键对应一个子程序,当按键不同是,流水灯亮的花样也不同。另外P2口接一个数码管,按部同按键时显示不同的值,对应四个按键分别是1,2,3,4. 四段子程序的流水灯的控制码是用查表的方式取得,每一个子程序的延时也不同,大家可以在本文最后看程序代码。
程序是汇编写的,比较繁杂。
新加上去的四个按键,接在P1口上
第一个按键控制的第一段子程序
第二段子程序
第三段子程序
第四段子程序
下面是汇编语言写的程序代码
ORG 0000H
LJMP START
LED EQU P0
START: MOV P2,#00H
MOV LED,#0FFH ;LED灭
MOV A,#0FFH
MOV P1,A
LOOP: MOV A,P1 ;读键盘状况
CJNE A,#0FFH,LP0
JMP LOOP
LP0: ACALL DELAY0
MOV A,P1
CJNE A,#0FFH,LP1
JMP LOOP
LP1: JNB P1.0,A1
JNB P1.1,A2
JNB P1.2,A3
JNB P1.3,A4
JMP START
A1: MOV DPTR,#TAB1
MOV R0,#0
LOOP2: MOV A,R0
MOVC A,@A+DPTR
MOV LED,A
MOV P2,#06H
ACALL DELAY1
INC R0
CJNE R0,#28,LOOP2
JMP START
A2: MOV DPTR,#TAB2
MOV R0,#0
LOOP3: MOV A,R0
MOVC A,@A+DPTR
MOV LED,A
MOV P2,#5BH
ACALL DELAY2
INC R0
CJNE R0,#36,LOOP3
JMP START
A3: MOV DPTR,#TAB3
MOV R0,#0
LOOP4: MOV A,R0
MOVC A,@A+DPTR
MOV LED, A
MOV P2,#4FH
ACALL DELAY3
INC R0
CJNE R0,#87,LOOP4
JMP START
A4: MOV DPTR,#TAB4
MOV R0,#0
LOOP5: MOV A,R0
MOVC A,@A+DPTR
MOV LED,A
MOV P2,#66H
ACALL DELAY4
INC R0
CJNE R0,#69,LOOP5
JMP START
DELAY0:MOV R3,#40
D2: MOV R4,#250
DJNZ R4,$
DJNZ R3,D2
RET
DELAY1: MOV R5,#10
DLY1: MOV R6,#200
DLY2: MOV R7,#200
DJNZ R7,$
DJNZ R6,DLY2
DJNZ R5,DLY1
RET
DELAY2:MOV R5,#8
DY1: MOV R6,#200
DY2: MOV R7,#200
DJNZ R7,$
DJNZ R6,DY2
DJNZ R5,DY1
RET
DELAY3:MOV R5,#3
DL1: MOV R6,#200
DL2: MOV R7,#200
DJNZ R7,$
DJNZ R6,DL2
DJNZ R5,DL1
RET
DELAY4:MOV R5,#9
LY1: MOV R6,#200
LY2: MOV R7,#200
DJNZ R7,$
DJNZ R6,LY2
DJNZ R5,LY1
RET
TAB1: DB 0AAH,0CAH,52H,3CH
DB 5AH,66H,99H,0C3H
DB 59H,52H,92H,51H
DB 8AH,3CH,1FH,0F0H
DB 8FH,0F1H,0E3H,0FH
DB 0F0H,87H,0E1H,0C3H
DB 3CH,0C3H,3CH,0C3H
TAB2: DB 0FEH,0F7H,0BFH,0FDH
DB 0DFH,7FH,0FBH,0EFH
DB 0F6H,0B7H,0DDH,5FH
DB 7DH,0B6H,5DH,0EBH
DB 7EH,0BDH,0DBH,0E7H
DB 0DBH,0BDH,7EH,1FH
DB 0F8H,8FH,0F1H,0C7H
DB 0E3H,0FH,0F0H,0FH
DB 0F0H,7H,0E0H,0C3H
TAB3: DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,7FH
DB 0FFH,00H,0FFH,7FH,0BFH,0DFH
DB 0EFH,0F7H,0FBH,0FDH
DB 0FEH,0FFH,00H,0FFH
DB 0FEH,0FCH,0F8H,0F0H
DB 0E0H,0C0H,80H,00H
DB 80H,0C0H,0E0H,0F0H
DB 0F8H,0FCH,0FEH,0FFH
DB 7EH,3CH,18H,00H
DB 00H,18H,3CH,7EH
DB 0FFH,0AAH,55H,0FFH
DB 0FCH,0F9H,0F3H,0E7H
DB 0CFH,9FH,3FH,3FH
DB 1FH,8FH,0C7H
DB 0E3H,0F1H,0F8H,0F8H
DB 0F0H,0E1H,0C3H,87H
DB 0FH,0FH,7H,83H
DB 0C1H,0E0H,0E0H,0C0H
DB 81H,3H,3H,1H
DB 80H,80H,00H,00H
DB 0FFH,00H,0FFH
TAB4: DB 0B6H,36H,96H,0A6H
DB 0B2H,0B4H,0FFH,5DH
DB 55H,4DH,1DH,59H
DB 5CH,0FFH,0EBH,0ABH
DB 0E3H,0EAH,6BH,0CBH
DB 0E9H,0FFH,4BH,0C9H
DB 69H,0A3H,0AAH,0E2H
DB 0FFH,17H,56H,1EH
DB 95H,0D4H,9CH,35H
DB 3CH,74H,0FFH,0B6H
DB 36H,96H,0B4H,0A6H
DB 0B2H,0FFH,5DH,1DH
DB 55H,5CH,4DH,59H
DB 0FFH
DB 49H
DB 0A2H,0FFH,5DH,0B6H
DB 0AAH,55H,0FFH,00H
DB 0FFH
END
学习 谢谢
学习 谢谢
了解了解了解
学习
这个有点意思
汇编啦。
看不懂这个,,
小编有木有用c语言编写的按键控制流水灯