- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机实验报告(交通灯)
单片机实验报告(交通灯)
实验效果:每个方向均从10s开始倒计时计数,计满10s换一次灯亮,红绿灯交换过程中,黄灯闪烁一次。
实验电路:(由于连线的话线路过于繁琐,故采用一一对应标号的方法简化了电路图.)
(注:有一个问题是我不知道这个电路是否应该连接晶振,因为在连接了之后我觉得计时的差别不大,故没有连接,但不知道实际操作的过程中又没有必要)
程序段:
程序效果展示:
程序开始的时候,分别为南北为红灯亮,东西为绿灯亮。七段显示器同时进入倒计时的状态。
10s计时结束,黄灯闪烁两次。
黄灯闪烁结束以后,绿灯被点亮,又开始10s倒计时。
绿灯计时结束后黄灯又闪烁两次,然后红灯再亮依次循环
(黄灯闪烁) (红灯再次点亮进入倒计时)
紧急按钮按键按下的时候,计时停止,所有方向的黄灯均被点亮
点解除紧急的按钮,红绿灯显示恢复正常状态
实验总结:
这是第一次做比较大一点的程序,做出来之后的心情还是比较激动的,因为之前根本没有想过自己可以做的出来。先说说实验中遇到的问题和一些解决方法。
第一个要解决的问题就是倒计时的问题,然后想到的就是应该吧七段码转换表倒置,这样显示的时间就可以是逆序的,其次由于表倒置了,所以计数的数值也要倒着来。比如我想设定闹钟为10s,则需要设置时间为09和08这样显示的闹钟时间才是10s
第二点问题就是,交通灯是一个循环的过程,其实我想用尽量少得语句达到这个循环的目的,于是我只用了两个口控制东西南北的红绿灯,用P3.6控制南北方向的红灯和东西方向的绿灯,P3.7控制南北方向的绿灯和东西方向的红灯,然后设置了一个R1作为变量没循环一次,R1加1,然后R1和2相除,得到的余数这是0或者1,这用余数加上cjnz语句就可以起到循环的作用控制红绿灯的交替点亮,我觉得这样比较简单,而且用到的控制口比较少,比较方便。
因为紧急按钮按下,应该是比较紧急的事情,所以我把紧急按钮按外部中断0的接口相连,由于外部中断0的中断优先级最高,所以当按钮一按下,程序自动调至中断程序执行。
有紧急按钮当然需要解除紧急的按钮,所以在执行外部中断0的时候需要判断解除紧急的按钮是否按下,开始的时候我编写的程序是:
查找书以后,我才知道,中断结束应该是要调至reti,于是我就把程序修改为:
这样当解除紧急情况的按键按下的时候,紧急中断就结束了,程序就又恢复到了正常的状态。
实验中得问题:
最后实验中还没解决的问题就是黄灯的闪烁问题,我不知道怎么才能控制黄灯闪烁成我想它闪烁的样子,如程序段中所示。
这里的R1,用于控制灯亮的循环没循环一次自加一,然后用它做除2的操作,得到的余数就将会以0和1交替进行,可以用于交换点亮红灯和绿灯(PS:这是我自己觉得我想的比较好的一个idea,嘿嘿····自我夸奖一下)
这些空间了分别设定了计数开始的时间,响铃时间和LED七段显示器所显示的时间。由于是倒计时,所以所有计算需要反着进行。
这一段就是利用R1中内容和2相除,根据余数判断循环次数,从而点亮不同的LED灯。
用于判断设定的10s换灯时间是否已经到达。若到达跳转TIMEBEAR,没有到达则继续显示时间。
时间达到后使红灯和绿灯均熄灭。使黄灯闪烁。(这里我不知该怎么达到黄灯多次闪烁的效果,我用了两种方法一种是:将clr p3.5
mov r4,#20
dl10:mov r7,#05h
dl0:mov r6,#0ffh
dl60:djnz r6,$
djnz r7,dl0
djnz r4,dl10
setb p3.5
扩展成为:
clr p3.5
mov r4,#20
dl10:mov r7,#05h
dl0:mov r6,#0ffh
dl60:djnz r6,$
djnz r7,dl0
djnz r4,dl10
setb p3.5
mov r4,#20
dl11:mov r7,#05h
dl00:mov r6,#0ffh
dl160:djnz r6,$
djnz r7,dl00
djnz r4,dl11
clr p3.5
dl22:mov r7,#05h
dl33:mov r6,#0ffh
dl44:djnz r6,$
djnz r7,dl33
djnz r4,dl22
setb p3.5
是可以闪烁两次,但是效果总是不太理想。
还有一种书调用书上的延时程序,但是调用了之后本来正常变换的红绿灯却不能变换了··很奇怪是为什么。。。。。很郁闷·。。。。)
计算时间的子程序段。。
Res
文档评论(0)