当前位置:文档之家› 单片机课程设计报告模板

单片机课程设计报告模板

单片机系统课程设计报告专业:自动化学生姓名:学号:指导教师:完成日期:2011 年 3 月17 日目录1 设计任务和性能指标 (3)1.1设计任务.............................................................................. 错误!未定义书签。

2 设计方案 (4)2.1任务分析 (4)2.2方案设计 (4)3 系统硬件设计 (5)3.1时钟的电路设计 (5)3.2复位电路设计 (5)3.3灯控电路设计 (5)3.4倒计时电路设计 (6)3.5按键控制电路设计 (7)4 系统软件设计 (8)4.11秒定时 (8)4.2定时程序流程 (8)4.3交通灯的设计流程图 (9)4.4定时器0与中断响应 (10)5 仿真及性能分析 (10)5.1仿真结果图 (11)5.2仿真结果与分析 (12)6 心得体会 (13)参考文献 (14)附录1 系统原理图 (15)附录2 系统PCB图 .................................................................... 错误!未定义书签。

附录3 程序清单 (17)1.1设计任务利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。

用红、绿、黄发光二极管作信号灯。

如图5.1所示。

设东西向为主干道,南北为支干道。

图5.1 交通灯示意图1. 基本要求(1) 主干道处于常允许通行的状态,支干道有车来时才允许通行。

主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。

(2) 主、支干道均有车时,两者交替允许通行,主干道每次放行30秒,支干道每次放行20秒,设立30秒、20秒计时、显示电路。

(3) 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。

黄灯亮时,原红灯按1Hz 的频率闪烁。

(4) 要求主支干道通行时间及黄灯亮的时间均可在0~99秒内任意设置。

2. 选做(1) 可设置紧急按钮,在出现紧急情况时可由交警手动实现全路口车辆禁行而行人通行状态,即主干道和支干道均为红灯亮。

(2) 实现绿波带。

所谓‘绿波带’,是指在一定路段,只要按照规定时速,就能一路绿灯畅行无阻。

“绿波带”将根据道路车辆行驶的速度和路口间的距离,自动设置信号灯的点亮时间差,以保证车辆从遇到第一个绿灯开始,只要按照规定速度行驶,之后遇到的信号灯将全是绿灯。

南东2.1任务分析模拟交通灯控制器就是使用单片机来控制一些LED 和数码管,模拟真实交通灯的功能。

红、黄、绿交替闪亮,倒计数显示时间等,用于管理十字路口的车辆及行人交通,计时牌显示路口通行转换剩余时间等。

2.2方案设计1.硬件方案根据设计的要求可知,系统的硬件原理框图如图5.2所示。

单片机键盘LED 显示三色指示灯图5.2 系统的硬件原理框图单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB 的FLASH ROM ,设计时无需外接程序存储器,为设计和调试带来极大的方便。

南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。

键盘系统可以根据系统的需要设置不同的键的个数,可以选择线式键盘或矩阵式键盘,若单片机的IO 口不够用时,可以考虑扩展8255或8155满足系统的要求。

2. 软件方案根据设计要求,程序框图如图5.3所示。

软件可由汇编语言完成,也可由C 语言完成。

软件设计可以分为以下几个功能模块: 主程序:初始化及键盘监控。

计时程序模块:为定时器的中断服务子程序,完成0.1秒(或其他时间)和1秒的时间定时。

显示程序模块:完成12个发光二极管(实际上只需驱动6个)和4个LED 数码管的显示驱动。

键盘扫描程序模块:判断是否有键按下,并求取键号。

主程序流程图3 系统硬件设计3.1时钟电路设计如上图所示,采用内部时钟产生方式,在XTAL1 和XTAL2 两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。

其发出的时钟脉冲直接送入片内定时控制部件。

3.2复位电路设计如上图所示,采用上电+按钮电平复位方式,当按下按钮时,RST 管脚高电平触发。

为保证复位可靠,RC 时间常数应大于两个机器周期,电容取33uf,电阻取200 欧。

3.3 灯控制电路设计如上图所示,交通灯状态显示电路由东西南北四个方向各三个LED 灯组成,分别显示四个方向上红、黄、绿三个状态,用以指示十字路口各方向车辆的行驶。

通过软件编程,可使路口交通变化情况为:南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30 秒、支干道每次通行时间为20 秒;在绿灯转为红灯时,要求黄灯先亮5 秒钟,才能变换运行车道;黄灯亮时每秒闪亮一次。

