硬件连基于AT89C51单片机的交通信号灯控制系统.docx
- 文档编号:26517948
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:18
- 大小:37.13KB
硬件连基于AT89C51单片机的交通信号灯控制系统.docx
《硬件连基于AT89C51单片机的交通信号灯控制系统.docx》由会员分享,可在线阅读,更多相关《硬件连基于AT89C51单片机的交通信号灯控制系统.docx(18页珍藏版)》请在冰豆网上搜索。
硬件连基于AT89C51单片机的交通信号灯控制系统
硬件连基于AT89C51单片机的交通信号灯控制系统
哦,第一次提问,问的太笼统了,我是电路硬件部分不会设计,请大家帮帮忙主要要求是
(1)以AT89C51为核心的交通信号灯控制系统的设计方案;
(2)根据设计方案绘制硬件原理图;
(3)根据硬件原理图绘制印刷电路板图(PCB);
,谢谢接图给了,是proteus仿真的,不过毕设没这么简单吧..难道主要是要你设计pcb,原理图没有,程序我有复制给你看看吧
仿真图的复位和晶振电路没截图,反正仿真的时候画布画都行
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitRED_A=P0^0;
sbitYELLOW_A=P0^1;
sbitGREEN_A=P0^2;
sbitRED_B=P0^3;
sbitYELLOW_B=P0^4;
sbitGREEN_B=P0^5;
ucharFlash_Count=0;
Operation_Type=1;
voidDelayMS(uintx)
{
uchart;
while(x--)
{
for(t=120;t>0;t--);
}
}
voidTraffic_lignt()
{
switch(Operation_Type)
{
case1:
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
DelayMS(2000);
Operation_Type=2;
break;
case2:
DelayMS(200);
YELLOW_A=~YELLOW_A;
if(++Flash_Count!
=10)
return;
Flash_Count=0;
Operation_Type=3;
break;
case3:
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
DelayMS(2000);
Operation_Type=4;
break;
case4:
DelayMS(200);
YELLOW_B=~YELLOW_B;
if(++Flash_Count!
=10)
return;
Flash_Count=0;
Operation_Type=1;
break;
}
}
voidmain()
{
while
(1)
{
Traffic_lignt();
}
}
一、设计目的:
在完成“单片机原理及应用”课程的学习后,通过设计小型的单片机应用系统,加深对所学知识的理解和提高单片机系统的设计能力。
二、设计任务和要求:
1、设计任务:
设计基于AT89C51单片机的十字路口交通灯控制电路。
2、具体要求:
(1)设计硬件电路,包括:
单片机最小系统、2位LED数码管显示器、3个按钮的键盘(SET、UP、DOWN)、12个led指示灯(红黄绿三种颜色,东西并联、南北并联),等。
(2)基本功能:
要求东西方向(A方向)车道和南北方向(B方向)车道两条交叉道路上的车辆交替通行,每次通行时间为N秒(红灯、绿灯亮的时间为N秒,N≤60S),可以设置。
在绿灯转为红灯时,要求黄灯先亮3秒(固定),才能交换运行车道。
剩余秒数显示:
2位LED数码管,倒计时方式:
(N+3)~1可选的扩展功能:
黄灯亮时,要求0.5s闪烁一次。
A方向、B方向的通行时间可以不同,如:
A方向通行50s,B方向通行30s。
#include
unsignedchartemp;
unsignedcharkey;
unsignedchari,j;
unsignedcharSTH0;
unsignedcharSTL0;
unsignedintcodetab[]={64021,64103,64260,64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178};
voidmain(void)
{
TMOD=0x01;
ET0=1;
EA=1;
while
(1)
{
P3=0xff;//将P3口取出
P3_4=0;//使P3_4为低电平,这样可以判断第一竖排有没有键按下
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)//有键按下
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);//延时
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)//再判断是否有键按下
{
temp=P3;
temp=temp&0x0f;
switch(temp)//判断是哪个键按下
{
case0x0e:
key=0;
break;
case0x0d:
key=1;
break;
case0x0b:
key=2;
break;
case0x07:
key=3;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
STH0=tab[key]/256;//找出键对应的频率的时间,作为定时器中断初始值
STL0=tab[key]%256;
TR0=1;
temp=temp&0x0f;
while(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
TR0=0;
}
}
P3=0xff;
P3_5=0;//跟上面差不多,现在是判断第二排的按键
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp)
{
case0x0e:
key=4;
break;
case0x0d:
key=5;
break;
case0x0b:
key=6;
break;
case0x07:
key=7;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp&0x0f;
while(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
TR0=0;
}
}
P3=0xff;
P3_6=0;
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp)
{
case0x0e:
key=8;
break;
case0x0d:
key=9;
break;
case0x0b:
key=10;
break;
case0x07:
key=11;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp&0x0f;
while(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
TR0=0;
}
}
P3=0xff;
P3_7=0;
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp)
{
case0x0e:
key=12;
break;
case0x0d:
key=13;
break;
case0x0b:
key=14;
break;
case0x07:
key=15;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp&0x0f;
while(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
TR0=0;
}
}
}
}
voidt0(void)interrupt1using0
{
TH0=STH0;
TL0=STL0;
P1_0=~P1_0;
}
思路:
红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。
四个方向各有一个红、黄、绿显示和两个数码管。
东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。
三、硬件电路设计
此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。
硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。
因此,可加输出锁存器。
在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。
四、软件程序(C语言)
以下是整个设计的软件程序,直接可以编译成*。
Hex代码。
通过以上电路,下载到单片机,可直接运行。
//*****************************//
//程序名:
十字路口交通灯控制
//编写人:
黄庭剑
//初写时间:
2009年1月2日
//程序功能:
南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.
//CPU说明:
AT89C51型单片机;24MHZ晶体振荡器
//完成时间:
2009年1月6日
//*****************************//
#include
#include
#include
sfrp0=0x80;
sfrp1=0x90;
sfrp2=0xA0;
sfrp3=0xb0;//这部分内容其实在“#include
其实两者是一样的。
sbitsw=p0^0;
sbitOE=P0^6;
sbitLE=P0^7;//74LS373锁存器控制端定义
chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;
//函数声明begin
voiddelay1(intcount);
voiddelay_long(intnumber1,intnumber2);
voidpeople_car_drive();
//函数声明end
//***********************//延时子程序
voiddelay1(intcount)
{inti;
for(i=count;i>0;i--)
{;}
}
voiddelay_long(intnumber1,intnumber2)
{
inta,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{_nop_();}
}
}
//**********************//延时子程序
voidpeople_car_drive()
{
intp_1=2,i,j=9,p_2=6;//****************//行人通行时,延时20秒
p2=0x09;//南北红灯亮
p3=0x24;//东西绿灯亮
while(p_1-->0)
{LE=1;
OE=0;
if(p_1==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break;//减到3时退出循环,让其黄灯闪烁显示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
//*******************************************************************************//
p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是车辆通行时延时60秒//
p2=0x24;//南北绿灯亮
p3=0x09;//东西红灯亮
while(p_2-->0)
{LE=1;
OE=0;
if(p_2==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break;//减到2时退出循环
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);//南北黄灯闪烁三秒完毕
}
voidmain()//主函数入口处
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00;//初始化各端口
{while
(1)
{
if(sw==0)
{people_car_drive();}
else
{
p2=0x00;
p3=0x00;//关闭所有交通灯}
参考:
1
|评论
.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬件 基于 AT89C51 单片机 交通 信号灯 控制系统
![提示](https://static.bdocx.com/images/bang_tan.gif)