51单片机红绿灯课程设计.docx
- 文档编号:10478798
- 上传时间:2023-02-13
- 格式:DOCX
- 页数:13
- 大小:234.03KB
51单片机红绿灯课程设计.docx
《51单片机红绿灯课程设计.docx》由会员分享,可在线阅读,更多相关《51单片机红绿灯课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
51单片机红绿灯课程设计
1 电源提供方案
为使模块稳定工作,须有可靠电源。
因此考虑了两种电源方案:
方案一:
采用独立的稳压电源。
此方案的优点是稳定可靠,且有各种成熟 电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。
方案二:
采用单片机控制模块提供电源。
改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
综上所述,选择方案二。
2 显示界面方案
该系统要求完成倒计时功能。
基于上述原因,我考虑了二种方案:
方案一:
采用数码管显示。
这种方案只显示有限的符号和数码字符,简单,方便。
方案二:
采用点阵式LED 显示。
这种方案虽然功能强大,并可方便的显示各种英文字符,汉字,图形等,但实现复杂,成本较高。
综上所述,选择方案一。
3 输入方案:
、
设计要求系统能调节灯亮时间,并可处理紧急情况,我研究了两种方案:
方案一:
采用8155扩展I/O 口及键盘,显示等。
该方案的优点是:
使用灵活可编程,并且有RAM,及计数器。
若用该方案,可提供较多I/O 口,但操作起来稍显复杂。
方案二:
直接在I/O口线上接上按键开关。
由于该系统对于交通灯及数码管的控制,只用单片机本身的I/O 口就可实现,且本身的计数器及RAM已经够用。
综上所述,选择方案二。
单片机交通控制系统的通行方案设计
设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。
其具体状态如下图所示。
说明:
黑色表示亮,白色表示灭。
交通状态从状态1开始变换,直至状态6然后循环至状态1,周而复始,即如图所示:
;
图1 交通状态
本系统采用MSC-51系列单片机AT89C51作为中心器件来设计交通灯控制器。
实现以下功能:
初始东西绿灯亮,南北红灯亮,东西路口车通行,时隔24s,黄灯闪烁6次。
之后,南北绿灯亮,东西红灯亮,方向开始通车,时隔24s,南北黄灯闪烁6次,然后又切换成东西方向通车,如此重复。
当发生交通意外(中断产生)时,全部亮红灯,进行交通事故的处理。
当事故处理完毕(再次按中断键),重新按上述方式工作。
当南北路口的流量大时,可以增加南北路口亮绿灯的时间,当东西路口的流量大时,可以增加东西路口亮绿灯的时间,结束后调回正常状态。
下面我们可以用图表表示灯状态和行止状态的关系如下
;
东西南北四个路口均有红绿黄3灯和数码显示管2个,在任一个路口,遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换。
状态及红绿灯状态如表1所示。
说明:
0表示灭,1表示亮。
单片机智能交通灯控制系统的基本构成及原理
单片机设计智能交通灯控制系统,可用单片机直接控制交通信号灯的状态变化,实现倒计时、紧急情况处理与时间调整等功能。
据此,本设计系统以单片机为控制核心,连接成最小系统,由按键设置模块产生输入,信号灯状态模块、LED倒计时模块接受输出。
系统的总体框图如上所示。
单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。
在此过程中随时通过键盘调用急停按键和时间调节中断。
交通灯系统硬件设计
此设计采用的是AT89C51单片机为内部控制芯片,外部接有按键中断电路以及复位电路以外,还有4个两位数码管,用以倒计时和4个路口的灯,共12个LED灯。
(
四川信息职业技术学院毕业设计说明书(论文)
第
页 5
第二章 交通灯系统硬件设计
此设计采用的是AT89C51单片机为内部控制芯片,外部接有按键中断电路以及复位电路以外,还有4个两位数码管,用以倒计时和4个路口的灯,共12个LED灯。
系统框架图
电路板一块,AT89S51单片机一片,八段LED数码管四个。
发光二极管12个(4个绿的,4个红,4个黄的),8个电阻,2个电容,1个晶振,1个电解电容,1个按键开关。
(系统结构框图:
图)
~
MSC-51芯片简介
MCS-51单片机内部结构
8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
·中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
·数据存储器(RAM)
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
,
LED显示数码管
八段LED显示器由八个发光二极管组成。
其中7个长条形的发光管排列成“日”字形,另一个圆点形的放光管在显示器的右下角作为显示小数点用,它能显示各种数字及部分英文字母。
LED显示器有两种不同的形式:
一种是8个发光二极管的阳极都连在一起的,称为共阳极LED显示器如图2-2所示;另一种是8个发光二极管的阴极都连在一起的,称为共阴极LED显示器
晶体振荡器
石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整,作用是为系统提供基本的时钟信号。
我们在晶体某一方向加一电场,从而在与此垂直的方向产生机械振动,有了机械振动,就会在相应的垂直面上产生电场,从而使机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限制时,才达到最后稳定,这种压电谐振的频率即为晶体振荡器的固有频率。
附录
·
原程序代码
#include<>
#define uint unsigned int//宏定义
#define uchar unsigned char//宏定义
uchar aa,cc,NBshi,NBge,DXshi,DXge,NBtemp,DXtemp;//定义变量
sbit NBR=P3^0;//南北红灯
sbit NBY=P3^1;//南北黄灯
sbit NBG=P3^4;//南北绿灯
)
sbit DXY=P3^5;//东西黄灯
sbit DXG=P3^6;//东西绿灯
sbit DXR=P3^7;//东西红灯
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f}; //数字的代码从0-9
]
//数字的代码从0-9
void init();//初始化子程序的申明
void displayNB(uchar NBshi,uchar NBge);//显示子程序的申明 void delay(uint z);//延时子程序的申明
void fenjieNB();//南北数码管显示数字的分解函数 void fenjieDX();//东西数码管显示数字的分解函数
void main()
void init();//初始化子程序的申明
void displayNB(uchar NBshi,uchar NBge);//显示子程序的申明
void delay(uint z);//延时子程序的申明
&
void fenjieNB();//南北数码管显示数字的分解函数
void fenjieDX();//东西数码管显示数字的分解函数
void main()
{
init();//初始化子程序 while
(1) {
if(cc==82)//循环一次结束 { cc=0;//从新进行下一次循环
}
}
]
void delay(uint z)//带参数的延时函数
void delay(uint z)//带参数的延时函数
{ uchar x,y;//定义两个变量 for(x=z;x>0;x--)//循环延时
for(y=110;y>0;y--);//循环延时
}
void init()//初始化子程序 { EA=1;//开总中断
ET0=1;//允许定时器0中断 EX0=1;//允许外部中断0中断 TR0=1;//启动定时器0
TMOD=0x01;//设置定时器0工作方式1
@
TH0=(65536-50000)/256;//给定时器的高8为赋初值
TL0=(65536-50000)%256;//给定时器的低8为赋初值
}
void fenjieNB()//南北数码管显示数字的分解函数
{ NBshi=NBtemp/10;//将要显示的时间的十位赋给变量
NBge=NBtemp%10;//将要显示的时间的个位赋给变量
NBtemp--;
}
…
void fenjieDX()//东西数码管显示数字的分解函数
{ DXshi=DXtemp/10; DXge=DXtemp%10; DXtemp--;
}
void displayNB(uchar NBshi,uchar NBge)//带参数的数码管显示函数
{
//显示南北十位 P2=0xfe;
^
P0=table[NBshi];
delay(5);
//显示南北个位
P2=0xfd;
P0=table[NBge];
delay(15);
}
void displayDX(uchar DXshi,uchar DXge) {
。
//东西十位
P2=0xfb;
P1=table[DXshi];
delay(5);
//东西个位
P2=0xf7;
P1=table[DXge];
delay(5);
、
}
void timer0() interrupt 1//定时器0的中断函数
{
TH0=(65536-50000)/256;//重装计数初值
TL0=(65536-50000)%256;//重装计数初值
aa++;
if(aa==20)//判断定时1分钟是否到
{
,
aa=0;//计数次数清0
if(cc==0)//南北亮红灯40秒,东西亮黄灯5秒
{
DXY=0;//东西的黄灯亮
DXG=1;//东西的绿灯不亮
DXR=1;//东西的红灯不亮
NBY=1;//南北的黄灯不亮
NBG=1;//南北的绿灯不亮
*
NBR=0;//南北的红灯亮
DXtemp=5;//东西的黄灯亮5秒
NBtemp=40;//南北的红灯亮40秒
}
else if(cc==6)//南北继续亮红灯40秒,东西亮绿灯34秒
{
DXY=1;//东西的黄灯不亮
DXG=0;//东西的绿灯亮
(
DXR=1;//东西的红灯不亮
NBY=1;//南北的黄灯不亮
NBG=1;//南北的绿灯不亮
NBR=0;//南北的红灯亮
DXtemp=34;//东西的绿灯亮34秒
}
else if(cc==41)//南北亮黄灯5秒,东西亮红灯40秒
{
(
DXY=1;//东西的黄灯不亮
DXG=1;//东西的绿灯不亮
DXR=0;//东西的红灯亮
NBY=0;//南北的黄灯亮
NBG=1;//南北的绿灯不亮
NBR=1;//南北的红灯不亮
NBtemp=5;//南北的黄灯亮5秒
DXtemp=40;//东西的红灯亮40秒
!
}
else if(cc==47)//南北亮绿灯34秒,东西继续亮红灯40秒 {
DXY=1;//东西的黄灯不亮
DXG=1;//东西的绿灯不亮
DXR=0;//东西的红灯亮
NBY=1;//南北的黄灯不亮
NBG=0;//南北的绿灯亮
NBR=1;//南北的红灯不亮
》
NBtemp=34;//南北的绿灯亮34秒
DXtemp=34;//东西的红灯亮40秒
}
fenjieNB();//调用南北分解函数
fenjieDX();//调用东西分解函数
cc++;//判断亮灯的变量自加1
}
displayNB(NBshi,NBge);//调用NB红灯40秒的显示程序
displayDX(DXshi,DXge);//调用DX黄灯5秒的显示程序
}
void JJZD() interrupt 0 //紧急中断程序,南北东西都亮红灯
{
DXY=1;//东西的黄灯不亮
DXG=1;//东西的绿灯不亮
DXR=0;//东西的红灯亮
NBY=1;//南北的黄灯不亮
NBG=1;//南北的绿灯不亮
NBR=0;//南北的红灯亮
displayNB(0,0);//南北数码管都显示0
displayDX(0,0);//东西数码管都显示0
cc=0;//重最开始显示
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 红绿灯 课程设计