单片机交通灯实习报告 - 图文 下载本文

4.3 状态3

图4-7状态3数码管显示

图4-8 状态3二极管显示

- 19 -

4.4紧急状态:

图4-9 紧急状态数码管显示

图4-10 紧急状态二极管显示

- 20 -

第五章 心得体会

在刚拿到课程设计任务书时,确实觉得有点犯难,因为这种综合硬件和软件的设计对于我们刚学了基础知识对硬件还不是太熟,有点不知从哪下手,通过查资料,翻课本,对各个地方知识的复习,同学的指导,才明白了硬件的控制原理和控制方法,才有了程序设计的初步思路。

就像数码管的动态输出如何控制,一开始没认真看书,不是太清晰,所以先进行了主程序的编写,但感觉非常费劲,思路不是那么清晰,最后和同学讨论,最后在看书才彻底明白了,位选和段选如何去控制,同时思路便清晰了,用了两个小时把程序打了出来,但运行出现了二十几个错误,最后改过来后,程序还是运行不出来,然后对程序进行分析,一句一句的对,终于感觉不该有什么差错了,但还是没有结果,让同学指导才知道,对8255的地址弄错了,因为接的CS1,因该是0F开始,但以前用的时候是07开始,没注意当时的接线,这才知道任务书上给片选干嘛的。

运行后,二极管对,但数码管是乱码,都说是译码译错了,可我程序细细查了两遍,不可能译错,然后就到处找问题,最后发现A口输出线与数码管高位和低位反了, 找了两个小时,才找到,终于运行出来了,然后对中断进行试运行,又有问题了,中断过程对,但返回时,数码管有一段时间的乱码,起初时,只对所用到的数据进行了压栈,不知道哪个地方出了问题,找同学也找不出问题,调了一个下午,发现只要调用数码输出的子程序就会出现乱码,子程序没问题,也不知道哪的问题,回宿舍,看书后,对单片机的片内的各个地址用处都看了一遍分析原因,最后看到压栈,终于明白了,因为中断前,主函数频繁的调用数码输出子程序,而且他占用的时间最多,到中断后,还调用数码输出子程序,由于没有对数码输出子程序里的Ri等一些反复用的变量进行压栈,所以返回后,里面的数据就被打乱了,所以返回后,程序不能按原来的状态运行,而出现各种不确定的运行。

这一周的课程设计确实让我对单片机的认识更加深刻,培养了我综合运用所学知识,发现,提出,分析和解决实际问题,锻炼了我的实践能力,非常有意义。

- 21 -