- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机学习项目数码管实现秒显示
单片机学习项目项目5-数码管实现秒显示我们先用一个简单例子说明定时器中断应用技巧,电路采用第三章图3-3-2,利用定时器T0中断产生秒信号,然后让单片机的P0口驱动一只数码管显示秒计数。如果单片机的晶振频率为12MHz,则内部机器周期为1微秒,即内部脉冲频率为1 MHz。假如定时器对内部脉冲计5000个(5毫秒)就引发中断,定时器T0为工作方式1,则初值应为60536,?T0发生200次中断就能累计1秒。T0中断的应用首先要对T0定时器进行初始化设定,通过一个初始化函数完成,包括设定T0工作方式、设定初值、设定中断允许和优先级,最后启动T0。设定所涉及的特殊功能寄存器有TMOD、TCON、IP、IE。T0初始化程序设计流程如图4-2-6所示。程序设计程序包含主函数、定时器T0初始化函数、T0中断服务函数。显示语句放在中断服务函数内,程序清单如下:/*预处理*/#includereg51.hcode unsigned char seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned char cp,i;??????????????????//声明全局变量/* timer0中断服务函数*/void timer0_isr(void) interrupt 1??????// timer0中断服务函数{TL0 = 0x78;??????????????????// TL0重新预置TH0 = 0xec;??????????????????// TH0重新预置cp++;????????????????????????// timer0中断1次,变量cp加1if(cp = 200)???????????????????//中断200次,时间刚好为1秒{cp = 0;i ++;}if(i == 10) i = 0;P0 = seven_seg[i]??????????????// P0输出显示数据}/* timer0中断初始化函数*/void timer0_init (void)???????????{TMOD = 0x01;???????????????//设置计时器模式控制寄存器,Time0工作在定时方式1TL0 = (65536 - 5000) % 256;?????// TH0预置,60536十六进制高八位TH0 = (65536 - 5000) / 256;??????// TL0预置,60536十六进制低八位???????????//PT0 = 1;?????????????????????//设置中断优先次序寄存器IP中的PT0位,Timer0中断优先EA = 1;????????????????????????//打开中断总开关ET0 = 1;??????????????????????//设置中断允许寄存器IE中ET0的位,开启中断小开关TR0 = 1;??????????????????????//开始计数}/*主函数*/void main (void){timer0_init ();??????????????// timer0初始化,为中断做好准备P2 = 0;???????????????????????//采用共阳型数码管,共阳极与P2.0?之间有反向器,需设置P2.0 = 0while (1);????????????????????//等待中断}
文档评论(0)