基于80C51单片机的交通灯设计(2)

2018-12-23 23:06

sbit EW_LED_YELLOW = P1^1; sbit EW_LED_GREEN = P1^2; sbit SN_LED_RED = P1^3; sbit SN_LED_YELLOW = P1^4; sbit SN_LED_GREEN = P1^5; //定义P2^0-P2^3=LED数码管控制 sbit EW_weixuan_H = P2^0; sbit EW_weixuan_L = P2^1; sbit SN_weixuan_H = P2^2; sbit SN_weixuan_L = P2^3;

//定义P0^0-P0^7=LED数码管段选引脚 sbit LED_DATA_A = P0^0; sbit LED_DATA_B = P0^1; sbit LED_DATA_C = P0^2; sbit LED_DATA_D = P0^3; sbit LED_DATA_E = P0^4; sbit LED_DATA_F = P0^5; sbit LED_DATA_G = P0^6; sbit SCL = P1^6; sbit SDA = P1^7;

//变量声明

unsigned char counter,ew_sign,sn_sign,ew_time,sn_time,hour

//定义段码

code char LED_CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*main函数开始*/ main() { counter = 3;//计数器,每3600s查询一次当前hour ew_sign = 0;//东西标志位,0代表红灯,1代表绿灯,2代表黄灯 sn_sign = 0;//南北标志位,0代表红灯,1代表绿灯,2代表黄灯 ew_time = 3;//东西时间 sn_time = 3;//南北时间 hour = 24;//当前hour unsigned ew_total_time[24] = {1,1,1,1,1,30,30,30,30,30,30,30,60,60,60,60,30,30,

30,30,30,30}//东西各时间段绿灯亮总时间

unsigned char sn_total_time[24] = {1,1,1,1,1,30,30,60,60,60,60,60,30,30,30,30,30,

30,30,30,30,30}//南北各时间段绿灯亮总时间

LED_INTI(); EW_RED(); SN_RED(); while(1) { if(counter == 0)

6 / 13

{ hour = GET_HOUR(); counter = 3600; switch(hour) { case 5: ew_time = 30; sn_time = 33; ew_sign = 1; sn_sign = 0; EW_GREEN(); SN_RED(); break; case 7: ew_time = 30; sn_time = 33; ew_sign = 1; sn_sign = 0; EW_GREEN(); SN_RED(); break; case 12: ew_time = 60; sn_time = 63; ew_sign = 1; sn_sign = 0; EW_GREEN(); SN_RED(); break; case 18: ew_time = 30; sn_time = 33; ew_sign = 1; sn_sign = 0; EW_GREEN(); SN_RED(); break; default: break; } }

if(ew_time == 0) { switch(ew_sign)

7 / 13

}

{ case 0: ew_sign = 1; ew_time = ew_total_time[hour]; EW_GREEN(); break; case 1: ew_sign = 2; ew_time = 3; EW_YELLOW(); break; case 2: ew_sign = 0; ew_time = sn_total_time[hour] + 3; EW_RED(); break; } }

if(sn_time == 0) { switch(sn_sign) { case 0: sn_sign = 1; sn_time = sn_total_time[hour]; SN_GREEN(); break; case 1: sn_sign = 2; sn_time = 3; SN_YELLOW(); break; case 2: sn_sign = 0; sn_time = ew_total_time[hour] + 3; SN_RED(); break; } }

LED_WRITE(ew_time/10,EW_H); LED_WRITE(ew_time,EW_L); LED_WRITE(sn_time/10,SN_H); LED_WRITE(sn_time,SN_L);

8 / 13

}

//main函数到此结束,以下是所用到函数的定义 /*所用函数的定义*/ void LED_INIT() { LED = 0x00; EW_weixuan_H = 1; EW_weixuan_L = 1; SN_weixuan_H = 1; SN_weixuan_L = 1; }

void LED_WRITE(int dat,int con) { EW_weixuan_H = 0; EW_weixuan_L = 0; SN_weixuan_H = 0; SN_weixuan_L = 0; if(dat < 10) { LED = LED_CODE[dat]; switch(con) { case EW_H: { EW_weixuan_H = 1; break; } case EW_L: { EW_weixuan_L = 1; break; } case SN_H: { SN_weixuan_H = 1; break; } case SN_L: { SN_weixuan_L = 1; break; } } }

9 / 13

}

void timer_int() interrupt 0 { EA = 0; counter--; switch(hour) { case 0: case 1: case 2: case 3: case 4: EW_YELLOW(); SN_YELLOW(); EW_NONE(); SN_NONE(); break; default: ew_time--; sn_time--; if(ew_sign == 1 && ew_time <= 3 && ew_time > 0) { EW_GREEN(); EW_NONE(); } if(sn_sign == 1 && sn_time <= 3 && sn_time > 0) { SN_GREEN(); SN_NONE(); } break; } EA = 1; }

/* 延迟函数定义*/ void DELAY2() { _nop_(); _nop_(); }//延迟2us void DELAY4()

10 / 13


基于80C51单片机的交通灯设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:金榜2011高考真题分类汇编:考点19平面向量的数量积、平面向量应

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: