模拟交通控制灯设计Word格式文档下载.docx

上传人:b****2 文档编号:15163656 上传时间:2022-10-28 格式:DOCX 页数:14 大小:202.35KB
下载 相关 举报
模拟交通控制灯设计Word格式文档下载.docx_第1页
第1页 / 共14页
模拟交通控制灯设计Word格式文档下载.docx_第2页
第2页 / 共14页
模拟交通控制灯设计Word格式文档下载.docx_第3页
第3页 / 共14页
模拟交通控制灯设计Word格式文档下载.docx_第4页
第4页 / 共14页
模拟交通控制灯设计Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

模拟交通控制灯设计Word格式文档下载.docx

《模拟交通控制灯设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《模拟交通控制灯设计Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

模拟交通控制灯设计Word格式文档下载.docx

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:

A通行,B禁止

0,1交替变换

EB

状态2:

A绿灯闪,B禁止

状态3:

A警告,B禁止

DE

状态4:

A禁,B通

状态5:

A禁,B闪

DD

状态6:

A禁,B警告

2、函数流程图

四、硬件电路图

五、源程序

#include<

reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

ucharDispX[]={0xfb,0xf3,0xfb,0xeb,0xde,0xdf,0xde,0xdd};

voidAFangXing(void);

//函数声明

voidShanShuo(uchar*PTR);

voidJingGao(uchar*PTR);

voidBFangXing(void);

voiddelay_5ms(void)//5ms定时

{

uchari;

for(i=0;

i<

5;

i++)//T0方式1,定时1毫秒,循环5次即实现5毫秒定时

TH0=0xfc;

TL0=0x18;

TR0=1;

//T/C0开始工作

while(!

TF0);

TF0=0;

}

voidint_0()interrupt0

uinti,x,y,l,m;

EA=0;

//关中断

i=P1;

l=TH1;

m=TL1;

EA=1;

P1=0xdb;

for(x=10;

x>

0;

x--){

for(y=100;

y>

y--){

P2=0xf5;

P0=led[x%10];

delay_5ms();

P2=0xfa;

P0=led[x/10];

//紧急情况倒计时

EA=0;

P1=i;

TH1=l;

TL1=m;

EA=1;

voidint_1()interrupt2//特殊情况中断

{

uinti,l,m,x,y;

i=P1;

l=TH1;

m=TL1;

P1=0xF3;

for(x=10;

for(y=100;

P2=0xf5;

P0=led[x%10];

delay_5ms();

P2=0xfa;

P0=led[x/10];

//特殊情况倒计时

}

voidmain()//主函数

uchar*PTR=&

DispX;

TMOD=0x21;

//工作方式寄存器TMOD用于选择定时器/计数器的工作模式和工作方式,由TMOD可知,定时器T1工作在方式2,定时器T0工作在方式1

TH1=0xf4;

//由波特率为2400kb/s,晶体频率为11.0592MHz,可知定时器T1的初值,又因为定时器T1采用方式2,8位初值自动重装入的8位定时器/计数器,故TH1,TL1初值相同

TL1=0xf4;

TR0=1;

TR1=1;

SCON=0x50;

//SCON为串行口控制寄存器,采用方式1,允许串行接收

PCON=0x00;

//设置波特率SMOD

IE=0x95;

//IE为中断允许寄存器,允许串行口中断,允许外部中断1中断,允许外部中断0中断

IP=0x11;

//串行口中断、外部中断0设定为高优先级中断

IT0=1;

//外部中断0的中断请求信号为边沿触发(下降沿有效)

IT1=1;

//外部中断1的中断请求信号为边沿触发(下降沿有效)

while

(1){

AFangXing();

//A道绿灯B道红灯

ShanShuo(PTR);

//A绿灯闪烁2次,B道红灯

ShanShuo(++PTR);

JingGao(++PTR);

//A道黄灯B道红灯

BFangXing();

//B道绿灯A道红灯

//B绿灯闪烁2次,A道红灯

//B道黄灯A道红灯

PTR=&

voidAFangXing(void)

uchari,j;

P1=0xf3;

//A道绿灯B道红灯

for(i=55;

i>

i--)

for(j=50;

j>

j--)

P2=0xfd;

P0=led[i%10];

//显示A方向秒个位

P2=0xfe;

P0=led[i/10];

//显示A方向秒十位

P2=0xf7;

P0=led[(i+5)%10];

//显示B秒个位

P2=0xfb;

P0=led[(i+5)/10];

//显示B秒十位

voidShanShuo(uchar*PTR)

for(i=1;

i--)

P1=*PTR;

for(j=25;

{

//显示B方向个位

//显示B方向十位

voidJingGao(uchar*PTR)

for(i=2;

}

voidBFangXing(void)

P1=0xde;

//A道红灯B道绿灯

//显示B方向秒十位

voidserial()interrupt4

uchari;

if(RI==1)

RI=0;

if(SBUF==0x01)

SBUF=0x01;

while(!

TI);

TI=0;

i=P1;

P1=0xdb;

while(SBUF!

=0x02)

RI);

SBUF=0x02;

else

六、设计总结

本次实训运用Keil作为编译环境,用Proteus作为仿真软件。

然后将程序下载到自己焊接的硬件电路中。

由于Proteus软件功能的局限性,当仿真电路的数码管位选加上三极管作为驱动放大器时,数码管不能成功显示要显示的数,只显示8888或者9999这两个数,但为了与硬件电路一致,用Proteus仿真时改用非门代替三极管。

当老师给我们布置这个课程设计时,我感到无从下手,不知道该怎样写程序。

后来通过读老师的程序,慢慢明白了,知道了如何去做。

对于这样的课程设计,应该先用Proteus画出仿真电路,然后根据电路图编写程序。

通过编写程序,对单片机C语言有了更进一步的掌握。

经过本次设计对Keil和Proteus更加熟悉了。

在焊接电路的过程中,一定要注意:

不能虚焊,更不能连焊,对某个元件焊接时间不能太长,焊锡不要用太多,容易造成连焊。

电路上电前一定要仔细检查单片机等芯片是否装反,确认无误后再下载程序。

总的来说,通过本次课程设计,学到了很多知识,为以后再用单片机做电路时积累了经验。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1