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

📄 anjian.txt

📁 51开发板和小键盘的按键程序
💻 TXT
字号:
#include<reg52.h>
#include<intrins.h>
#include<ABSACC.H>
unsigned char code led7code[]={0X3f,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
unsigned char xdata seg_add _at_ 0x8FFF;
unsigned char xdata light_add _at_ 0x6FFF;
unsigned char data temp1,k1,k2;
//函数名称:delay
//入口参数;N
//函数功能:延时子程序,实现(16*N+24)us的延时
//系统采用11.0592MHZ 的时钟时,延时满足要求,其他情况需要改动
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
} 

//函数名称:judge_hitkey
//函数功能:判断是否有键按下,有返回1,没有返回0
bit judge_hitkey() //判断是否有键按下,有返回1,没有返回0
{unsigned char temp;
P1=0xf0;
_nop_();
_nop_();
_nop_();
_nop_();
temp=P1;//读A5~A8的值
if((temp&0xf0)!=0xf0)//有键闭合
return(1);     
else
return(0);     //全1则无键闭合
}
//函数名称:scan_key
//函数功能:扫描键盘,返回键值
unsigned char scan_key()                                                                 
{unsigned char value,scancode;
scancode= 0xfe;//           0xfe;
while(scancode!=0xef)
{
P1=scancode;
_nop_();
_nop_();
_nop_();
_nop_();
value=P1;
if((value&0xf0)!=0xf0)
break;
 //scancode=(scancode<<1 )|0xf0; 
 scancode=_crol_(scancode,1);

}    

value=~value;
return(value);
}  
//函数名称:key_manage
//入口参数:扫描键盘返回的键值value
//函数功能:键盘散转
void key_manage(unsigned char value) 
{
switch(value)
{case 0x11:temp1=0xf0;break;
 case 0x12:temp1=0xf4;break;
 case 0x14:temp1=0xf8;break;   
 case 0x18:temp1=0xfc;break;
 case 0x21:temp1=0xf1;break;
 case 0x22:temp1=0xf5;break;  
 case 0x24:temp1=0xf9;break;
 case 0x28:temp1=0xfd;break;
 case 0x41:temp1=0xf2;break;
 case 0x42:temp1=0xf6;break;  
 case 0x44:temp1=0xfa;break;
 case 0x48:temp1=0xfe;break;
 case 0x81:temp1=0xf3;break; 
 case 0x82:temp1=0xf7;break;
 case 0x84:temp1=0xfb;break;
 case 0x88:temp1=0xff;break; 
 }
  temp1=~temp1;

} 

void main() using 0
{unsigned char value;
while(1){
temp1=temp1&0x0f;
k2=temp1/10;             //取键值的整数部分
k1=temp1%10;            //取键值的小数部分
if(k2!=0)
{seg_add=0xfb;
light_add=led7code[k2];}    //显示整数部分
delay(1000);
seg_add=0xf7;
light_add=led7code[k1];   //显示小数部分
delay(1000);
 if(judge_hitkey())   //判断是否有键按下
{
 delay(1000);         //延时20ms左右,消除抖动干扰
 if(judge_hitkey())   //判断是否有效按键
  {value=scan_key();
   while(judge_hitkey());//等待按键释放
   key_manage(value);   //键盘扫描,按键散转,按键处理
   }
   }
 }
}

⌨️ 快捷键说明

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