单片机控制的交通灯控制系统课程设计Word格式.docx
《单片机控制的交通灯控制系统课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《单片机控制的交通灯控制系统课程设计Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
1、设计目的
单片机是一门专业基础课,是一门实践性很强的课程,单片机课程设计要求将所学的理论知识通过实践加强理解和认识,提高学生们的单片机接口电路的设计能力和实践动手能力。
二、设计要求
1、A道和B道上均有车辆要求通过时,A、B道轮流放行。
A道放行5分钟(调试时改为5秒钟),B道放行4分钟(调试时改为4秒钟);
2、一道有车而另一道无车(实验时用开关K0和K1控制),交通灯控制系统立即让有车道放行;
3、有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯,紧急车由K2开关模拟;
4、绿灯转换为红灯时黄灯亮1秒钟。
三、设计的总体结构
1、电路的总体原理框图
交
通
灯
AT89C51
时钟电路
LED
数
码
管
振荡电路
复位
电路
3、软件结构图:
2、工作原理
通过输入的程序控制单片机端口高低电平从而实现对二极管的亮灭的控制,其中也有定时器和中断的综合应用,中断:
当中断源发出中断请求时,如果允许的话,单片机暂时中止当时正在执行的主程序,转到中断服务处理程序处理中断服务请求,处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的程序;
定时器则是相当精确的计时器。
本设计使用的是定时器1,定时器T0是有特殊功能寄存器TH0、TH1构成;
通过工作方式寄存器TMOD选择定时器的工作方式,计算出初值并写入TH0、TH1,然后应用中断从而执行中断程序,首先要对IE赋值,开放中断,然后使TR0置位,启动定时器。
3、元器件名称
硬件名称
数量
AT89C51单片机
1
2KΩ电阻
4KΩ电阻
12M晶振
一位数码管
2
四脚USB接口
发光二极管
7
开关
5
30pF电容
10μF电容
排针
若干
四、各部分电路设计
4.1芯片介绍
AT89C51单片机引脚图如下:
图1AT89C51引脚图
AT89C51单片机是标准的40引脚双列直插式集成电路芯片,其各引脚功能可分为如下3大类:
1.电源引脚
电源引脚接入单片机的工作电源。
(1)VCC(40脚):
接+5V电源。
(2)VSS(20脚):
接地。
2.时钟引脚
该引脚外接晶体引线端。
3.控制引脚
此类引脚提供控制信号,有的引脚还有复用功能。
(1)RST(9脚):
复位信号输入端,高电平有效。
在此引脚加上持续时间大于2个机器周期的高电平,就可以是单片机复位。
在单片机正常工作时,此引脚应为<
0.5V的低电平。
(2)
/
(31脚):
为该引脚的第一功能,及外部程序存储器访问允许控制端。
当
引脚接高电平时,在PC值不超出0FFFH时,单片机读片内程序存储器中的程序;
当PC值超出时,将自动转向读取片外程序存储器空间中的程序。
引脚接高电平时,只读取片外程序存储器空间中的内容,读取的地址范围为0000H~FFFFH,片内的4KBFlash程序存储器不起作用。
为该引脚的第二功能,即在对片内Flash进行编程时,
引脚接入编程电压。
(3)ALE/
(30脚)ALE为CPU访问外部程序存储器或外部数据存储器提供一个地址锁存信号,将低8位地址锁存在片外地址锁存器中。
为该引脚的第二功能,即在对片内Flash进行编程时,此引脚作为编程脉冲输入端。
(4)
(29脚):
片外程序存储器的读选通信号,低电平有效。
4.2晶振电路
图2晶振电路
上图所示为时钟电路原理图,在AT89C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
4.3复位电路
单片机复位的条件是:
必须使RST(9脚)加上持续两个机器周期(即24个振荡周期)的高电平。
例如,若时钟频率为12MHz,每机器周期为1μs,则只需2μs以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。
单片机常见的复位如图所示。
图3 单片机复位电路
5、整体电路图
见附图
六、程序清单
用C51语言编写的单片机控制的交通灯控制系统程序如下:
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
voiddelay(uintz);
uintnum1,num2;
ucharcodetable[]=
{
~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F
};
//*********南北方向*****************
sbitSN_G=P1^0;
sbitSN_Y=P1^1;
sbitSN_R=P1^2;
//*********东西方向*****************
sbitEW_G=P1^3;
sbitEW_Y=P1^4;
sbitEW_R=P1^5;
//*********控制开关*****************
sbitSN_K=P3^0;
//南北通行
sbitEW_K=P3^1;
//东西通行
sbitSTOP_K=P3^2;
//全部都停
charT0_50ms,T_LOOP,t_ew,t_sn;
bitew;
//----------------------------------
voidinit()
{
TMOD=0x11;
TH0=(65536-50000)/256;
//50ms@12MHz
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
T_LOOP=0;
T0_50ms=0;
ew=1;
}
voidE_W(void)
EW_G=0;
EW_Y=1;
EW_R=1;
SN_G=1;
SN_Y=1;
SN_R=0;
voidS_N(void)
EW_G=1;
EW_R=0;
SN_G=0;
SN_R=1;
voidSTOP(void)
P0=0xFF;
P2=0xFF;
voidmain()
{
init();
while
(1){;
voidT0_INT(void)interrupt1using0
//重新写入初始值
T0_50ms++;
if(T0_50ms==20){
while(STOP_K==0)STOP();
while(EW_K==0){E_W();
P0=0xFF;
P2=0xFF;
while(SN_K==0){S_N();
if(ew)
{
P0=table[num1++];
if(num1==6)
{
num1=0;
}
t_ew++;
if(t_ew<
=4)E_W();
if(t_ew==5){E_W();
EW_Y=0;
if(t_ew==6){//时间比要求的大一些,便于观察比较
t_ew=0;
ew=0;
S_N();
}}
else{
P2=table[num2++];
if(num2==5)
{num2=0;
}
t_sn++;
if(t_sn<
=3)S_N();
//时间
if(t_sn==4){S_N();
SN_Y=0;
if(t_sn==5){//B道放行4分钟(调试时改为4秒钟)
t_sn=0;
E_W();
}}}
7、仿真结果说明
仿真结果如下图所示。
图5仿真结果
说明:
东西方向和南北方向各有红黄绿三个二极管代表三个交通灯,用三个开关模拟三种情况,开关一模拟南北方向有车而东西方向没车的情况,开关二模拟东西方向有车而南北方向没车的情况,开关三模拟紧急情况时两个路口都亮红灯的情况,程序运行后即可按要求呈现出结果,见实物。
八、设计总结体会
本次设计是我们将来必需的技能,这次课程设计恰恰给我们提供了一个应用自己所学知识的机会,从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,都对我所学的知识进行了检验。
在实习的过程中发现了所学的单片机的知识掌握的不牢。
同时在设计的过程中,遇到很多事前没想到的问题,例如开关的使用和线路的布局,没开始做的时候总以为就是焊一个板子,真真自己开始做才发现没有自己想象的那么简单,才发现这是对自己动手能力的一次检测,能够根据资料自己设计电路图,自己焊接板子,不仅是对自己知识的一次检测更是对自己综合能力的一次检验。
通过对焊接过程中遇到问题的解决学会了很多实践知识,例如如何用万用表检查线路是否正确、二极管的连接方法、开关的连接方法以及单片机最小系统的焊接方法。
同时在编写程序的时候,更是对自己所学知识的检测,如定时器的使用、中断的使用,这也是单片机学习中最重要的部分。
通过这次单片机课程设计,使自己在知识和动手能力方面都有了很大提高,也极大地提高了自己学习单片机的兴趣,相信这些都对自己以后的生活学习产生很大的帮助。
九、参考文献
《单片机原理及应用》张毅刚编著
《十天学会单片机》郭天祥著