CMD_8279 XDATA 0bF01H ;8279命令字、状态字地址 DATA_8279 XDATA 0bF00H ;8279读写数据口的地址 KeyCount DATA 50H ORG 0000H LJMP STAR ORG 0100H STAR: MOV SP,#60H ACALL INIT8279 ;初始化子程序 MOV KeyCount,#0 STAR1: CALL SCAN_KEY ;键扫描 JNC STAR1 ;没有按键 XCH A,KeyCount INC A CJNE A,#9,STAR2 MOV KeyCount,#0 ACALL INIT8279_1 ;8个数码块全有字符显示后,再按键,清除显示 SJMP STAR1 STAR2: XCH A,KeyCount CALL KEY_NUM ;键值转换为键号 MOV DPTR,#LED_TAB ;字型码表 MOVC A,@A+DPTR CALL WRITE_DATA SJMP STAR1 ;8279初始化 INIT8279: MOV DPTR,#CMD_8279 ;可编程时钟设置,设置分频系数(20分频) MOV MOVX A,#34H @DPTR,A CLR A ;8*8字符显示,左边输入, 外部译码键扫描方式 MOV DPTR,#CMD_8279 MOVX @DPTR,A INIT8279_1: CALL CLEAR ;清显示 MOV A,#90H ;从最后一个数码管开始移位显示 MOVX @DPTR,A RET CLEAR: MOV A,#0DEH ;清除命令 MOV DPTR,#CMD_8279 MOVX @DPTR,A WAIT1: MOVX A,@DPTR JB ACC.7,WAIT1 ;显示RAM清除完毕吗? RET SCAN_KEY: MOV DPTR,#CMD_8279 MOVX A,@DPTR ;读状态 READ_FIFO: ANL A,#7 JZ NO_KEY ;是否有键按下 READ: MOV A,#40H MOVX @DPTR,A ;读FIFO RAM MOV DPTR,#DATA_8279 MOVX A,@DPTR SETB C ;有键 SCAN_KEY1: RET NO_KEY: CLR C ;无键按下,清CY SJMP SCAN_KEY1 KEY_NUM: ANL A,#3FH RET WRITE_DATA: MOV DPTR,#DATA_8279 MOVX @DPTR,A RET j LED_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EH END
一周热门 更多>