51单片机控制交通灯原理图及C语言程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ge1=(temp+5)%10; shi2=temp/10; ge2=temp%10; if(temp==0) { temp=26; break; } } display(ge1,shi1,ge2,shi2); } } void init3() //第三个状态:东西绿灯变为黄灯闪 5 次、南北亮红灯 5S { uint temp; temp=6; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_NANBEI=0; GREEN_DONGXI=1; if(aa==20)//定时 20*50MS=1S { aa=0; temp--; YELLOW_DONGXI=~YELLOW_DONGXI; shi1=temp/10; shi2=shi1; ge1=temp%10; ge2=ge1; } if(temp==0) { temp=6; break; } display(ge1,shi1,ge2,shi2); } }
Proteus 仿真原理图:
Keil C 源程序: #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit RED_DONGXI = P1^0;//南北方向红灯亮 sbit YELLOW_DONGXI = P1^1;//南北方向黄灯亮 sbit RED_NANBEI = P1^3;//东西方向红灯亮 sbit GREEN_DONGXI = P1^2;//南北方向绿灯亮 sbit YELLOW_NANBEI = P1^4;//东西方向黄灯亮 sbit GREEN_NANBEI = P1^5;//东西方向绿灯亮 sbit DXweixuan1 = P1^6;//南北方向数码管位选 1 sbit DXweixuan2 = P1^7;//南北方向数码管位选 2 sbit NBweixuan1 = P3^0;//东西方向数码管位选 1 sbit NBweixuan2 = P3^1;//东西方向数码管位选 2 sbit L1=P3^5; sbit L2=P3^6; sbit L3=P3^7; uint aa, bai,shi,ge,bb; uint shi1,ge1,shi2,ge2; uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
TL0=(65535-50000)%256; aa++; } void delay(uint z) {uint x,y; for(x=0;x<z;x++) for(y=0;y<110;y++); }
while(1) { RED_NANBEI=1; RED_DONGXI=0; GREEN_DONGXI=1; GREEN_NANBEI=1; if(aa==20) { aa=0; temp--; YELLOW_NANBEI=~YELLOW_NANBEI; shi1=temp/10; shi2=shi2; ge1=temp%10; ge2=ge1; if(temp==0) { temp=6; break; } } display(ge1,shi1,ge2,shi2); } } void display(uint shi1,uint ge1,uint shi2,uint ge2) { DXweixuan1=0; DXweixuan2=1; NBweixuan1=1; NBweixuan2=1; P0=table[ge1]; delay(5); DXweixuan1=1; DXweixuan2=0; NBweixuan1=1; NBweixuan2=1; P0=table[shi1]; delay(5); DXweixuan1=1; DXweixuan2=1; NBweixuan1=0; NBweixuan2=1;
void init4()//第四个状态:东西亮绿灯 25~0S,南北方向亮红灯 30~5S; { uint temp; temp=26; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_DONGXI=0; RED_NANBEI=1; YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯 5S GREEN_NANBEI=0; if(aa==20) { aa=0; temp--; shi1=temp/10; shi2=(temp+5)/10; ge1=temp%10; ge2=(temp+5)%10; if(temp==0) { temp=26; break; } } display(ge1,shi1,ge2,shi2); } } void init5()//第五个状态:东西亮红灯、南北绿灯闪 5 次转亮黄灯 5S { uint temp; temp=6; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1;
P0=table[ge2]; delay(5); DXweixuan1=1; DXweixuan2=1; NBweixuan1=1; NBweixuan2=0; P0=table[shi2]; delay(5); } void xint0() interrupt 0 { RED_NANBEI=0; RED_DONGXI=0; GREEN_NANBEI=1; GREEN_DONGXI=1; YELLOW_NANBEI=1; YELLOW_DONGXI=1; P0=0x00; NBweixuan1=0; NBweixuan2=0; DXweixuan1=0; DXweixuan2=0; delay(2); return ; } void xint1() interrupt 2 { RED_NANBEI=1; RED_DONGXI=1; GREEN_NANBEI=0; GREEN_DONGXI=0; YELLOW_NANBEI=1; YELLOW_DONGXI=1; P0=0x00; NBweixuan1=0; NBweixuan2=0; DXweixuan1=0; DXweixuan2=0; delay(2); return ; } void xtimer0() interrupt 1 { TH0=(65535-50000)/256;
void void void void void void void void void void void void void
delay(uint z); init(uint a); display(uint shi1,uint ge1,uint shi2,uint ge2); xtimer0(); init1(); init2(); init3(); init4(); init5(); xint1(); xint0(); LED_ON(); LED_OFF();
Biblioteka Baidu
RED_DONGXI=0; RED_NANBEI=0; GREEN_DONGXI=1; GREEN_NANBEI=1; YELLOW_DONGXI=1; YELLOW_NANBEI=1; if(aa==20)//定时 20*50MS=1S { aa=0; temp--; } shi1=shi2=temp/10; ge1=ge2=temp%10; if(temp==0) { temp=5; break; } display(ge1,shi1,ge2,shi2); } }
void main() { P0=0xFF; P1=0xFF; P2=0x00; P3=0xFF; EA=1; EX0=1; IT0=0; init1(); while(1) { init2();//第 2 个状态 init3(); //第 3 个状态 init4(); //第 4 个状态 init5();//第 5 个状态 } } void init1()//第一个状态:东西、南北方向均亮红灯 5S { uint temp; temp=5; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) {
//第一个状态东西、南北均亮红灯 5S
void init2()//第二个状态:东西亮红灯 30S~5S、南北亮绿灯 25~0S; { uint temp; temp=26; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_DONGXI=1; RED_NANBEI=0; GREEN_DONGXI=0; GREEN_NANBEI=1; YELLOW_DONGXI=1;//第二个状态:东西亮绿灯 25S、南北亮红灯 YELLOW_NANBEI=1; if(aa==20)//定时 20*50MS=1S { aa=0; temp--; shi1=(temp+5)/10;
相关文档
最新文档