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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 783|回復(fù): 1
收起左側(cè)

為什么我這個(gè)代碼讀出來(lái)的ADC值一直都是0

[復(fù)制鏈接]
ID:1041297 發(fā)表于 2024-8-28 14:23 | 顯示全部樓層 |閱讀模式
#include "H/Function_Init.H"
#include "math.h"
#include "H/TM1637.H"

unsigned char code CODE[10]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};
unsigned char code number[12] = {0xFD,0x51,0xBB,0xAF,0x67,0xCF,0xDF,0xA5,0xFF,0xEF,0x20,0x76};
                                                                                                                                //0   1    2     3    4    5    6    7    8    9  LED燈  H
unsigned char code time[10] = {0xFD,0x51,0xBB,0xAF,0x67,0xCF,0xDF,0xA5,0xFF,0xEF};
                               //0   1    2     3    4    5    6    7    8    9
uint8_t data ucRunStatus = 0;//0表示待機(jī)狀態(tài),1表示進(jìn)入焦度調(diào)整模式
uint8_t data program;        //焦度模式選擇
uint8_t data mode_3s_flag;   //焦度模式3s不操作標(biāo)志位
uint16_t data mode_3s_time;   //焦度模式3s累計(jì)時(shí)間
uint8_t data mode_last_value;  //上次焦度模式的值
uint8_t data mode_value;       //焦度模式的值
uint8_t data digital_tube_flash;
uint8_t data digital_tube_flashtime;
uint8_t key_pressdown_total = 0; //按鍵按下總數(shù)
uint16_t time_setting;      //時(shí)間設(shè)定


//float T_c=0.0;   //溫度值
// 定義常量
#define R_FIXED 1000.0 // 固定電阻值1kΩ
#define B_CONST 4537.0 // NTC的B常數(shù)
#define T0 373.15 // 100℃轉(zhuǎn)換為開(kāi)爾文
#define R0 1000.0 // NTC在25℃時(shí)的電阻值1kΩ
#define clk  P20
#define dio  P05
#define key_press P25
#define Time_Max  945
#define Time_Min  0

unsigned int ADCValue = 0x0000;
unsigned int  tmpValue;
bit AdcFlag = 0;
/***********ADC采樣頻率選擇*************/
enum ADCFreq {F32=0,F24,F16,F12,F8,F6,F4,F3};

/***********ADC采樣口選擇*************/
#if (IC_MODEL == SC92F7413)
enum Channel {AIN0=0,AIN1,AIN2,AIN3,AIN4,AIN5,AIN6,AIN7,AIN8,AIN9,VDD4=31};
#endif

#if (IC_MODEL == SC92F7412)
enum Channel {AIN2=2,AIN3,AIN4,AIN5,AIN8=8,AIN9,VDD4=31};
#endif

#if (IC_MODEL == SC92F7411)
enum Channel {AIN2=2,AIN3,AIN4,AIN8=8,AIN9,VDD4=31};
#endif


/********************延時(shí)函數(shù),延時(shí)nms******************/
void delay_nms(unsigned int n)
{
         unsigned int i;
         while(n--)
         for(i=0;i<550;i++);
}
///=======================================
void Delay_us(unsigned int i) //nus 延時(shí)
{
         for(;i>0;i--)
         _nop_();
}


/*
函數(shù)功能:IIC開(kāi)始信號(hào)
參數(shù):無(wú)
返回值:無(wú)
備注:無(wú)
*/
void I2CStart(void)
{
         clk = 1;
         dio = 1;
         Delay_us(2);
         dio = 0;
}


/*
函數(shù)功能:IIC應(yīng)答信號(hào)
參數(shù):無(wú)
返回值:無(wú)
備注:無(wú)
*/
void I2Cask(void)
{
        clk = 0;
        Delay_us(5); //在第八個(gè)時(shí)鐘下降沿之后延時(shí) 5us,開(kāi)始判斷 ACK 信號(hào)
        while(dio);
        clk = 1;
        Delay_us(2);
        clk=0;
}
///========================================

