项目6-数字钟.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
举 例1 #include reg51.h void delay(unsigned int t); void main() { while(1) { P1=~P1; delay(500); } } 原来的流水灯程序 使用定时中断的流水灯程序 开始 T0重新初始化 T0定时中断子程序流程图 T0定时50ms到 i计数 1S到,P1输出 主程序流程图 开始 T0初始化 死循环 举 例1 使用定时中断的流水灯程序 //T0初始化 void initTimer() { TMOD=0x1; TH0=0x4c; TL0=0xf7; } //主程序 void main() { initTimer(); TR0=1; ET0=1; EA=1; while(1); } void timer0() interrupt 1 { unsigned char i; TH0=0x4c; TL0=0xf7; i++; if(i==20) { i=0; P1=~P1; } } 开始 T0重新初始化 T0中断子程序流程图 T0定时50ms到 i计数 1S到,P1输出 6、综合案例分析——简易台历 请参考《51单片机C语言应用学习任务书》 之3.2--简易台历(及功能扩展分析) 要求: 1、4个数码管显示X年X月X日。 目标: 1、理解通过动态扫描实现多个数码管同时显示的原理。 2、学会使用单片机的定时和中断控制数码管动态扫描显示。 6、综合案例分析——简易台历 相关知识点: 1、数码管的动态扫描:即控制数码管一个个的轮流显示,每一个数码管显示一段时间,可以通过延时程序或者定时器中断来实现,当每一个数码管显示的时间足够短,频率足够高时,我们的眼睛看起来就好像几个数码管同时在显示一样。通过数码管的动态扫描,可以使数码管“同时”显示不同的数字,而且比普通的静态显示节约端口。 2、通过定时和中断进行动态扫描显示: 设置定时器工作在定时方式,定时4ms,并打开定时器的中断,开启定时器就开始进行定时。通过定时4ms产生中断,每一个数码管轮流显示4ms,从而实现动态扫描。 3、每次进入中断子程序,需要显示的数码管是不同的,而要显示的数也是不同的,我们一般通过引入一个全局变量num表示第几个数码管显示,其取值范围根据需要为(0~7),每次进入显示子程序disp(),都使num加1,控制第num个数码管显示。同时引入数组bittab[],表示要显示第num个数码管的时候,对应的P2口位码输出状态; disptab[num]表示显示时P0对应的段码输出状态。 6、综合案例分析——简易台历 硬件电路原理图 6、综合案例分析——简易台历 disp() 6、综合案例分析——简易台历 #include reg51.h unsigned char code disptab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF}; unsigned char code bittab[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; unsigned int mydata=1234;//要显示的数 unsigned char num=0;//数码管序号 void disp() { num++; num=(num%4); P2=0xff; //数码管消影 P0=0xff; P2=bittab[num]; switch(num) { case 0: P0=disptab[mydata%10]; break;//个位 case 1: P0=disptab[mydata/10%10]; break;//十位 case 2: P0=disptab[mydata/100%10]; break;//百位 case 3: P0=disptab[mydata/1000%10]; break;//千位 default: ; } } 6、综合案例分析——简易台历 void initTimer0(void) { TMOD=0x1; //T0工作方式1,定时 TH0=0xf1; //定时4ms TL0=0xae; } void t0() interrupt 1 { TH0=0xf1; //定时器重新初始化,赋初值,定时4ms TL0=0xae; disp(); //显示 } void main() { initTimer0(); ET0=1; EA=1; TR0=1;

文档评论(0)

精品报告 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档