交通燈單片機程序:
- #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);
- }
- }
復制代碼
0.png (45.72 KB, 下載次數: 110)
下載附件
2017-3-31 05:00 上傳
基于51單片機交通燈設計下載:
交通燈.rar
(32.45 KB, 下載次數: 59)
2017-3-30 09:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|