文档介绍:任务十 键盘接口扩展
任务分析:实现键盘接口扩展
硬件
独立式键盘与行列式键盘的结构和原理
软件
独立式键盘查询原理
行列式键盘列扫描查询原理
编译、下载、调试
编译软件:keil
下载软件:STC-ISP
按键及键盘
键盘:由若干个按键组成的开关矩阵,是实现人机对话或人机通信的常用工具。
根据按键的识别方式分:
由硬件识别键的闭合—编码键盘
由软件识别键的闭合—未编码键盘
按键开关:机械弹性开关,机械开关在闭合及断开瞬间均伴随有一连串的抖动 ,时间一般为 5~10ms。
按键及键盘
键按下
闭合稳定
前沿抖动
后沿抖动
释放稳定
键释放
按键时的抖动
消除键抖动可用硬件和软件两种方法
硬件消抖:RS触发器
软件消抖:延时10ms左右再检测
Vcc(+5V)
Vcc(+5V)
A
B
输出
RS触发器消抖电路
键盘扫描控制方式
程序控制方式:键盘处理程序固定在主程序的某个程序段。
特点:对CPU工作影响小
应考虑键盘处理程序运行间隔周期不能太长,否则影响对键盘输入响应的及时性。
定时控制扫描方式:利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描。
特点:采用定时/计数器定时控制扫描间隔。
定时时间不能太长,否则影响对键盘输入响应的及时性。
中断控制方式:利用外部中断源,响应键盘输入信号。
特点:能及时处理键盘输入,又能提高CPU运行效率
要占用一个中断资源。
独立式未编码键盘接口
独立式键盘:各按键相互独立地接通一条输入数据线 。
查询方式:
输入线平时为高电平;
若有任意键按下时,输入线为低电平。
优点:电路、编程简单
缺点:按键较多时,占用较多I/O口线。
K0
K1
K2
例、用查询方式编写独立式按键程序
# include <>
unsigned char key_value;
void main(void)
{
P1=P1|0x07; //-
while(1)
{
key_value=P1&0x07; //-
switch(key_value)
{
case 0x06: … ; break; //K0按下
case 0x05: … ; break; //K1按下
case 0x03: … ; break; //K2按下
default: ; break;
}
}
}
6
医学ppt
行列式未编码键盘原理
未编码4*4行列式键盘
行列式键盘列扫描查询原理
行列式键盘列扫描查询原理
先判别按键所在的行:由P2口输出列扫描字0x0F,然后读行线状态到变量temp1中。
如果有按键按下,则行输入不全为1,即不等于0x0F;
如果无按键按下,则行输入全为1,即等于0x0F。
再判别按键所在的列:由P2口输出行扫描字0xF0 ,然后读列线状态到变量temp2中。
将temp1和temp2的状态相或得到按键的编码,从而知道按键的值。
# include <>
void mDelay ( unsigned int Delay );
sbit LED_CS=P1^4;
//延时子程序:由Delay参数决定延时时间
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<114;i++) {;}
}
}
//按键扫描子程序,有键按下,返回键值00-15;无键按下,返回0xff。
unsigned char Matrix_key()
{
unsigned char key, temp1,temp2;
key=0xff; // 初始化键值
P2=0x0f; // 输出列扫描字
if( (P2&0x0F) !=0x0f) // 读行线状态,判断是否有键按下
{
mDelay(10); // 延时消抖
P2=0x0f; // 输出列扫描字
temp1=P2&0x0f; // 读行线状态到temp1中
9
医学ppt
if( temp1!=0x0f )