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

📄 键盘模块.c

📁 2*8矩形键盘
💻 C
字号:
#include <STC12C5410AD.h>
#define uchar unsigned char 
sbit list_1=P1^2;
sbit list_2=P1^1;
uchar KeyTemp;
void initial_232()
	{
		TMOD=0x01;
	    TH0=(65536-50000)/256;//装初值,定时时间是200us
		TL0=(65536-50000)%256;
		TR0=1; //启动T0
		ET0=1; //允许T0中断
		EA=1;//中断开	
	 }				

void delay(uchar z)//z等于3时大约是1ms
{
 	uchar i,j;
	for(i=z;i>0;i--)
    	for(j=100;j>0;j--);
}

uchar KeyScan()
{	uchar key=0;
    uchar temp;
    P2=0xff;
	list_1=0;
	list_2=0;
	if(P2!=0xff)//如果有键按下
	{
		delay(30);
		list_1=1;
		list_1=0;//扫描第一行         					  	 
	    if(P2!=0xff)//确实有键按下
		{
				   temp=P2&0xff;
                   switch(temp)
				   {
				   case 0xfe:
				   key=1;break;
				   case 0xfd:
				   key=2;break;
				   case 0xfb:
				   key=3;break;
				   case 0xf7:
				   key=4;break;
				   case 0xef:
				   key=5;break;
				   case 0xdf:
				   key=6;break;
				   case 0xbf:
				   key=7;break;
				   case 0x7f:
				   key=8;break;
				   }
		 }		   
	    list_1=0;
		list_1=1;//扫描第二行         					  	 
	    if(P2!=0xff)//确实有键按下
				  {
				   temp=P2;
                   switch(temp)
				   {
				   case 0xfe:
				   key=9;break;
				   case 0xfd:
				   key=10;break;
				   case 0xfb:
				   key=11;break;
				   case 0xf7:
				   key=12;break;
				   case 0xef:
				   key=13;break;
				   case 0xdf:
				   key=14;break;
				   case 0xbf:
				   key=15;break;
				   case 0x7f:
				   key=16;break;
		          }
		       }		  	
     }	
		return(key); //返回键值
}
  

 
uchar key_free()//等待按键释放程序
{
  uchar key_value;
  key_value=KeyScan();//取扫描到的键值
  P2=0xff;//置列线全为低电平
  list_1=0;
  list_2=0;//行线全为高电平
  while(P2!=0xff)
   {
    }  
  return(key_value);//返回键值
} 	

  

void key_deal(uchar temp)//键处理程序
{
switch(temp)
{
   case 1:
   P1=0xfe; 
   break; 			
   case 2:
   P1=0xfd;
   break;  
   case 3:
   P1=0xfb;
   break; 
   case 4:
   P1=0xf7;
   break; 
   case 5:
   P1=0xef;
   break;  
   case 6:
   P1=0xdf;
   break; 
   case 7:
   P1=0xbf; 
   break; 			
   case 8:
   P1=0x7f;
   break;  
   case 9:
   P1=0xee;
   break;  
   case 10:
   P1=0xed;
   break; 
   case 11:
   P1=0xeb;
   break;  
   case 12:
   P1=0xe7;
   break; 
   case 13:
   P1=0xde;
   break;  
   case 14:
   P1=0xbe;
   break; 
   case 15:
   P1=0x7e;
   break;  
   case 16:
   P1=0x00;
   break;
   default:
   break;
}
}



//主函数
void main()
{  	 
	 initial_232();
	 while(1)
	 {	
     }	
}


void timer0() interrupt 1
{	  
	TR0=0;
	KeyTemp=KeyScan();
	if(KeyTemp!=0)
	{
	key_free();//按键释放
	key_deal(KeyTemp);//键处理程序
	} 
	TH0=(65536-50000)/256;//装初值,定时时间是200us
	TL0=(65536-50000)%256;
	TR0=1;
	
} 	   

⌨️ 快捷键说明

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