久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 各種測壓差的傳感器通用代碼_實現的土壤濕度傳感器 [打印本頁]

作者: 菜鳥1營    時間: 2019-12-8 19:49
標題: 各種測壓差的傳感器通用代碼_實現的土壤濕度傳感器
我所說的土壤濕度傳感器主流的是yl-69型號的,但是我用的是fc-28型號;
型號看不懂的就別管了只管接線就行

傳感器接線:AO口接AIN0~3(自己選,自己設置通道0~3),DO口不接,(AO,DO二選一);
                    GND接GND   VCC接VCC                 ----------四線制

主要在單片機上使用I2C和AD轉換模塊
main函數代碼:
void main()
{
    unsigned char val;
    unsigned char str[10];

    EA = 1;            //開總中斷
    ConfigTimer0(10);  //配置T0定時10ms
    InitLcd1602();     //初始化液晶   
        LcdShowStr(0, 0, "Humidity:");  //顯示通道指示
        LcdShowStr(13,0,"%");

    while (1)
    {
        if (flag300ms)
        {
            flag300ms = 0;
            //顯示通道0的電壓
         /*   val = GetADCValue(0);     //獲取ADC通道0的轉換值
            ValueToString(str, val);  //轉為字符串格式的電壓值
            LcdShowStr(0, 1, str);    //顯示到液晶上 */
            //顯示通道1的電壓
            val = GetADCValue(1);
            ValueToString(str, val);
                                          disp_persent(str);
            LcdShowStr(6, 1, str);
            //顯示通道3的電壓
         /*   val = GetADCValue(3);
            ValueToString(str, val);
            LcdShowStr(12, 1, str);  */
        }
    }
}


1602顯示部分代碼:
void disp_persent(unsigned char *str){              //百分比顯示
              if(str[0]== 0x35)                   // 00%   5v
{
        LcdShowStr(11,0,"00")        ;
}
             else if(str[0] == 0x34)                   // 25%   4v
{
        LcdShowStr(11,0,"25")        ;
}
              else if(str[0] == 0x33)                   // 50%   3v
{
        LcdShowStr(11,0,"50")        ;
}
              else if(str[0] == 0x32)                   // 75%   2v
{
        LcdShowStr(11,0,"75")        ;
}
              else if(str[0] == 0x31)                   // 99%   1v
{
        LcdShowStr(11,0,"99")        ;
}
    /*else{
                        LcdShowStr(11,0,"xx")        ;
                }*/
}---------------------------------------------------------------------------------------------------------------------------------------------------
想了下
第一篇文章免費全部代碼貼上:
模塊是51單片機書的模塊代碼


3個.c文件
另外兩個自己書上復制粘貼進去
我貼main.c的代碼
/**各種電壓差傳感器都可以使用  單片機上使用的I2C傳輸數據;
    若傳上位機可以調用uart.c里面的configUart(9600);  //配置波特率9600
                        value =GetADCValue(1);
                ValueToString(str,value);
                send_string(str);
                delay();
                串口發送到上位機
*/
#include <reg52.h>


bit flag300ms = 1;       //300ms定時標志
unsigned char T0RH = 0;  //T0重載值的高字節
unsigned char T0RL = 0;  //T0重載值的低字節


void ConfigTimer0(unsigned int ms);
unsigned char GetADCValue(unsigned char chn);
void ValueToString(unsigned char *str, unsigned char val);
extern void I2CStart();
extern void I2CStop();
extern unsigned char I2CReadACK();
extern unsigned char I2CReadNAK();
extern bit I2CWrite(unsigned char dat);
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void disp_persent(unsigned char *str);
         
void main()
{
    unsigned char val;
    unsigned char str[10];
   
    EA = 1;            //開總中斷
    ConfigTimer0(10);  //配置T0定時10ms
    InitLcd1602();     //初始化液晶   
        LcdShowStr(0, 0, "Humidity:");  //顯示通道指示
        LcdShowStr(13,0,"%");
   
    while (1)
    {
        if (flag300ms)
        {
            flag300ms = 0;
            //顯示通道0的電壓
         /*   val = GetADCValue(0);     //獲取ADC通道0的轉換值
            ValueToString(str, val);  //轉為字符串格式的電壓值
            LcdShowStr(0, 1, str);    //顯示到液晶上 */
            //顯示通道1的電壓
            val = GetADCValue(1);
            ValueToString(str, val);
                                          disp_persent(str);
            LcdShowStr(6, 1, str);
            //顯示通道3的電壓
         /*   val = GetADCValue(3);
            ValueToString(str, val);
            LcdShowStr(12, 1, str);  */
        }
    }
}


