3986.net
小网站 大容量 大智慧
当前位置:首页 >> 天文/地理 >>

51单片机红绿灯课程设计

1 电源提供方案 为使模块稳定工作,须有可靠电源。因此考虑了两种电源方案: 方 案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成 熟 电路可供选用;缺点是各模块都采用独立电源,会使系统复杂, 且可能影响电路电平。 方案二:采用单片机控制模块提供电源。改方案的优点是系统简明扼 要,节约成本;缺点是输出功率不高。 综上所述,选择方案二。 2 显示界面方案 该系统要求完成倒计时功能。基于上述原因,我考虑了二种方案: 方案一:采用数码管显示。这种方案只显示有限的符号和数码字符, 简单,方便。 方案二:采用点阵式 LED 显示。这种方案虽然功能强 大,并可方便的显示各种英文字符,汉字,图形等,但实现复杂,成 本较高。 综上所述,选择方案一。 3 输入方案: 设计要求系统能调节灯亮时间,并可处理紧急情况,我研究了两种方 案: 方案一:采用 8155 扩展 I/O 口及键盘,显示等。 该方案的优点是:使用灵活可编程,并且有 RAM,及计数器。若用该 方案,可提供较多 I/O 口,但操作起来稍显复杂。 方案二: 直接在 I/O 口线上接上按键开关。 由于该系统对于交通灯及数码管的控制,只用单片机本身的 I/O 口就 可实现,且本身的计数器及 RAM 已经够用。

综上所述,选择方案二。 3.1 单片机交通控制系统的通行方案设计 设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行, 另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方 向对换。其具体状态如下图所示。说明:黑色表示亮,白色表示灭。 交通状态从状态 1 开始变换,直至状态 6 然后循环至状态 1,周而复 始,即如图 2.1 所示:
图 1 交通状态 本系统采用 MSC-51 系列单片机 AT89C51 作为中心器件来设计交通灯 控制器。 实现以下功能:

初始东西绿灯亮,南北红灯亮,东西路口车通行,时隔 24s,黄灯 闪烁 6 次。之后,南北绿灯亮,东西红灯亮,方向开始通车,时隔 24s,南北黄灯闪烁 6 次,然后又切换成东西方向通车,如此重复。
当发生交通意外(中断产生)时,全部亮红灯,进行交通事故的处理。 当事故处理完毕(再次按中断键),重新按上述方式工作。
当南北路口的流量大时,可以增加南北路口亮绿灯的时间,当东 西路口的流量大时,可以增加东西路口亮绿灯的时间,结束后调回正 常状态。 下面我们可以用图表表示灯状态和行止状态的关系如下
东西南北四个路口均有红绿黄 3 灯和数码显示管 2 个,在任一个路口, 遇红灯禁止通行,转绿灯允许通行,之后黄灯亮警告行止状态将变换。 状态及红绿灯状态如表 1 所示。说明:0 表示灭,1 表示亮。 3.3 单片机智能交通灯控制系统的基本构成及原理 单片机设计智能交通灯控制系统,可用单片机直接控制交通信号灯的 状态变化,实现倒计时、紧急情况处理与时间调整等功能。

据此,本设计系统以单片机为控制核心,连接成最小系统,由按键设 置模块产生输入,信号灯状态模块、LED 倒计时模块接受输出。系统 的总体框图如上所示。 单片机上电后,系统进入正常工作状态,执行交通灯状态显示控制, 同时将时间数据倒计时输入到 LED 数码管上实时显示。在此过程中随 时通过键盘调用急停按键和时间调节中断。 交通灯系统硬件设计 此设计采用的是 AT89C51 单片机为内部控制芯片,外部接有按键中断 电路以及复位电路以外,还有 4 个两位数码管,用以倒计时和 4 个路 口的灯,共 12 个 LED 灯。
四川信息职业技术学院毕业设计说明书(论文) 第 页5 第二章 交通灯系统硬件设计 此设计采用的是 AT89C51 单片机为内部控制芯片,外部接有按键中断 电路以及复位电路以外,还有 4 个两位数码管,用以倒计时和 4 个路

口的灯,共 12 个 LED 灯。 2.1 系统框架图 电路板一块,AT89S51 单片机一片,八段 LED 数码管四个。发光二极 管 12 个(4 个绿的,4 个红,4 个黄的),8 个电阻,2 个电容,1 个晶振,1 个电解电容,1 个按键开关。(系统结构框图:图 2.1)
2.3.1 MSC-51 芯片简介 MCS-51 单片机内部结构 8051 是 MCS-51 系列单片机的典型产品,我们以这一代表性的机型进 行系统的讲解。 8051 单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、 定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总 线、地址总线和控制总线等三大总线,现在我们分别加以说明: ·中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是 8 位数据宽度的处理 器,能处理 8 位二进制数据或代码,CPU 负责控制、指挥和调度整个 单元系统协调的工作,完成运算和控制输入输出功能等操作。

·数据存储器(RAM) 8051 内部有 128 个 8 位用户数据存储单元和 128 个专用寄存器单元, 它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只 能访问,而不能用于存放用户数据,所以,用户能使用的 RAM 只有 128 个,可存放读写的数据,运算的中间结果或用户定义的字型表。
2.3.2 LED 显示数码管 八段 LED 显示器由八个发光二极管组成。其中 7 个长条形的发光管排 列成“日”字形,另一个圆点形的放光管在显示器的右下角作为显示 小数点用,它能显示各种数字及部分英文字母。LED 显示器有两种不 同的形式:一种是 8 个发光二极管的阳极都连在一起的,称为共阳极 LED 显示器如图 2-2 所示;另一种是 8 个发光二极管的阴极都连在一 起的,称为共阴极 LED 显示器 3.3 晶体振荡器 石英晶体振荡器的特点是振荡频率准确、电路结构简单、频率易调整, 作用是为系统提供基本的时钟信号。我们在晶体某一方向加一电场,

从而在与此垂直的方向产生机械振动,有了机械振动,就会在相应的 垂直面上产生电场,从而使机械振动和电场互为因果,这种循环过程 一直持续到晶体的机械强度限制时,才达到最后稳定,这种压电谐振 的频率即为晶体振荡器的固有频率。
附录 原程序代码 #include<reg51.h> #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;//重最开始显示 }


网站首页 | 网站地图 | 学霸百科 | 新词新语
3986 3986.net
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com