/*
函數(shù)功能:IIC停止信號(hào)
參數(shù):無(wú)
返回值:無(wú)
備注:無(wú)
*/
void I2CStop(void)  
{
         clk = 0;
         Delay_us(2);
         dio = 0;
         Delay_us(2);
         clk = 1;
         Delay_us(2);
         dio = 1;
}


/*
函數(shù)功能:寫一個(gè)字節(jié)
參數(shù):無(wú)
返回值:無(wú)
備注:無(wú)
*/
void I2CWrByte(unsigned char oneByte) //
{
         unsigned char i;
         for(i=0;i<8;i++)
         {
                  clk = 0;
            if(oneByte&0x01) //低位在前
           {
             dio = 1;
           }
                 else
                 {
                         dio = 0;
                 }
                 Delay_us(3);
                 oneByte=oneByte>>1;
                 clk=1;
                 Delay_us(3);
        }
}

/*
函數(shù)功能:自動(dòng)地址加一模式
參數(shù):無(wú)
返回值:無(wú)
備注:無(wú)
*/
void SmgDisplay(void) //寫顯示寄存器
{
         unsigned char i;
         I2CStart();
         I2CWrByte(0x40); // 40H 地址自動(dòng)加 1 模式,44H 固定地址模式,本程序采
         I2Cask();
         I2CStop();
         I2CStart();
         I2CWrByte(0xc0); //設(shè)置首地址,
         I2Cask();
         for(i=0;i<4;i++) //地址自加,不必每次都寫地址
         {
                        I2CWrByte(0x00); //送數(shù)據(jù)
                        I2Cask();
         }
         I2CStop();
         I2CStart();
         I2CWrByte(0x8f); //開(kāi)顯示 ,最大亮度
         I2Cask();
         I2CStop();
}


/*
函數(shù)功能:顯示函數(shù),固定地址寫數(shù)據(jù)
參數(shù):無(wú)
返回值:無(wú)
備注:無(wú)
*/
void disp(unsigned char add, unsigned char value)
{
         I2CStart();
         I2CWrByte(0x44);                                 //數(shù)據(jù)命令設(shè)置:固定地址,寫數(shù)據(jù)到顯示寄存器
         I2Cask();
         I2CStop();

         I2CStart();
         I2CWrByte(add);                                //地址命令設(shè)置:寫入add對(duì)應(yīng)地址
         I2Cask();

       
                 I2CWrByte(number[value]);                        //給add地址寫數(shù)據(jù)
                 I2Cask();
                 I2CStop();
               
         
         I2CStart();
         I2CWrByte(0x8C);                                //顯示控制命令:開(kāi)顯示,脈沖寬度為11/16.
         I2Cask();
         I2CStop();

}




/*****************************************************
*函數(shù)名稱:void ADC_Init(uint Channel,uchar ADCFreq)
*函數(shù)功能:ADC初始化
*入口參數(shù):void
*出口參數(shù):void
*****************************************************/
void ADC_Init(uint Channel)
{
        ADCCON = 0X80|Channel;                //開(kāi)啟ADC,ADC采樣頻率為3M ,選擇Channel位ADC采樣口
        if(Channel<8)
        {
                ADCCFG0 = 1<<Channel;   //設(shè)置Channel作為采樣口
        }
        else
        {
                ADCCFG1 = 1<<(Channel-8);   //設(shè)置Channel作為采樣口
        }
        //ADCCFG2 = F8;
        IE |= 0X40;        //開(kāi)啟ADC中斷
        //EA = 1;
}

