📄 key.c
字号:
//**********************************************************************************
//**********************************************************************************
//键盘码读取函数及蜂鸣器驱动
#include <reg52.h>
#include "APR6008_DRIVER.H"
#define keypin P2
//入口:检测按键延时的长度,一般取1000
//返回:键值,返回0表示无键按下
unsigned char getkey(unsigned int t){
unsigned char c,c1,i;
static unsigned char oldkey;
bit iskey=0;
unsigned char code dout[4]={0x7f,0xbf,0xdf,0xef};
unsigned char din[8]={0x03,0x02,0x00,0x01,0x00,0x00,0x00,0x00};
unsigned char key[4][4]={{'*','0','#','E'},{'7','8','9','C'},{'4','5','6','D'},{'1','2','3','U'}};
while(1)
{
for(i=0;i<4;i++){
keypin = dout[i];
c = keypin &0x0f;
if (c!=0x0f){
c1=(key[din[0X0E-c]][i]); //转换出健码
iskey=1;
}
}
if(t==0){
if (iskey)
{
P2=0xff; //恢复现场
if(oldkey==c1) //如果和上次的按键一样,就当作没有按键.这是为了避免连键
{
return(0);
}
oldkey=c1; //保存上次的按键
beep(1); //按键音
return(c1);
}
else
{
oldkey=0; //返回0表示无按键
return(0);
}
}
t--;
}
}
//4----------------------|
// |
//5----------------| |
// | |
//6----------| | |
// | | |
//7----| | | |
// |1 |2 |3 |up
//0----|-----|-----|-----|---------------
// |4 |5 |6 |down
//1----|-----|-----|-----|---------------
// |7 |8 |9 |change
//2----|-----|-----|-----|---------------
// |* |0 |# |enter
//3----|-----|-----|-----|---------------
//***************************************
//响蜂鸣器(喇叭)
sbit BB=P1^7;
void beep(unsigned char t)
{
unsigned char i;
unsigned int j;
for(j=0;j<t*256;j++)
{
for(i=100;i>0;i--);//给i赋的初值决定输出的频率
BB=~BB;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -