基于单片机led流水灯控制内容摘要:

LSFHKLDSJ DFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS 图 6 数码管显示电路,通过往 ~ 写入 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90 会显示数字 0~9,自动计时10s;如果 10s 之内没有按键按下,则 10s 之后,二极管自动改变显示样式,如果 10s 之内有按键按下,则强 制执行按键内容。 JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJ DFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS 第四章 核心代码 本设计主要的模块就是输出设备中的 8 个二极管及七段数码管显示电路,分别如上图的 6 所示。 其中控制 8 个二极管花样点亮的程序如下,重点以花样 1 为说明: if(count1==1) //花样 1: 灯单向向下移模块子程序 { if(count2==1) { rate=rate1。 } //如果 s2 键按一下,执行速率 1 if(count2==2) { rate=rate2。 } //如果 s2 键按两下,执行速率 2 P2=0xfe。 //给 p2 端口送入初值,这时 D1 点亮 delay(rate)。 temp=P2。 for(i=0。 i8。 i++) //通过延时及循环,依次点亮 D2~D8 { if(count1==1) {temp=_crol_(temp,1)。 P2=temp。 if(count2==1) //并随时判断 是否有 s2 键按下 { rate=rate1。 } if(count2==2) { rate=rate2。 } delay(rate)。 if(i==7) i=0。 } } } 七段数码管显示电路的程序如下: unsigned char code table2[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}。 //定义数码管 09 数字显示的表 void display(unsigned char j) {P1= table2[j/10]。 //通过片选使两位数码管分别显示数字,但是延时时间小,可以实现两位数码管同时显示 JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJ DFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS S3 = 1。 delay(10)。 S3 = 0。 P1= table2[j%10]。 S4 = 1。 delay(10)。 S4 = 0。 } 中断服务程序如下: void timer0() interrupt 1 {TH0=(6553650000)/256。 //T0重新装初值 TL0=(6553650000)%256。 count++。 display(table2index)。 if(table2index==0 amp。 amp。 count==1) //如果数码管显示数字 0 时改变流水灯的样式 count1++。 if(count1==6) count1=1。 //如果五个花样显示完了之后, 再按下按键 S1 或数码管计数到 10 时 ,再重新从花样 1 显示 if(count==20) //累加计数器的次数,如果到 20 次的话数码管数字通过查表自动加 1 显示 {count=0。 table2index=table2index+1。 if(table2index==11) table2index=0。 } if(S1==0) //检测是否是 S1 按下 {delay(5)。 //软件 延时消抖 if(S1==0) //再次检测 S1 是否确实按下 {table2index=0。 count1++。 //如果 s1 确实按下,则执行 s1 内容 while(!S1)。 //如果 s1 没有按下,继续执行原来的花样显示 if(count1==6) JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJ DFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS count1=1。 } } if(S2==0) //检测是否是 S2 按下 {delay(5)。 //软件延时消抖 if(S2==0) //再次检测 S2 是否确实按下 {count2++。 while(!S2)。 //如果 s2 没有按下,则继续执行原来的速率 if(count2==3) count2=1。 } } } JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJ DFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS 第五章 调试 仿真的过程中出现的主要问题是,按 s2 键二极管点亮速率 不会改变,本来只要写入延时程序,就应该会改变速率,但是仿真之后,速率并不会改变。 后来经过各方面的查资料及研究后才知道,必须在调用延时程序前判断 s2 键是否被按下,并且按下的次数。 否则的话,就算 s2 键被按下,也只是执行原本写入的速率,并不会根据 s2 键的按下改变速率。 JDFJKDHFKAHGJHLKFHJHAKHFLJKDHFKLJASHDFKJHAKLDFHDLSFHKLDSJ DFSGSJDFKGHERUHJKDHKLSHDKJHKSHKFHLKGHDLSFGHDSKLFHGLDKSFHGLKFGDS 第六章 总结与致谢 总结 经过一段时间的努力,我们小组顺利的完成了这次单片机课程设计。 这是一个磨练意志的过程。 从课题的选择开始,硬件和软件系统的设计、到最后的设计成功,这其中经历了很多困 难。 但是更重要的是在这个过程中我得到了很大的锻炼。 通过 AT89C51 单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用。 通过本次课程设计,我不仅学到了关于单。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。