3.4 倒计时显示电路设计如上图所示,由两个个共阴极两位数码管来实现倒计时。

由于P0 口输出电流小,需外接上拉电阻,C1、C2 端接到P1 口的P1.0、P1.1、P1.2、P1.3 口用单片机来控制其片选。

3.5 按键控制电路设计如上图所示,开关控制由五个连接到单片机的控制按钮组成。

通过软件编程,按下K3 键电路进入外部中断0 响应,此时,可通过按键K1 和和K0 设置通行时间,每按一次K1 键南北通行时间增加一秒,而按下K0 键东西通行时间增加一秒,此时若按下K4 键东西南北的通行状况返回到初次设的状况(即南北通行),重新返回循环状态;按下按键K2,这是对紧急状况的控制,此时停止计数,东西方向和南北方向都不通行,如果K4 键按下,返回紧急状况的状态,并重启计数;按键K1 按下,控制南北方向通行;按键K0 按下,控制东西方向通行。

4 系统软件设计4.1 1S定时以在系统中要实现准确的1s定时。

采用89C51内部的定时/计数器T0,工作在方式1,定时时间计算公式为:zΣ(216-计数初值)×晶振周期x12或扛(2-6-计数初值)×机器周期其最大定时时间为131ms,离ls还差很远。

因此.把秒计时用硬件和软件计数相结合的方法实现。

即把定时器的定时时间定为125ms,这样计数溢出8次就可得到h.而8次计数可用软件方法实现。

为得到125ms定时,设计数初值为工,则有(216_X)x2=125 000从上式计算得到计数初值。

定时器定时采用中断方式完成.以便于通过中断服务程序进行溢出次数(每次125ms)的累计,计满8次即得到ls计时。

4.2 定时程序流程(1)To定时主程序流程定时主程序的主要功能是进行定时器,计数器的初始化编程,然后通过反复调用显示子程序的方法,等待125ms定时中断的到来。

(2)死定时中断服务程序流程中断服务程序的主要功能是进行计时操作。

程序先判断计数溢出是否满了8次。

不满8次表明还没达到最小计时单位秒.中断返回;如满8次则表明已达到最小计时单位秒.程序继续向下执行.进行计时操作。

4.3交通灯的设计流程图4.4定时器0 及中断响应5仿真与性能分析5.1仿真结果图5.2 仿真结果当交通灯上电复位后,数码管显示p。

当按下开始键k1后,南北方向开始亮绿灯,东西方向亮红灯。

显示器开始倒计时。

当按下结束键k2后,显示器重新显示p,并且南北东西的方向全灭。

6心得体会这次单片机课程设计历时三个星期的时间,在这三个星期里我们体验了从设计、画板、编程、焊板到调试的整个过程,让我们小小的体验了一次工程师的感觉。

起初我们先到图书馆和网上查阅了大量有关超声波测距仪的资料,然后开始设计我们自己的方案,为了设计精度要求和抱着学习新知识的想法,我们选择则了从没接触过的DS18B20和LCD1602液晶芯片,虽然我们并没把这两个芯片的应用原理研究的很透彻,但基本的应用编程是可以实现的,说实话整天抱着电脑查资料、看资料是一件很痛苦的事情,一天下来眼都花了,但每学会一点新知识还是挺高兴的,有的时候想要的资料查不到我们就向老师求助,他们都会毫无保留的帮助我们。

设计完电路以后我们便开始画PCB板,这是我们上学期学习的一门课程,趁着这次机会也让我们又将这部分只是复习了一下,并将其应用于实际,终于发现我们所学的知识和实际有点联系了,也对其产生了一点兴趣。

不过我们学得并不全面,只能说是引路用的,所以在实际当中我们还要再加深一下学习,这也是我们获得新知识的一个地方。

画板时需要注意的地方很多,比如封装要根据实际器件的尺寸来设计孔的大小,间距也要符合要求,布线时线宽与线距也有一定讲究,部件摆放要按一定规律等等。

这三周的时间说轻松也不轻松,说紧张却稍带着愉快的气氛,整个过程应该是充实的,时而惊喜,时而烦闷特别是最后调试阶段有一块调通了都会让我们高兴不已,当卡在某处时也确实是让人抓狂。

总之通过这次课设,我们不但复习了过去所学,并且学到了一些新东西。

