这是一款
单片机交通灯C语言程序,单片机用的是AT89C51,两只共阴两位一体的数码管分另显示两个路口的倒计时,用12只发光二极管模拟红、黄、绿灯。电路简单,制作容易。电子小制作。
#include#define uchar unsigned charbit flag;sbit red1_1=P1^0;//南北红灯D1sbit yel1_1=P1^1;//南北黄灯D2sbit gre1_1=P1^2;//南北绿灯D3sbit red1_2=P1^3;//南北红灯D4sbit yel1_2=P1^4;//南北黄灯D5sbit gre1_2=P1^5;//南北绿灯D6
sbit red2_1=P1^6;//东西红灯D7sbit yel2_1=P1^7;//东西黄灯D8sbit gre2_1=P0^0;//东西绿灯D9sbit red2_2=P0^1;//东西红灯D10sbit yel2_2=P0^2;//东西黄灯D11sbit gre2_2=P0^3;//东西绿灯D12
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};uchar n,n1,aa=0,shi,ge,shi1,ge1;void init();void xianshi1(uchar shi,uchar ge);void xianshi2(uchar shi1,uchar ge1);void delay(uchar z){uchar x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}main(){n=30;shi=n/10;ge=n;n1=30;shi1=n1/10;ge1=n1;
init();while(1){if(flag!=1)xianshi1(shi,ge);elsexianshi2(shi1,ge1);}}
void xianshi1(uchar shi,uchar ge){P3=0x02;P2=tab[ge];delay(200);P3=0x01;P2=tab[shi];delay(200);}
//http://www.duankudp.com/void xianshi2(uchar shi1,uchar ge1){P3=0x08;P2=tab[ge1];delay(200);P3=0x04;P2=tab[shi1];delay(200);
}
void init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%6;EA=1;ET0=1;TR0=1;}
void timer0() interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%6;aa++;if(flag!=1){if(aa==20){aa=0;red1_1=0;red1_2=0;gre2_1=0;gre2_2=0;//启动南北红灯1和东西绿灯2
n--;shi=n/10;ge=n;
if(n<=3){red1_1=0;red1_2=0;gre2_1=1;gre2_2=1;yel2_1=0;yel2_2=0;//启动南北红灯1和东西黄灯2if(n<=0){n=30;red1_1=1;red1_2=1;gre1_1=0;gre1_2=0;yel2_1=1;yel2_2=1;red2_1=0;red2_2=0;//启动南北绿灯1和东西红灯2http://www.5imcu.net/TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%6;TR0=1;aa++;flag=1;
}}}}else{if(flag==1){//TH0=(65536-50000)/256;//TL0=(65536-50000)%6;//TR0=1;//aa++;if(aa==20){aa=0;n1--;shi1=n1/10;ge1=n1;if(n1<=3){gre1_1=1;gre1_2=1;yel1_1=0;yel1_2=0;red2_1=0;red2_2=0;//启动南北黄灯1和东西红灯2if(n1<=0){n1=30;yel1_1=1;yel1_2=1;red2_1=1;red2_2=1;
TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%6;TR0=1;flag=0;}}}}}}