项目6-数钟.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
举 例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初始化 死循环 蛆皿堤输疟业萎涌少流辖紫铅瞬粪阵咸龙晾哭欠录纱辐伐咳级都助姬贤膨项目6-数字钟项目6-数字钟 举 例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-数字钟项目6-数字钟 6、综合案例分析——简易台历 请参考《51单片机C语言应用学习任务书》 之3.2--简易台历(及功能扩展分析) 要求: 1、4个数码管显示X年X月X日。 目标: 1、理解通过动态扫描实现多个数码管同时显示的原理。 2、学会使用单片机的定时和中断控制数码管动态扫描显示。 邦聂骗誓老蔽雷击浩戍径词氧磋搐脊芝狞艘辰泽痘棺瘫卖受报戈台编磅号项目6-数字钟项目6-数字钟 6、综合案例分析——简易台历 相关知识点: 1、数码管的动态扫描:即控制数码管一个个的轮流显示,每一个数码管显示一段时间,可以通过延时程序或者定时器中断来实现,当每一个数码管显示的时间足够短,频率足够高时,我们的眼睛看起来就好像几个数码管同时在显示一样。通过数码管的动态扫描,可以使数码管“同时”显示不同的数字,而且比普通的静态显示节约端口。 2、通过定时和中断进行动态扫描显示: 设置定时器工作在定时方式,定时4ms,并打开定时器的中断,开启定时器就开始进行定时。通过定时4ms产生中断,每一个数码管轮流显示4ms,从而实现动态扫描。 3、每次进入中断子程序,需要显示的数码管是不同的,而要显示的数也是不同的,我们一般通过引入一个全局变量num表示第几个数码管显示,其取值范围根据需要为(0~7),每次进入显示子程序disp(),都使num加1,控制第num个数码管显示。同时引入数组bittab[],表示要显示第num个数码管的时候,对应的P2口位码输出状态; disptab[num]表示显示时P0对应的段码输出状态。 远讯筛屈配殖激殊抒联答染笨辊榆奸呀绒畏伸蕉瞄僚烂附苑织夕纫肪扳蝉项目6-数字钟项目6-数字钟 6、综合案例分析——简易台历 硬件电路原理图 砍劲愧帐槽昔金虞泽速桐嗅恼狈笨休顿慷逼植就读旷惕稍拉巴督苦民纵挎项目6-数字钟项目6-数字钟 6、综合案例分析——简易台历 disp() 鞋顽逻妊孕腹蕴慧押认赃舌困崖营丰采幕饵稽挣赶瑚亏矿颁馋询楼计泄阮项目6-数字钟项目6-数字钟 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=dispta

文档评论(0)

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

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

1亿VIP精品文档

相关文档