8279 是键盘、显示专用接口芯片,一般来说,它可以带动 8 个LED数码显示器和 64 个按键。
它可以自动的实现动态扫描输出,按键消抖,按键缓存等等,优点不少。
一个单片机系统,如果使用了 8279,基本就算是豪华系统了,但是近几年来,很少有这么大型的单片机系统的需求,8279 也逐渐淡出了开发者的视线。
下面给出一个用 8279 的数码显示器显示被按下的键的程序,以纪念这块光耀一时的芯片。
程序首先进行 8279 的初始化,然后检测是否有键被按下,如果没有,则循环等待;如果检测到有键被按下,则读取被按下键的代码,并把其代码送到显示RAM中。
;8279键盘显示实验
ORG 0000H
LJMP START
ORG 0100H
START:
MOV DPTR, #0CFE9H ;8279命令/状态口地址
MOV A, #11010001B ;D1H 清显示命令字
MOVX @DPTR, A ; 全部清空
LOOP1:
MOVX A, @DPTR ;读出状态
ANL A, #0FH ;低四位是FIFO中的键入字符数
JZ LOOP1 ;没有键按下则循环等待
MOV A, #10100000B ;A0H, 显示消隐命令
MOVX @DPTR, A ;显示暗
MOV A, #01000000B ;40H, 读FIFO命令
MOVX @DPTR, A ;读FIFO的0000地址
MOV DPTR, #0CFE8H ;8279数据口地址
MOVX A, @DPTR ;读键值
MOV R1, A ;保存键值
MOV DPTR, #0CFE9H ;8279命令/状态口地址
MOV A, #81H ;选中LED2
MOVX @DPTR, A ;写显示RAM命令
MOV A, R1
ANL A, #0FH ;取键值后半字节
MOV DPTR, #TAB
MOVC A, @A + DPTR ;换算出段码
MOV DPTR, #0CFE8H ;8279数据口地址
MOVX @DPTR, A ;写入显示RAM
MOV DPTR, #0CFE9H ;8279命令/状态口地址
MOV A, #80H ;选中LED1
MOVX @DPTR, A ;显示
MOV A, R1
ANL A, #0F0H ;取键值前半字节
SWAP A ;
MOV DPTR, #TAB
MOVC A, @A + DPTR ;换算出段码
MOV DPTR, #0CFE8H
MOVX @DPTR, A ;显示
MOV DPTR, #0CFE9H ;8279命令/状态口地址
SJMP LOOP1
TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;段码表
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
END