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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2826|回復: 6
收起左側

這個NTC測溫的單片機程序有什么問題嗎?

[復制鏈接]
ID:709761 發表于 2021-8-12 08:03 | 顯示全部樓層 |閱讀模式
#include "STC15.h"
#include "intrins.h"
#include <stdio.h>


#define uchar   unsigned  char
#define uint    unsigned int


#define ADC_POWER   0x80            //ADC電源控制位
#define ADC_FLAG    0x10            //ADC完成標志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540個時鐘
#define ADC_SPEEDL  0x20            //360個時鐘
#define ADC_SPEEDH  0x40            //180個時鐘
#define ADC_SPEEDHH 0x60            //90個時鐘




uchar code adwd[101] = {
        0xBD,0xBB,0xB9,0xB6,0xB4,0xB2,0xAF,0xAD,0xAA,0xA8,
        0xA5,0xA3,0xA0,0x9D,0x9B,0x98,0x96,0x93,0x91,0x8E,
        0x8B,0x89,0x86,0x84,0x81,0x7F,0x7C,0x7A,0x77,0x75,
        0x72,0x70,0x6E,0x6B,0x69,0x67,0x65,0x62,0x60,0x5E,
        0x5C,0x5A,0x58,0x56,0x54,0x52,0x50,0x4E,0x4C,0x4B,
        0x49,0x47,0x46,0x44,0x42,0x41,0x3F,0x3E,0x3C,0x3B,
        0x39,0x38,0x37,0x35,0x34,0x33,0x32,0x30,0x2F,0x2E,
        0x2D,0x2C,0x2B,0x2A,0x29,0x28,0x27,0x26,0x25,0x24,
        0x23,0x22,0x22,0x21,0x20,0x1F,0x1F,0x1E,0x1D,0x1D,
        0x1C,0x1B,0x1B,0x1A,0x19,0x19,0x18,0x18,0x17,0x17,
        0x16
};//采樣AD 從大到小


uchar code wd[101] = {
        0,1,2,3,4,5,6,7,8,9,

        10,11,12,13,14,15,16,17,18,19,

        20,21,22,23,24,25,26,27,28,29,

        30,31,32,33,34,35,36,37,38,39,

        40,41,42,43,44,45,46,47,48,49,

        50,51,52,53,54,55,56,57,58,59,

        60,61,62,63,64,65,66,67,68,69,

        70,71,72,73,74,75,76,77,78,79,

        80,81,82,83,84,85,86,87,88,89,

        90,91,92,93,94,95,96,97,98,99,

        100
};//AD對應的溫度值 從低到高



void UartInit(void)                //115200bps@12.000MHz
{
        SCON = 0x50;                //8位數據,可變波特率
        AUXR |= 0x40;                //定時器時鐘1T模式
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                //設置定時器模式
        TL1 = 0xE6;                //設置定時初始值
        TH1 = 0xFF;                //設置定時初始值
        ET1 = 0;                //禁止定時器%d中斷
        TR1 = 1;                //定時器1開始計時
}

/*----------------------------
軟件延時
----------------------------*/
void Delay(uint n)
{
    uint x;

    while (n--)
    {
        x = 5000;
        while (x--);
    }
}


/*發送一個字節*/
void SendData(uchar ch)
{
    SBUF = ch;                 //寫數據到UART數據寄存器
                while(TI == 0);
                TI = 0;
}


/*發送字符串*/
void SendString(uchar *s)
{
    while (*s)                  //檢測字符串結束標志
    {
        SendData(*s++);         //發送當前字符
    }
}




/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
        P1ASF = 0x01;           //設置P1.0口為AD口
        ADC_RES = 0;              //清除結果寄存器高8位

        ADC_CONTR = ADC_POWER ;  //ADC上電
        Delay(2);                     
}



uchar  adc()
{
        uchar ad;
        ADC_CONTR = 0x88;     //ADC上電并啟動(轉換完成自動關閉ADC,每次轉換都要先啟動ADC)
        Delay(2);                       
        while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉換完成
        ADC_CONTR &= ~ADC_FLAG;         //清零ADC標志位
        ad=ADC_RES;       //得到高8位
  return  ad;


}

