📄 key.h~
字号:
#ifndef _key_h
#define _key_h
#define key_port PORTB
#define key_port_ddr DDRB
#define key_port_pin PINB
uchar num,key;
void spk (unsigned int i)
{
DDRA=0X04; //DDA2为输出
PORTA.2=~PORTA.2;
delay_ms(i);
PORTA.2=1; //蜂鸣器关闭
}
uchar keyscan()
{
uchar scan1,second1;
key_port=0xf0; //输出1
key_port_ddr=0x0f; //使能键盘口高四位的上拉电阻
delay_us(100);//延时等待电平稳定
if((key_port_pin&0xf0)!=0xf0) /*判断是否有键按下*/
{
delay_ms(10);
if((key_port_pin&0xf0)!=0xf0) /*再次判断*/
{
scan1=0xfe; /*逐行扫描*/
while((scan1&0x10)!=0) /*只允许位移3位*/
{
key_port=scan1;
if((key_port_pin&0xf0)!=0xf0)
{
second1=(key_port_pin&0xf0)|0x0f;
do
{
key_port=0xf0; //输出1
key_port_ddr=0x0f; //使能键盘口高四位的上拉电阻
delay_us(100);//延时等待电平稳定
}while((key_port_pin&0xf0)!=0xf0); //等待按键松开
return((~second1)+(~scan1));
}
else
scan1=(scan1<<1)|0x01;
}
}
}
return(0);
}
void whatkey(uchar key11)
{
switch(key11)
{//key11
case 0x11: {num=0x01;break;}
case 0x21: {num=0x02;break;}
case 0x41: {num=0x03;break;}
case 0x81: {num=0x04;break;}
case 0x12: {num=0x05;break;}
case 0x22: {num=0x06;break;}
case 0x42: {num=0x07;break;}
case 0x82: {num=0x08;break;}
case 0x14: {num=0x09;break;}
case 0x24: {num=0x00;break;}
case 0x48: {num=0xf3;break;} // 删除键
case 0x18: {num=0xf1;break;}//设置密码
case 0x28: {num=0xf1;break;}//设置密码
case 0x88: {num=0xf4;break;} // enter键
default:{num=0xff;break;}
}
}
void keywork()
{
num=0xff;
key=keyscan();
if(key!=0xff) whatkey(key);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -