《单片机技术与应用》 课件 项目二 任务4-简易抢答器设计.pptx

《单片机技术与应用》 课件 项目二 任务4-简易抢答器设计.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

项目二简易抢答器设计

独立按键识别检测任务一一位数码管显示任务二数码管动态显示任务三简易抢答器设计任务四

任务四简易抢答器设计

任务描述单片机P3口接8个按键,模拟8个选手进行知识抢答,有开始和停止键。

知识链接状态机按键检测

状态机按键检测实际上按键识别检测也可以用状态机来编程实现,使用状态机最节约系统资源,如:进行按键检测,只需要定时执行按键状态机程序即可。1.状态机的基本概念无按键0有按键1等释放20/0(消抖)1/01/0(干扰)0/1(确认)1/00/0

比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些。进一步看,击键动作本身也可以看做一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态。

一个键按下之后的波形是这样的(假定低有效):在有键按下后,数据线上的信号出现一段时间的抖动,然后为低,当按键释放时,信号抖动一段时间后变高。当然,在数据线为低或者为高的过程中,都有可能出现一些很窄的干扰信号。(1)空闲状态,即数据线信号为高,这里假定为S1状态,对应无按键状态;(2)确认真的有键按下的状态,这里假定为S2状态,对应有按键按下状态;(3)确认真的有键释放的状态,这里假定为S3状态,对应按键松开状态。

一般情况下,采用的时间序列可以为10-20毫秒之间。在S1状态,按键扫描的状态始终处于S1,若此时按下按键,在下一个扫描时间间隔(这个时间间隔用于消抖)后,单片机检测到有按键按下,进入状态S2,表示是一次有效的按键,然后在以后的每个时间间隔里继续检测,如果检测IO一直是低电平,说明按键没有被松开,那么状态将一直停留在S2,一旦检测到IO电平恢复为高电平说明是按键已经松开,即状态S3。2.状态切换无按键0有按键1等释放20/0(消抖)1/01/0(干扰)0/1(确认)1/00/0

任务实施1.硬件电路。2.程序设计。

1.硬件电路

2.程序设计#includereg52.h#defineucharunsignedchar #defineuintunsignedint#defineKeyPortP3sbitsmg1=P2^4; sbitsmg2=P2^5; sbitsmg3=P2^6; sbitsmg4=P2^7; sbitkeyks=P1^2; sbitkeytz=P1^1;

#definekeystate00 #definekeystate11 #definekeystate22 ucharucKeyStatus=0; unsignedcharkeyvalue=0;uintcount=0;uchartemp1;uchartemp[4]={0x3f,0x3f,0x3f,0x3f};bitflag=0; inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};ucharweixuan[4]={0xef,0xdf,0xbf,0x7f};

/**********10ms延时子程序***********/voiddelay10ms(void){uchari,k;for(i=20;i0;i--)for(k=250;k0;k--);}/**********ms级延时子程序***********/voiddelayms(uintx) //x=1,约1ms延时函数,数码管用{uinty,z;for(y=x;y0;y--)for(z=111;z0;z--);}

/**********状态机按键扫描程序***********/ucharkeyscan() {switch(ucKeyStatus){casekeystate0:ucKeyStatus=keystate1;break;casekeystate1:

switch(KeyPort){case0x

文档评论(0)

lai + 关注
实名认证
内容提供者

精品资料

版权声明书
用户编号:7040145050000060

1亿VIP精品文档

相关文档