c语言十字路口程序,单片机AT89C52十字路口交通灯控制C语言程序

单片机AT89C52十字路口交通灯控制程序

东西方向60秒,南北方向57秒

#include#define uchar unsigned char

#define uint unsigned int

#define ON 0

#define OFF 1

sbit NS_G=P2^5; //南北绿灯

sbit NS_Y=P2^4; //南北黄灯

sbit NS_R=P2^3; //南北红灯

sbit EW_G=P2^2; //东西绿灯

sbit EW_Y=P2^1; //东西黄灯

sbit EW_R=P2^0; //东西红灯

sbit LED_D1=P3^7; //南北方向数码管位控制

sbit LED_C1=P3^6; //南北方向数码管位控制

sbit LED_B1=P3^1; //东西方向数码管为控制

sbit LED_A1=P3^0; //东方向数码管位控制

/*********倒计时赋初值*************/

uchar EWF=20,NSF=17,X=20,Y=17,Z=20,SHU=20;

uchar count;

void Init(void)

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

/*******************中断服务程序**************************/

void timer1(void) interrupt 1

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

count++;

if(count>19)

{

EWF--;

NSF--;

X--;

Y--;

Z--;

SHU--;

count=0;

}

}

/******************延时**********************/

void Delay10uS(uchar z)

{

uchar x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/******************led控制*******************/

unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极数码管赋值

void display1(uchar num1,uchar num2) //控制东西方向led显示

{

P0=table[num1];

LED_A1=ON;

Delay10uS(1);

LED_A1=OFF;

P0=table[num2];

LED_B1=ON;

Delay10uS(1);

LED_B1=OFF;

}

void display2(uchar num3,uchar num4) //控制南北方向led显示

{

P0=table[num3];

LED_C1=ON;

Delay10uS(1);

LED_C1=OFF;

P0=table[num4];

LED_D1=ON;

Delay10uS(1);

LED_D1=OFF;

}

void main()

{

int i;

/************初始状态东西南北禁止通行************/

NS_R=ON; //南北方向红灯打开

EW_R=ON; //东西方向红灯打开

for(i=0;i<600;i++)

{

Delay10uS(20);

}

NS_R=OFF;//南北方向红灯关闭

EW_R=OFF;//东西方向红灯关闭

while(1)

{

Init(); // 初始化计时器

/****************状态1:东西绿灯(57s), 南北红灯(60s)**************/

/***************状态2:东西黄灯(3s) , 南北红灯(60s)****************/

EW_G=ON; //东西方向的绿灯打开

NS_R=ON; //南北方向的红灯打开

while(EWF!=0)

{

display1(EWF/10,EWF%10);// 东西方向红灯(60s)

display2(NSF/10,NSF%10);// 南北方向绿灯(57s)

while(EWF==3)

{

while(X!=0)

{

display1(EWF/10,EWF%10);// 东西方向红灯(3s)

display2(X/10,X%10);// 南北方向黄灯(3s)

EW_G=OFF;// 东西方向的绿灯关闭

EW_Y=ON;//东西方向的黄灯打开

}

}

}

NS_R=OFF; // 南北方向的红灯关闭

EW_G=OFF; // 东西方向的绿灯关闭

EW_Y=OFF; // 东西方向的黄灯打?

/*=*************状态3:东西红灯(60s), 南北绿灯(57s)************/

/****************状态4:东西红灯(60s), 南北黄灯(3s)***************/

EW_R=ON;// 东西方向的红灯打开

NS_G=ON;//南北方向的绿灯打开

while(Z!=0)

{

display2(Z/10,Z%10);// 南北方向红灯(57s)

display1(Y/10,Y%10);// 东西方向绿灯(57s)

while(Z==3)

{

while(SHU!=0)

{

display2(Z/10,Z%10);// 东西红灯(3s)

display1(SHU/10,SHU%10);// 南北绿灯(3s)

NS_G=OFF; //南北方向的绿灯关闭

NS_Y=ON; // 南北方向的黄灯打开

}

}

}

EW_R=OFF; // 东西方向的红灯关闭

NS_G=OFF; // 南北方向的绿灯关闭

NS_Y=OFF; // 南北方向的黄灯关闭

EWF=60,NSF=57,X=60,Y=57,Z=60,SHU=60; //重新赋值

}

}

/***************************************************** 十字路口交通灯控制 C 程序 ******************************************************/ #define uchar unsigned char #define uint unsigned int #include /*****定义控制位**********************/ sbit Time_Show_LED2=P2^5;//Time_Show_LED2控制位 sbit Time_Show_LED1=P2^4;//Time_Show_LED1控制位 sbit EW_LED2=P2^3; //EW_LED2控制位 sbit EW_LED1=P2^2; //EW_LED1控制位 sbit SN_LED2=P2^1; //SN_LED2控制位 sbit SN_LED1=P2^0; //SN_LED1控制位 sbit SN_Yellow=P1^6;//SN黄灯 sbit EW_Yellow=P1^2;//EW黄灯 sbit EW_Red=P1^3;//EW红灯 sbit SN_Red=P1^7;//SN红灯 sbit EW_ManGreen=P3^0;//EW人行道绿灯 sbit SN_ManGreen=P3^1;//SN人行道绿灯 sbit Special_LED=P2^6;//交通正常指示灯 sbit Busy_LED=P2^7;//交通繁忙指示灯 sbit Nomor_Button=P3^5;//交通正常按键 sbit Busy_Btton=P3^6;//交通繁忙按键 sbit Special_Btton=P3^7;//交通特殊按键 sbit Add_Button=P3^3;//时间加 sbit Reduces_Button=P3^4;//时间减 bit Flag_SN_Yellow; //SN黄灯标志位 bit Flag_EW_Yellow;//EW黄灯标志位 char Time_EW;//东西方向倒计时单元 char Time_SN;//南北方向倒计时单元 uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化赋值,正常模式 uchar EW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量 uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码 uchar code S[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信号灯控制代码 /**********************延时子程序************************/ void Delay(uchar a) { uchar i; i=a; while(i--){;} } /*****************显示子函数**************************/ void Display(void) { char h,l; h=Time_EW/10;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值