资源简介
交通灯控制器
设计要求:
1)设计一个十字路口的交通灯控制电路,要求南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行时间为20秒,时间可设置修改。
2)在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。
3)黄灯亮时,要求每秒闪亮一次。
4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。
5)一道有车而另一道无车(实验时用开关 K0 和 K1 控制),交通灯控制系统能立即让有车道放行。
6)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯,紧急车由K2 开关模拟。
代码片段和文件信息
#include
#define uint unsigned int
#define uchar unsigned char
//P0口为段码P1低六位为南北东西红黄绿灯
//P2低四位为按键高四位为位码南北十个位,东西十个位
uint nb_num=0dx_num=0;
uint tcntj=0;
uint red_nb=15red_dx=15green_nb=10green_dx=10;
sbit k1=P2^0;
sbit k2=P2^1;
sbit k3=P2^2;
sbit k4=P2^3;
unsigned char table[]={0xc00xf90xa40xb00x990x92
0x820xf80x800x900xbf};//共阴数码管0-9‘-‘
unsigned char dengtai[]={0x090x210x110x0c0x0a0x010x08};
void delay(uint z) //显示延时 函数
{
uint x;
uchar y;
for(x=z;x>0;x--)
for(y=200;y>0;y--);
}
void display()
{
P2=0x1f;
P0=table[dx_num%10];
delay(20);
P2=0x2f;
P0=table[dx_num/10];
delay(20);
P2=0x4f;
P0=table[nb_num%10];
delay(20);
P2=0x8f;
P0=table[nb_num/10];
delay(20);
}
char button()
{
if(k4==0)
{
delay(10);
if(k4==0)
{
while(k4==0);
return 1;
}
else return 0;
}
else return 0;
}
void key()
{
if((k3!=0)&&(k1==0))
{
P1=dengtai[1];
while((k3!=0)&&(k1==0))
{
if(button())
{
red_nb++;
green_dx++;
}
display();
}
}
if((k3==0)&&(k1==0))
{
P1=dengtai[0];
while((k3==0)&&(k1==0))
{
if(button())
{
red_nb--;
green_dx--;
}
display();
}
}
if((k3!=0)&&(k2==0))
{
P1=dengtai[3];
while((k3!=0)&&(k2==0))
{
if(button())
{
red_dx++;
green_nb++;
}
display();
}
}
if((k3==0)&&(k2==0))
{
P1=dengtai[0];
while((k3==0)&&(k2==0))
{
if(button())
{
red_dx--;
green_nb--;
}
display();
}
}
}
main()
{
P1=0;
TMOD=0x02; //设置模式为定时器T0的模式2 (8位自动重装计数初值的计数值)
TH0=0x06; //设置计数器初值,靠TH0存储重装的计数值X0=256-250=6
TL0=0x06;
TR0=1; //启动T0
ET0=1; //开启定时器T0中断允许
EA=1;
while(1)
{
key();
display();
if((j==2)&&(tcnt<2000))
{
P1=dengtai[2];
}
if((j==2)&&(tcnt>=2000))
{
P1=dengtai[5];
}
if((j==4)&&(tcnt<2000))
{
P1=dengtai[4];
}
if((j==4)&&(tcnt>=2000))
{
P1=dengtai[6];
}
}
}
void t0(void)interrupt 1 using 0 //t0的中断程序
{
tcnt++;
if(tcnt==4000)//定时器的定时计数,4000次250us为1秒
{
tcnt=0;
nb_num--;
dx_num--;
}
if((nb_num>=1000)||(dx_num>=1000))
{
switch(j)
{
case 1: dx_num=5; P1=dengtai[2]; break;
case 2: nb_num=green_nb; dx_num=red_dx;P1=dengtai[3];break;
case 3: nb_num=5; P1=dengtai[4]; break;
case 4: dx_num=green_dx; nb_num=red_dx;P1=dengtai[3];break;
default:j=1; break;
}
j++;
if(j>=5)
j=1;
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7243 2010-06-26 06:11 jiaotongdeng\jiaotongdeng
文件 2970 2010-06-26 06:11 jiaotongdeng\jiaotongdeng.c
文件 2581 2010-06-26 06:11 jiaotongdeng\jiaotongdeng.hex
文件 56 2010-06-26 06:11 jiaotongdeng\jiaotongdeng.lnp
文件 8175 2010-06-26 06:11 jiaotongdeng\jiaotongdeng.LST
文件 10574 2010-06-26 06:11 jiaotongdeng\jiaotongdeng.M51
文件 8673 2010-06-26 06:11 jiaotongdeng\jiaotongdeng.OBJ
文件 978 2010-06-26 06:11 jiaotongdeng\jiaotongdeng.Opt
文件 3305 2010-06-26 06:11 jiaotongdeng\jiaotongdeng.plg
文件 2159 2010-06-26 06:11 jiaotongdeng\jiaotongdeng.Uv2
文件 981 2010-06-26 02:17 jiaotongdeng\jiaotongdeng_Opt.Bak
文件 2159 2010-06-25 14:39 jiaotongdeng\jiaotongdeng_Uv2.Bak
目录 0 2010-06-26 12:50 jiaotongdeng
----------- --------- ---------- ----- ----
49854 13
- 上一篇:二叉树树形输出
- 下一篇:powerbuilder最新美化界面个人收藏版
评论
共有 条评论