|
51hei.png (13.19 KB, 下載次數(shù): 33)
下載附件
2020-9-21 15:15 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- uchar led[ ]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f};
- void delay_ms(uchar j) //延時(shí)若干ms
- {
- uchar i;
- while(j--)
- {
- for(i=0;i<125;i++)
- for(i=0;i<125;i++);
- }
- }
- void delay_s(uchar i) //延時(shí)i秒鐘
- {
- unsigned char a,b,c;
- while(i--)
- {
- for(c=167;c>0;c--)
- for(b=171;b>0;b--)
- for(a=16;a>0;a--);
- }
- }
- void dongxi(uchar a) //東西綠燈 南北紅燈
- {
- uchar j=100; //循環(huán)100次
- for(a;a>0;a--)
- {
- P1=0X09;delay_ms(5);
- while(j--)
- {
- P0=0Xfb;
- P2=led[a/10]; //顯示十位倒計(jì)時(shí)
- delay_ms(5);
- P0=0Xf7;
- P2=led[a%10]; //顯示個(gè)位倒計(jì)時(shí)
- delay_ms(5);
- if(a<=3) //如果a小于3,則開始黃燈閃爍
- {
- P1=0X12;
- delay_ms(5);
- P1=0X00;
- delay_ms(5);
- }
- }}}
- void nanbei(uchar a) //南北綠燈 東西紅燈
- {
- uchar j=100;
- for(a;a>0;a--)
- {
- P1=0X24;
- delay_ms(5);
- while(j--)
- {
- P0=0Xfe;
- P2=led[a/10]; //顯示十位倒計(jì)時(shí)
- delay_ms(5);
- P0=0Xfd;
- P2=led[a%10]; //顯示個(gè)位倒計(jì)時(shí)
- delay_ms(5);
- if(a<=3) //如果a小于3,則開始黃燈閃爍
- {
- P1=0X12;
- delay_ms(5);
- P1=0X00;
- delay_ms(5);
- }
- }}}
- void main()
- {
- EA=1; //允許中斷
- EX0=1; //允許外部中斷0
- IT0=1; //跳沿觸發(fā)
- while(1)
- {
- dongxi(10); //東西通行時(shí)間10秒
- nanbei(10); //南北通行時(shí)間10秒
- }
- }
- void int0() interrupt 0 //外部中斷0函數(shù)
- {
- uchar i;
- EA=0;
- P0=0xff;
- for(i=5;i>0;i++)
- {
- P1=0X12;
- delay_ms(10);
- P1=0X00;
- delay_ms(10);
- }
- P1=0x0c;
- delay_s(5);
- EA=1;
- }
- #include<reg51.h>
- #define u8 unsigned char
- #define u16 unsigned int
- sbit s1=P3^2;//應(yīng)急通行
- u8 code display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數(shù)碼管0---9
- u8 buf[2]={1,0};//初始顯示10
- u8 num;//1s計(jì)時(shí)
- u8 time=10;//10s倒計(jì)時(shí)
- bit flag=0;
- void time0_init()
- {
- TMOD=0x01;//定時(shí)器0,工作于方式1
- TH0=(65535-50000)/256;//定時(shí)50ms
- TL0=(65535-50000)%256;
- ET0=EA=TR0=1;
- }
- void delayms(u16 x)//毫秒延時(shí)函數(shù)
- {
- u16 i,j;
- for(i=0;i<x;i++) //連數(shù)x次,約 x ms
- for(j=0;j<120;j++); //數(shù)120 次,約1 ms
- }
- void scan()//數(shù)碼管掃描函數(shù)
- {
- P0=0xfa;P2=display[buf[1]];
- delayms(5);
- P0=0xf5;P2=display[buf[0]];
- delayms(5);
- }
- void convert(u8 dat)//將數(shù)據(jù)轉(zhuǎn)成適合數(shù)碼管顯示的數(shù)
- {
- buf[1]=dat/10;
- buf[0]=dat%10;
- }
- void main()//主函數(shù)
- {
- EA=1;
- EX0=1;
- IT0=1;
- time0_init();//初始化
- flag=1;
- while(1)
- {
- convert(time);//正常數(shù)據(jù)轉(zhuǎn)換
- scan();//倒計(jì)時(shí)顯示
- if(flag==0)
- {
- P1=0x24;
- if(time<=3){P1=0x12;}
- }
- else if(flag==1)
- {
- P1=0x09;
- if(time<=3){P1=0x12;}
- }
- }
- }
- void time0()interrupt 1
- {
- TH0=(65535-50000)/256;//定時(shí)50ms
- TL0=(65535-50000)%256;
- num++;
- if(num==20)//1s時(shí)間
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
紅綠燈.zip
(96.49 KB, 下載次數(shù): 16)
2020-9-15 15:23 上傳
點(diǎn)擊文件名下載附件
源程序和仿真 下載積分: 黑幣 -5
|
|