/* 讀取當前的ADC轉換值,chn-ADC通道號0~3 */
unsigned char GetADCValue(unsigned char chn)
{
    unsigned char val;
   
    I2CStart();
    if (!I2CWrite(0x48<<1))  //尋址PCF8591,如未應答,則停止操作并返回0
    {
        I2CStop();
        return 0;
    }
    I2CWrite(0x40|chn);        //寫入控制字節,選擇轉換通道
    I2CStart();
    I2CWrite((0x48<<1)|0x01);  //尋址PCF8591,指定后續為讀操作   
    I2CReadACK();              //先空讀一個字節,提供采樣轉換時間
    val = I2CReadNAK();        //讀取剛剛轉換完的值
    I2CStop();
   
    return val;
}
/* ADC轉換值轉為實際電壓值的字符串形式,str-字符串指針,val-AD轉換值 */
void ValueToString(unsigned char *str, unsigned char val)
{
    //電壓值=轉換結果*2.5V/255,式中的25隱含了一位十進制小數
    val = (val*50)/255;   //故意先乘10方便后面計算取余數   *10     //小數是不能存在unsigned char數據中的。                                                                 
    str[0] = (val/10) + '0';  //整數位字符                         //unsigned char是用來存字符的,本質是ascii碼值,也就是整數。
    str[1] = '.';             //小數點
    str[2] = (val%10) + '0';  //小數位字符
    str[3] = 'V';             //電壓單位
    str[4] = '\0';            //結束符
}
/* 配置并啟動T0,ms-T0定時時間 */
void ConfigTimer0(unsigned int ms)
{
    unsigned long tmp;  //臨時變量
   
    tmp = 11059200 / 12;      //定時器計數頻率
    tmp = (tmp * ms) / 1000;  //計算所需的計數值
    tmp = 65536 - tmp;        //計算定時器重載值
    tmp = tmp + 12;           //補償中斷響應延時造成的誤差
    T0RH = (unsigned char)(tmp>>8);  //定時器重載值拆分為高低字節
    T0RL = (unsigned char)tmp;
    TMOD &= 0xF0;   //清零T0的控制位
    TMOD |= 0x01;   //配置T0為模式1
    TH0 = T0RH;     //加載T0重載值
    TL0 = T0RL;
    ET0 = 1;        //使能T0中斷
    TR0 = 1;        //啟動T0
}
/* T0中斷服務函數,執行300ms定時 */
void InterruptTimer0() interrupt 1
{
    static unsigned char tmr300ms = 0;
   
    TH0 = T0RH;  //重新加載重載值
    TL0 = T0RL;
    tmr300ms++;
    if (tmr300ms >= 30)  //定時300ms
    {
        tmr300ms = 0;
        flag300ms = 1;
    }
}


void disp_persent(unsigned char *str){
              if(str[0]== 0x35)                   // 00%   5v
{
        LcdShowStr(11,0,"00")        ;
}
             else if(str[0] == 0x34)                   // 25%   4v
{
        LcdShowStr(11,0,"25")        ;
}
              else if(str[0] == 0x33)                   // 50%   3v
{
        LcdShowStr(11,0,"50")        ;
}
              else if(str[0] == 0x32)                   // 75%   2v
{
        LcdShowStr(11,0,"75")        ;
}
              else if(str[0] == 0x31)                   // 99%   1v
{
        LcdShowStr(11,0,"99")        ;
}
    /*else{
                        LcdShowStr(11,0,"xx")        ;
                }*/
}        
        -----------------------------------------
本人很懶有黑幣的可以下載下面的包,貢獻點積分啥的      感謝

模數轉換_適用壓差傳感器.zip (52.94 KB, 下載次數: 50)



作者: 趙伍杰    時間: 2020-1-30 21:49
你這個板子是普中科技開發板?





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 在线免费激情视频 | 久久久精品视频一区二区三区 | 国产欧美精品在线 | 国产精品区一区二区三 | 国产精品美女www | 国产美女网站 | av片在线免费看 | 欧美精品一区二区在线观看 | 亚洲国产精品精华素 | 91精品国产自产精品男人的天堂 | 午夜免费在线电影 | 亚洲最新网址 | 精品乱码一区二区 | 黄色一级免费 | 国产综合久久久久久鬼色 | 在线成人av | 亚洲一区视频在线播放 | 黄片毛片 | 天天综合天天 | 九九伦理电影 | 国产福利观看 | 亚洲精品国产一区 | 久久一区二区av | 永久免费视频 | 久久大陆 | 夜夜爽99久久国产综合精品女不卡 | 有码在线| 欧美日本亚洲 | 亚洲欧美另类在线观看 | 久久亚洲高清 | 亚洲人成网站777色婷婷 | 日韩中文字幕在线视频观看 | 精产国产伦理一二三区 | 91一区二区 | 亚洲国产精品va在线看黑人 | 精品国产色 | 欧美黄 片免费观看 | 成人性生交大片免费看r链接 | 91精品国模一区二区三区 | 久草资源 | 国产欧美精品一区二区色综合 |