- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.2 .2设计和焊接2位数码管动态显示接口电路 3. 检测元器件 本任务需要检测2位数码管是共阳极还是共阴极,数码管每个引脚定义。 4.焊接电路 5.2 .3编程实现60S倒计时数码管动态显示 1. 编程任务 编程实现2位数码管60S倒计时,要求用使用定时器T1工作方式为1,中断法产生定时。 2. 编程思路 中断定时法程序结构由主函数和中断服务子函数组成,主函数主要完成定时器T1和中断相关寄存器的设置,以及2位数码管动态显示等程序的编写。中断服务子函数主要完成相关寄存器的重置,以及一些变量值的判断。 主函数中设置T1寄存器TH1=0x3CH、TL1=0XB0H,IE=0x88H中断允许寄存器设置总允许及定时器T1允许,TMOD=0x10设置定时器工作方式1,TCON= 0x40H启动定时器T1。 5.2 .3编程实现60S倒计时数码管动态显示 2. 编程思路 中断服务子函数TH1和TL1需重新赋值,因为定时器工作方式1不具有自动重装功能。中断服务子函数需要设置一变量counter,当单片机完成一次定时50ms,进入中断服务子程序,counter的值加1,并判断counter的值是否等于20,不等于20,跳出中断服务子函数,等于20,则counter值为0,因为整个定时时长为1S,需要中断20次。 2位数码管60S倒计时,根据数码管动态扫描原理,主函数中首先选中数码管十位,显示字符“6”,延时4ms左右,选中数码管个位,显示字符“0”,延时4ms左右,再选中数码管十位,显示字符“6”,依次循环下去。当定时中断达到1s后,数码管将显示字符“59”,重复上述的步骤,只不过十位数码管和个位数码管送入的段选值是字符“5”和“9”的段形码。 5.2 .3编程实现60S倒计时数码管动态显示 2. 编程思路 中断子函数中设置三个变量number、number1、number2。number的初始值为60,当定时器每定时1s后,number值减1;number1是数码管十位要显示字符对应数组元素下标,number2是数码管个位要显示字符对应数组元素的下标,number1和number2是根据number的值计算出来的,并且是变化的。 程序如下: #includereg52.h #define uchar unsigned char #define uint unsigned int uchar Dm[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极八段数码管0-9 uchar number=60,counter=0, number1,number2; 5.2 .3编程实现60S倒计时数码管动态显示 void delay(uint t);//延时函数声明 main() { TMOD=0x10;//定时器1工作在方式1 TL1=0xb0;//定时器赋初值 TH1=0x3c; EA=1;//允许开放中断 ET1=1;//允许定时器T1中断 TR1=1;//启动定时器1 while(1) { P1=0xfe; P2=Dm[number1]; delay(4); P1=0xfd; P2=Dm[number2]; delay(4); } } ? void timer1() interrupt 3//定时器中断号为3 { ET1=0; TL1=0xb0;//定时器重新赋初值 TH1=0x3c; counter++; if(counter==20) //定时是否到1s {counter=0; number--; } 5.2 .3编程实现60S倒计时数码管动态显示 if(number==0) //计数是否到60 { number=60; } number1=number/10;//十位 number2=number%10;//个位 ET1=1; } void delay(uint t ) //延时t*1ms,针对12Mhz { uchar i; while(--t) {for(i=124;i0;i--);} } 5.2 .3编程实现60S倒计时数码管动态显示 3.程序下载、电路连接和观察实
原创力文档


文档评论(0)