单片机课程设计交通灯.docx
- 文档编号:3908685
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:15
- 大小:70.42KB
单片机课程设计交通灯.docx
《单片机课程设计交通灯.docx》由会员分享,可在线阅读,更多相关《单片机课程设计交通灯.docx(15页珍藏版)》请在冰豆网上搜索。
单片机课程设计交通灯
单片机课程设计(交通灯)
摘要
本设计是一款以单片机AT89s52和为核心设计交通灯控制系统。
本系统能实
现根据实际通过8052芯片的P1口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,
倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过P1口输出至双位数码管);本系统实用性强、操作简单、扩展功能强。
关键词:
1
****************
„„„„„„„„„„„„„„„„„„„„„„„„„„„41.1设计要求„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„41.2设计功能„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„41.3方案论证„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„4
„„„„„„„„„„„„„„„„„„„„„„„„„„„52.1电路设计框图„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„52.2系统硬件概述„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„52.3主要单元电路的设计„„„„„„„„„„„„„„„„„„„„„„„„„„„62.3.1单片机主控制模块的设计„„„„„„„„„„„„„„„„„„„„„„„„62.3.2LED灯显示模块设计„„„„„„„„„„„„„„„„„„„„„„„„„„62.3.3数码管显示模块设计„„„„„„„„„„„„„„„„„„„„„„„„„„62.3.4按键键盘模块设计„„„„„„„„„„„„„„„„„„„„„„„„„„„72.3.5电路工作原理„„„„„„„„„„„„„„„„„„„„„„„„„„„„„7
„„„„„„„„„„„„„„„„„„„„„„„„„„„„„73.1程序流程框图„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„73.1.1交通灯时间显示设计流程图„„„„„„„„„„„„„„„„„„„„„„„„73.1.2每秒钟的设定„„„„„„„„„„„„„„„„„„„„„„„„„„„„„83.1.3计数器硬件延时„„„„„„„„„„„„„„„„„„„„„„„„„„„„83.1.4延时的方法„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„8
„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„84.1硬件测试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„84.2软件测试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„8
„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„9
„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„9
系统使用说明书„„„„„„„„„„„„„„„„„„„„„„„„„„„„10
设计源程序„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„11
2
(1)用89S51CPU,12M时钟,常规的上电和手动复位电路
(2)包括3个以上的独立式按键
(3)至少2位LED数码显示器及其接口
(4)一路蜂鸣器输出
(5)至少有2路输入信号,可以是模拟量或数字量
(1)本次设计为一款交通灯的控制系统
(2)两路红黄绿灯,作为模拟控制十字路口路灯
(3)一路红灯35秒,二路绿灯也为35秒,之后二路黄灯5秒,所以一路读秒40秒,二路
读秒35秒后再读5秒,读秒方式为倒数
(4)黄灯亮时,蜂鸣器响,起警示功能
(5)四个键盘实现复位,暂停,加、减时间功能
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车
辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状
态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。
设东西道比南北道的车
流量大,指示灯燃亮的方案如下表。
35S5S35S5S„„
东西道红灯亮绿灯亮黄灯亮„„
南北道绿灯亮黄灯亮红灯亮„„
(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车
辆通过,行人禁止通行。
时间为35秒。
(2)黄灯闪烁5秒,警示车辆和行人红、绿灯的状态即将切换。
(3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通
行,时间为35秒。
(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的
通行。
(5)此表可根据车流量动态设定红绿灯初始值。
3
共阳数码管显键盘模块AT89S52示模块
主控制模
LED灯控制显示
块模块蜂鸣器模块
本电路是由AT89S52单片机为控制核心,其具有在线编程功能,低功耗,能在3V超低压工作;共阳极的七段数码管一个,红、黄、绿交通灯各两个,按键键盘四个、蜂鸣器。
AT89S52单片机为40引脚双列直插芯片,共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。
本次设计单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容
的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端.如图-1所示:
图-1AT89S52主控制系统
4
信号灯用来显示车辆通行状况,每个路口的信号的的转换顺序为:
绿——>黄——>红,或者:
红——>绿;绿灯表示允许通行,黄灯表示禁止通行,但已经驶过安全线的车辆可以
继续通行,是绿灯过渡到红灯提示灯。
本次设计中,P1.0—P1.7口所对应的灯分别为:
绿、
黄、红、红、红、绿、黄、红;对应为D8—D1,D8、D7、D5为一路绿黄红灯,D6为蜂鸣器指示灯,D3、D2、D1为二路绿黄红灯。
图-2LED显示电路
在交通信号灯的正上方安装一个可以显示绿灯通行、红灯等待时间的显示电路,采用数
码管显示电路是一种很好的方法。
由于东往西方向和西往东方向显示的时间相同,南往北方
向和北往南方向显示的时间也相同,所以只需要考虑四位数码管显示电路,其中东西方向两
位,南北方向两位,两位数码管可以时间的时间为0-99秒完全可以满足系统的要求,数码
管连接方法如图3所示:
图-3数码管显示电路
5
四个按键实现功能分别为:
复位、暂停进入中断、加1、减1。
复位按键可以在系统运
行不理想情况下复位系统,按键K1可以是程序进入中断子程序,K2、K3分别为每按一下加1或者减1功能。
图-3按键键盘电路
(1)上电系统复位输入交通灯初始时间,通过8052单片机P1输入到系统,
(2)由8052的定时器每秒钟送信息,由8052的P1口显示红、绿、黄灯的燃亮情况;
(3)通过8052单片机的P3.0位来控制系统是工作或设置初值,当位0就对系统进行复
位,为1系统就开始工作。
(4)黄灯倒计时是,蜂鸣器一起鸣叫,起警示功能;
(5)P2口控制数码管码表输入;
(6)红黄绿灯循环工作。
图-4交通灯时间显示程序设计流程图
6
延时方法可以有两种一中是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。
计数器初值计算:
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所
需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器摸值,该值和计数器工作方式有关。
在方式0时M为213;在方式1
时M的值为216;在方式2和3为28。
计算公式:
T=(M-TC)T计数
或TC=M-T/T计数
T计数是单片机时钟周期TCLK的12倍;TC为定时初值如单片机的主脉冲频率为TCLK12MHZ,经过12分频方式0TMAX=213x1ms=8.192ms
方式1TMAX=216x1ms=65.536ms
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合
的办法才能解决这个问题.
我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每
当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服
务子程序中,CPU先使软件计数器减1,然后判断它是否为零。
为零表示1秒已到可以返
回到输出时间显示程序。
本次设计的交通灯设计电路系统较简单,电路焊接也比较简单,但是仍然不可忽视,
因为电路板的焊制要求细心地操作,否则会容易出现虚焊、短接等现象存在。
即使是在小的
电路系统中,只要出于一处的错误,就有可能对检测造成很大的不便,甚至烧掉电路,所以
手工时必须小心谨慎。
由于之前曾经做过类似的电路设计与焊接工作,本次电路焊接十分成功,焊接完毕检测
没有错误,烧上程序之后可以使用,硬件完成理想成功。
本次设计程序用C语言编写,程序相对简单,在第一次烧进Hex文件时发现数码管不亮,后来进过对程序的小改动,成功实现数码管按要求显示。
7
本次课程设计我们指导老师给的题目是“基于单片机的——”,这是一个命题可以比较
广泛的课题。
结合自身的知识,我选择了完成“基于单片机的交通灯控制系统”。
经过一个
星期的努力,我终于完成了这个课题。
回想短短一周的经历,真是感受颇多。
本次设计的交通灯控制系统在大二时就做过一次,但是那次是用简单的IC芯片制作,并不涉及单片机。
在这次课程设计制作中,由于是单独完成从方案论证、硬件电路设计到软
件设计,工作量还是不小。
不过兴趣所致,我还是坚持完成了本次课程设计,从原理图的理
论设计,到焊制电路,到调试电路,写程序调试程序,系统调试,其实是个非常繁琐的过程。
做完我才发现,原来当你有兴趣并且坚持做一件事的时候,你是可以很完美的做完它的,至
少在心理上你会觉得它是完美的,因为你为它确确实实的付出了。
当然,在这过程中我会遇到一些自己觉得比较困惑的的问题,这时,向老师或有经验的
学长请教,大家一起讨论,互通有无,使我们从中受益非浅。
虚心向别人学习,取人之长,
补己之短,是一种很重要的学习方法。
通过这次课程设计活动,我拓宽了思路,开阔了视野,不仅对单片机的理论知识起了复
习作用,还有动手能力也进一步加强了。
在完成设计的过程中,我们有更多的机会和一些很
有经验的人才接触,使我们学到了很多解决实际问题的方法。
这次活动巩固了我们的基础知
识,培养了我们的实践动手能力,这其中更大的收获就是将书本死的知识和实践活动结合起
来,并在实践中有的放矢的深入学习,提高了学习效率。
通过本次实验,我收获很多,动手能力也提高了很多。
本次实验设计重在得到锻炼,不
管成绩如何,都是值得回忆的。
我们也希望未来我们能过做的更好。
参考文献
1谭浩强编《C程序设计》清华大学出版社2004
2肖金球编《单片机原理与接口技术》清华大学出版社20073赵建领编《51单片机开发与应用技术详解》电子工业出版社2009
8
(1)系统上电之后开始工作,复位键S1可以对系统进行复位。
(2)D8、D7、D5和D3、D2、D1为两组路灯模型,可以显示不同指示灯效果。
(3)蜂鸣器与D5、D4、D2相连接,不管是D5还是D2黄灯亮,D4灯亮,蜂鸣
器警示声响起。
(4)K1、K2、K3实现对显示时间的数码管时间进行调节,当需要看某个时间交
接点的效果是,可以按k1进入中断程序,再选k2(加1操作)或者k3(减
1操作)。
9
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
uchart0,ss=40,temp=1,w=0;
ucharcodetable[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
//0---9数字码段,共阳数码管
sbitbeep=P1^2;
sbitd1=P1^0;//绿灯1sbitd2=P1^1;//黄灯1sbitd3=P1^3;//红灯1sbitd4=P1^5;//绿灯2sbitd5=P1^6;//黄灯2sbitd6=P1^7;//红灯2sbitKEY_SET=P3^2;
sbitKEY_ADD=P3^3;
sbitKEY_MINUS=P3^4;
voiddisplay1(ucharaa);
voiddelay(uintz);
voidinit();
voidkey();
voidSet_time();
voidmain()
{
init();
while
(1)
{
display1(ss);
key();
if(temp==1)
{
if(ss>5)
{
d1=0;//绿灯1
d6=0;//红灯2
}
10
else
{
d1=1;//绿灯1灭,5秒
d2=0;//黄灯1亮
beep=0;
d6=0;//红灯2
}
}
if(temp==2)
{
if(ss>5)
{
d2=1;//开始亮红灯
beep=1;
d6=1;
d3=0;//红灯1
d4=0;//绿灯2
}
else
{
d4=1;//绿灯2灭
d5=0;//黄灯2亮
beep=0;
d3=0;//红灯1
}
}
}
}
voidinit()//初始化
{
TMOD=0X01;//初始化定时器,两个定时器同时设置为工作方式1,50MS
TH0=(65536-50000)/256;//装初值
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;
TR0=1;
P1=0XFF;
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(t0==20)//1秒中断
11
{
t0=0;
ss--;
if(ss==-1)
{
temp++;
ss=40;
if(temp==3)
{
temp=1;
P1=0XFF;
beep=1;
}
}
}
}
voiddisplay1(ucharaa){
ucharshi1,ge1,shi2,ge2,time_b_1,time_b_2,time_y_1,time_y_2,time_r_1,time_r_2;
time_b_1=aa-5;
time_b_2=aa-5;
time_y_1=aa;
time_y_2=aa;
time_r_1=aa;
time_r_2=aa;
if(temp==1)
{
if(aa>=6)
{
shi1=time_b_1/10;
ge1=time_b_1%10;
}
else
{
shi1=time_y_1/10;
ge1=time_y_1%10;
}
shi2=time_r_2/10;
ge2=time_r_2%10;
P0=table[shi1];
P2=0xfd;
delay(5);
P0=table[ge1];
12
P2=0xfe;
delay(5);
P0=table[shi2];
P2=0xf7;
delay(5);
P0=table[ge2];
P2=0xfb;
delay(5);
}
if(temp==2)
{
if(aa>=6)
{
shi2=time_b_2/10;
ge2=time_b_2%10;
}
else
{
shi2=time_y_2/10;
ge2=time_y_2%10;
}
shi1=time_r_1/10;
ge1=time_r_1%10;
P0=table[shi1];
P2=0xfd;
delay(5);
P0=table[ge1];
P2=0xfe;
delay(5);
P0=table[shi2];
P2=0xf7;
delay(5);
P0=table[ge2];
P2=0xfb;
delay(5);
}
}
voiddelay(uintz){
uintx,y;
for(x=z;x>0;x--)
13
for(y=20;y>0;y--);
}
voidkey()
{
if(KEY_SET==0)//设置时间
{
delay(20);//去抖
if(KEY_SET==0)//当是正常状态时就进入调时状态
{
w++;
TR0=0;//暂停计时
display1(ss);
//Set_time();//调整
if(w==2)
{
w=0;
TR0=1;
}
}
while(KEY_SET==0);//等待键松开
}
//------------------------------------------------------------------
if(KEY_ADD==0)//加减调整
{
delay(20);
if(KEY_ADD==0)
{
Set_time();//调整
}
while(KEY_ADD==0);//等待键松开
}
//------------------------------------------------------------------
if(KEY_MINUS==0)//加减调整
{
delay(20);
if(KEY_MINUS==0)
{
Set_time();//调整
}
14
while(KEY_MINUS==0);//等待键松开
}
}
//------------------------------------------------------------------
voidSet_time()
{
if(KEY_ADD==0)
{
ss++;//数加1
display1(ss);
if(ss==40)
{
ss=0;
}
}
if(KEY_MINUS==0)
{
ss--;//数减1
display1(ss);
if(ss==-1)
{
ss=40;
}
}
}
15
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 交通灯