uint htd(uint a)//十六進制轉十進制
{
    uint b,c;
b=a%10;
c=b;
a=a/10;
b=a%10;
c=c+(b<<4);
a=a/10;
b=a%10;
c=c+(b<<8);
a=a/10;
b=a%10;
c=c+(b<<12);
return c;
}
void main()
{

uchar y,j;
    UartInit();                     //初始化串口
    InitADC();                      //初始化ADC
    while (1)
    {
                        y=adc();
            for(j=0; j<100; j++)        //查溫度表
        {
             if(y>=adwd[j]) //AD數組從大到小逐次比較
         
                                                 break;
                 
        }

                                
                        SendData(htd(wd[j]));//溫度值轉十進制發送

            Delay(400);

    }
}

回復

使用道具 舉報

ID:94031 發表于 2021-8-12 09:13 | 顯示全部樓層
硬件圖也不告訴大家,不好分析。
回復

使用道具 舉報

ID:277550 發表于 2021-8-12 10:15 | 顯示全部樓層

樓主應該先說自己遇到的情況,不然要人家制作、測試
回復

使用道具 舉報

ID:161164 發表于 2021-8-12 12:46 | 顯示全部樓層
不明白如何"溫度值轉十進制發送"
如一數值:0xF0F0(61680)
htd(0xF0F0) => 0x1680(5760)
完全不是同一樣東西
十進制和十六進制只是給人看的
單片機看到的只是二進制

SendData()是發送字符串用的
htd的反回類型是uint即兩個uchar
如SendData(0x1680),電腦收到的會是下面兩個字符
20210812_123153.png

建議寫法如下
  1. void main()
  2. {

  3.         uchar y,j;
  4.         uchar Show[10];//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  5.         UartInit();                     //初始化串口
  6.         InitADC();                      //初始化ADC
  7.         while (1)
  8.         {
  9.                 y=adc();
  10.                 for(j=0; j<100; j++)        //查溫度表
  11.                 {
  12.                         if(y>=adwd[j]) //AD數組從大到小逐次比較

  13.                                 break;

  14.                 }

  15.                 sprintf(Show,"%u",wd[j]);//<<<<<<<<<<
  16.                 SendData(Show);

  17.                 Delay(400);

  18.         }
  19. }
復制代碼





回復

使用道具 舉報

ID:401564 發表于 2021-8-13 00:02 | 顯示全部樓層
什么情況也不說,什么電路也沒有,NTC在串聯電阻的什么位置也不知道
代碼往這一放,就問"這代碼有沒有問題?"
我想幫你,我還自己焊個電路,說不定NTC位置不對,我還得換一下,完了我還得建立一個工程,燒錄驗證一下......
兄弟,上論壇叫別人幫忙好歹有個態度吧
比如說,我這代碼編譯不成功或者NTC溫度和實際溫度有誤差,要么是無法燒錄什么的
你不能像那某個網友一樣來消遣我們的熱情呀
回復

使用道具 舉報

ID:128516 發表于 2021-8-13 11:24 | 顯示全部樓層
這個要查表
回復

使用道具 舉報

ID:94657 發表于 2021-8-13 15:02 | 顯示全部樓層
ntc測溫,嚴謹一點是需要知道B值的,再通過B值、AD值去推算真實溫度
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久在线 | 国产免费观看一级国产 | 黄色网一级片 | 国产乱一区二区三区视频 | 日韩欧美在线播放 | 日韩中文字幕一区 | 亚洲精品久久久蜜桃 | 国产亚洲精品精品国产亚洲综合 | 国产精品午夜电影 | 九九伊人sl水蜜桃色推荐 | h片在线免费观看 | 久久97精品 | 精品国产不卡一区二区三区 | 久久久久一区二区三区四区 | av在线播放国产 | 欧美 日韩 亚洲91麻豆精品 | 午夜精品三区 | 日韩三级 | 青青久久 | 日本久久久一区二区三区 | 国产精品1区2区 | 在线免费视频一区 | 国产伦精品一区二区三区精品视频 | 色一级| 久久国产精品免费一区二区三区 | 在线国产99 | 一区二区三区欧美 | 99精品国产一区二区三区 | 日本精品免费在线观看 | 精品99久久 | 亚洲欧美日韩精品久久亚洲区 | 精品亚洲国产成av人片传媒 | 久久久夜夜夜 | 国产婷婷精品av在线 | 久久精品色欧美aⅴ一区二区 | 欧美网址在线观看 | av毛片 | 99久久日韩精品免费热麻豆美女 | 亚洲人成人一区二区在线观看 | 国产精品精品视频一区二区三区 | 色综合视频 |