在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STC89C52單片機AD測試實驗

            STC89C52單片機AD測試實驗

            作者: 時間:2016-11-21 來源:網(wǎng)絡 收藏
            ///////////////////////////////////////////////////////////////////////////

            實現(xiàn)功能: 調節(jié)實驗板上的標號為AD0的電位器改變電壓,通過PCF8591的采集,把
            數(shù)據(jù)傳輸給單片機,單片機通過處理把采集到的電壓值,顯示在數(shù)碼管
            上,注意所采用的通道為第0通道,也就是說調節(jié)的是AD0電位器
            實驗板型號:BS-XYD-C52
            實驗名稱:AD測試實驗
            編寫人:謝應東
            編寫日期: 2012-4-30
            ///////////////////////////////////////////////////////////////////////////
            #include //包含52單片機頭文件
            #include//包含標準輸入輸出文件

            本文引用地址:http://www.biyoush.com/article/201611/319237.htm

            #define uchar unsigned char//宏定義這個誰都知道的
            #define uint unsigned int

            uchar code table[]={
            0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰數(shù)碼管1至F數(shù)字編碼

            sbit duan=P2^6; //573鎖存器段鎖存端
            sbit wei=P2^7; //位鎖存端

            sbit sda=P2^0; //定義模擬IIC總線的數(shù)據(jù)線
            sbit scl=P2^1; //定義模擬IIC總線的時鐘線

            float val;
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:毫秒延時函數(shù)
            函數(shù)功能:實現(xiàn)毫秒級的延時
            參數(shù)介紹:Delay_MS: 定義需要延時的毫秒的數(shù)值
            iNumber: 記錄Delay_MS的數(shù)值,以for語句實現(xiàn)所要求的延時
            iValue: 要延時毫秒所要進行的循環(huán)數(shù)值,本數(shù)值為實際測得
            返回值:
            注意事項:本實驗是在所用晶振為12M的前提下實現(xiàn)的毫秒延時,本函數(shù)是通過循環(huán)的形
            式完成,所以如果改變了晶振的頻率,請做相應的改變
            ///////////////////////////////////////////////////////////////////////////
            void DelayMs(uint Delay_MS)
            {
            uint iNumber,iValue;
            for(iNumber=0;iNumber{
            iValue=107;
            while(iValue--);
            }
            }
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:DelayUs
            函數(shù)功能:延時幾個微秒(us),用來IIC總線延時
            參數(shù)介紹:無
            返回值:
            注意事項:無
            ///////////////////////////////////////////////////////////////////////////
            void DelayUs()
            {;;}
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:Display_V
            函數(shù)功能:把通過PCF8591采集到的數(shù)據(jù),在單片機處理完之后,顯示在數(shù)碼管上
            參數(shù)介紹:cBai:要顯示在第一個數(shù)碼管上的數(shù)字
            cShi:要顯示在第二個數(shù)碼管上的數(shù)字
            cGe:要顯示在第三個數(shù)碼管上的數(shù)字
            返回值:
            注意事項:注意實驗板上所要用到底的數(shù)碼管為共陰極的數(shù)碼管
            ///////////////////////////////////////////////////////////////////////////
            void Display_V(uchar cBai,uchar cShi,uchar cGe)
            {
            duan=1; //打開數(shù)碼管的段選
            P0=table[cBai]|0x80;//送入相應的段選0x80是為了點亮數(shù)碼管小數(shù)點(dp端)
            duan=0;//關閉數(shù)碼管的段選
            P0=0xff;
            wei=1;//打開數(shù)碼管的位選
            P0=0xfe; //給要點亮數(shù)碼管的公共極低電平
            wei=0;//關閉數(shù)碼管的位選
            DelayMs(5);//穩(wěn)定時序

            duan=1;//打開數(shù)碼管的段選
            P0=table[cShi];//送入相應的段選
            duan=0;//關閉數(shù)碼管的段選
            P0=0xff;
            wei=1; //打開數(shù)碼管的位選
            P0=0xfd; //給要點亮數(shù)碼管的公共極低電平
            wei=0; //打開數(shù)碼管的位選
            DelayMs(5); //穩(wěn)定時序

            duan=1; //打開數(shù)碼管的段選
            P0=table[cGe]; //送入相應的段選
            duan=0; //關閉數(shù)碼管的段選
            P0=0xff;
            wei=1; //打開數(shù)碼管的位選
            P0=0xfb; //給要點亮數(shù)碼管的公共極低電平
            wei=0; //打開數(shù)碼管的位選
            DelayMs(5); //穩(wěn)定時序
            }
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:Init_IIC
            函數(shù)功能:完成對IIC總線數(shù)據(jù)線時鐘線初始化
            參數(shù)介紹:無
            返回值:
            注意事項:無
            ///////////////////////////////////////////////////////////////////////////
            void Init_IIC()
            {
            sda=1;
            scl=1;
            }
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:Start_IIC
            函數(shù)功能:IIC總線的開始條件
            參數(shù)介紹:無
            返回值:
            注意事項:具體請參考相關的文檔
            ///////////////////////////////////////////////////////////////////////////
            void Start_IIC()//開始條件
            {
            sda=1;
            DelayUs();
            scl=1;
            DelayUs();
            sda=0;
            }
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:Stop_IIC
            函數(shù)功能:IIC總線的終止條件
            參數(shù)介紹:無
            返回值:
            注意事項:具體請參考相關的文檔
            ///////////////////////////////////////////////////////////////////////////
            void Stop_IIC()
            {
            sda=0;
            DelayUs();
            scl=1;
            DelayUs();
            sda=1;
            DelayUs();
            }
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:Response_IIC
            函數(shù)功能:IIC總線的應答條件
            參數(shù)介紹:cNumber: 定義一個延時的變量
            返回值:
            注意事項:具體請參考相關的文檔
            ///////////////////////////////////////////////////////////////////////////
            void Response_IIC()//
            {
            uchar cNumber=0;
            scl=1;
            DelayUs();
            while((sda==1)&&(cNumber<255))
            cNumber++; //加一個等待時間防止程序一直處在檢測狀態(tài)
            scl=0;//這個是應答和非應答綜合的應答條件
            DelayUs();
            }
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:Write_byte
            函數(shù)功能:通過IIC總線向PCF8591寫入一個字節(jié)
            參數(shù)介紹:cData:要寫入的字節(jié)的值
            cNumber: 定義for語句中用到的變量,因為IIC總線是一位一位寫入的,所
            以需要循環(huán)8次
            cTempValue: 臨時的一個變量
            返回值:
            注意事項:具體請參考相關IIC文檔
            ///////////////////////////////////////////////////////////////////////////
            void Write_byte(uchar cData)
            {
            uchar cNumber,cTempValue;
            cTempValue=cData;
            for(cNumber=0;cNumber<8;cNumber++) //循環(huán)8次,完成一個字節(jié)的寫入
            {
            cTempValue=cTempValue<<1; //CY=cTempValue^7;
            scl=0;
            DelayUs();
            sda=CY; //CY 進位標志位
            DelayUs();
            scl=1;
            DelayUs();
            }
            scl=0;
            DelayUs();
            sda=1;
            DelayUs();
            }
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:Read_byte
            函數(shù)功能:通過IIC總線,從器件里讀取一個字節(jié),因為必須是一位一位讀,所以需要
            循環(huán)8次
            參數(shù)介紹:cNumber:for句用到的循環(huán)變量
            返回值: cValue:返回讀取到的字節(jié)
            注意事項:請參考相應的文檔
            ///////////////////////////////////////////////////////////////////////////
            uchar Read_byte()
            {
            uchar cNumber=0,cValue=0;
            scl=0;
            DelayUs();
            sda=1;
            DelayUs();
            for(cNumber=0;cNumber<8;cNumber++) //完成對一個字節(jié)的讀取
            {
            scl=1;
            DelayUs();
            cValue=(cValue<<1)|sda; //通過循環(huán)得到一個字節(jié)
            scl=0;
            DelayUs();
            }
            return cValue; //返回讀取到的字節(jié)
            }
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:Read_channel
            函數(shù)功能:選取PCF8591的AD輸入通道,然后再讀出采集到數(shù)值,即電壓值
            參數(shù)介紹:無
            返回值: cValue:返回采集到的數(shù)據(jù)
            注意事項:無
            ///////////////////////////////////////////////////////////////////////////
            uchar Read_channel(uchar cChannel)//PCF通道選擇函數(shù)
            {
            uchar cValue; //從這個通道讀出數(shù)據(jù)是大多數(shù)學習者
            Start_IIC(); //比較模糊的地方
            Write_byte(0x90); //這個時序請按照AT24C02的任意讀時序圖進行操作
            Response_IIC();
            Write_byte(0x40|cChannel);
            Response_IIC();
            Start_IIC();
            Write_byte(0x91); //給IIC器件寫入相應的命令
            Response_IIC();
            cValue=Read_byte(); //讀取采集到的數(shù)據(jù)
            Stop_IIC();

            return cValue; //返回采集到的數(shù)據(jù)
            }
            ///////////////////////////////////////////////////////////////////////////
            函數(shù)名稱:main
            函數(shù)功能:完成對采集到的電壓值的處理,然后顯示到前三個數(shù)碼管上
            參數(shù)介紹:cBai:因為把數(shù)分離,才能顯示到數(shù)碼管上,作為分離后顯示在第一個數(shù)
            碼管上的數(shù)
            cShi:顯示在第二個數(shù)碼管上的數(shù)
            cGe:顯示在第三個數(shù)碼管上的數(shù)
            iTempValue:臨時變量,賦予從PCF8591通道0讀出來的數(shù)值
            返回值:
            注意事項:無
            ///////////////////////////////////////////////////////////////////////////
            void main()
            {
            uchar cBai,cShi,cGe;
            int iTempValue;
            Init_IIC();//IIC總線初始化
            while(1) //大循環(huán)是用來不停地掃描PCF8591的數(shù)據(jù)變換
            {
            iTempValue=Read_channel(0);//從PCF8591通道0讀出來的數(shù)值
            val=(float)iTempValue/51; //要把num強制轉換為float型進行計算
            cBai=iTempValue/51;//下面這三個分離是把從通道讀取到的數(shù)值轉換為電壓
            cShi=iTempValueQ*10/51; //想一下5V為255那么1v是不是代表51
            cGe=iTempValueQ*10Q*10/51;//1.8v是不是數(shù)值92
            Display_V(cBai,cShi,cGe);//把電壓值顯示到數(shù)碼管上
            }
            }



            評論


            技術專區(qū)

            關閉