利用8279可实现对键盘/显示器的自动扫描,以减轻CPU负担,并具有显示稳定、程序简单、不会出现误动作等特点。本系统中8279的状态/命令口地址位8701H;数据口地址位8700H。 示例程序运行将显示"8279 --",并等待按键输入,将键值显示在数码管上(只响应0-F按键)。 源代码: Z8279 EQU 08701H ;8279 状态/命令口地址D8279 EQU 08700H ;8279 数据口地址LEDMOD EQU 10H ;右端输入 八位字符显示 ;外部译码键扫描方式,双键互锁LEDFEQ EQU 38H ;扫描速率LEDCLS EQU 0D1H ;清除LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址 ORG 0000H AJMP START ORG 0040HSTART: MOV SP,#60H LCALL INIT8279 ;初始化8279 WAIT: MOV DPTR,#Z8279 MOVX A,@DPTR ANL A,#0FH JZ WAIT MOV A,#40H MOVX @DPTR,A MOV DPTR,#D8279 MOVX A,@DPTR ANL A,#3FH MOV R4,#00H MOV R5,A LCALL DISLED SJMP WAIT INIT8279: ;8279初始化子程序 PUSH DPH ;保存现场 PUSH DPL PUSH ACC LCALL DELAY ;延时 MOV DPTR ,#Z8279 MOV A,#LEDMOD ;置8279工作方式 MOVX @DPTR,A MOV A,#LEDFEQ ;置键盘扫描速率 MOVX @DPTR,A MOV A,#LEDCLS ;清除 LED 显示 MOVX @DPTR,A LCALL DELAY ;延时 MOV DPTR,#Z8279 MOV A,#90H MOV DPTR,#D8279 MOV A,#40H MOVX @DPTR,A MOV A,#40H MOVX @DPTR,A MOV A,#0H MOVX @DPTR,A MOV A,#0H MOVX @DPTR,A MOV A,#0EFH MOVX @DPTR,A MOV A,#27H MOVX @DPTR,A MOV A,#5BH MOVX @DPTR,A MOV A,#7FH MOVX @DPTR,A POP ACC ;恢复现场 POP DPL POP DPH RET;显示字符子程序;输入: R4,位置 R5,值DISLED: PUSH DPH ;保存现场 PUSH DPL PUSH ACC MOV A,#LEDWR0 ;置显示起始地址 ADD A,R4 ;加位置偏移量 MOV DPTR,#Z8279 MOVX @DPTR,A ;设定显示位置 MOV DPTR,#LEDSEG ;置显示常数表起始位置 MOV A,R5 MOVC A,@A+DPTR ;查表 MOV DPTR,#D8279 MOVX @DPTR,A ;显示数据 POP ACC ;恢复现场 POP DPL POP DPH RETDELAY: ;延时子程序 PUSH 0 ;保存现场 PUSH 1 MOV 0,#0HDELAY1: MOV 1,#0H DJNZ 1,$ DJNZ 0,DELAY1 POP 1 ;恢复现场 POP 0 RET LEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, ' END

评论