更重要的是通过这一次切身实践,才使我们真正将理论与实际结合起来,并且遇到了很多实实在在的需要我们亲自解决的问题。

通过解决这些问题,我们处理实际问题的能力有了很大提高,积累了我们的实践经验,以便为以后打下牢固的基础。

而这些才是我们作为一名工科学生最宝贵的财富。

参考文献[1] 郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009.[2]胡汉才.单片机原理与接口技术[M].北京: 清华大学大学出版社,2004.1-505.[3] 邢国泉. LM35温度传感器的温度特性及其应用[J]. 医疗设备信息.2007,11,25-28.[4] 薛国红,赵修斌,卢艳娥等.零漂与增益控制对量化的影响分析[J].西安:空军工程大学,2008.[5] 马忠梅,刘滨等. 单片机C语言Windows环境编程宝典[M]. 北京: 北京航空航天大学出版社. 2003.附录3 程序清单#include<reg52.h>#define unit unsigned int#define uchar unsigned charuchar codea[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code b[4]={0xfe,0xfd,0xfb,0xf7};uchar code c[4]={0xcc,0xd4,0x78,0xb8};uchar NB=25,DX=30,NBG=25,DXG=15,H=5;uchar i,k=0,cnt=0,j=0;sbit K0=P3^5;sbit K1=P3^6;sbit K4=P3^7;sbit K3=P3^2;sbit K2=P3^3;void delay(uchar t);void key();void display();void settime();void init(void){TMOD=0x01;TH0=0x3c;TL0=0xb0;IT0=1;ET0=1;TR0=1;EA=1;EX0=1;EX1=1;P2=c[k];}void int0(void) interrupt 0{EA=1;P2=0xd8;for(;;){settime();if(K1==0){delay(40);if(K1==0){while(!K1){settime();}NBG++;if(NBG==100)NBG=0;}}if(K0==0){delay(40);if(K0==0){while(!K0){settime();}DXG++;if(DXG==100)DXG=0;}}if(K4==0){delay(40);if(K4==0){while(!K4){}k=0;P2=c[k];NB=NBG,DX=NBG+H; display();EA=1;break;}}}}void int1(void) interrupt 2 {EA=0;TR0=!TR0;for(;;){P2=0xdb,P0=a[0];P1=0xfe;delay(20);P1=0xfd;delay(20);P1=0xfb;delay(20);P1=0xf7;delay(20);if(K4==0){delay(20);EA=1;P2=c[k];TR0=!TR0;break;}}}void time1(void) interrupt 1{TH0=0x3c;TL0=0xb0;cnt++;if(cnt>=20){NB--;DX--;cnt=0;if(NB==0||DX==0){k++;if(k>3)k=0;switch(k){case 0:NB=NBG,DX=NBG+H;j=0;P2=c[k];break; case 1:NB=H;j=1;P2=c[k];break;case 2:NB=DXG+H,DX=DXG;j=0;P2=c[k];break; case 3:DX=H;j=2;P2=c[k];break;}}}}void delay(uchar t){uchar i;do{for(i=0;i<20;i++);;;}while(t--);}void settime(){P1=0xfe,P0=a[(NBG+H)%10]; delay(20);P1=0xfd,P0=a[(NBG+H)/10]; delay(20);P1=0xfb,P0=a[(DXG+H)%10]; delay(20);P1=0xf7,P0=a[(DXG+H)/10]; delay(20);}void key(){if(K1==0){delay(40);if(K1==0){while(!K1){display();}k=0,P2=c[k];cnt=0;NB=NBG,DX=NBG+H; display();}}if(K0==0){delay(40);if(K0==0)while(!K0==0){{display();}k=2,P2=c[k];cnt=0;NB=DXG+H,DX=DXG; display();}}}void display(){P1=0xfe,P0=a[NB%10]; delay(20);P1=0xfd,P0=a[NB/10]; delay(20);P1=0xfb,P0=a[DX%10]; delay(20);P1=0xf7,P0=a[DX/10]; delay(20);}void main(void){init();for(;;){display();key();while(j==1){P2=0xdc;for(i=83;i>0;i--){display();}P2=c[k];for(i=83;i>0;i--){display();}}while(j==2){P2=0xf8;for(i=83;i>0;i--) {display();}P2=c[k];for(i=83;i>0;i--) {display();}}}}。

相关主题