/*****************************************************
*函數(shù)名稱:uint ADC_GetAverageValue(uint Channel,ADC_SamplesNum_TypeDef ADC_SamplesNum)
*函數(shù)功能:ADC采樣取平均值
*入口參數(shù):
ADC_SamplesNum_TypeDef ADC_SamplesNum:采樣次數(shù)
*出口參數(shù):
uint:多次采樣平均值
*****************************************************/
uint ADC_GetAverageValue(ADC_SamplesNum_TypeDef ADC_SamplesNum)
{
        uchar tmpCnt;
        uint tmpValueSum = 0, tmpValue;
  uint tmpValue_Max = 0, tmpValue_Min = 0xFFFF;

        for(tmpCnt = 0; tmpCnt < ADC_SamplesNum; tmpCnt ++)
  {
                EA = 0;
                OPINX = 0xC1;
          OPREG |= 0x10;      //切換至二分頻               
                EA = 1;               
                ADCCON |= 0X40;             //開(kāi)始一次ADC轉(zhuǎn)換
          while(!AdcFlag);          //等待ADC轉(zhuǎn)換完成       
                EA = 0;
                OPINX = 0xC1;
          OPREG &= 0xCF;      //返回至一分頻
                EA = 1;       
               
                AdcFlag = 0;            
          tmpValue=(ADCVH<<4)+(ADCVL>>4);     //獲取單次轉(zhuǎn)換值
                  
    if(tmpValue > tmpValue_Max)   //獲取多次轉(zhuǎn)換值中的最大值
      tmpValue_Max = tmpValue;   
    if(tmpValue < tmpValue_Min)   //獲取多次轉(zhuǎn)換值中的最小值
      tmpValue_Min = tmpValue;               
    tmpValueSum += tmpValue;   //累加多次轉(zhuǎn)換值的和
  }

        /* 通過(guò)硬件乘除法器來(lái)計(jì)算平均值 */
  {
    OPERCON |= 0X40;
    /* 被除數(shù)為16位數(shù)據(jù) */
    tmpValueSum -= (tmpValue_Max + tmpValue_Min);
    EXA0 = tmpValueSum;
    EXA1 = tmpValueSum >> 8;
    EXBL = ADC_SamplesNum - 2;                        //除數(shù)為8位數(shù)據(jù)

    OPERCON |= 0x80;                                //開(kāi)始除法計(jì)算
    while(OPERCON & 0x80);                        //等待計(jì)算完畢

    //獲取商
    tmpValue = (uint)EXA0;
    tmpValue |= EXA1 << 8;
        }
    return tmpValue;                        //返回平均值
}


///*
//函數(shù)功能:LED燈全滅
//參數(shù):無(wú)
//返回值:無(wú)
//備注:無(wú)
//*/
void Display_OFF(void)
{
        I2CStart();
        I2CWrByte(0x80);
        I2CStop();   
}

uint32_t code ntc_r[100]=
{
        //180°~ 189°
        1548,1514,1480,1447,1414,1383,1353,1323,1294,1266,
       
        //190°~199°
        1239,1212,1186,1160,1136,1112,1088,1065,1043,1021,
       
        //200°~209°
        1000,978,957,937,917,897,878,860,841,824,
       
        //210~219°
        807,790,773,758,742,727,712,698,683,670,
       
        //220°~229°
        656,643,630,618,606,594,582,571,560,549,
};






float calculate_temperature(float voltage) {
    float R_ntc, T;
    float V_supply = 5; // 電源電壓3.3V

    // 計(jì)算NTC電阻值
    R_ntc = R_FIXED * (V_supply / voltage - 1);

    // 計(jì)算溫度(開(kāi)爾文)
    T = 1 / (1 / T0 + log(R_ntc / R0) / B_CONST);

    // 轉(zhuǎn)換為攝氏度
    T = T - 273.15;

    return T;
}



uint8_t b;

//void digital(uint8_t c)
//{
//               
//                disp(0xc0,c/100);
//                disp(0xc1,c/10%10);
//                disp(0xc2,c%10);
//}




