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

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

        基于51單片機之ADC(可銜接各種傳感器來控制)

        作者:CaKen   來源:CaKen工作室   點擊數:  更新時間:2014年09月02日   【字體:

         ******************************  Copyright(C) CaKe  ************************************

        ========================================================================================
        ==============**版權信息   : CaKen工作室                                  ==============
        ==============**文件名     : main.c                                       ==============
        ==============**作者       : CaKen                                        ==============
        ==============**版本號     : V1.0                                         ==============
        ==============**時間       : 2014.08.30                                   ==============
        ==============**功能描述   : ADC實驗測試                                  ==============
        ========================================================================================
        ==============**新浪微博   :CaKen            ==============
        ****************************************************************************************
         
        #include"STC12C5A60S2.H"
        #include"intrins.h"      
         
        sbit SMG1 = P2^4;  //數碼管1
        sbit SMG2 = P2^5;  //數碼管2
        sbit SMG3 = P2^6;  //數碼管3
        sbit SMG4 = P2^7;  //數碼管4
         
        unsigned char code Tab[]=
        {0xc0,0xf9,0xa4,0xb0,
        0x99,0x92,0x82,0xf8,
        0x80,0x90,0x88,0x83,
        0xc6,0xa1,0x86,0x8e}; //陽
         
        ****************************************************************************************
        函數名:毫秒級CPU延時函數
        調  用:DELAY_MS (?);
        參  數:1~65535(參數不可為0)
        返回值:無
        結  果:占用CPU方式延時與參數數值相同的毫秒時間
        備  注:應用于1T單片機時i<600,應用于12T單片機時i<125
        ****************************************************************************************/
         
        void DELAY_MS (unsigned int a)
        {
         unsigned int i;
         while( --a != 0){
          for(i = 0; i < 600; i++);
         }
        }
         
        ***************************************************************************************
        函數名:延時程序
        調  用:delay();
        參  數:
        返回值:
        結  果:
        備  注: 0.1ms延時程序(12MHz 10倍于51單片機速度時)
        ****************************************************************************************/
         
        void delay (unsigned int a)
        {
         unsigned char i;
           while( --a != 0)
           {
          for(i = 0; i < 12; i++);
           }        
        }
         
        ****************************************************************************************
        ** 函數名: Display_smg(?);
        ** 說明  : 數碼管顯示程序
        ** 輸入值:
        ** 輸出值: 無
        ** 返回值: 無
        *****************************************************************************************/
         
        void Display_smg(unsigned int x)
        {
              P0 = Tab[x/1000];
              SMG1 = 0;
              delay(2);
              SMG1 = 1;
         
              P0 = Tab[x00/100];
              SMG2 = 0;
              delay(2);
              SMG2 = 1;
         
           P0 = Tab[x0/10];  
              SMG3 = 0;   
              delay(2);
           SMG3 = 1;
         
              P0 = Tab[x];
              SMG4 = 0;
              delay(2);  
                SMG4 = 1;
        }
         
        *********************************************************************************************
        函數名:10位A/D轉換初始化函數
        調  用:ADC_Init (?);
        參  數:輸入的端口(0000 0XXX 其中XXX是設置輸入端口號,可用十進制0~7表示,0表示P1.0,7表示P1.7)
        返回值:無
        結  果:開啟ADC功能并設置ADC的輸入端口
        備  注:使用ADC功能時需要將對應的IO接口設置為高阻輸入方式(例如:P1M1 = 0x01;)
        **********************************************************************************************/
         
        void ADC_Init (unsigned char CHA)
        {
         unsigned char AD_FIN=0; //存儲A/D轉換標志
            CHA &= 0x07;            //選擇ADC的8個接口中的一個(0000 0111 清0高5位)
            ADC_CONTR  = 0x40;  //ADC轉換的速度(0XX0 0000 其中XX控制速度,請根據數據手冊設置)
            _nop_();
            ADC_CONTR |= CHA;       //選擇A/D當前通道
            _nop_();
            ADC_CONTR |= 0x80;      //啟動A/D電源
            DELAY_MS(1);            //使輸入電壓達到穩定(1ms即可)
        }
        *********************************************************************************************
        函數名:10位A/D轉換函數
        調  用:? = ADC_Read();
        參  數:無
        返回值:10位ADC數據高(從0到1023(十進制))
        結  果:讀出指定ADC接口的A/D轉換值,并返回數值
        備  注:適用于STC12C5A60S2系列單片機(必須使用STC12C5A60S2.H頭文件)
        **********************************************************************************************/
         
        unsigned int ADC_Read (void)
        {
         unsigned char AD_FIN=0;           //存儲A/D轉換標志
            ADC_CONTR |= 0x08;                //啟動A/D轉換(0000 1000 令ADCS = 1)
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            while (AD_FIN ==0)     //等待A/D轉換結束
         {   
                AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉換結束否
            }
            ADC_CONTR &= 0xE7;               //1111 0111 清ADC_FLAG位, 關閉A/D轉換,
            return (ADC_RES*4+ADC_RESL);     //返回A/D轉換結果(10位ADC數據高8位在ADC_RES中,低2位在ADC_RESL中)
        }
         
        ********************************************************************************************
        函數名:主函數
        調  用:無
        參  數:無
        返回值:無
        結  果:程序開始處,無限循環
        備  注:
        ********************************************************************************************/
         
        void main(void)
            unsigned int m;
         ADC_Init (0);    //初始化P1^0
         
         P1M1 = 0X01; //設置為高阻輸入P1^0
         P1M0 = 0X00;
                               
         while(1)
          {
            m = ADC_Read();    //把數模轉換的數值給m
            Display_smg(m);    //數碼管顯示值的大小
          }
         
        }
         
         
         
         
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