- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
模拟交通控制灯设计.doc
交通灯远程控制灯的设计
一、总体设计
1、任务
交通灯的任务要求为:模拟十字路口的交通灯的亮、灭及闪烁控制及时间显示。.
基本工作原理:根据交通灯的亮灭情况,可以分为四种状态,利用定时计数器每5毫秒产生一次中断,完成对 LED显示模块的刷新,红绿灯的切换。
通过串口对交通灯进行远程控制,实现pc机和单片机之间的通信程序编写,学习单片机和pc机之间的串口连接方法和编程技巧。
2、要求
设计并实现单片机交通灯控制系统,实现以下三种情况下的交通灯控制。
正常情况下双方向轮流点亮。
特殊情况时A道运行。
有紧急车辆通行时,A B道均为红灯。紧急情况优先级高于特殊情况。
3、说明
本任务实现用pc机作为控制机、单片机控制信号灯为从机的远程控制系统。主从机双方除了要有一定的通信格式,波特率外,还要约定一些握手应答信号,即通信协议。
通信协议如下:
二、硬件设计
1、 根据总体设计要求,确定系统功能接口,设计出系统的电路原理图。
2、 若不考虑左行转弯,则南北方向只用红、绿、黄3只灯控制,东西方向也只用红、绿、黄3只灯控制,即共用6只灯。不必对单片机的I/O口进行扩展。
3、 4个共阳极数码管自右至左以两位数的形式显示秒数。为了保证数码管的亮度,必须保证输入电流的大小,因此,选用PNP型三极管作为位驱动放大器。如下图:
分析可知,三极管相当于反向器,数码管位选低电平有效。
4、按键模拟紧急情况和特殊情况的发生,当s1 、s2为高电平时(不按按键时)表示正常情况,当s1为低电平时表示紧急情况,s1信号接至INT0*引脚,s2为低电平时表示特殊情况, s2信号接至INT1*引脚(若为矩阵式键盘,可采用扫描方式识别按键)。
三、软件设计
1、根据图表可以画出各个函数流程图
P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P1端口数据 状态说明 A红灯 A黄灯 A绿灯 B红灯 B黄灯 B绿灯 F3 1 1 0 0 1 0 状态1:A通行,B禁止 1 1 0,1交替变换 0 1 1 EB 状态2:A绿灯闪,B禁止 1 0 1 0 1 1 状态3:A警告,B禁止 0 1 1 1 1 0 DE 状态4:A禁,B通 0 1 1 1 0,1交替变换 状态5:A禁,B闪 0 1 1 1 0 1 DD 状态6:A禁,B警告 2、函数流程图
四、硬件电路图
五、源程序
#include reg51.h
#define uchar unsigned char
#define uint unsigned int
uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar DispX[]={0xfb,0xf3,0xfb,0xeb,0xde,0xdf,0xde,0xdd};
void AFangXing(void); //函数声明
void ShanShuo(uchar *PTR);
void JingGao(uchar *PTR);
void BFangXing(void);
void delay_5ms(void) //5ms定时
{
uchar i;
for(i=0;i5;i++) //T0方式1,定时1毫秒,循环5次即实现5毫秒定时
{
TH0=0xfc;
TL0=0x18;
TR0=1; // T/C0开始工作
while(!TF0);
TF0=0;
}
}
void int_0() interrupt 0
{
uint i,x,y,l,m;
EA=0;//关中断
i=P1;
l=TH1;
m=TL1;
EA=1;
P1=0xdb;
for(x=10;x0;x--) {
for(y=100;y0;y--) {
P2=0xf5;
P0=led[x%10];
delay_5ms();
P2=0xfa;
P0=led[x/10];//紧急情况倒计时
delay_5ms();
}
}
EA=0;
P1=i;
TH1=l;
TL1=m;
EA=1;
}
void int_1() interrupt 2 //特殊情况中断
{
uint i,l,m,x,y;
EA=0;//关中断
i=P1;
l=TH1;
m=TL1;
EA=1;
P1=0xF3;
for(x=10;x0;x--) {
for(y=100;y0;y--) {
P2=0xf5;
P0=led[x%10];
delay_5ms();
P2=0xfa;
P0=led[x/10];//特殊情况倒计时
delay_5ms()
文档评论(0)