
基于单片机的交通灯模拟控制系统设计...带个proteus仿真图吧 谢谢啦 打包发我邮箱里也行874974405@qq.com
总体设计提纲1.交通控制系统至少应包括由电源电路、单片机主控电路、报警电路、键盘控制电路和显示电路等;2.以C51单片机为核心芯片,通过控制三色LED的亮灭来控制各干道的...
总体设计提纲
1.交通控制系统至少应包括由电源电路、单片机主控电路、报警电路、键盘控制电路和显示电路等;
2.以C51单片机为核心芯片,通过控制三色LED的亮灭来控制各干道的通行;
3.显示主要是采用两位的数码管进行计数显示;
4.在紧急情况下峰鸣器提示。
二、技术和量化要求
1.正常情况下交叉路口的轮流通行(主道3个LED红、黄、绿控制直行,支道3个LED红、黄、绿);并要求主干道每次至少放行30秒;支干道每次至多放行20秒;
2.每次绿灯变红灯,要求黄灯先亮5秒钟。
3.特殊情况控制通行方式控制,用按键开关K1控制主道通行,支道禁行,K2控制支道通行,主道禁行,特殊情况控制通行放行。
4.有紧急情况时用按键开关K0控制两道均为红灯;
5.4位LED数码管能够显示双直行方向绿灯和红灯的等待时间;
6.软件采用单片机C程序设计,能够在proteus仿真通过。
不好意思没有财富值了
有没有人编程不要钱呐??????帮个忙写写啦 展开
1.交通控制系统至少应包括由电源电路、单片机主控电路、报警电路、键盘控制电路和显示电路等;
2.以C51单片机为核心芯片,通过控制三色LED的亮灭来控制各干道的通行;
3.显示主要是采用两位的数码管进行计数显示;
4.在紧急情况下峰鸣器提示。
二、技术和量化要求
1.正常情况下交叉路口的轮流通行(主道3个LED红、黄、绿控制直行,支道3个LED红、黄、绿);并要求主干道每次至少放行30秒;支干道每次至多放行20秒;
2.每次绿灯变红灯,要求黄灯先亮5秒钟。
3.特殊情况控制通行方式控制,用按键开关K1控制主道通行,支道禁行,K2控制支道通行,主道禁行,特殊情况控制通行放行。
4.有紧急情况时用按键开关K0控制两道均为红灯;
5.4位LED数码管能够显示双直行方向绿灯和红灯的等待时间;
6.软件采用单片机C程序设计,能够在proteus仿真通过。
不好意思没有财富值了
有没有人编程不要钱呐??????帮个忙写写啦 展开
2个回答
展开全部
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit R1=P2^0; //东西红灯
sbit Y1=P2^1; //东西黄灯
sbit G1=P2^2; //东西绿灯
sbit R2=P2^3; //南北红灯
sbit Y2=P2^4; //南北黄灯
sbit G2=P2^5; //南北绿灯
sbit Z1=P2^6; //南北人行道绿灯
sbit Z2=P2^7; //东西人行道绿灯
sbit K0=P3^0; //全部禁行开关
sbit K1=P3^2; //主干道通行开关
sbit K2=P3^3; //支道通行开关
sbit JG=P3^6; //全部禁行警报
uchar a=0,m,k,h;
uchar code dis[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff}; //断码
void delay(uchar x) //延时
{
uchar j;
while(x--)
for(j=0;j<120;j++);
}
xianshi() //显示部分
{
while(1)
{
while(1)
{
G1=1;R1=0;Y1=1;JG=0;
G2=0;R2=1;Y2=1;Z2=0;Z1=1;
k=35;h=30;
while(1) //主干道通行35s
{
if(K0==0) break; //判断K0是否被按下,如果按下跳出本循环
P0=0x01;
P1=dis[k/10];
delay(2);
P0=0x02;
P1=dis[k%10];
delay(2);
P0=0x04;
P1=dis[h/10];
delay(2);
P0=0x08;
P1=dis[h%10];
delay(2);
if(k==0) break;
if(h==0)
{h=5;G2=1;R2=1;Y2=0;}
}
if(K0==0) break; //再判断一次K0,跳出本循环
G1=0;R1=1;Y1=1;JG=0;
G2=1;R2=0;Y2=1;Z2=1;Z1=0;
k=20;h=25;
while(1) //支道通行25s
{
if(K0==0) break;
P0=0x01;
P1=dis[k/10];
delay(2);
P0=0x02;
P1=dis[k%10];
delay(2);
P0=0x04;
P1=dis[h/10];
delay(2);
P0=0x08;
P1=dis[h%10];
delay(2);
if(h==0) break;
if(k==0)
{k=5;G1=1;R1=1;Y1=0;}
}
if(K0==0) break;
}
if(K0==0)
{
while(1) //全部禁止通行
{
G1=1;R1=0;Y1=1;JG=1;P0=0x00;
G2=1;R2=0;Y2=1;Z2=1;Z1=1;
if(K0!=0) break;
}
}
}
}
void zhutong() interrupt 0 //主干道通行,支道禁止通行
{
EX0=0;
m=P2;
if(K1==0)
{ while(1)
{
G1=1;R1=0;Y1=1;JG=0;P0=0x00;
G2=0;R2=1;Y2=1;Z2=0;Z1=1;
if(K1!=0) break;
}
}
P2=m;
EX0=1;
}
void zhitong() interrupt 2 //支道通行,主干道禁止通行
{
EX1=0;
m=P2;
if(K2==0)
{ while(1)
{
G1=0;R1=1;Y1=1;JG=0;P0=0x00;
G2=1;R2=0;Y2=1;Z2=1;Z1=0;
if(K2!=0) break;
}
}
P2=m;
EX1=1;
}
void dss() interrupt 1 //1s的定时
{
a=a+1;
if(a==10)
{k--;h--; a=0;}
TH0=0x3C; TL0=0xB0;
}
void main()
{
TMOD=0x01;
TH0=0x3C; TL0=0xB0; //6M晶振,100ms初值
ET0=1;
TR0=1;
EA=1;
EX1=1;
EX0=1;
IT0=0;
IT1=0;
PX0=1;PX1=1;
xianshi();
while(1);
}
#define uchar unsigned char
#define uint unsigned int
sbit R1=P2^0; //东西红灯
sbit Y1=P2^1; //东西黄灯
sbit G1=P2^2; //东西绿灯
sbit R2=P2^3; //南北红灯
sbit Y2=P2^4; //南北黄灯
sbit G2=P2^5; //南北绿灯
sbit Z1=P2^6; //南北人行道绿灯
sbit Z2=P2^7; //东西人行道绿灯
sbit K0=P3^0; //全部禁行开关
sbit K1=P3^2; //主干道通行开关
sbit K2=P3^3; //支道通行开关
sbit JG=P3^6; //全部禁行警报
uchar a=0,m,k,h;
uchar code dis[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff}; //断码
void delay(uchar x) //延时
{
uchar j;
while(x--)
for(j=0;j<120;j++);
}
xianshi() //显示部分
{
while(1)
{
while(1)
{
G1=1;R1=0;Y1=1;JG=0;
G2=0;R2=1;Y2=1;Z2=0;Z1=1;
k=35;h=30;
while(1) //主干道通行35s
{
if(K0==0) break; //判断K0是否被按下,如果按下跳出本循环
P0=0x01;
P1=dis[k/10];
delay(2);
P0=0x02;
P1=dis[k%10];
delay(2);
P0=0x04;
P1=dis[h/10];
delay(2);
P0=0x08;
P1=dis[h%10];
delay(2);
if(k==0) break;
if(h==0)
{h=5;G2=1;R2=1;Y2=0;}
}
if(K0==0) break; //再判断一次K0,跳出本循环
G1=0;R1=1;Y1=1;JG=0;
G2=1;R2=0;Y2=1;Z2=1;Z1=0;
k=20;h=25;
while(1) //支道通行25s
{
if(K0==0) break;
P0=0x01;
P1=dis[k/10];
delay(2);
P0=0x02;
P1=dis[k%10];
delay(2);
P0=0x04;
P1=dis[h/10];
delay(2);
P0=0x08;
P1=dis[h%10];
delay(2);
if(h==0) break;
if(k==0)
{k=5;G1=1;R1=1;Y1=0;}
}
if(K0==0) break;
}
if(K0==0)
{
while(1) //全部禁止通行
{
G1=1;R1=0;Y1=1;JG=1;P0=0x00;
G2=1;R2=0;Y2=1;Z2=1;Z1=1;
if(K0!=0) break;
}
}
}
}
void zhutong() interrupt 0 //主干道通行,支道禁止通行
{
EX0=0;
m=P2;
if(K1==0)
{ while(1)
{
G1=1;R1=0;Y1=1;JG=0;P0=0x00;
G2=0;R2=1;Y2=1;Z2=0;Z1=1;
if(K1!=0) break;
}
}
P2=m;
EX0=1;
}
void zhitong() interrupt 2 //支道通行,主干道禁止通行
{
EX1=0;
m=P2;
if(K2==0)
{ while(1)
{
G1=0;R1=1;Y1=1;JG=0;P0=0x00;
G2=1;R2=0;Y2=1;Z2=1;Z1=0;
if(K2!=0) break;
}
}
P2=m;
EX1=1;
}
void dss() interrupt 1 //1s的定时
{
a=a+1;
if(a==10)
{k--;h--; a=0;}
TH0=0x3C; TL0=0xB0;
}
void main()
{
TMOD=0x01;
TH0=0x3C; TL0=0xB0; //6M晶振,100ms初值
ET0=1;
TR0=1;
EA=1;
EX1=1;
EX0=1;
IT0=0;
IT1=0;
PX0=1;PX1=1;
xianshi();
while(1);
}
2011-10-17
展开全部
建议 去 我的领地 5d6d 的 proteus 论坛看看
那里有很多 单片机仿真实例,包括仿真图 和 源码
搜 5d6d 和 proteus 2个关键词
那里有很多 单片机仿真实例,包括仿真图 和 源码
搜 5d6d 和 proteus 2个关键词
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询