1、物理与机电工程学院课程设计报告课程名称: 单片机课程设计 系 部: 物理与机电工程学院 专业班级: 学生姓名: 指导教师: 完成时间: 报告成绩: 评阅意见: 评阅教师 日期 目录一、设计任务与要求二、方案设计与论证三、硬件电路设计1)单片机模块.2)时钟震荡电路3)复位电路四、软件设计.程序.五、仿真过程与仿真结果软件仿真.六、安装与调试硬件调试.七、原理图与PCB图八、结论与心得.九、参考文献. 交通灯设计一、设计任务与要求设计基本要求:(1)车辆通行繁忙的十字交叉路口,设计一交通灯控制器,设东西方向通行时间为40秒,当剩余3秒时黄灯亮,南北方向通行时间为25秒,当剩余3秒时黄灯亮。(2)
2、东西、南北方向各用三个(绿、黄、红)LED表示,并用数码管显示东西、南北方向的剩余时间。(3)可利用按键修改时间参数。二、方案设计与论证1 电源提供方案 为使模块稳定工作,须有可靠电源。我们考虑了两种电源方案方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。方案二:采用单片机控制模块提供电源。改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。综上所述,我们选择第二种方案。2 显示界面方案 该系统要求完成倒计时、状态灯等功能。基于上述原因,我们考虑了三种方案:方案一:完全采用数码管显示。这种方案只显
3、示有限的符号和数码字苻,无法胜任题目要求。方案二:完全采用点阵式LED 显示。这种方案实现复杂,且须完成大量的软件工作;但功能强大,可方便的显示各种英文字符,汉字,图形等。方案三:采用数码管与点阵LED 相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息。这种方案既满足系统功能要求,又减少了系统实现的复杂度。权衡利弊,第三种方案可互补一二方案的优缺,我们决定采用方案三以实现系统的显示功能。3 输入方案: 题目要求系统能手动设灯亮时间、紧急情况处理,我们讨论了两种方案:方案一:采用8155扩展I/O 口及键盘,显示
4、等。该方案的优点是:使用灵活可编程,并且有RAM,及计数器。若用该方案,可提供较多I/O 口,但操作起来稍显复杂。方案二: 直接在IO口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是K1、K2、K3、K4。由于该系统对于交通灯及数码管的控制,只用单片机本身的I/O 口就可实现,且本身的计数器及RAM已经够用,故选择方案二。三、硬件电路设计系统总体设计本系统采用STC89C52RC单片机中的一个定时器完成了交通指示灯的所有切换过程,该系统能根据实际车流量的情况进行东西和南北方向的切换,采用点亮发光二极管模拟交通灯的实际情况。该系统具有实用性强,操
5、作简单,扩展性好等特点。1.单片机作为微型计算机的一个重要分支,应用面很广,发展很快,单片机最小系统。或者称为最小应用系统。是指用最少原件组成的单片机可以工作的系统,对51系列单片机来说。 最小系统一般应该包括:单片机,时钟电路,复位电路等。1)单片机模块单片机模块是整个系统的核心,完成以下功能:输入数据的采集转换,驱动发光二极管的显示等功能,根据系统的要求和现实的考虑,选用宏晶公司生产的STC89C52RC通用单片机,STC89C52RC是一种带8K字节闪烁可编程可擦除只读存储器FPEROM的低电压,高性能CMOS8位微处理器,俗称单片机,该器件采用高密度非意失存储器制造技术制造,与工业标准
6、的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中。它是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且廉价的方案,与Intel公司的MCS-51系列单片机相兼容,是广泛应用的单片机之一。 P3.0:RXD,串行通信输入P3.1:TXD,串行通信输出P3.2:INT0,外部中断0输入P3.3:INT1,外部中断1输入P3.4:T 0,计时计数器0输入P3.5:T1,计时计数器1输入P3.6:WR:外部数据存储器的写入信号P3.7:RD, 外部数据存储器的读取信号2)时钟震荡电路单片机的时钟信号用来提供单片机内各种微操作的时间其准,这个时钟信号可由
7、单片机内时钟电路产生。可以直接使用外部时钟信号。因此,单片机时钟电路通常可以有两种形式内部振荡方式和外部振荡方式。a)外部振荡方式就是把外部自己有时钟信号引入单片机内。这种方式是用来使单片机的时钟与外部信号保持同步。外部振荡方式电路如图所示。b)内部振荡方式MCS单片机内存有一个用于构成振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是此大器的输入端和输出端。把放大器与作为反馈原件的晶体振荡器或陶瓷振荡器连接就构成了内部自激振荡器并产生振荡时钟脉冲,这种方式为内部振荡方式,如图所示。外部振荡方式 内部振荡方式晶振两边的电容主要以下作用:晶振后面的电容是负载电容,可以用来微调晶体震荡频率
8、。电容的取值一般来说是30pF或33pF的瓷片电容。本次用30pF的瓷片电容3)复位电路复位操作可以使单片机初始化,也可以使死机状态下得单片机重新启动,计算机在启动时,都需要复位,使CPU和系统中其它部件都处于一个确定的初始状态。从这个状态开始工作,在振荡器正在运行的情况下。复位是靠在RST引脚处至少保持2个机器周期(24个振荡器周期)的高电平而实现的。可以分为上电自动复位和按键手动复位a)上电自动复位对于MCS-51系列来说,最简单的上电复位电路如图所示,就是由一个电阻和一个电容构成的。在系统上电时,经C1与R1充电,使RST端为高电平,持续时间大于两个机器周期完成复位。电容充电结束后,系统
9、复位结束,开始正常工作。b)按键手动复位按键手动复位有电平方式和脉冲方式两种。在本系统中采用按键手动电平自动复位如图如下。上电自动复位方式 手动电平复位电路 位电容的作用主要如下:单片机复位电路要求有一个持续时间,加上电容可以利用其两端电压不能突变的特性,使复位电平维持一定时间,使单片机复位。单片机复位电平在其手册里可以看到 。另外这个电容还可以去除一些杂波的干扰,防止单片机被错误复位。本次取4. 7uF的电解电容。 四、软件设计硬件平台上构成,完成各部分硬件的控制和协调,系统功能是由软件硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此软件是本系统的灵魂。软件
10、采用模块化设计方法,不仅易于编程和调试,也可减少软件故障率和提高软件的可靠性。同时对软件进行全方面的测试也是检查错误排除故障的重要手段。流程图如下:程序如下:#include/声明头文件#define uint unsigned int#define uchar unsigned charsbit red1=P20;/定义六个灯分别为P1.07sbit yellow1=P21;sbit green1=P22;sbit red2=P25;sbit yellow2=P24;sbit green2=P23;sbit key1=P30;/模式选择键sbit key2=P31;/数值+sbit key3
11、=P32;/数值-sbit key4=P33;/暂停开始键uchar aa,qian,bai,shi,ge,bb,shu1,shu2;uint num,key1num,key4num;/定义数组09uchar code table= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/延时函数z毫秒void delay(uint z) uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/初始化函数void init()TMOD=0x01;/设置定时器T0为工作方式1TH0=(65536-50000)/256;/赋初
12、值TL0=(65536-50000)%256;EA=1;/开总中断ET0=1;TR0=1;/开定时器num=40;/数码管初始显示40qian=num/10;bai=num%10;red1=1;/起始状态为南北绿灯,东西红灯yellow1=1;green1=0;green2=1;yellow2=1;red2=0;bb=1;key1num=0;/key4num=0;shu1=40;/南北通行时间初始为40s,东西通行时间初始为25sshu2=25;/数码管显示函数void display(uchar qian,uchar bai)P0=tablebai;delay(1);P1=tableqian
13、;delay(1);/键盘扫描函数void keyscan()if(key1=0)delay(10);/消抖if(key1=0)key1num+; if(key1num=4) key1num=1; while(!key1);if(key1num=1)/按下第一次进入设置南北通行时间模式TR0=0;num=40;qian=num/10; bai=num%10;display(qian,bai);green1=0; yellow1=0;red1=0;green2=1;yellow2=1;red2=0;if(key1num=2) /按下第二次进入设置东西通行时间模式TR0=0;num=25;qian
14、=num/10; bai=num%10;display(qian,bai);/key1num=0;green1=0; yellow1=0;red1=1;green2=1;yellow2=0;red2=0; if(key1num!=0) /当key1键被按下if(key2=0)delay(10);if(key2=0)/按下key2键调整南北通行时间num-;qian=num/10; bai=num%10;display(qian,bai);shu1=num; /将设置后的时间赋给shu1if(shu1=0)shu1=40;num=shu1;qian=num/10; bai=num%10;disp
15、lay(qian,bai);while(!key2); if(key3=0) delay(10);if(key3=0) /按下key3键设置东西通行时间num-;qian=num/10; bai=num%10;display(qian,bai);shu2=num; /将设置后的值赋给shu2if(shu2=0)shu2=25;num=shu2;qian=num/10; bai=num%10;display(qian,bai);while(!key3);/*if(key4=0)delay(10);if(key4=0) key4num+;while(!key4);if(key4num=1)TR0=
16、1;if(key4num=2) TR0=0;key4num=0; */if(key1num=3)TR0=1; /主函数void main()init();while(1)display(qian,bai);keyscan();/定时器中断函数void timer0() interrupt 1TH0=(65536-50000)/256; /重赋初值TL0=(65536-50000)%256;aa+;if(aa=20) /定时到达1Saa=0;num-;qian=num/10;bai=num%10;display(qian,bai);if(bb=1)if(num=3)red1=1;/起始状态为南北
17、绿灯,东西红灯yellow1=0;green1=1;green2=1;yellow2=0;red2=1;if(num=0) red1=0;/起始状态为南北绿灯,东西红灯yellow1=1;green1=1;green2=0;yellow2=1;red2=1;num=shu2;qian=num/10; bai=num%10;display(qian,bai);bb+;if(bb=2) if(num=3)red1=1;/起始状态为南北绿灯,东西红灯yellow1=0;green1=1;green2=1;yellow2=0;red2=1;if(num=0)num=shu1;qian=num/10;
18、bai=num%10;display(qian,bai);red1=1;/起始状态为南北绿灯,东西红灯yellow1=1;green1=0;green2=1;yellow2=1;red2=0;bb=1;五、仿真过程与仿真结果软件仿真软件程序的调试一般可将重点放在分模块调试上,统调是最后一环,软件调试可以采取离线和在线调试两种方式。前者不需要硬件仿真器,可借助于软件仿真器即可:后者一般需要仿真系统的支持。本次课题,用Keil软件来调试程序,通过各个模块的但不或跟踪调试,使程序逐渐趋于正常,最后统调程序。仿真采用proteus软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。首先
19、打开proteus软件,在元件库中找到要选用的所有元件,然后进行原理图的绘制,绘制好后再选用Keil软件已近编译好的“.hex文件,选择运行,观察显示结果,根据显示的结果和课题的要求再修改程序,再进行检查,直到满足为止。1、仿真一开始,所有的灯全部都亮,数码管显示00,这是程序设计的初始状态,复位之后的状态亦如此。2、按下开始键,程序开始进入循环的状态,首先东西向绿灯亮,南北向红灯亮,同时数码管进行从40s开始进行倒计时,剩余3s时,红绿灯都不亮,转为四个方向的黄灯,每隔一秒亮一次,3秒倒计时后,即主干通车停止,转入南北向通车,数码管倒计时25秒,待到3秒转为黄灯亮,红绿灯都不亮,进行循环。仿
20、真图如下:六、安装与调试首先制作电路板:在PROTEL DXP软件上画出实训原理图,接着导入制作PCB电路板,最后经打印、热转印、腐蚀、打孔,最后做出电路板。步骤如下:第一步:利用一个能生成图像的软件生成一些图像文件,这里使用版本为Altium2004组织SCH文件,再利用网络表生成相应PCB图(可自动布线,也可手工布线),接着画PCB图,以备打印; 第二步:将PCB图打印到热转印纸上; 第三步:将打印好PCB的转印纸平铺在覆铜板上,准备转印; 第四步:用热应机加温将转印纸上黑色油墨粉压在覆铜板上形成高精度的抗腐; 第五步:热应机加温加压成功转印后的效果; 第六步:准备好三氯化铁溶液进行腐蚀;
21、 第七步:腐蚀结束,清洗干净,晾干之后进行打孔。第八步:将焊盘铣刀装到台钻上,清理出焊盘部分,剩下的部分用于阻焊; 第九步:安装所需预定原件并焊接好。硬件调试拿到电路板后,首先要检查加工质量,在确保没任何质量问题时再安装元器件。元器件在安装前要足逐一检查,用万用表测其数值,看是否与所需相同,完成焊接后应先空载上电(芯片座不插芯片),并检查各引脚的电位是否正确。若一切正常,方可在断电的情况下将芯片插入,再次检查各引脚的电位及其逻辑关系。将万用表的探针放到单片机接电源的引脚上检测一下,看是否符合要求。在调试时我遇到了一个问题:用STC下载器无法将程序下载到单片机中,经检查,是COM端口和波特率选的
22、不正确,应更改STC下载器的COM端口使之与电脑的COM端口相对应,波特率改为9600115200即可下载成功。七、原理图与PCB图八、结论与心得在实验过程中,片机作为核心控制元件,使得电路的可靠性比较高,功能也比较强大。而且可以随时的更新系统,进行不同状态的切换,进行不同状态的组合,但是在设计和调试过程中,也发现一些问题,譬如红绿灯的切换速度不够,黄灯时亮时而不亮,红绿灯规则效率偏低,数码管亮度不够等,亮度不够是因为排阻的阻值用的较大了。还有,老师说我的排版不是很好,例如电阻,因为我是用手折弯的,而不是用镊子,所以这是我以后需要注意的地方。还有一个晶振焊接的不是很整齐,应该从新焊一下,但因为
23、我怕麻烦,也怕重焊之后会影响美观,所以就没再去重试了。另外,由于画PCB时,我漏画了一条线,以至于转化为板时那边出了问题,后来我就得自己对照着PCB再用导线把遗漏的导线连接上,花了不少时间,增加了许多工作量,所以说这些都还需要我们在实践中继续加强改进,得到进一步的完善。这次课程设计,我发现单片机原理应用性很强,只靠老师的课堂讲解是远远不够的,只有自己动手去做才能发现自己的不足。许多的余力和程序看似简单,但真正去做才知道知识并没有自己想的那样扎实,从而懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学理论与实际结合起来,才能真正提高自己的动手能力与思考能力,树立自己的工作信心
24、。相信会对今后的学习工作和生活有非常重要的影响在设计过程中我们还得到了老师的帮助与意见。在学习过程中不是每个问题都能自己解决,向老师请教或向同学讨论也是一个解决问题,让自己更快进步和增强学习能力很好的办法。九、参考文献 1苏家健,曹柏荣,汪志锋.单片机原理及应用技术.北京:高等教育出版社,2004,2李广弟.单片机基础. 北京:北京航空航天大学出版社,1994.3阎石.数字电子技术基础(第三版) .北京:高等教育出版社,1989.3朱清慧 Proteus教程-电子线路设计、制版与仿真 清华大学出版社 2008版4蒋亮 Protel DXP电路设计入门与应用 机械工业出版社 2005版5王秋爽 单片机开发基础与经典设计实例 机械工业出版社 2008版