📄 8279.txt
字号:
(1)8279的初始化程序
8279初始化主要是设置其键盘/显示方式、分频系数等。初始化子程序如下:
汇编程序:
INIT:MOV DPTR,#7FFFH ;命令/状态口地址
MOV A,#0D1H ;清除显示命令
MOVX @DPTR,A ;命令送入
WAIT:MOVX A,@DPTR ;读状态
JB ACC.7,WAIT ;等待清除显示RAM
MOV A,#2AH ;分频系统为10,特征码001
MOVX @DPTR,A ;分频系统送入
MOV A,#00H ;键盘/显示方式,特征码000
MOVX @DPTR,A ;键盘/显示方式送入
RET
C程序:
cs8279 = 0xd1;//8279清除
delay(2);
cs8279 = 0x00;//左边输入 八位字符显示,外部译码键扫描方式,双键互锁
delay(2);
cs8279 = 0x2A;//10分频,(ALE = 1/6 OSC)
delay(2);
cs8279 = 0x60;//读8279RAM不自动加1
delay(2);
cs8279 = 0x90;//写显示RAM自动加1
(2)显示子程序
8279在初始化后,只需把显示数据(显示字型段选码)送入内部显示缓冲区(其16个),就能自动完成扫描输出,无需CPU干扰,提高了CPU的处理能力。
若要显示CPU内部RAM地址30H至37H单元中的8个数据,显示子程序如下:
DISP:MOV DPTR,#7FFFH ;命令/状态口地址
MOV A,#90H ;写显示RAM命令,地址自动加1
MOVX @DPTR,A ;命令送入
MOV R0,#30H ;显示数据首地址
MOV R7,#8 ;显示数据个数
MOV DPTR,#7FFEH ;数据口地址
MOV A,@R0 ;取显示数据(数据为段选码)
LP:MOVX @DPTR,A ;写入显示RAM
INC R0 ;下一个显示数据地址
DJNZ R7,LP ;8位数据未送完,继续
RET
C程序:
void display()//数码管显示
{
uchar i,dispvalue;
for(i=0;i<8;i++)//将显示缓冲区数据送数码管显示
dt8279 = table[cash[i]];//缓冲区内容送数码管显示
}
(3)键盘处理程序
8279所连接键盘是自动扫描并把扫描键值存入FIFO RAM中,当FIFO RAM中不为空时,INT输出高电平通知CPU把数据取走,故键盘处理程序一般放在中断服务程序中,中断服务程序如下:
KEYCH:MOV DPTR,#7FFFH ;命令/状态口地址
MOV A,#40H ;读FIFO RAM命令,特征码010
MOVX @DPTR,A ;命令送入
MOV DPTR,#7FFEH ;数据口地址
MOVX A,@DPTR ;键值读入A
CJNE A,#00H,K0 ;判断键值是否0号键,是,转处理
CJNE A,#01H,K1 ;判断键值是否1号键,是,转处理
Μ ;其他键判断程序(略)
CJNE A,#0FH,K16 ;判断键值是否16号键,是,转处理
JMP EXIT
K0: Μ ;0号键处理程序(略)
JMP EXIT
K1: Μ ;1号键处理程序(略)
JMP EXIT
K16:Μ
JMP EXIT ;16号键处理程序(略)
EXIT:RETI ;中断返回
C程序:
void readkey() interrupt 0//按键中断响应
{ unsigned char key,read;
EX0 = 0;//关中断
cs8279 = 0x50; //8279读FIFO自动加一
delay(5);
read = dt8279;
key = read & 0x3f;//取键值
EX0=1;//开中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -