|
- #include <reg51.h>
- #include <INTRINS.H>
- unsigned char count; //中斷次數(shù)計數(shù)
- unsigned char s; //狀態(tài)變量
- unsigned char sn,ew; //倒計時變量
- unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //0~9十個數(shù)字和共陽型段碼
- sbit r1=P1^0; //兩個方向的紅黃綠燈
- sbit y1=P1^1;
- sbit g1=P1^2;
- sbit r2=P1^5;
- sbit y2=P1^4;
- sbit g2=P1^3;
- void delay(unsigned int j)
- {
- while(j--);
- }
- display()
- {
- unsigned char i,wk=0x01;//wk變量作位控,初始選通右邊第1位
- unsigned char buf[4]; //聲明數(shù)碼管顯示字形緩沖數(shù)組
- buf[0]=seg[sn%10]; //南北方向計時變量
- buf[1]=seg[sn/10%10];
- buf[2]=seg[ew%10];
- buf[3]=seg[ew/10%10];
- for (i=0;i<4;i++)
- {
- P3=wk; //輸出位控
- P0=buf[i]; //依次輸出段碼
- delay(50); //延時
- wk=_crol_(wk,1); //位控左移一位
- P0=0xff; //熄滅所有數(shù)碼管(消隱)
- }
- }
- int main()
- {
- TMOD=0x01;
- TH0=0x3c;
- TL0=0xb0;
- EA=1;
- ET0=1;
- TR0=1;
- sn=40;
- ew=45;
- while(1)
- {
- display();
- switch(s)
- {
- case 0: //狀態(tài)一
- r1=1;y1=1;g1=0;
- r2=0;y2=1;g2=1;
- if(sn==255) //字符型數(shù)據(jù)0減1等255
- {
- sn=4;
- s=1;
- }
- break;
- case 1: //狀態(tài)二
- r1=1;y1=0;g1=1;
- r2=0;y2=1;g2=1;
- if(sn==255)
- {
- sn=35;
- ew=30;
- s=2;
- }
- break;
- case 2: //狀態(tài)三
- r1=0;y1=1;g1=1;
- r2=1;y2=1;g2=0;
- if(ew==255)
- {
- ew=4;
- s=3;
- }
- break;
- case 3: //狀態(tài)四
- r1=0;y1=1;g1=1;
- r2=1;y2=0;g2=1;
- if(ew==255)
- {
- sn=40;
- ew=45;
- s=0;
- }
- break;
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
|
-
-
6-03帶數(shù)顯交通燈.zip
2021-6-22 18:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
50.08 KB, 下載次數(shù): 5, 下載積分: 黑幣 -5
|