ANL A,P2 ;扫描按键 CJNE A,#0FFH,CHANGE LJMP WAIT1
;--------------------------------------------------- CHANGE: CLR WEI ;定时10s内可以抢答 K1: JB KEY1,K2 LJMP SCAN_KEY1 K2: JB KEY2,K3 LJMP SCAN_KEY2 K3: JB KEY3,K4 LJMP SCAN_KEY3 K4: JB KEY4,K5 LJMP SCAN_KEY4 K5: JB KEY5,K6 LJMP SCAN_KEY5 K6: JB KEY6,WAIT LJMP SCAN_KEY6
;--------------------------------------------------- SCAN_KEY1: CLR WEI LCALL KEY_DEL
JB KEY1,NEXT1 MOV P1,#0FFH
CLR D1
MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10
LCALL ENABLE
MOV DPTR,#TABLE0 ;第一行显示字符表头地址 LCALL DISP ;显示第一行数据 MOV R1,#1
MOV LCDDATA,#0C7H ;第二行起始字符地址 LCALL ENABLE
MOV DPTR,#TABLE1 ;第二行显示字符表头地址 LCALL DISP ;显示第二行数 CLR BEEP
LCALL DELAY_1S SETB BEEP
JB KEY11,$ ;答题倒计时 LCALL KEY_DEL JB KEY11,$
LCALL QUESTION NEXT1: LCALL WAIT SCAN_KEY2: CLR WEI
LCALL KEY_DEL
- 20 - 显示Number
JB KEY2,NEXT2 MOV P1,#0FFH CLR D2
MOV LCDDATA,#80H MOV R1,#10 LCALL ENABLE MOV DPTR,#TABLE0 LCALL DISP MOV R1,#1
MOV LCDDATA,#0C7H LCALL ENABLE MOV DPTR,#TABLE2 LCALL DISP CLR BEEP
LCALL DELAY_1S SETB BEEP
JB KEY11,$ LCALL KEY_DEL JB KEY11,$ LCALL QUESTION NEXT2: LCALL WAIT SCAN_KEY3: CLR WEI
LCALL KEY_DEL JB KEY3,NEXT3 MOV P1,#0FFH CLR D3
MOV LCDDATA,#80H MOV R1,#10 LCALL ENABLE MOV DPTR,#TABLE0 LCALL DISP MOV R1,#1
MOV LCDDATA,#0C7H LCALL ENABLE MOV DPTR,#TABLE3 LCALL DISP CLR BEEP
LCALL DELAY_1S SETB BEEP
JB KEY11,$ LCALL KEY_DEL JB KEY11,$ LCALL QUESTION NEXT3: LCALL WAIT
;第一行起始字符地址
;第一行显示字符表头地址 ;显示第一行数据 ;第二行起始字符地址 ;第二行显示字符表头地址 ;显示第二行数据
;答题倒计时
;第一行起始字符地址
;第一行显示字符表头地址 ;显示第一行数据 ;第二行起始字符地址 ;第二行显示字符表头地址 ;显示第二行数据
;答题倒计时
- 21 - 显示Number
显示Number
SCAN_KEY4: CLR WEI
LCALL KEY_DEL JB KEY4,NEXT4 MOV P1,#0FFH CLR D4
MOV LCDDATA,#80H MOV R1,#10 LCALL ENABLE MOV DPTR,#TABLE0 LCALL DISP MOV R1,#1
MOV LCDDATA,#0C7H LCALL ENABLE MOV DPTR,#TABLE4 LCALL DISP CLR BEEP
LCALL DELAY_1S SETB BEEP
JB KEY11,$ LCALL KEY_DEL JB KEY11,$ LCALL QUESTION NEXT4: LCALL WAIT SCAN_KEY5: CLR WEI
LCALL KEY_DEL JB KEY5,NEXT5 MOV P1,#0FFH CLR D5
MOV LCDDATA,#80H MOV R1,#10 LCALL ENABLE MOV DPTR,#TABLE0 LCALL DISP MOV R1,#1
MOV LCDDATA,#0C7H LCALL ENABLE MOV DPTR,#TABLE45 LCALL DISP CLR BEEP
LCALL DELAY_1S SETB BEEP
JB KEY11,$ LCALL KEY_DEL JB KEY11,$
;第一行起始字符地址
;第一行显示字符表头地址 ;显示第一行数据 ;第二行起始字符地址 ;第二行显示字符表头地址 ;显示第二行数据
;答题倒计时
;第一行起始字符地址
;第一行显示字符表头地址 ;显示第一行数据 ;第二行起始字符地址 ;第二行显示字符表头地址 ;显示第二行数据
;答题倒计时
- 22 - 显示Number
显示Number
LCALL QUESTION NEXT5: LCALL WAIT SCAN_KEY6: CLR WEI
LCALL KEY_DEL
JB KEY6,NEXT6 MOV P1,#0FFH CLR D6
MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10 LCALL ENABLE
MOV DPTR,#TABLE0 ;第一行显示字符表头地址 LCALL DISP ;显示第一行数据 MOV R1,#1
MOV LCDDATA,#0C7H ;第二行起始字符地址 LCALL ENABLE
MOV DPTR,#TABLE46 ;第二行显示字符表头地址 LCALL DISP ;显示第二行数据 CLR BEEP
LCALL DELAY_1S SETB BEEP
JB KEY11,$ ;答题倒计时 LCALL KEY_DEL JB KEY11,$ LCALL QUESTION NEXT6: LCALL WAIT
;--------------------------------------------------- TIME0: INC R3 MOV A,R3
CJNE A,#20,TT2 TT1: CLR A
MOV R3,#00H MOVC A,@A+DPTR MOV P1,A INC DPTR
CJNE A,#3FH,TT2 LJMP OVER TT2: MOV TH0,#3CH ;0.05s MOV TL0,#0B0H SETB TR0
MOV A,#0FFH
ANL A,P2 ;扫描按键 CJNE A,#0FFH,CHANGE1 SJMP LOO CHANGE1:CLR WEI
- 23 - 显示Number
CLR TR0 LOO: RETI
;--------------------------------------------------- ENABLE: CLR RS ;写指令子程序 ; CLR RW CLR EN
LCALL KEY_DEL SETB EN RET
;------------------------------------- QUESTION: MOV DPTR,#TABLE SETB WEI SETB TR0 SJMP $
;------------------------------------- DISP: ;PUSH ACC
MOV A,#00H ;将ACC清零
MOVC A,@A+DPTR ;查表取得要显示的数据 LCALL DISP1 ;写入一个数据
INC DPTR ;数据表指针加1,准备取下一个数据 DJNZ R1,DISP ;一行没有显示完就继续 ;POP ACC RET
;-----------------
DISP1: MOV LCDDATA,A ;写1字节数据到显示端口 SETB RS ; CLR RW CLR EN
LCALL DELAY SETB EN RET
;-----------------
DELAY: MOV R7,#50 ;延时子程序 E1: MOV R6,#50 E2: DJNZ R6,E2 DJNZ R7,E1 RET
KEY_DEL: MOV R7,#50 ;按键消抖程序 E3: MOV R6,#100 E4: DJNZ R6,E4 DJNZ R7,E3 RET
DELAY_1S: MOV R5,#8
E7: MOV R7,#200 ;延时子程序
- 24 -
E5: MOV R6,#200 E6: DJNZ R6,E6 DJNZ R7,E5 DJNZ R5,E7 RET
TABLE0: DB \TABLE1: DB \TABLE2: DB \TABLE3: DB \TABLE4: DB \TABLE45:DB \TABLE46:DB \
TABLE5: DB \TABLE6: DB \TABLE7: DB \TABLE8: DB \
TABLE:DB 6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH ;3FH,06H,5BH 4FH,66H,6DH 7DH 07H,7FH,6FH,00H OVER: MOV LCDDATA,#80H ;第一行起始字符地址 MOV R1,#10 LCALL ENABLE
MOV DPTR,#TABLE7 ;第一行显示字符表头地址 LCALL DISP ;显示第一行数据 CLR BEEP
LCALL DELAY_1S SETB BEEP SJMP $ END
- 25 - 显示Number