📄 new0001.c
字号:
/*其他:我的按键扫描程序 [雨玄] 2005-8-21 14:54:06
* 晶体: 7.3728MHZ
* 看门狗: 安全极别2-常开 2.1秒溢出
* 日期: 04年7月
*/
#define key_bound 0x07 //占用3个口p0-p2
#define key_init 0x05 //按键的初始状态PB0,PB2-上拉,PB1高有效
#define key_port (PINB&key_bound) //读PB口
unsigned char Task_bz=key_bound; //按键任务标志,按下相应位置,开时为1
unsigned char KeyState=key_init; //按键的状态
static unsigned char KeyTask,KeyVal;
static unsigned char KeyTime; //按键去接抖动计数器
static unsigned char DealKey; //按键处理标志
/********************************************
*函数说明:扫描按键
*程序说明:每100US定时到扫描一次按键端口?
*参数:无
*返回:无
********************************************/
void scan_key(void)
{
unsigned char keybitstate;
switch(KeyTask)
{
case 0: if(key_port!=KeyState) //检测到按键有变化
{
KeyVal=key_port;//把键值读进
KeyTime=50; //去抖动计数器
KeyTask++;
}
break;
case 1: //去抖动
if(key_port==KeyVal) //比较每次读到键值,相等?
{
KeyTime--;//计数器减1
if(!KeyTime) KeyTask++;
}
else //如果不相等返到0重新开始读
KeyTask=0;
break;
case 2:
//当按键输入口有触发时,与keybitstate对应的位为1,放开为0
keybitstate=KeyVal^key_init;
if(keybitstate&Task_bz) //判断是否新触发
{
DealKey=TRUE; //按键处理标志置位
}
KeyState=KeyVal; //把读到的键的状态存在器
//Task_bz有按键按下未放开时相应位置0,放开时为1.
Task_bz =(key_bound^keybitstate);
KeyTask=0;
//返回第一步,等待按键状态改变
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -