×
嵌入式开发 > 详情

交通信号灯的控制

发布时间:2020-06-30 发布时间:
|
此程序是在黄莺老师的源程序上加以修改,在单片机板子上运行成功,这里是板子的硬件资料/zixunimg/eepwimg/www.51hei.com/mcu/1019.html,数码管是四位共阳管子,程序没有进行仿真测试



 #include reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint temp,temp1,temp2,num,shi,ge,i,j;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit WX1=P0^0;
sbit WX2=P0^1;
sbit WX3=P0^2;
sbit WX4=P0^3;
sbit NBL=P2^2;
sbit NBY=P2^1;
sbit NBR=P2^0;
sbit DXL=P2^5;
sbit DXY=P2^4;
sbit DXR=P2^3;
void init(){P0=0xff;
P2=0xff;
temp=0;
temp1=0;
temp2=0;
shi=0;
ge=0;
TMOD=0x21;  
TH0=0x3c; //50ms
TL0=0xb0;EA=1;ET0=1;TF0=0;TR0=1;}void delay(uchar z){uchar x,y;for(x=110;x>0;x--)for(y=z;y>0;y--);}void display(){shi=num/10;ge=num%10;P1=table[ge];WX3=1;WX2=0;WX1=0;WX4=0;delay(10);WX2=1;P1=table[shi];WX2=1;WX3=0;WX1=0;WX4=0;delay(10);WX3=1;  }void time0() interrupt 1 using 1{temp++;temp1++;TH0=0x3c;TL0=0xb0;TR0=1; }void main(){init();while(1){if(temp==0){DXR=1;NBY=1;DXL=0;NBR=0;num=21;temp1=0;for(i=20;i>0;i--){num--;while(temp1!=20){display();}temp1=0;}}if(temp==400)  {DXY=1;NBR=0;DXL=0;num=3;j=0; for(i=7;i>0;i--){j++;if(j%2==0){num--;}temp2=temp;DXL=!DXL;  //灯闪烁while(temp-temp2!=10){display();};}     }if(temp==470){   DXL=1;DXY=0;NBR=0;num=3;temp1=0;for(i=3;i>0;i--){num--;while(temp1!=20){display();}temp1=0;}if(temp==530){DXY=1;DXR=0;NBR=1;NBL=0;num=26;temp1=0;for(i=25;i>0;i--){num--;while(temp1!=20){display();}temp1=0;}}if(temp==1030){DXY=1;DXR=0;NBL=0;num=3;j=0; for(i=7;i>0;i--){j++;if(j%2==0){num--;}temp2=temp;NBL=!NBL;  //灯闪烁while(temp-temp2!=10){display();};}     }if(temp==1100){   DXL=1;DXR=0;NBY=0;num=3;temp1=0;for(i=3;i>0;i--){num--;while(temp1!=20){display();}temp1=0;}temp=0;}}}}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
mini 2440 test 的Delay函数分析