位定義是依次定義適用的 便于在后面控制時候使用,思路是基于點亮LED的高低電平控制,所使用的開發板默認都有上拉電阻,所以底電位亮燈。延時程序使用小精靈自動生成,極大地提高效率,通過在main之前定義編輯后直接調用 結構極大地簡化,也便于明了的修改
- #include "reg52.h"
- typedef unsigned char u8 ; //定義變量參//
- typedef unsigned int u16 ;
- sbit D1=P0^0; //A方向行道紅燈
- sbit D2=P0^1;//A方向行道綠燈
- sbit D3=P0^2;//A方向紅燈
- sbit D4=P0^3; //A方向黃燈
- sbit D5=P0^4; //A方向綠燈
- sbit D6=P0^5; //B方向紅燈
- sbit D7=P0^6; //B方向黃燈
- sbit D8=P0^7; //B方向綠燈
- sbit D9=P2^0; //B方向行道紅燈
- sbit D0=P2^1; //B方向行道綠燈
- void delay5s() //誤差 0us
- {
- unsigned char a,b,c;
- for(c=165;c>0;c--)
- for(b=100;b>0;b--)
- for(a=150;a>0;a--);
- }
- void delay30s() //誤差 0us
- {
- unsigned char a,b,c,n;
- for(c=254;c>0;c--)
- for(b=232;b>0;b--)
- for(a=253;a>0;a--);
- for(n=2440;n>0;n--);
- }
- void jiaotongdeng()
- {
- D1=0;D2=1;D3=0;D4=1;D5=1;D6=1;D7=1;D8=0;D9=1;D0=0;
- delay30s();
- D1=0;D2=1;D3=1;D4=~D4;D5=1;D6=1;D7=~D7;D8=1;D9=1;D0=~D0;
- delay5s();
- D1=1;D2=0;D3=1;D4=1;D5=0;D6=0;D7=1;D8=1;D9=0;D0=1;
- delay30s();
- D1=0;D2=1;D3=1;D4=~D4;D5=1;D6=1;D7=~D7;D8=1;D9=1;D0=~D0;
- delay5s();
- }
- void main()
- {
- while(1)
- {
- jiaotongdeng();
- }
- }
復制代碼
|