版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 项目6单片机的按键单片机的按键 嵌入式单片机方向单片机C语言程序项目设计6.1任务说明任务说明任务:了解按键的器件特性,学习利用外部中断扫描,延时等手段实现按键的输入,重点掌握按键程序的变成 方法。 6.2 按键抖动现象按键抖动现象 按键按下都会发出一声响,随然有的按键声音很轻微,但这都是金属导体碰撞产生的震动,这种现象称为键盘抖动如果不对键盘的抖动进行处理,按键会对系统电路或程序产生意外的干扰。为了观察按键的抖动现象,我们先做一个小实验,分析一下一个微触按键产生抖动对系统的影响。加计数器+VCCCPKEYR图图6-1 加数计数小系统加数计数小系统 T1T2T3T4T5高电平低电平 图图6-
2、2 加数计数小系统加数计数小系统 在图6-1所示的一个加数计数小系统中,设计数器的脉冲输入端CP为上升沿有效,加计数器初始显示为0。按键不按时,CP = 0,计数器不加1计数。一般认为:按键按下,CP端由低电平变为高电平,含有电平上升沿,计数器加1计数,并且按下1次,计数器加1。实际实验时会发现,按键按下1次,计数器不是加1,而是跳跃一次性增加3或4。原因是按键按下在导体接触的瞬间产生了震动。图6-2是按键按下过程中CP端实际电平改变情况。T1为不按按键时刻,T2为按键按下瞬间的抖动,T3为按键按下稳定时刻,T4为按键放开时刻瞬间,T5为按键放开时刻。从图中可以了解到,按键按下的瞬间由于震动会
3、是按键内部的导体稳定接触,而是在导通和不导通之间来回弹跳,虽然时间一瞬间,但使CP端获得了多个电平的上升沿。按键抖动时间的长短由按键的机械特性决定,一般为一般为5ms10ms。因此不能直接把按键作为1个脉冲的输入。 在数字电路中,常利用触发器消除键盘抖动,但在单片机系统中,按键可以直接接在单片机的I/O口上,常利用键盘程序来消除键盘的抖动现象。 6.3 利用外部中断实现键盘输入利用外部中断实现键盘输入 一、电路原理一、电路原理 在图6-3中,单片机的P0.0口接一只LED,键盘接在P3.2端口,按键不按时,由于P3.2接有上拉电阻R3,所以P3.2此时为高电平+5V,如果按键按下,P3.2电源
4、地短路,P3.2为低电平。 为了消除键盘抖动现象,键盘两端并联滤波电容器C4。P3.2是单片机的外部中断的输入端,当按键按下时,让单片机执行外部中断服务程序,在中断服务中完成对LED的控制。图图6-3 6-3 利用外部中断利用外部中断INT0INT0实现键盘输入电路实现键盘输入电路 二、外部中断二、外部中断 51系列单片机的中断共有5个,其中外部中断共占两个。外部中断主要通过单片机的引脚P3.3()、P3.4()接收外部脉冲或高低电平出发CPU中断。与外部中断有关的多功能寄存器为IE、IP、TCON。程序如下:/*/#include#includesbitsbit LED = P00; LED
5、 = P00;bit i;bit i;void delay()void delay() unsigned char a,bunsigned char a,b; ;for(afor(a=0;a255;a+)=0;a255;a+)for(bfor(b=0;b255;b+);=0;b255;b+); void int0_isr(void) interrupt 0 /INT0中断服务函数,INT0的中断号为0i = i; /INT0中断1次,i值改变1次LED = i; /INT0中断1次,LED工作状态变化1次delay(); /调用延时函数void main(void)LED = 0; /芯片初始
6、化时,LED灭EA = 0; EX0 = 1; /开启INT0中断PX0 = 1; /INT0中断优先,可以省去EA = 1; /开启总中断开关while(1); /等待按键按下,中断发生/*/ 这里没有设置INT0是下降沿触发中断或是低电平触发中断,原因是按键按下,不管产生不产生键抖现象,总能使INT0引脚产生1个下降沿和低电平。如果设置只有下降沿才触发INT0中断,需要利用设置计时器控制寄存器TCON的IT0 = 1位,按键按下是否产生中断,可以利用程序检测TCON的IE0位。利用外部中断触发作为按键输入很好的解决了键盘抖动问题。 如果需要多个键盘,把INT0口与I/O口之间用键盘连接,I
7、/O输出低电平扫面信号即可。在数码管动态显示电路中,为了节省硬件资源,可以在INT0口和P2口之间接入键盘,实现8只按键输入。三、利用延时程序防止键盘抖动,实现键盘输入三、利用延时程序防止键盘抖动,实现键盘输入 按键按下产生的抖动现象持续的时间不会很久,因此在按键按下后,可延时一段时间跳过抖动,再对按键的状态检测,从而利用延时的方法也可以实现键盘输入。本案例完通过两个键盘设计,实现对数码管显示数据的调整。图图 6-4 利用延时函数消除键盘抖动实现键盘输入电路利用延时函数消除键盘抖动实现键盘输入电路 在图6-4中,KEY1、KEY2两个键盘一端分别接P3.0、P3.1,另一端接地,数码管仍使用共
8、阳型。在Proteuse软件中,按键的英文名字为BUTTON,在Switches & Relasy下的Switches里。现在实现两个按键控制数码显示的数字,其中KEY1按下使数字增加,数字到9后变为0,依次循环;KEY2按下使数字减小。验证程序如下:/*/#include #include #define uchar#define uchar unsigned char unsigned charucharuchar code seven_seg10 = code seven_seg10 = 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf
9、8,0 x80,0 x90;0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;sbitsbit key1 = P30; key1 = P30;sbitsbit key2 = P31; key2 = P31;ucharuchar key1_state,key2_state; / key1_state,key2_state; /按键按按键按下的状态变量下的状态变量void delay(ucharvoid delay(uchar i) i) while(iwhile(i) i-; ) i-; void void key_scan(
10、voidkey_scan(void) /) /键盘扫描函数键盘扫描函数 if(key1 = 0) /if(key1 = 0) /如果按键按下如果按键按下 delay(200); /delay(200); /延时一段时间,消除键抖延时一段时间,消除键抖while(key1 = 0);while(key1 = 0); key1_state = 1; / key1_state = 1; /再对按键检测,如果确实按再对按键检测,如果确实按下,按键状态变量为下,按键状态变量为1 1 if(key2 = 0)if(key2 = 0) delay(200);delay(200);while(key2 = 0
11、)while(key2 = 0) key2_state = 1;key2_state = 1; void void main(voidmain(void) ) char i;char i;while(1)while(1) key_scan key_scan(); /(); /调用键盘扫描函数调用键盘扫描函数if(key1_state = 1) /if(key1_state = 1) /判断键盘状态变量,如果为判断键盘状态变量,如果为1 1,说明有按键按下说明有按键按下 i+; /i+; /显示数据增加显示数据增加key1_state = 0;/key1_state = 0;/数据增加后,键盘状
12、态变量清零数据增加后,键盘状态变量清零if(iif(i9) i = 0; /9) i = 0; /数据增加超过数据增加超过9 9后,回到后,回到0 0 if(key2_state = 1)if(key2_state = 1) i-;i-;key2_state = 0; key2_state = 0; if(iif(i 0) i = 9; 0) i = 9; P0 = P0 = seven_segiseven_segi; /; /显示键盘调整数据显示键盘调整数据 如果按键按下不放开,程序一直执行语句while(key1 =0),这时程序在此处死循环,不能执行其它程序,所以本案例按键抬起后数据才能得到调整。此种编程方法并不影响单片机驱动1个数码管工作,但动态显示电路在此种情况下不能正常工作。如果把while改换成if,按键只要按下数据就能调整,但如果按下不放开按键,数据自动快速增加或减小。 如果按键按下既不让程序死循环,也不让由于按键按的时间过长而数据调整失控,最可靠的办法是利用变量记忆按键按下和放开的两种状态,根据判断实现键盘输入。程序如下:/*/uchar key1_down_state, key1_up_state, /变量声明,初始值为0if(key1 = 0)delay(200)if(key1 = 0)ke
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年钢铁行业纳入全国碳市场:核算边界与配额分配要点
- 2026年小学消防安全讲座
- 2026年钢铁建材石化化工行业零碳工厂路线图
- 2026年深地深海产业风险识别与中长期回报评估框架
- 透水混凝土施工技术要点
- 2026年网络安全举报流程培训
- 2026年水上安全规则培训
- 2026年实验室电气安全培训
- 2026年商场安全防范培训
- 昏迷患者并发症的护理措施
- 《养老护理员》-课件:协助老年人洗浴及清洁会阴部
- 中建路基挡土墙施工方案
- 2023年9月全国英语等级考试二级听力试题真题(含答案+录音原文)
- 2023年国际脓毒症和感染性休克管理指南全文
- 计算机组成原理(本全)白中英课件
- 教科版科学五年级上册《光》单元教材解读培训PPT
- 微生物发酵制药
- 2023中移铁通春季校园招聘高频考点题库(共500题含答案解析)模拟练习试卷
- 融资服务协议合同
- 如何做好医院科主任
- 危大工程管控清单
评论
0/150
提交评论