• 專注電子技術學習與研究
    當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

    手動可調變速的流水燈程序

    作者:佚名   來源:本站原創   點擊數:  更新時間:2014年03月15日   【字體:

    /*********** 2011.7 JQ--V0.1 宏晶公司STC單片機開發板 ************

    $ 程序作用:手動可調變速的流水燈的效果

    $ 程序作者: JQ(QQ:489555226  Email:489555226@qq.com)

    $ 程序版本: JQ--V0.1

    $ 編制日期: 2011-07-01

    $ 編譯器:Keil C uVision2

    $ 所用芯片:STC89C52,11.0592M晶振

    $ 程序開發板:JQ--V0.1版本

    $ 程序通俗易懂  注釋詳細  結構化模塊是51單片機初學愛好者的理想選擇

    ******************** JQ--V0.1 宏晶公司STC單片機開發板 **********************/

    #include<reg52.h>      //52單片機頭文件定義

    #define uchar unsigned char    //數據類型uchar的宏定義
    #define uint  unsigned int   //數據類型uint的宏定義

    #define led P0          //P0口宏定義
    void init();
    uchar count,speed,num;  //全局變量定義

    sbit key =P3^2;

    void delay(uint k);

    uchar code huayang[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};//0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0x55,0x55,0x00};   //花樣跑馬燈數組定義  隨便改變數組里面的值就可以改變花樣(該數組有27個數值)
    void main(void)   //主函數
    {
     uchar i;
     init();
     while(1)         //while死循環
     {
      for(i=0;i<8;i++)     //0-26共27次循環依次取出數組中的數(i小于多少由數組中的數決定)
      {
       led=huayang[i];   //把取出的數以總線的方式賦給led即P0口
      }
     }
    }

     

    void init()   //初始化
    {
     speed=0;
     TMOD=0x01;   //定時器T0的應用   后面會詳細講
     TH0=(65536-speed)/256;
     TL0=(65536-speed)%256;
     EA=1;
     ET0=1;
     TR0=1;
    }


    void timer0() interrupt 1   //定時器T0中斷   后面會詳細講
    {
      TH0=(65536-speed)/256;
      TL0=(65536-speed)%256;
      count++;
      if(count==5000)
      {
       count=0;

       if(key==0)      //按鍵消抖
       { delay(5);
        if(key==0)
         num++;
         while(!key);   //松手檢測  只要當key==1時才會退出這個while循環!

         if(num==1)
         {
          speed=50;  //速度調節(也就是改變定時器的初值。
         }

         if(num==2)
         {
          speed=100;
         }

         if(num==3)
         {
          speed=150;
         }
        

         if(num==4)
         {
          speed=200;
         }
       }
      }
     if(num==5)  num=0;
     
    }

     
    void delay(uint k)   //延時子函數
    {
       while(--k);
    }


    //這過程序用到了定時器  后面會跟大家詳細講解的! 謝謝大家。!
    //對于調速函數可以進行修改,使其變得更加的簡潔,speed=num*50;if(num==6)  num=0;//防止程序出錯,所以進行了限制!

    關閉窗口

    相關文章

    亚洲一区二区制服在线|在绩专区欧美自拍日韩|青春娱乐网97超碰人人射|在线观看国产网址你懂的