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

📄 keyborad2.c

📁 8155的键盘显示程序
💻 C
字号:
#include <REGX51.H>
#include <absacc.h>
#include <Key.h>
#define uchar unsigned char 
#define CTRL      XBYTE[0x0100]     /*控制字地址*/
#define PA        XBYTE[0x0101]     /*PA口地址*/
#define PB        XBYTE[0x0102]     /*PB口地址*/
#define PC        XBYTE[0x0103]     /*PC口地址*/




code uchar cod[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//字段码



uchar keyscan(void)
{
   code uchar keycod[16]={0,0,0,0,
                          0,0,0,1,		 //算法为:retVal=keycod[x]*4+keycod[y]	 
						  0,0,0,2,
						  0,3,4,0};
   
   
   
   uchar x,y,retVal;
   PB=0x0f;	       //低四位   高四位输出0
   x=PB&0x0f;	   //PB输入后清高四位,作为X值
   PB=0xf0;		   //高四位   低四位输出0
   y=(PB>>4)&0x0f; //PB输入后移位到低四位,并清高四位
   retVal=keycod[x]*4+keycod[y];  //根据公式倒算键盘编码
   if(retVal==0) return(0);
   else return(retVal-4);
}



void timer0int(void) interrupt 1
{
   
   static uchar sts=0 ;
   TL0=-20000;			//方式1为软件重载
   TH0=(-20000)>>8;		//右移8位,实际上是取高8位
   
    PB=0x00;			//输入引脚为高电平
   
	switch(sts)
	   {
	   	 case 0:if(keyscan()!=0) sts=1;break;       //按键则进入状态1
		 case 1:
		        if(keyscan()==0)	sts=0;			//假按错,或干扰,回状态0
			    else{sts=2;keyPut(keyscan);}		//确按键,键值进入队列,并转状态2
		 break;
		 case 2:if(keyscan()==0) sts=3;break;	    //如果松键则转状态3
		 case 3:
		        if(keyscan()!=0) sts=2;			    //假松键回状态2
		        else sts=0;							//真松键,回状态0,等待下一次按键过程
	   }
}

main()
{
   //uchar i;
   CTRL=0x0d;  //控制口,AC均为输出,B为输入
   
   TMOD=(TMOD&0xf0)|0x01;
   TL0=-20000;
   TH0=(-20000)>>8;
   TR0=1;			//允许T0开始计数
   ET0=1;		//允许T0记计数溢出时产生中断
   EA=1;       //允许cpu响应中断
   while(1)
      {
	  	if(keyHit()!=0)	     //  如果队列中有按键
	    //PA=1; 			 //  段码输出
     	PC=cod[keyGet()];	 //从队列中取出按键值并且显示在数码管上
	  }

}

⌨️ 快捷键说明

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