- 4
- 0
- 约5.38千字
- 约 6页
- 2016-09-19 发布于重庆
- 举报
51单片机的键盘程序
一个51单片机的键盘扫描程序,算法简单有效
/****************************************?键盘_不采用定时器_不延时?
特点:?
按键在松手后有效,灵敏度高,消耗资源少,运行效率高?
独立键盘为:K01=P2^4;K02=P2^5;K03=P2^6;K04=P2^7;?
矩阵键盘为:行(上到下)_P2.3_P2.2_P2.1_P2.0?
? ?? ?? ???列(左到右)_P2.7_P2.6_P2.5_P2.4?
提供的操作函数:?
//独立键盘.无按键动作时其返回值num_key=0,否则返回按键号num_key?
extern unsigned char keyboard_self();?
//矩阵键盘.无按键动作时其返回值num_key=0,否则返回按键号num_key****检测高四位?
extern unsigned char keyboard_matrix();?****************************************/
先看独立键盘(和矩阵键盘的算法一样)?
-----------------------------------------------------------------------?
#includereg52.h?
#includeintrins.h?
//独立键盘.无按键动作时其返回值num_key=0,否则返回按键号num_key?
extern unsigned char keyboard_self()?
{?
? ?? ???unsigned char num_key=0;//按键号?
? ?? ???unsigned char temp=0;//用于读取P2线上按键值?
? ?? ???static unsigned char temp_code=0;//保存按键值?
? ?? ???static unsigned char num_check=0;//低电平有效次数?
? ?? ???static unsigned char key_flag=0;//按键有效标识?
? ?? ???temp=P20xF0;//读取P2线数据?
? ?? ???if(temp!=0xF0)//低电平判断?
? ?? ???{?
? ?? ?? ?? ?? ? num_check++;?
? ?? ?? ?? ?? ? if(num_check==10)//连续10次(10ms)低电平有效,则认为按键有效?
? ?? ?? ?? ?? ? {?
? ?? ?? ?? ?? ?? ?? ?? ?key_flag=1;//使能按键有效标识?
? ?? ?? ?? ?? ?? ?? ?? ?temp_code=temp;//保存按键值?
? ?? ?? ?? ?? ? }?
? ?? ???}?
? ?? ???else//松手时判断?
? ?? ???{?
? ?? ?? ?? ?? ? num_check=0;?
? ?? ?? ?? ?? ? if(key_flag==1)//按键有效?
? ?? ?? ?? ?? ? {?
? ?? ?? ?? ?? ?? ?? ?? ?key_flag=0;?
? ?? ?? ?? ?? ?? ?? ?? ?switch(temp_code)//读取按键号?
? ?? ?? ?? ?? ?? ?? ?? ?{?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???case 0xE0: num_key=1;?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? break;?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???case 0xD0: num_key=2;?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? break;?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???case 0xB0: num_key=3;?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? break;?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???case 0x70: num_key=4;?
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? break;?
? ?? ?? ?? ?? ?? ?? ?? ?}?
? ?? ?? ?? ?? ? }?
? ?? ???}?
? ?? ???return(num_key);?
}?
现在是矩阵键盘的?
-----------
原创力文档

文档评论(0)