微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机按键如何控制流水灯

单片机按键如何控制流水灯

时间: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



学习 谢谢

学习 谢谢

了解了解了解

学习

这个有点意思

汇编啦。

看不懂这个,,

小编有木有用c语言编写的按键控制流水灯

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top