- 1、本文档共76页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教学课件讲义PPT教案幻灯片学习资料
例3:流水灯,每隔1秒循环左移点亮。 用定时中断来实现。 学生讨论,确定编程方案。 主程序做什么? 定时中断服务程序做什么? #include REG51.h #include intrins.h sbit led=P1^0; unsigned char m=0,n; void main() {P1=0xfe; n=0xfe; EA=1; ET0=1; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; while(1); } void lsd() interrupt 1 {TH0=0x3c; TL0=0xb0; if(++m19) {n=_crol_(n,1); P1=n; m=0;} } 例:设计出能够显示时间的电子钟,六位数码管显示。 电子钟两个关键: 显示方式? ----数码管显示-----动态显示 (我们在前面讲过的显示按键次数的例子) 秒脉冲如何产生? ------单片机的T0来定时1S(前面的例子) 我们需要对秒脉冲计数,记满60个,为1分钟;再需要对分钟信号计数,记满60个,为1小时。 主程序: 定时中断初始化 显示小时、分钟、秒 中断服务子程序: 重新赋初值 判断1秒到了吗? 判断1分钟到了吗? 判断1小时到了吗? #include REG51.h unsigned char code sz1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};// 数码管段值数组 unsigned char sdat[]={0,0,0,0,0,0}; //存放小时、分钟、秒的十位、个位的数组 unsigned char wx[]={0x01,0x02,0x04,0x08,0x10,0x20}; //6个数码管位选信号数组 unsigned char m=0,sec=0,min=0,hou=0; //存放小时、分钟、秒个数的变量 void delay(unsigned int a) { unsigned char i; while(a--) { for(i=0;i120;i++); } } void disp() {unsigned char i; sdat[0]=hou/10; //小时十位 sdat[1]=hou%10; //小时个位 sdat[2]=min/10; sdat[3]=min%10; sdat[4]=sec/10; sdat[5]=sec%10; for(i=0;i6;i++) { P2=sz1[sdat[i]]; 动态显示4步 //送段值 P1=wx[i]; // 相应的位选有效 delay(10); //延时 P1=0x00; //关闭 } } void main() { P1=0x00; //关闭显示 EA=1; //定时中断初始化 ET0=1; TMOD=0x01; TH0=0x3c; TL0=0xb0; TR0=1; while(1) {disp();} //一边显示,一边等待中断(一次50ms)来 } void lsd() interrupt 1 { TH0=0x3c;
文档评论(0)