基于51单片机交通灯程序完整版.docx

上传人:b****4 文档编号:24852867 上传时间:2023-06-02 格式:DOCX 页数:13 大小:15.92KB
下载 相关 举报
基于51单片机交通灯程序完整版.docx_第1页
第1页 / 共13页
基于51单片机交通灯程序完整版.docx_第2页
第2页 / 共13页
基于51单片机交通灯程序完整版.docx_第3页
第3页 / 共13页
基于51单片机交通灯程序完整版.docx_第4页
第4页 / 共13页
基于51单片机交通灯程序完整版.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于51单片机交通灯程序完整版.docx

《基于51单片机交通灯程序完整版.docx》由会员分享,可在线阅读,更多相关《基于51单片机交通灯程序完整版.docx(13页珍藏版)》请在冰豆网上搜索。

基于51单片机交通灯程序完整版.docx

基于51单片机交通灯程序完整版

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

bitFlag_SN_Yellow;//SN黄灯标志位

bitFlag_EW_Yellow;//EW黄灯标志位

ucharTime_EW;//东西方向倒计时单元

ucharTime_SN;//南北方向倒计时单元

ucharEW=15,SN=10,EWL=19,SNL=19;//程序初始化赋值,正常模式

ucharEW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量

ucharFlag_Moden=1;//模式变量1正常模式2禁止南北通东西3禁止东西通南北4禁止东西南北5夜间模式

ucharFlag_key=0;

ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码sbitHC164_Data=P0^0;

sbitHC164_Clk=P0^1;

sbitEW_green=P0^2;

sbitEW_yellow=P0^3;

sbitEW_red=P0^4;

sbitSN_red=P0^5;

sbitSN_green=P0^7;

sbitSN_yellow=P0^6;

sbitSN_RXD_red=P2^7;

sbitSN_RXD_green=P2^6;

sbitEW_RXD_red=P2^5;

sbitEW_RXD_green=P2^4;

sbitFMQ=P1^0;

sbitkey1=P3^3;

sbitkey2=P3^4;

sbitkey3=P3^5;

sbitWEI1=P2^3;//东西数码管第一位

sbitWEI2=P2^2;//东西数码管第二位

sbitWEI3=P2^1;//南北数码管第一位

sbitWEI4=P2^0;//南北数码管第二位

//ucharew=40;sn=35;

//函数delay(ucharz)

//功能能延时

voidDelay(ucharz)

{

uchara,b;

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

for(b=200;b>0;b--);

}

voidHC_164_Set_byte(ucharduan)

{

uchari;

for(i=0;i<8;i++){

HC164_Data=duan&0x80;

HC164_Clk=0;

HC164_Clk=1;

duan=duan<<1;

}

}

voiddisplay_smg(ucharwei,ucharnum)

{

switch(wei){

case1:

WEI1=0;WEI2=1;WEI3=1;WEI4=1;HC_164_Set_byte(table[num]);break;case2:

WEI1=1;WEI2=0;WEI3=1;WEI4=1;HC_164_Set_byte(table[num]);break;case3:

WEI1=1;WEI2=1;WEI3=0;WEI4=1;HC_164_Set_byte(table[num]);break;case4:

WEI1=1;WEI2=1;WEI3=1;WEI4=0;HC_164_Set_byte(table[num]);break;default:

break;

}

}

voidDisplay(void)

{

ucharh,l;

h=Time_EW/10;

l=Time_EW;

display_smg(1,h);

Delay(8);

display_smg(2,l);

Delay(8);

h=Time_SN/10;

l=Time_SN;

display_smg(3,h);

Delay(8);

display_smg(4,l);

Delay(8);

}

voidKey()

{

if(key1==0){

Delay(10);

if(key1==0){

while(!

key1);

Flag_key++;

if(Flag_key==1){

Flag_Moden=2;

}

if(Flag_key==2){

Flag_Moden=3;

}

if(Flag_key==3){

Flag_Moden=4;

}

if(Flag_key==4){

Flag_Moden=5;

FMQ=1;

TR0=1;

}

if(Flag_key==5){

Flag_EW_Yellow=0;//SN关黄灯信号位Flag_SN_Yellow=0;//SN关黄灯信号位FMQ=1;

Flag_Moden=1;

TR0=1;//启动定时

Flag_key=0;

}

}

}

if(key2==0){

while(!

key2);

Flag_Moden=2;

}

if(key3==0){

while(!

key3);

Flag_Moden=3;

}

}

voidtimer0(void)interrupt1using1

{

staticucharcount;

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

count++;

if(count==10)

{

if(Flag_SN_Yellow==1)//测试南北黄灯标志位

{SN_yellow=~SN_yellow;}

if(Flag_EW_Yellow==1)//测试东西黄灯标志位

{EW_yellow=~EW_yellow;}

}

if(count==20)

{

if(Flag_Moden==1){

Time_EW--;

Time_SN--;

}

if(Flag_SN_Yellow==1)//测试南北黄灯标志位

{SN_yellow=~SN_yellow;}

if(Flag_EW_Yellow==1)//测试东西黄灯标志位

{EW_yellow=~EW_yellow;}

count=0;

}

}

