📄 keypad._c
字号:
#include <iom128v.h>
/*键盘扫描函数,没有键按下返回0x7f*/
/*如果shift按下,返回值最高位为1*/
extern void delay_ms(unsigned int time);
unsigned char scan_key(void)
{
unsigned char i,temp;
unsigned shift=0;
DDRB=0x0f;
PORTB=0xff;
for (i=0;i<4;i++)
{
PORTB=~(1<<i); //键盘线扫描
delay_1ms(); //等待低电平稳定
temp=PINB&0xf0;//读取键盘扫描信号,屏蔽低四位
if ((PIND&0x20)==0) temp|=01;//检查shift键
if (temp!=0xf0)//如果有键按下,延时10ms消抖
{ //本程序用display代替10ms延时,
delay_ms(5); //可消除显示抖动
temp=PINB&0xf0;//再读键盘
if ((PIND&0x20)==0) //检查shift键
{
temp|=01;
shift=1;
}
if (temp!=0xf0)
{
temp&=0xf0;
switch (temp) //计算键值
{
case 0x70:temp=15-(3-i)*4;break;
case 0xb0:temp=14-(3-i)*4;break;
case 0xd0:temp=13-(3-i)*4;break;
case 0xe0:temp=12-(3-i)*4;break;
default:temp=0x7f;
}
if (shift==1) temp|=0x80;
return temp;
}
}
PORTB=0xff;
}
return 0x7f;
}
unsigned char keypad(void)
{
unsigned char temp1,temp2;
temp1=scan_key();
if (temp1==0x7f) return 0x7f;
do
temp2=scan_key();
while (temp1==temp2);
return temp1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -