1、只有四个按键,每个按键本身就不能直接代表一个数字了,不够用。可以用一个键作为选位键,一个键作为数值“递增”和“递减”键,用一个键作为“确认”,用一个键作为“修改”,这样四个键全用上了。单片机上电后,LED要显示为0,此时只有“修改”键可用,若将其按下,“递增”键、“递减”键、“确认”键就都可用了。(正在调试)。主程序 K1控制第一位LED和第五位LED的编程K2、3、4控制相应数码管的程序程序输入程序调试 K2键控制第4位LED显示器的程序框图 K3键控制第3位LED显示器的程序框图 K4键控制第2位LED显示器的程序框图四、程序清单:AA EQU 20H BB EQU 30H CC EQU
2、40H DD EQU 60HTEMP EQU 50H MOV TEMP,#0H ;定义k1按键次数TEMP,并初始化为0 MOV AA,#0H ;定义k2按键次数AA,并初始化位0 MOV BB,#0H ;定义k3按键次数BB,并初始化为0 MOV CC,#0H ;定义k4按键次数CC,并初始化为0MOV DD,#0H ;定义第一位LED显示器显示数值循环次数,初始化为0PP1: LCALL SEL8 MOV P1,#0FFH MOV A,P1 LCALL SEL7CJNE A,#0FEH,PP2;k1键未按下,跳到PP2,第五位LED显示器显示上次显示值 LCALL DELAY1 ;延时,再
3、次采键值,消除键抖动 MOV A,P1 CJNE A,#0FEH,PP2 LCALL DELAY1 INC TEMP ;确定k1键按下,按键次数TEMP加1 PP2: MOV A,TEMP CJNE A,#10,NEXT1; MOV TEMP,#0H INC DD ;按键次数重头计数,第一位显示计数值DD加1 MOV A,DD CJNE A,#6,WW1 ;第一位有六种可能情况,相应六种代码,显示完一遍数值再次重头显示 MOV DD,#0 NEXT1: MOV A,TEMP ;查表NUMTAB MOV DPTR,#NUMTAB MOVC A,A+DPTR MOV P0,A ;查到的段码送入字形
4、口 LCALL SEL4 ;第五位LED显示器亮确认的值 ACALL DELAYWW1: MOV A,DD ;查表NUMTAB1 MOV DPTR,#NUMTAB1 MOVC A,A+DPTR MOV P0,A ; LCALL SEL0 ;第一位LED显示器亮值 LCALL DELAY LCALL SEL8 ;采键值,k2键是否按下 MOV P1,#0FFH MOV A,P1 LCALL SEL7CJNE A,#0FDH,PP3 ;k2未按下,跳到PP3,第四位LED显示器显示上次显示值 LCALL DELAY1 延时,再次采键值,消除键抖动 LCALL SEL8 MOV P1,#0FFH C
5、JNE A,#0FDH,PP3 ;k2键未按下,跳到PP3 LCALL DELAY1 INC AA ;k2键按下,其按键次数值AA加1PP3: MOV A,AA CJNE A,#22,NEXT2 ;第四位LED有22种可能情况,相应22种段码,显示完一遍值,重头开始再次显示 MOV AA,#0HNEXT2: MOV A,AA ;查表,第四位LED显示器显示相应值 MOV DPTR,#NUMTAB MOV P0,A LCALL SEL3 ACALL DELAY LCALL SEL8 ;采键值 MOV P1,#0FFH CJNE A,#0FBH,PP4 ;k3键是否按下,未按下跳到PP4,第三位L
6、ED显示上次的显示值 LCALL DELAY1 ; LCALL SEL8 CJNE A,#0FBH,PP4INC BB ;确认k3键按下,其按键次数BB加1PP4: MOV A,BB CJNE A,#22,NEXT3 ;第三位LED有22种可能情况,相应22种段码,若显示完一遍所有值,再次重头显示 MOV BB,#0HNEXT3: MOV A,BB MOV DPTR,#NUMTAB ;查表,第三位LED显示器显示相应值 MOV P0,A LCALL SEL2 LCALL SEL8 ; MOV A,P1 CJNE A,#0F7H,PP5 ;k4键是否按下,未按下跳到PP5,第二位LED显示器显示
7、上次显示值 LCALL DELAY1 ; LCALL SEL8 CJNE A,#0F7H,PP5INC CC ;确认k4键按下,其按键次数CC加1PP5: MOV A,CC CJNE A,#22,NEXT4 ;第三位LED有22种可能情况,相应22种段码,若显示完一遍 所有值,再次重头显示 MOV CC,#0HNEXT4: MOV A,CC ;查表,第二位LED显示器显示相应值 LCALL SEL1 LJMP PP1 ;k4键采完键值,第二位LED显示完相应值后,重新进行k1键采值DELAY: MOV R7,#50 ;延时 D1: MOV R6,#300 D2: DJNZ R6,$ DJNZ
8、R7,D1 RETDELAY1:MOV R7,#0FFH ;延时1 D11: MOV R6,#03FH D22: DJNZ R7, D11 SEL8: SETB P2.5 ; SETB P2.6 SETB P2.7SEL7: SETB P2.5 CLR P2.7 RETSEL0: CLR P2.5 ;字位1,第一位LED显示器 CLR P2.6 RET SEL1: CLR P2.5 ;字位2,第二位LED显示器 CLR P2.6SEL2: CLR P2.5 ;字位3,第三位LED显示器 CLR P2.7SEL3:字位4,第四位LED显示器 SETB P2.6 SETB P2.7SEL4: SETB P2.5 ;字位5,第五位LED显示器CLR P2.6 CLR P2.7NUMTAB: DB 7EH,0CH,0B6H,9EH,0CCH,0DAH,0FAH,0EH,0FEH,0DEH ,00H,7FH,0DH,0B7H,9FH,0CDH,0DBH,0FBH,0FH,0FFH,0DFH,80H ;第2,3,4位LED显示器可能显示出的22种值的段代码,其中前10种又是第五位LED显示器的可能值的段代码NUMTAB1: DB 00H,0CH,0DH,8CH,8DH,80H第1位LED显示器可能情况的6种段代码 END