注意:在总线上加入标号AD[0..7]和RL[0..7],另外在导线上也要加上标号AD0~AD7和RL0~RL7
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg51.h>
- #include<ABSACC.H>
- #define uchar unsigned char
- #define uint unsigned int
- #define com XBYTE[0x7fff] //A15=0(cs=0),A14=1(A0=1),命令状态口
- #define dat XBYTE[0x3fff] //A15=0(cs=0),A14=0(A0=0),数据口
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴极字型码
- uchar temp;
- bit key;
- void delay(uint z){
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- int main(void){
- temp=0;
- EA=1;
- EX0=1;
- IT0=0;
- delay(10);
- com=0xd2; //11010010,清除RAM
- delay(10);
- com=0x00; //00000000,8位字符显示——左边输入,编码扫描键盘,双键锁定
- delay(10);
- com=0x34; //00110100,时钟编码命令,20分频,晶振12MHz,ALE输入2MHZ,8279经20分频后得到100KHz工作频率
- delay(10);
- com=0x90; //从单元0开始写要显示的数据,每次写完后自动地址加1
- delay(10);
- com=0x70; //从单元0开始读要显示的数据,每次读完后自动地址加1
- key=0;
- while(1){ //等中断
- if(key){
- com=0x40; //01000000,读FIFO/传感器RAM命令字
- delay(1);
- temp=dat&0x3f; //去键盘数据低6位,即为键值
- dat=table[temp]; //送数码管显示
- key=0; //按键标志复位
- }
- }
- }
- void time() interrupt 0{
- key=1; //有键按下
- }
复制代码
Keil5代码与Proteus8.8仿真下载:
51单片机8279芯片构成8行2列键盘接口电路.zip
(96.95 KB, 下载次数: 18)
|