XXXXXX毕业设计
图3.8 红外接收电路图
4软件设计
跟C语言比起来,汇编语言所编写的代码生成的速率很快,但是程序看起来会十分复杂,很难读懂,然后用C 语言所编写的代码在速率方面跟汇编语言差不多,但是却比汇编容易更容易读懂,可移植性也很强,不仅如此, 在编写高时效性的代码的时候,C 语言还能够嵌入汇编语言来完成。在开发周期的方面,如果一般中大型的软件,编写都是用C 语言来实现,因为它的开发周期比汇编语言的要少许多。综上所述,本人在这次的毕业设计当中选了C语言作为程序编程语言。
而这次的毕业设计的程序用Keil μVision 2.0这款软件进行编写。因为这个编程软件不但支持各种公司的芯片,还具有编译、编辑以及仿真等功能,不仅是C语言,它还支持PLM、汇编这两种语言的编写和设计,界面非常简洁,让人容易上手。在程序的调试和软件的仿真这两个方面都很优秀。所以这次的编程的软件本人选的是Keil μVision。系统总的流程图如图4.1所示:
宏定义 I/O初始化 定义共阴极字型 编码表 定义 函数变量并初始化 定时器0初始化 调用Buzzer()函数 进入主函数main() 定义状态数组 初始化外部中断 设置字型码和字位码,完成显示 定义字位码函数 进入while(1)循环 返回while(1)函数 调用显示控制函数void display() 图4.1 系统总的流程图 17
XXXXXX毕业设计
4.1定时器的设置
定时器的工作方式可以分为4种,工作方式0是13位的定时计数器; 16位的定时计数器可以用工作方式1来实现;工作方式2是8位的定时计数器;工作方式3情况较复杂,定时计数器T0才可以在此工作方式下工作,T0被分解成独立的两个8位定时计数器。而在此系统的程序,所采用的是工作方式1。具体用代码TMOD=0x11来设置2个定时计数器T0,T1都工作在工作方式1下。
4.2中断程序的设置
在中断情况下,本系统的程序中断思路流程图如图4.2所示,采用外部中断0进入只允许东西通行的特殊情况;采用外部中断1进入只允许南北通行的特殊情况;在自然情况下,外部中断0的优先级高于外部中断1,系统无特别要求可不设置外部中断的优先级。
图4.2 程序中断思路流程图
本系统的设计所用的定时中断程序是非常重要的,定时计数器启动之后,它就开始在初始值上的加1计数,程序设定给TL0和TH0装载合适的初值,假设需要设定系统定时50ms,计50000个数后,定时计数器将会溢出,此时的时间就是50ms并且会进入中断系统,当需要设定系统时间1s时,程序设计时只要设置20次50ms的定时中断就是1s,这样便可精确控制定时时间同时利用中断系统完成数码管输出数据刷新和处理不同状态的切换。定时中断系统的程序流程图具体情况如图4.3所示。
中断返回 特殊情况(紧急情况) 中断响应 关定时器 5调试
5.1断电调试
以保安全,避免硬件被烧坏,本人一开始先进行的是断电测试。首先用万能表检查
18
XXXXXX毕业设计
启动定时器中断 设置字型码和字位码,完成数码管倒计时显示 定时中断入口 定义1s 初始化定时器0 关闭定时器0
计数变量自加1
图4.3 定时中断流程图
电路是不是有短路的情况出现,然后看看设计的原理是不是对的,每一个线路电压有没有出现错误。经过检查,断电测试没有问题。
5.2通电调试
A、插入电源后,按了开关,发现电路没有反应,经过一系列的测试排除后发现输入电压最少应该为6.5V,经过处理,换了一个9V的电源,问题终于得到了解决。
B、 测试系统的时钟是不是正确的,本人的方法是用万能表来测试。把万能表调到直流电压档这个档位,然后把两线分别接在XTAL1与AXTAL2之间,显示出来的数字是 2.4,没有问题。
C、复位电路经过检测没有出现问题。
D、数码管显示有时显示不正常,经过一系列排查处理之后,恢复正常。LED灯表现也正常。
5.3功能部分的测试
A、接上电源后,交通灯开始运作,运作正常。运行1分钟,按复位键,恢复到了开始状态,表现正常。
B、按紧急停止按键,四个红灯一起亮了,再按一次,退出该模式,表现正常。 C、按显示车流量按键,数码管显示倒计时停止,红外线每检测到一个信号,计数加1,再按一次,退出该模式,表现正常。
D、按单向通行按键,按一次为东西通行,按两次为南北通行,按第三次退出该模式,表现正常。
E、按夜间模式按键,按一次路口全为黄灯,按第二次退出该模式,表现正常。 F、按调时按键,调节东西方向的红灯和绿灯时长,按一次为调节红灯时长,按两
19
XXXXXX毕业设计
次为调节绿灯时长,再按时间加减两个按键,时间按照按键的次数加减,再按一次,退出该模式,表现正常。
6结论
通过这次毕业设计,我学到了许许多多的东西。总结有以下几条:
(1)首先,学习到最明显的就是word的运用。在这次毕业设计以前,除了几次基本的文字编辑之外,其它的功能根本就没有用过。通过这篇论文的修改,我学会了很多功能的运用,包括段落、页面、页眉、等各种编辑功能。虽然我知道word的功能远远不止这些,但是这次起码让我学习到了我以前不会的东西,这就是一种进步的表现。
(2)通过复习大学期间学过的有关知识,我将此充分运用到了这次的毕业设计当中,跟实践相联合。同时,我也发现自己有很多知识不明白,都是通过问老师,查资料自学来掌握,我相信经过我的努力,可以完美的完成这次毕业设计。
(3)在这次毕业设计中,我对单片机有了更深的理解,学习到了更多关于单片机的知识。通过深入的研究和思考,在程序编写方面也有自己独特的一套思路,编写的时候更加熟练,灵巧。
(4)增强了查阅资料和自学的能力。在这次毕业设计当中,我遇到了很多不会的问题,然后我就开始自己上网搜索,查找或者翻阅书本查找,经过自学之后,如果还是不懂,我就会问同学和老师,最后通过自己的理解逐渐的把问题解决了。这让我体会到了什么叫学无止境,知识是无限的,我们只有通过不断的学习,提升自己的知识面,才能更好的运用到实际当中,使生活更加美好,思想境界更加广阔。
20
XXXXXX毕业设计
参考文献
[l]边海龙,孙永奎. 单片机开发与典型工程项目实例详解[J].电子工业出版社,2008,(10):143-160.
[2]王为青,邱文勋. 51单片机开发案例精选[J].人民邮电出版社,2001,(5):45-47. [3]张鑫,华臻,陈书谦. 单片机原理及应用[J].电子工业出版社,2008(5). [4]张洪润,张亚凡.单片机原理及应用[J]. 清华大学出版社,2005,(4). [5]黄智伟.凌阳单片机课程设计指导[J]. 北京航空航天大学出版社,2007,(6)
[6]蒋辉平,周国雄. 基于Proteus的单片机系统设计与仿真实例[M].机械工业出版社,2009. [7]张毅坤. 单片微型计算机原理及应用,[M]西安电子科技大学出版社 1998 [8]余锡存 曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7 [9]雷丽文 等.微机原理与接口技术[M].北京:电子工业出版社,1997. [10]张萌·单片机应用系统开发综合实例·第二版·清华大学出版社·2005年 [11]何立民·单片机应用文集·第一版·北京航空航天大学出版社·2004年 [12]张一工·现代电力电子技术原理与应用第一版·科学出版社·2002年
[13]欧阳文·ATMEL89系列单片机的原理与开发实践·第一版·中国电力出版社·2007年
21