51单片机交通灯课设推荐文档.docx
- 文档编号:24571153
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:17
- 大小:132.63KB
51单片机交通灯课设推荐文档.docx
《51单片机交通灯课设推荐文档.docx》由会员分享,可在线阅读,更多相关《51单片机交通灯课设推荐文档.docx(17页珍藏版)》请在冰豆网上搜索。
51单片机交通灯课设推荐文档
西安石油大学
单片机控制临时交通灯
班级:
电信1502
小组成员:
赵勃
权伟力
艾克拜尔
2017.12.7
临时交通灯设计原因
随着经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通拥塞已成为一个国际性的问题。
因此,设计可靠、安全、便捷的多功能交通灯控制系统有极大的现实必要性。
根据交通灯在实际控制中的特点,结合单片机的控制功能,提出了一种用单片机自动控制交通灯的简易方法。
设计中包括硬件电路的设计和程序设计两大步骤,对单片机学习中的几个重要内容都有涉足。
单片机的应用正在不断深入,单片机可以用来仿真各个系统。
在自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
那么靠什么来实现这井然秩序呢?
对于路口信号灯出现问题或者需要进行道路施工,时,临时信号灯就变得非常重要,在没有红绿灯的交通路口也可以放置临时信号灯,来调节交通,对于社会有很大帮助。
1.课题任务及主要实现内容
本系统由单片机系统、数码管显示、交通灯显示系统组成。
系统除基本的交通功能外,还具有倒计时。
东西、南北两个干道交于一个十字路口,各干道有一组红、绿、黄三色的指示灯。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换。
程序开始运行先南北段通行、东西段禁止60s,后东西段通行、南北段禁止60s,依此循环。
系统分三种工作模式:
正常模式、繁忙模式、特殊模式,并且通过三个按钮“正常”、“繁忙”、“特殊”可相互转化。
正常模式:
直行时间显示数码管显示60。
此时南北段直行通行(绿灯)、东西段禁止(红灯)60s,倒计时到3s时,黄灯亮,提醒人们注意了。
然后是东西段通行(绿灯),南北段禁行(红灯),一直循环下去。
繁忙模式:
南北段、东西段的通行时间改为30s,其它与正常模式类似。
特殊模式:
特殊模式红灯全亮,倒计时20s,到最后3秒黄灯闪3次后并转入正常模式。
2.原理分析
交通灯显示的理论分析
倒计时显示的理论分析:
利用定时器中断,设TH0=TH1=(65536-50000)/256,即每0.05秒中断一次。
每到第20次中断即过了20*0.05秒=1秒时,产生一次参数传递,使时间的计数值减1,便实现了倒计时的功能。
3.单片机选择与外围接口部件
根据课题任务的要求,该系统具有交通灯的显示功能,倒计时功能,改变时间设定功能,所以把系统分为几个模块,包括倒计时显示器、交通信号灯、控制模块。
系统硬件框图如下图2-1:
交通灯发光源选取
发光二极管简称为LED,在此处设计中我们用他来模拟红绿黄交通灯,普通单色发光二极管具有体积小、工作电压低、工作电流小、发光均匀稳定、响应速度快、寿命长等优点,可用各种直流、交流、脉冲等电源驱动点亮。
它属于电流控制型半导体器件,使用时需串接合适的限流电阻。
LED显示器由七个发光二极管组成,因此也称之为七段LED显示器,此外,显示器中还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。
通过七段发光二极管的不同组合,可以显示多种数字、字母或者其他符号。
动态显示采用多路复用技术的动态扫描显示方式,利用人眼的暂留效应和发光二极管发光时间的长短,发光的亮度等因素。
.
发光二极管模拟红绿灯
它是半导体二极管的一种,可以把电能转化成光能,常简写为LED。
发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。
当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。
不同的半导体材料中电子和空穴所处的能量状态不同。
当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。
常用的是发红光、绿光或黄光的二极管。
发光二极管的反向击穿电压约5伏。
它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过管子的电流。
单片机c51管脚
目前在单片机系统中,应用较广泛的微处理器芯片主要为8XC5X系列单片机。
该系列单片机均采用标准MCS-51内核,硬件资源相互兼容,品类齐全,功能完善,性能稳定,体积小,价格低廉,货源充足,调试和编程方便,所以应用极为广泛。
若采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低电压工作,而且与MCS-51系列单片机完全兼容,
图3-1STC89C51引脚图
引脚如图3-1所示:
VCC:
40号管脚供电电压。
GND:
20号管脚接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8个TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流这是由于上拉的缘故。
P3口也可作为STC89C52的一些特殊功能口,如下表3-1所示:
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
看门狗设置
在单片机构成的系统中,由于单片机的工作有可能受到外界的干扰,造成程序跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入瘫痪状态,发生不可预料的后果,所以出于对单片机程序的运行的状态进行实时的监控,便考虑一种的专用的监测芯片用于监测单片机程序运行状态的芯片,俗称“看门狗”(WatchDog)。
加入看门狗电路的目的是使单片机可以在无人的状态下实现连续的工作,其工作的过程如下:
看门狗的芯片和单片机的一个I/O口连接,每隔一定的时间单片机给芯片送个脉冲,是看门狗的定时器复位;如果超过时间不送脉冲,看门狗的芯片会使单片机复位,从头开始执行程序,这样便实现了监视单片机的目的。
选用设备STC89c52单片机一片,共阴极的七段两位数码管两个,红、黄、交通灯各四个,绿发光二极管7个,按键三个、电容两个22pF,电阻十六个470Ω,晶体振荡器一个,连线若干。
振荡电路
单片机系统里都有晶振,在单片机系统里晶振作用非常大,全称叫晶体振荡器,它结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片机的一切指令的执行都是建立在单片机晶振提供的时钟频率。
单片机晶振的作用是为系统提供基本的时钟信号。
单片机的时钟电路设计有两种方式,一种是内部时钟方式,一种是外部时钟方式。
在内部时钟方式下单片机内部的高增益、反相放大器通过XTAL1、XTAL2外接作为反馈元件的外部晶体管振荡器与电容组成的并联谐振回路构成一个稳定的自激振荡器,向内部时钟电路提供振荡时钟。
振荡器的频率主要取决于晶体的振荡频率。
MCS-51单片机的晶体振荡频率可以再1-12MHz范围内选择,电容C1、C2的选择范围是15-45pF,电容的大小会影响振荡器的稳定性和起振速度。
外部时钟方式是把外部已有的时钟信号引入到单片机内。
此方式常用于多片单片机同时工作,以便于各单片机的同步。
一般要求外部信号高电平的持续时间大于20μs,且为频率低于12MHz的方波。
本设计采用内部时钟方式,采用12MHz的晶振和两个22pF的电容。
如图3-2所示。
按键模块
程序开始运行先南北段通行、东西段禁止60s,后东西段通行、南北段禁止60s,依此循环。
系统分三种工作模式:
正常模式、繁忙模式、特殊模式,并且通过三个按钮“正常”、“繁忙”、“特殊”可相互转化。
按键图如3-7所示:
图3-7按键模块
这里用到了二极管做开关,是为了防止有一按键被按下3根线同时低,
中断无效。
二极管在正向电压作用下电阻很小,处于导通状态,相当于一只接通的开关;在反向电压作用下,电阻很大,处于截止状态,如同一只断开的开关。
利用二极管的开关特性,可以组成各种逻辑电路。
4.软件编译环境
C语言
C语言是一种通用的计算机程序设计语言,它既可以用来编写计算机的系统程序也可以用来编写一般的应用程序。
以前计算机的系统软件主要用汇编语言编写,单片机应用系统更是如此。
由于汇编语言程序的可读性和可移植性都较差,采用汇编语言编写单片机应用程序不但周期长,而且调试和排错也比较困难,为了提高单片机应用程序的开发效率,改善程序的可读性和可移植性,采用高级语言无疑是一种最好的选择。
C语言既具有一般高级语言的特点,又能直接对计算机的硬件进行操作,表达和运算能力也较强,许多以前只能采用汇编语言来解决的问题现在都可以用C
5.实验模拟
语言来解决。
综上所述,C语言在功能上、结构性、可读性、可维护性上有明显的优势,故本课题采用C语言实现软件功能。
交通灯的主要用途是指示通行和显示时间,因此主要检测发光二极管模块和数码管显示模块,按键模块。
按照本设计的功能需求,进行相应的实验模拟
(1)软件采用proteus8进行电路图的仿真模拟,
2、软件部分首先应用keilu4软件对程序进行编译和调试,调试成功后,利用Proteus软件进行在线仿真,经过对程序多次地修改后,仿真效果达到了预期的要求。
3、将最终调试好的程序烧录到单片机内,观察效果。
本系统以STC89C51单片机为核心,采用7段数码管并应用74LS245对数码管进行驱动,可以很直观地显示红绿灯的开放及关闭时间;功能完善,不仅有普通交通灯的指示功能,还增加了特殊模式和繁忙模式。
其控制功能与效果与真实道口管理红绿灯一致。
6.参考文献
[1]童诗白.模拟电子技术基础(第四版)高等教育出版社
[2]阎石.数字电子技术基础(第五版)高等教育出版社
[3]《C语言程序设计》科学教育出版社
[4]《51单片机的基础教程》电子工业出版社
[5]《单片机原理及应用》—基于Proteus和KeilC(第二版)电子工业出版社
[6]郭天祥.《51单片机C语言教程》-入门、提高、开发、拓展全攻略
电子工业出版社
7.实验程序
单片机控制交通灯的C源程序
开始按钮开始交通灯的控制,然后选择模式
三种模式:
正常模式东西行,南北断60s;东西断,南北行60s;繁忙模东
式西行,南北断20s;东西断,南北行20s;特殊模式四路全为
红灯,20秒后转到正常模式
正常模式和繁忙模式可任意转到特殊模式;
正常模式和繁忙模式转换需要在倒计时结束转换;
#include
#defineuintunsignedint
#defineucharunsignedchar
uchari,a;
uintcounter,ge,shi,temp;
/**************定义控制位******************/
/**************定义控制端口****************/
sbitA_0=P2^0;//南北红sbitA_1=P2^1;//南北黄sbitA_2=P2^2;//南北绿
sbitB_0=P2^3;//东西红sbitB_1=P2^4;//东西黄sbitB_2=P2^5;//东西绿
sbitWE1=P2^6;//十位位选sbitWE2=P2^7;//个位位sbitnumber=P3^0;//正常模式开sbitbusy=P3^1;//繁忙模式开sbitspecial=P3^3;//特殊模式开sbitnumber1=P1^0;//正常指示灯sbitbusy1=P1^1;//繁忙指示灯sbitspecial1=P1^2;//特殊指示灯
sfrWDT=0xe1;//看门狗特殊寄存器设置
ucharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,40x6D,0x7D,0x070x7F,0x6F};
voiddelay(uinttime);//延时函数声明
voidinitial();//初始化函数声明
voidstatus1();//状态1函数声明
voidstatus2();//状态2函数声明
/*****************显示函数******************/
voiddisplay(){
P0=table[shi];
WE1=0;delay
(1);
WE1=1;
P0=0xff;//delay
(1);
P0=table[ge];
WE2=0;delay
(1);
WE2=1;}
/**************主函数***********************/
voidmain(){//if(on==0){
/****************大循环*******************/
WDT=0x34;
initial();
while
(1){
counter=temp;
status1();
//WDT=0x37;
counter=temp;
status2();
//WDT=0x37;
}}
/*************初始化函数**********/
voidinitial(){
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;
TR0=1;
EX0=1;
IT0=1;//边沿触发
temp=60;
a=0;
}
/***************状态函数1*************/
voidstatus1(){
A_1=1;B_1=1;
while(counter){
if(temp==60){
number1=0;busy1=1;special1=1;}
else{if(temp==30){
number1=1;busy1=0;special1=1;}
else{if(temp==20){
number1=1;busy1=1;special1=0;}}
}
display();
if(a==1){
A_0=0;A_2=1;
B_0=0;B_2=1;}
else{
A_0=0;A_2=1;//东西行,南北断
B_0=1;B_2=0;}//东西断,南北行
if(counter==3){
if(i<=10){
B_1=0;
A_1=0;}
else{B_1=1;A_1=1;}}
if(counter==2){
if(i<=10){B_1=0;A_1=0;}
else{B_1=1;A_1=1;}}
if(counter==1){
if(i<=10){B_1=0;A_1=0;}
else{B_1=1;A_1=1;}}
if(a==1&counter==0){temp=60;a=0;}
}
}
/***************状态函数1*************/
voidstatus2(){
A_1=1;B_1=1;
while(counter){
if(temp==60){
number1=0;busy1=1;special1=1;}
else{if(temp==30){
number1=1;busy1=0;special1=1;}
else{if(temp==20){
number1=1;busy1=1;special1=0;}}
}
display();
if(a==1){
A_0=0;A_2=1;
B_0=0;B_2=1;}
else{
A_0=1;A_2=0;//东西行,南北断
B_0=0;B_2=1;}//东西断,南北行
if(counter==3){
if(i<=10){
B_1=0;
A_1=0;}
else{B_1=1;A_1=1;}}
if(counter==2){
if(i<=10){B_1=0;A_1=0;}
else{B_1=1;A_1=1;}}
if(counter==1){
if(i<=10){B_1=0;A_1=0;}
else{B_1=1;A_1=1;}}
if(a==1&counter==0){temp=60;a=0;}
}
}
/***************延时函数*****************/
voiddelay(uinttime){
uinta;
for(;time>0;time--)
for(a=10;a>0;a--);
}
/**************定时器中断0*****************/
voidtimer()interrupt1{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==20){
counter--;
WDT=0x34;
i=0;
shi=counter/10;
ge=counter%10;}}
/***************外部中断0****************/
voidEXTR0()interrupt0{
if(number==0){
temp=60;}
if(busy==0){
temp=30;}
if(special==0){
temp=20;
counter=temp;
number1=1;busy1=1;special1=0;
a=1;
}
}
实验结论(心得体会)
此次课程设计我们小组选定的课题是临时交通灯,刚开始的时候,几乎没有一点头绪,不知从何下手,可是真正完成了之后,觉得其实也并不是特别困难,只要找到线头,顺着它一步步往下走,就可以顺利到达终点。
通过这一学期对单片机的学习,已经对单片机有了基本的了解,但那要说真正理解,我觉得差的还不是一点点,毫无疑问,这次的设计就给了我们一个深入学习。
在确定了设计题目为交通灯后,我便跑到图书馆搜索了有关课程设计的参考资料,并且同时去同学请教了一些关于单片机的知识,几天后给跟据我自己的想法画出了控制系统的电路原理图,在我和我们组的另外一个同学的商讨及修改后最终确定了我们本次设计的硬件电路图。
这次课程设计还是让我收获挺多的不管是软件,硬件还是团结协作方面。
当然,任何事情都不是一次就能成功的,必须经过多次的尝试并改善才能得到最好的。
在这次设计中,我们也不可避免的遇到了同样的问题,虽然我们的作品很简单,扩展功能也不多,也许在所有同学的作品里面并不是很惊艳,但不管如何,这是我们通过自己的努力做出来的,我们也收获了自己想要的,不管最终的成绩如何,我们知道自己努力过了就好了。
总之,通过这次课程设计,我学到了很多东西,对单片机及其应用有了更深的了解,,这次课程设计对我们团队来说获益匪浅,通过亲自动手设计,使我们学会了很多以前没弄懂的理论知识,,还学会了几个软件,像Keilu4,Proteus等,也使我了解到单片机的实用价值,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 交通灯 推荐 文档