//模式1

voidZc_moshi()

{

//*******S0状态**********

EW_RXD_red=0;//EW人行道禁止

EW_RXD_green=1;//EW人行道禁止

SN_RXD_red=1;//EW人行道通行

SN_RXD_green=0;//SN人行道通行

Flag_EW_Yellow=0;//EW关黄灯显示信号Flag_SN_Yellow=0;//SN关黄灯显示信号

Time_EW=EW;//EW=45;SN=40;

Time_SN=SN;

SN_green=0;//SN通行,EW红灯

SN_red=1;

EW_red=0;

EW_green=1;

while(Time_EW>5){

if(key1==0||key2==0||key3==0)

{

//Flag_Moden=1;

TR0=0;//启动定时

break;

}

Display();

}

SN_yellow=0;//SN黄灯亮开始闪烁5秒SN_green=1;//灭

//*******S1状态**********

Time_SN=5;

while(Time_EW<=5){

if(key1==0||key2==0||key3==0)

{

//Flag_Moden=1;

TR0=0;//启动定时

break;

}

Flag_SN_Yellow=1;//SN开黄灯信号位Display();

}

//*******S2状态**********

Flag_SN_Yellow=0;//SN关黄灯显示信号SN_yellow=1;

EW_RXD_red=1;//EW人行道通行

SN_RXD_green=1;//SN人行道禁止

EW_RXD_green=0;//EW人行道通行

SN_RXD_red=0;//SN人行道禁止

Time_EW=SN;//EW=45;SN=40;

Time_SN=EW;

SN_green=1;//南北绿灯禁止东西通行SN_red=0;//亮

EW_red=1;

EW_green=0;//亮

while(Time_SN>5){

if(key1==0||key2==0||key3==0)

{

//Flag_Moden=1;

TR0=0;//启动定时

break;

}

Display();

}

//*******S3状态**********

EW_green=1;

EW_yellow=0;

Time_EW=5;

while(Time_SN<=5){

if(key1==0||key2==0||key3==0)

{

TR0=0;//启动定时

break;

}

Flag_EW_Yellow=1;//SN开黄灯信号位Display();

}

Flag_EW_Yellow=0;

EW_yellow=1;

}

////模式2禁止南北通东西蜂鸣器响voidJsn()

{

EW_green=0;

EW_yellow=1;

EW_red=1;

SN_red=0;

SN_green=1;

SN_yellow=1;

SN_RXD_red=0;

SN_RXD_green=1;

EW_RXD_red=1;

EW_RXD_green=0;

FMQ=~FMQ;

Delay(10);

WEI1=1;WEI2=1;WEI3=1;WEI4=1;

}

////模式3禁止东西通南北蜂鸣器响voidJew()

{

EW_green=1;

EW_yellow=1;

EW_red=0;

SN_red=1;

SN_green=0;

SN_yellow=1;

SN_RXD_red=1;

SN_RXD_green=0;

EW_RXD_red=0;

EW_RXD_green=1;

FMQ=~FMQ;

Delay(10);

WEI1=1;WEI2=1;WEI3=1;WEI4=1;

}

//模式4禁止东西南北蜂鸣器响

voidJEwSn()

{

EW_green=1;

EW_yellow=1;

EW_red=0;

SN_red=0;

SN_green=1;

SN_yellow=1;

SN_RXD_red=0;

SN_RXD_green=1;

EW_RXD_red=0;

EW_RXD_green=1;

FMQ=~FMQ;

Delay(10);

WEI1=1;WEI2=1;WEI3=1;WEI4=1;

}

//模式5夜间模式,东西南北黄灯闪烁voidYejian()

{

EW_green=1;

//EW_yellow=1;

EW_red=1;

SN_red=1;

SN_green=1;

//SN_yellow=1;

SN_RXD_red=1;

SN_RXD_green=1;

EW_RXD_red=1;

EW_RXD_green=1;

Flag_EW_Yellow=1;//SN开黄灯信号位Flag_SN_Yellow=1;//SN开黄灯信号位}

voidmain()

{

P1=0xff;

P2=0xff;

P3=0xff;

P0=0xff;

EW_green=1;

EW_yellow=1;

EW_red=1;

SN_red=1;

SN_green=1;

SN_yellow=1;

SN_RXD_red=1;

SN_RXD_green=1;

EW_RXD_red=1;

EW_RXD_green=1;

WEI1=1;

WEI2=1;

WEI3=1;

WEI4=1;

IT0=1;//INT0负跳变触发

TMOD=0x01;//定时器工作于方式1

TH0=(65536-50000)/256;//定时器赋初值TL0=(65536-50000)%6;

EA=1;//CPU开中断总允许

ET0=1;//开定时中断

//EX0=1;//开外部INTO中断

TR0=1;//启动定时

while

(1){

switch(Flag_Moden){

case1:

Zc_moshi();break;

case2:

Jsn();break;

case3:

Jew();break;

case4:

JEwSn();break;

case5:

Yejian();break;

default:

break;

}

Key();}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1