<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

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

        規范編程——走馬燈

        作者:寒竹子   來源:用戶上傳   點擊數:  更新時間:2014年05月18日   【字體:

         此程序是基于51i單片機開發板上面寫的,如需要移植到自己的電路上,修改相應的端口即可,開發板完整的電路圖下載:  點這里  

        /**

          ***************************************************************************
          * @file    :  led.h
          * @author  :  xr
          * @date    :  2014年5月15日10:33:21
          * @brief   :  LED頭文件
          ***************************************************************************
          * @ttention
          * 實驗平臺 :  51開發板
          *
          *
          ***************************************************************************
          */
        #ifndef _LED_H_
        #define _LED_H_
         
        #include <reg52.h>
         
        /* 138譯碼器配置及LED數據口配置 */
        sbit ADDR0 = P1^0;
        sbit ADDR1 = P1^1;
        sbit ADDR2 = P1^2;
        sbit ADDR3 = P1^3;
        sbit ENLED = P1^4;
         
        #define LED_DB P0
         
        void ConfigHC138( void );
        void LED_Scan( void );
         
        #endif /* _LED_H_ */
         
        /*************************************************END OF FILE******************/
         
        /**
          ***************************************************************************
          * @file    :  led.c
          * @author  :  xr
          * @date    :  2014年5月15日10:33:21
          * @brief   :  LED功能文件
          ***************************************************************************
          * @ttention
          *     實驗平臺 :  Kingst51開發板
          *     單片機   :  STC89C52RC MCU
          *     晶振頻率 :  11.0592 MHZ
          ***************************************************************************
          */
        #include "led.h"
         
        /* 定義跑馬燈數組 */
        unsigned char code LedTable[] = {
                                            0xE0,    // 11100000
                                            0xC1,    // 11000001
                                            0x83,    // 10000011
                                            0x07,    // 00000111
                                            0x0E,    // 00001110
                                            0x1C,    // 00011100
                                            0x38,    // 00111000
                                            0x70     // 11100000
                                          };
         
         
        /**
          * @brief   :  138譯碼器配置
          * @param   :  無
          * @retval  :  無
          */
        void ConfigHC138( void )
        {
            /* 配置138譯碼器選擇LEDS6 */
            ADDR3 = 1;
            ENLED = 0;                 /* 選擇U3 */
            
            ADDR2 = 1;
            ADDR1 = 1;
            ADDR0 = 0;                 /* 選擇LEDS6 */
        }
         
        /**
          * @brief  :  Led小燈掃描
          * @param  :  無
          * @retval :  無
          */
        void LED_Scan( void )
        {
            static unsigned char j = 0;
            LED_DB = 0xFF;              /* 消隱 */
            
            LED_DB = LedTable[j++];    /* 送入要求的數據到LED顯示數據口 */
            j &= 0x07;                 /* 到8歸零 */
        }
         
        /*******************************************END OF FILE***********/
         
        /**
          ***********************************************************************
          * @file    :  main.c
          * @author  :  xr
          * @date    :  2014年5月15日10:27:27
          * @version :  V1.2.3
          * @brief   :  跑馬燈  
          ***********************************************************************
          * @attention
          *     實驗平臺 :  Kingst51開發板
          *     單片機   :  STC89C52RC MCU
          *     晶振頻率 :  11.0592 MHZ
          ***********************************************************************
          */
        #include <reg52.h>
        #include "led.h"
         
        /* 定義系統時鐘 */
        #define SYS_XTAL (11059200/12)
         
        /* 定時器T0高低字節重載值 */
        unsigned char thr0, tlr0;
         
        /* 200ms到標志 */
        bit flag200ms = 0;
         
        /***********************Local function defines***************************/
         
        void ConfigTimer0(unsigned int xms);
         
        /************************************************************************/
         
         
        /**
          * @brief   :  主函數
          * @param   :  無
          * @retval  :  無
          */
        void main(void)
        {
            ConfigHC138();                      /* 配置HC138譯碼器選擇LED小燈 */
            ConfigTimer0(4);                    /* 定時器T0配置定時4ms */
            
            while (1)
            {
                if ( flag200ms )
                {
                    flag200ms = 0;
                    LED_Scan();                    /* 掃描LED小燈 */
                }
            }
        }
         
        /**
          * @brief  :  配置定時器T0
          * @param  :  無
          * @retval :  無
          */
        void ConfigTimer0(unsigned int xms)
        {
            unsigned long tmp;
            
            tmp = (SYS_XTAL * xms) / 1000;   /* 定時xms需要的計數值 */
            tmp = 65536 - tmp + 13;               /* 定時xms需要裝入的初值 */
            thr0 = (unsigned char)(tmp >> 8);
            tlr0 = (unsigned char)tmp;
            
            TMOD &= 0xF0;                    /* 清零T0控制位 */
            TMOD |= 0x01;                    /* 設定T0工作方式1 */
            TH0  = thr0;
            TL0  = tlr0;
            ET0  = 1;                        /* 開定時器0中斷 */
            TR0  = 1;                        /* 開啟定時器T0 */
            
            EA   = 1;                        /* 開總中斷 */
        }
         
        /**
          * @brief  :  定時器T0中斷服務函數
          * @param  :  無
          * @retval :  無
          */
        void Timer0_ISP() interrupt 1
        {
            static unsigned int counter = 0;   /* 計數器 */
            
            TH0 = thr0;
            TL0 = tlr0;
            
            counter++;
            
            if ( counter >= 50 )
            {
                counter = 0;
                flag200ms = 1;                 /* 置位200ms標志位 */
            }
        }
         
        /******************************************************END OF FILE********/
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