键盘显示模块调试
其程序框图如下图所示:
#include <reg51.h>
#include <
absaCC.h>
#define com XBYTE[0X9FFF] ;8279命令入口地址
#define dat XBYTE[0x9eff] ;8279数据入口地址
#define uchar unsigned char
#define uint unsigned int
sbit cflag=ACC^7;
uchar j=0,sq;
uchar code keytab[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0a,0x0b,0x0c,0x0d,0x0e,0x0f}; ;键码表
uchar code tab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71}; ;字形表
void delay(uint t); ;延时函数
void clr(); ;清除8279RAM数据
void serve(); ;8279中断服务函数
void main (void) ;主函数
{uint i;
com=0xd1; ;送清除指令
do{ACC=com;}
while(cflag!=0); ;查状态寄存器DU,直到DU为零
com=0x34; ;定标值20
com=0x10; ;写8279工作模式:左端送入,8字符显示
delay(200); ;延时
com=0x90; ;写入8279显示RAM起始0单元,自动加1
EA=1; ;开中断
EX0=1;
IT0=1;
do{}
while(1); ;等待按键中断
}
void serve() interrupt 0 ;中断服务函数
{
uint i;
com=0x40; ;读FIFO中的键值
sq=dat&0x3f; ;保留键编码部分
for(i=0;i<16;i++)
{if(sq==keytab[i]) break; ;查键码表
}
dat=tab[i]; ;查字形表,将按键值送显示
}
void delay(uint t) ;延时函数
{uint i,j;
for(i=0;i<t;i++);
for(j=0;j<100;j++);
}
void clr(void) ;清除8279显示RAM数据函数
{com=0xd1;
do{ACC=com;}
while(cflag!=0);
j=0;
com=0x90;
dat=0x40;
}
测试过程中,每按一键,数码管显示相应的值,即调试成功。