基于单片机控制的交通灯设计系统_基于单片机交通灯控制
基于单片机控制的交通灯设计系统由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基于单片机交通灯控制”。
基于单片机控制的交通灯设计系统
班级:
姓名:
学号:
第一章 概述 1.设计内容
本系统需要采用AT89C51单片机AT89C5中心器件来设计交通灯控制器,实现以下功能: 1.1初始东西绿灯亮,南北红灯亮,东西方向通车。1.2黄灯闪烁后,东西路口红灯亮同时南北路口绿灯亮,南北方向开始通车。1.3延时27s,南北方向绿灯灭,黄灯闪烁3次,然后又切换成东西方向通车,如此重复。
设计交通灯控制系统硬件电路与软件控制程序,对硬件电路与软件程序分别进行调试,并进行软硬件联调,要求获得调试成功的仿真图。2.设计目的2.1 了解交通灯管理的基本工作原理。2.2 熟悉AT89C51工作原理和应用编程。
2.3 熟悉AT89C51行接口的各种工作方式和应用。
2.4 熟悉AT89C51数器/定时器的工作方式和应用编程外部中断的方法。2.5 掌握多位LED显示问题的解决。3.设计原理
AT89C51片机具有控制二连体共阴极数码管和发光二极管的输出显示以及检测按键输入的功能。利用AT89C51片机模仿制作室外十字路口多功能交通灯,实现室内控制与室外显示的功能。合理控制交通繁忙,交通特殊情况和恢复交通正常的三种情况。
本设计用4个共阳极LED数码管的分别表示东、西、南、北四个方向路口,以数码管的上、中、下3个横段分别代表红、黄、绿3盏灯,用P0、P1口分别输出控制模拟交通灯的状态显示的数码管和倒计时显示数码管的状态码,P3^
1、P3^
2、P3^4-P3^7控制数码管的位选,P2^0-P2^4接收中断信号并反馈给INT0接口进行中断处理。
第二章 硬件设计
1.设计框图 如图2-1所示 此处要有文字说明
图2-1设计框图
2.元器件选择及其功能介绍
AT89C51是一种带4K字节LASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51片引脚图如下图2-2所示。
图2-2 AT89C51片引脚图
主要特性:
·与MCS-51 兼容
·4K字节可编程闪烁存储器 ·寿命:1000写/擦循环 ·数据保留时间:10年 ·全静态工作:0Hz-24MHz ·三级程序存储器锁定 ·128×8位内部RAM ·32可编程I/O线
·两个16位定时器/计数器,5个中断源 ·可编程串行通道
·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路 3.设计原理图
硬件电路图通过Proteus 仿真之后如图2-3所示,其中: 按钮K0连接P2^0端口实现红灯全亮,处理交通意外 按钮K1连接P2^1端口实现南北方向亮灯时间+1s 按钮K2连接P2^2端口实现南北方向亮灯时间-1s 按钮K3连接P2^3端口实现东西方向亮灯时间+1s 按钮K4连接P2^4端口实现东西方向亮灯时间-1s
图2-3整体连接电路原理图第三章 软件设计
1.各个程序段介绍 1.1数码管显示
void Display(uchar j)//j控制显示table中连续位的起始点 { char h,l;if(j
{
h=Time_EW/10;//EW通行时间十位
l=Time_EW%10;//EW通行时间个位
} else if(j
h=Time_SN/10;//SN通行时间十位
l=Time_SN%10;//SN通行时间个位
} for(i=0;i
{
P0=table1[j];//通行状况显示
P3=tab[i];//位选显示
i++;
j++;
if(i%2)//两位计时显示
{
P1=table[l];
Delay(400);
}
else
{
P1=table[h];
Delay(400);
} } Delay(5);} 1.2 INT0外部中断服务程序
void EXINT0(void)interrupt 0//INT0外部中断 { EX0=0;//关中断
if(Busy_Button==0){
P0=0xFE;//意外按钮按下全显示红灯
for(;Busy_Button!=1;)//意外按钮弹起时恢复之前状态
Display(24);} /*四个时间控制按钮分别控制SN、EW方向初始通行时间加减,最长不超过s,最少不低于s*/ if(SN_Add==0)//SN+1 {
SN1+=1;
if(SN1>99)
SN1=99;} if(SN_Red==0)//SN-1 {
SN1-=1;
if(SN1
SN1=20;} if(EW_Add==0)//EW+1 {
EW1+=1;
if(EW1>99)
EW1=99;} if(EW_Red==0)//EW-1 {
EW1-=1;
if(EW1
EW1=20;} EX0=1;//开中断 } 1.3延时子程序
void Delay(uchar a)//循环a次 { uchar x;x=a;while(x--){;} } 2.程序
#define uchar unsigned char #include uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};uchar code table1[28]={0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF,0xFE, 0xFE,0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF, 0xFE,0xFE,0xFE,0xFE};uchar code tab[4]={0x1E,0x2D,0x4E,0x8D};uchar EW=30,SN=30,EW1=30,SN1=30;uchar count;uchar i,j;sbit Busy_Button=P2^0;sbit SN_Add=P2^1;sbit SN_Red=P2^2;sbit EW_Add=P2^3;sbit EW_Red=P2^4;char Time_EW;char Time_SN;void Delay(uchar a){
uchar x;x=a;while(x--){;} } void Display(uchar j){ char h,l;if(j
h=Time_EW/10;
l=Time_EW%10;} else if(j
h=Time_SN/10;
l=Time_SN%10;} for(i=0;i
P0=table1[j];
P3=tab[i];
i++;
j++;
if(i%2)
{
P1=table[l];
Delay(400);
}
else
{
P1=table[h];
Delay(400);
} } Delay(5);} void EXINT0(void)interrupt 0 { EX0=0;if(Busy_Button==0){
P0=0xFE;
for(;Busy_Button!=1;)Display(24);} if(SN_Add==0){
SN1+=1;
if(SN1>99)
SN1=99;} if(SN_Red==0){
SN1-=1;
if(SN1
SN1=20;} if(EW_Add==0){
EW1+=1;
if(EW1>99)
EW1=99;} if(EW_Red==0){
EW1-=1;
if(EW1
EW1=20;} EX0=1;
} void timer0(void)interrupt 1 using 1 { TH0=0x3C;TL0=0xB0;count++;if(count==20){
Time_EW--;
Time_SN--;
count=0;} } 第四章 仿真结果及其总结
1.仿真结果图
1.1正常状态的仿真结果如图4-1所示
图4-1正常状态
1.2黄灯状态的仿真结果如图4-2所示
图4-2黄灯状态
1.3紧急状态的仿真结果如图4-3所示
图4-3 紧急状态
1.4延长通行时间的仿真结果如图4-4所示
图4-4延长通行时间
2.总结
通过这次交通灯的课程设计,使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。
通过这次交通灯的课程设计,使我了解了写毕业设计的流程和方法。为自己以后的毕业论文的设计做一次练习,具有积极的意义。还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能力得到了很好锻炼,能够为我们以后的工作于学习打下基础。
由于本人的水平有限,设计中难免会有一些不合理的部分,系统的稳定性还有待提高,望批评更正。