///==============================================
void main(void)
{
        uint8_t a;

ADC_Init(AIN2);
IO_Init(); //初始化
Timer_Init();
SmgDisplay(); //開(kāi)機(jī)時(shí)先全滅,不加這條會(huì)亂顯示

while(1)
{
         if(ubTime100mS)
         {
                 ubTime100mS =0;
                        a = ADC_GetAverageValue();
                        //b = calculate_temperature(a);
                        disp(0xc0,a/100);
                disp(0xc1,a/10%10);
                disp(0xc2,a%10);

                }
                        
        }
}
請(qǐng)大伙幫我看看,這個(gè)是賽元微的芯片,SC92F7411

回復(fù)

使用道具 舉報(bào)

ID:404160 發(fā)表于 2024-8-28 16:09 | 顯示全部樓層
初始化問(wèn)題:確保 ADC_Init 函數(shù)正確初始化了 ADC。注意,你的代碼中使用了 ADC_Init(AIN2),這意味著你選擇 AIN2 作為采樣通道,確保這個(gè)通道連接到了合適的模擬信號(hào)。

中斷問(wèn)題:在 ADC_GetAverageValue 函數(shù)中,你使用 while(!AdcFlag); 等待 ADC 轉(zhuǎn)換完成。確保沒(méi)有中斷沖突,并且 AdcFlag 被正確設(shè)置。

硬件連接問(wèn)題:確保 AIN2 引腳與需要測(cè)量的模擬信號(hào)正確連接,并且沒(méi)有任何短路或開(kāi)路的問(wèn)題。

電源和參考電壓:檢查電源是否穩(wěn)定,確保 ADC 的參考電壓正確設(shè)置,因?yàn)槿绻麉⒖茧妷哼^(guò)低,可能會(huì)導(dǎo)致讀數(shù)為 0。

濾波和去噪:如果信號(hào)有噪聲或不穩(wěn)定,可能會(huì)影響 ADC 的讀數(shù)。考慮在硬件或軟件(通過(guò)軟件濾波)上加入濾波。

ADC 配置問(wèn)題:檢查 ADCCON、ADCCFG0 和 ADCCFG1 的配置是否符合芯片手冊(cè)的推薦設(shè)置。

軟件邏輯問(wèn)題:檢查 ADC_GetAverageValue 函數(shù)的邏輯是否正確,特別是取平均值的邏輯部分。

顯示問(wèn)題:注意,你有一個(gè)注釋掉的 digital 函數(shù),如果你打算使用它來(lái)顯示數(shù)值,需要取消注釋,并確保它的邏輯是正確的。

調(diào)試:在 ADC_GetAverageValue 函數(shù)中,打印 tmpValue 或 tmpValueSum 來(lái)檢查在取平均值之前和之后的值,以幫助診斷問(wèn)題。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久三级 | 精品一区二区三区在线视频 | 午夜影视在线观看 | 无码日韩精品一区二区免费 | 日韩在线一区二区 | 免费国产黄网站在线观看视频 | 国产91丝袜在线18 | 颜色网站在线观看 | 久久久久网站 | www国产精品 | 亚洲日本中文字幕在线 | 国产女人与拘做视频免费 | 国产精品久久久久久久久 | 亚洲精品一区国产精品 | 日本三级网 | 成人免费在线小视频 | 黄视频免费观看 | 爱爱视频日本 | 99精品久久 | 国产亚洲精品美女久久久久久久久久 | 精品免费国产视频 | 欧美在线视频一区二区 | 五月免费视频 | 精品久久久久久亚洲精品 | 国产一级片免费在线观看 | 91亚洲国产成人精品一区二三 | 国产精品久久久久久久久久 | 午夜精品一区二区三区三上悠亚 | 国产乱码久久久久久 | 成人午夜毛片 | 亚洲精品久久久久久一区二区 | 午夜精品一区 | 午夜精品久久久久久久久久久久 | 欧美精品三区 | 一区免费视频 | 国产成年人小视频 | 久久久国产一区 | 国产精品一区在线 | 久久不卡日韩美女 | 久久亚洲经典 | 性一交一乱一伦视频免费观看 |