- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
任务2–单节时间按键处理数码显示电路
学习情境2 篮球计时计分控制系统的设计
任务2 单节时间按键处理+数码显示电路
在本情景的第一个小任务中,我们学会了利用定时器中断技术产生1秒的时钟脉冲,并实现了篮球比赛中24秒进攻电路和程序的设计,本任务中,我们来实现篮球计时控制系统中单节比赛时间和单节节数记录功能。这两大功能是一个篮球计时计分控制系统的重要功能。
任务设计要求和设计原理
其次我们设计篮球控制系统中单节分数显示以及比赛开始按键处理模块的设计,本模块主要包括数码显示电路,数码管我们用六位一体的共阳极数码管,用来显示每节比赛剩余的时间,也有暂停功能,暂停时,时间也应当停下来,再次按下比赛开始按键时,时间从暂停的那一时刻开始递减。同时我们根据篮球比赛的要求,设计了记录比赛节数的功能,当一节比赛结束后,节数自动加1,数码管能实时显示当前比赛进行到那一节。为便于后续电路的扩展,也使用了锁存芯片74HC573,以及译码芯片74HC154。
图1-1 系统方框图
2.2 硬件电路设计
本任务中,除单片机最小系统电路之外,电路主要由按键电路和数码显示电路组成。按键电路和上一个任务相同,数码显示电路包括两方面:一是显示每节比赛的时间,是一个6位一体的数码管,一是显示当前比赛进行到哪一节,显示节数,用一个数码管。至于比赛时间的启动和暂停功能,依然使用任务1中的进攻和暂停按键。
具体电路如下图所示:
图1-2 24秒进攻数码显示电路
2.3 软件设计
在软件设计方面,在这个电路模块里,主要是单节时间按键处理子程序的设计和数码显示模块的设计,以及产生50毫秒时间的T0中断程序的设计。而其中的关键就是按键处理子程序的设计,其具体设计思想为:判断比赛开始按键是否按下, 延时消抖,再次判断比赛开始按键是否按下 ,设置比赛开始按键按下标志(k3=1),并且打开定时器T1,如果暂停键没有按下,则立即设置比赛时间变量初值(Game_time1=11;Game_time2=59; )。如果暂停键有按下,则也应当设置比赛时间变量初值(Game_time1=11;Game_time2=59; )。然后判断时间是否达到了1秒,若是,则时间变量Game_time2自减1(Game_time2--),且清除1秒时间标志变量flag=0;并设置新的标志位m_count=1,(m_count为记录一分钟60次的标志位),当 m_count=60时,则Game_time1自减1,当单节时间完毕时,则重新设置单节时间变量的值,同时关掉定时器T1(TR1=0)。具体设计如下:
/*--------单节比赛启动子程序,K3按键处理子程序--------*/
void Game_start()
{
if(key_start==0) //判断比赛开始按键K3是否按下?
{delay(40);} // 消抖
if(key_start==0) //再次判断比赛开始按键K3是否按下?
{ k3=1; //设置比赛开始标志位K3
TR1=1;
if(k2==0) //未按下暂停按键。
{
if(flag1==1) return;
{
flag1=0;
Game_time1=2;
Game_time2=59;
}
}
else if(k2==1Game_time1==3Game_time2==0)
{
if(flag1==1) return;
{
Game_time1=2;
Game_time2=59;
}
}
}
if(k3==1flag1==1)
{
flag1=0;
p=1;
m_count++; //1秒钟累加器,60秒为1分钟
Game_time2--;
if(Game_time20)
{
Game_time2=59;
}
}
if( p==1m_count==60)
{
if(Game_time1!=0)
{
Game_time1--;
Game_time2=59;
}
else if(Game_time1==0) //记录每节最后一分钟的秒钟。
{
Game_time1--;
文档评论(0)