色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MSC51單片機交通燈程序

          MSC51單片機交通燈程序

          作者: 時間:2012-08-16 來源:網絡 收藏
          /***************************************************************
          * 程序名稱:交通燈 晶振:12.00 P1口
          * 實驗對象:HC6800學習開發(fā)板
          * 單 片 機:AT89S52或STC89C52 時間:紅綠燈各亮10s
          *
          * 更多的資料和程序共享請關注51hei.com
          ****************************************************************/
          /#include reg52.h>
          #define uchar unsigned char /*宏定義 */
          #define uint unsigned int /*宏定義 */
          uchar sec,sec1; /*秒*/
          uchar int_num; /*定時溢出作用標號*/
          sbit reda=P1^0; //A路口紅燈
          sbit yellowa=P1^1; //A路口黃燈
          sbit greena=P1^2; //A路口綠燈
          sbit redb=P1^3; //B路口紅燈
          sbit yellowb=P1^4; //b路口黃燈
          sbit greenb=P1^5; //b路口綠燈
          void redyellowb(); //b路口紅黃燈閃爍
          void redyellowa(); //a路口紅黃燈閃爍
          void delay10ms(uint x); //閃爍延時
          void inter_init(); /*定時器初始化子函數(shù)聲明*/


          /****專用數(shù)碼管顯示表***/
          //uchar code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; /*0x40顯示“一”符號*/
          //uchar code wema[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00};




          //---------------------初始化T0函數(shù)--------------------------
          void time0(void) interrupt 1 /*定時器T0服務子程序*/
          {
          TH0=(65535-50000)/256;
          TL0=(65535-50000)%256;
          int_num++;
          }

          //---------------------定時器函數(shù)--------------------------
          void inter_init() /*定時器初始化子函數(shù)*/
          {
          EA=1;
          ET0=1; /*打開定時器T0*/
          TMOD=0x01; /*工作方式1*/
          TCON = 0x00; /*觸發(fā)方式*/
          IP = 0x01; /*中斷優(yōu)先級別,T0優(yōu)先*/
          TH0=(65535-50000)/256; /*置初值,大約50ms一個中斷 */
          TL0=(65535-50000)%256;
          TR0=1; /*置位TR0,啟動定時器0*/
          }
          //--------------------- 交通燈變換--------------------------
          void time10()
          {
          if(int_num==20) //20為1s可改為10加速調試
          {
          int_num=0;
          sec++;
          sec1++;
          if(sec==10) //10s
          {
          greenb=1; // b路口綠燈關
          EA=0; // 關中斷
          redyellowa(); // a路口紅黃燈共閃(調用)
          reda=1; // a路口紅燈關
          greena=0; // a路口綠燈開
          redb=0; // b路口紅燈開
          EA=1; // 開中斷
          }
          if(sec1==20) //20s
          {
          greena=1; // a路口綠燈關
          EA=0; // 關中斷
          redyellowb(); // b路口紅黃燈
          redb=1; // b路口紅燈關
          greenb=0; // b路口綠燈開
          reda=0; // a路口紅燈開
          sec=0; // 秒清零
          EA=1; // 關中斷
          sec1=0; // 秒1清零 ()
          }
          } //
          }

          //------------------------------10ms時間調用----------------------------------

          void delay10ms(uint x)
          { uint i,j; // 聲明變量
          for (i=1;ix;i++) // 執(zhí)行x次,延遲X*10ms
          for (j=1;j120;j++);// 執(zhí)行120次,延遲10ms
          } // delay1ms()函數(shù)結束

          //---------------------- // a路口紅黃燈共閃(調用)---------------------------
          void redyellowa()
          {
          yellowb=0;redb=0;
          delay10ms(50);
          yellowb=1;redb=1;
          delay10ms(50);
          yellowb=0;redb=0;
          delay10ms(50);
          yellowb=1;redb=1;
          delay10ms(50);
          yellowb=0;redb=0;
          delay10ms(50);
          yellowb=1;redb=1;
          delay10ms(50);
          yellowb=0;redb=0;
          delay10ms(50);
          yellowb=1;redb=1;
          }
          //---------------------- // b路口紅黃燈共閃(調用)---------------------------
          void redyellowb()
          {
          yellowa=0;reda=0;
          delay10ms(50);
          yellowa=1;reda=1;
          delay10ms(50);
          yellowa=0;reda=0;
          delay10ms(50);
          yellowa=1;reda=1;
          delay10ms(50);
          yellowa=0;reda=0;
          delay10ms(50);
          yellowa=1;reda=1;
          delay10ms(50);
          yellowa=0;reda=0;
          delay10ms(50);
          yellowa=1;reda=1;
          }
          //---------------------主函數(shù)--------------------------------
          void main()
          {
          inter_init(); /*定時器初始化*/
          reda=0;greenb=0; // 路燈初始化
          while(1) //死循環(huán)

          {

          time10(); //調用


          }
          }


          評論


          相關推薦

          技術專區(qū)

          關閉