交通灯单片机程序:
- #include<reg52.h>
- #include<bstv51.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit nbp1=P0^4;//南北方向数码管第一位;
- sbit nbp2=P0^5;//南北方向数码管第二位;
- sbit dxp1=P0^6;//东西方向数码管第一位;
- sbit dxp2=P0^7;//东西方向数码管第二位;
- sbit hdnb=P0^2;//南北方向红灯;
- sbit hddx=P0^0;//东西方向红灯;
- sbit ldnb=P0^3;//南北方向绿灯;
- sbit lddx=P0^1;//东西方向绿灯;
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f}; //0-9
- uchar num=30;num2,shi,ge;
- void delayms(xms) //延时函数x毫秒函数
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display(uchar shi,uchar ge) //南北数码管显示函数
- {
-
-
- P1=table[shi];
- nbp1=0; //选中南北方向数码管第一位
- delayms(3);
- nbp1=1; //关闭南北方向数码管第一位
- P1=table[ge];
- nbp2=0; //选中南北第二位
- delayms(3);
- nbp2=1; //关闭南北方向数码管第二位
- P2=table[shi];
- dxp1=0; //选中南北方向数码管第一位
- delayms(3);
- dxp1=1; //关闭南北方向数码管第一位
- P2=table[ge];
- dxp2=0; //选中南北第二位
- delayms(3);
- dxp2=1;
- }
- void T1_time()interrupt 3 //定时器1中断函数
- {
- TH1=(65536-45872)/256;
- TL1=(65536-45872)%256;
- num2++;
- if(num2==20)
- {
- num2=0; //说明计时够一秒
- num--;
- if(num==0)
- {
- lddx=~lddx;
- hdnb=~hdnb;
- ldnb=~ldnb;
- hddx=~hddx;
- num=30;
- }
- }
- shi=num/10;
- ge=num%10;
- }
- void main() //主函数
- {
- TMOD=0x10;
- TH1=(65536-45872)/256;
- TL1=(65536-45872)%256;
- EA=1;
- ET1=1;
- TR1=1;
- lddx=0; //东西方向绿灯亮
- hdnb=0; //南北方向红灯亮
- ldnb=1;
- hddx=1;
- P1=0x00;
- P2=0x00;
- nbp1=1;
- dxp1=1;
- dxp2=1;
- nbp2=1;
- while(1)
- {
- display(shi,ge);
- }
- }
复制代码
基于51单片机交通灯设计下载:
交通灯.rar
(32.45 KB, 下载次数: 59)
|