⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 按键扫描 51单片机加8279 8279通过74LS 138译码器扩展4×4键盘、6位显示器。 由3-8译码器对SL0~SL2译出键扫描线
💻 C
字号:
/*TEL  8279能自动完成键盘输入和显示控制两种功能。键盘控制部分提供一种扫描工作方式,可与64个按键的矩阵键盘连接,
能对键盘进行自动扫描、自动消抖、自动识别出按下的键并给出编码,能同时按下双键或N键实行保护,其接收键盘上的输入信息存入内部FIFO缓冲器,
并可在有键输入时向CPU请求中断。8279提供了按扫描方式工作的显示接口,其内部有一个168的显示缓冲器,能对8位或16位LED自动进行扫描,
将显示缓冲器的内容在LED上显示出来。

8279通过74LS 138译码器扩展4×4键盘、6位显示器。
由3-8译码器对SL0~SL2译出键扫描线,由另一3-8译码器译出显示器的位扫描线,并采用了编码扫描方式。
为了防止出现重键现象,扫描输出线高位SL3不参加键扫描译码。CPU对8279的监视采用了查询方式,故8279的中断请求信号IRQ悬空未用。


4、8279软件设计
   8279是可编程接口芯片,通过编程使其实现相应的功能,编程的过程实际上就是CPU向8279发送控制指令的过程。
   在软件设计中,显示方式采用了8个字符显示,左入方式,编码扫描键盘,双键锁定。由于该系统对实时性及速度要求并不十分高,
   所以时钟频率采用6M Hz已足够了,故程序时钟命令字取为2AH,用以保证100kHz的内部工作频率。由于采用10ms定时扫描查询方式,
   所以在下次开始扫描时,先应清空8279,清除显示RAM大约需要160μs的时间,在此期间,FIFO状态字的最高位DU=1,表示显示无效,
   CPU不能显示RAM写入数据,所以清除命令状态字取D1H。CPU对8279的控制是先读回8279的状态字,查看PIFORAM中有无字符 ,
   若有将根据字符个数读出所有字符,并进行相应处理;若无,则直接返回。
   CPU对8279的监视采用查询方式,对8279分配的数据口地址为8000H,
   状态口地址为8001H,
   CPU每隔10ms定时中断查询一次,所有显示采用查询段码表的方式实现,简化了程序设计过程,提高了程序质量。
 */

#include<reg51.h>                                              //调用头文件
//#include<absacc.h>
#define uchar unsigned char
#define uint  unsigned int
#define z8279 XBYTE[0x8041]
#define d8279 XBYTE[0x8040]
#define ledmod 0x10             
#define ledfeq 0x38
#define ledcls 0xd1											   //
uchar code ku[22]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x3e,0x40,0x08,0x00,0x73};	  // ??
uchar disp [8]={0x00,0x00,0x40,0x40,0x6f,0x07,0x5b,0x7f};      //
uchar m=16,s;

void display()                                                 //display son program
{
 uchar i;
 //display[0]=
 z8279=0x90;
 for(i=0;i<8;i++)
 {
  d8279=disp[i];
 }
}
void service()interrupt 2
{
 z8279=0x40;
 s=d8279;
 s=s&0x3f;							 //00111111      
 switch(s) //读FIFO RAM
            {
               case 0xc3:m=0; break;  //K4键
               case 0xc2:m=1; break;  //K3键
               case 0xca:m=2; break;  //K7键
               case 0xd2:m=3; break;  //K11键
               case 0xc1:m=4; break;  //K2键 
               case 0xc9:m=5; break;  //K6键
               case 0xd1:m=6; break;  //K10键
               case 0xc0:m=7; break;  //K1键
               case 0xc8:m=8; break;  //K5键
               case 0xd0:m=9; break;  //K9键           
               case 0xcb:m=10; break; //K8键                          
               case 0xd3:m=11; break; //K12键
               case 0xdb:m=12; break; //K16键
               case 0xda:m=13; break; //K15键
               case 0xd9:m=14; break; //K14键
               case 0xd8:m=15; break; //K13键
               default: m=16;

			  }

}

void main()
{
 z8279=ledcls;

 while(!(z8279&0x80))
 
 z8279=ledcls;

 z8279=ledfeq;

 display();

 IE=0x84;

 while(1);
}

/*
萧润逸
QQ:315626168  2790117
Email:xiaorunyi@yahoo.com.cn
       qq315626168@126.com
http://www.ednchina.com/blog/xiaorunyi/

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -