• 大小: 16KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签:

资源简介

交通灯控制器 设计要求: 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


评论

共有 条评论

相关资源