我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 3569|回复: 22

[资料贡献] STM32查表法读NTC值并显示温度

[复制链接]

该用户从未签到

6

主题

206

回帖

142

积分

二级逆天

本来无一物,何处惹尘

积分
142

终身成就奖

QQ
发表于 2020-3-4 10:41:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"

#include "led.h"
#include "key.h"
#include "lcd1602.h"
#include "fan.h"
#include "adc.h"
#include "ntc.h"




//#include "motor.h"
//************************************************************************

//#define OVER_MENU  10     //定义一个数,判断这个数是否需要退出菜单设置

//vu8 auto_return=0;


/**********************
* 目录结构体定义 *
**********************/
/*
struct MenuItem
{
    unsigned char MenuCount;         //当前层节点数
    unsigned char *DisplayString;     //菜单标题
    void (*Subs)();                   //节点函数
    struct MenuItem *ChildrenMenus; //子节点
    struct MenuItem *ParentMenus;     //父节点
};

/***********************
* 调用子函数区 *
********************** */
/*
void NullSubs(void)
{            
   
}



void MotorSetPWM(void)
{  

    //不分频。PWM频率=72000000/900=80Khz
        //delay_ms(10);  
      TIM_SetCompare2(TIM4,100);

}

/*********************
   
//------------------------------------------------------------------------------
/***********************
* 结构体区 *
***********************/
//----------------------以下为例子,请根据实际情况修改---------------------------
/*
struct MenuItem TimeMenu[4];
struct MenuItem UvlampMenu[4];
struct MenuItem UvfanMenu[4];
struct MenuItem MotorMenu[5];
struct MenuItem MainMenu[5];


struct MenuItem TimeMenu[4]=
{  //MenuCount         DisplayString             Subs                 ChildrenMenus          ParentMenus
     {4,              "1.Time Set",                  NullSubs,            Null,                      MainMenu},
     {4,             "2.OFF",                         NullSubs,          Null,                      MainMenu},
     {4,             "3.ON",                      NullSubs,            Null,                      MainMenu},
     {4,           "4.Back",                         NullSubs,            MainMenu,                MainMenu},
};   


struct MenuItem UvlampMenu[4]=
{  //MenuCount         DisplayString             Subs                ChildrenMenus         ParentMenus
     {4,              "1.UVlamp Set",              NullSubs,            Null,                   MainMenu},
     {4,             "2.OFF",                            UVlampSetOFF,            Null,                   MainMenu},
     {4,             "3.ON",                            UVlampSetON,            Null,                   MainMenu},
     {4,             "4.Back",                        NullSubs,            MainMenu,              MainMenu},
};     

struct MenuItem UvfanMenu[4]=
{  //MenuCount         DisplayString             Subs                 ChildrenMenus        ParentMenus
     {4,              "1.UVfan Set"    ,             NullSubs,       Null,                   MainMenu},
     {4,             "2.OFF",                             UVfanSetOFF,         Null,                  MainMenu},
     {4,             "3.ON",                                UVfanSetON,         Null,                  MainMenu},
      {4,             "4.Back",                                  NullSubs,       MainMenu,          MainMenu},
};     

struct MenuItem MotorMenu[5]=
{  //MenuCount         DisplayString             Subs                  ChildrenMenus          ParentMenus
     {5,              "1.Motor Set",                      NullSubs,            Null,                MainMenu},
     {5,             "2.Turnleft",                       MotorSetTurnleft,            Null,                   MainMenu},
     {5,             "2.TurnRight",                       MotorSetTurnRight,            Null,                   MainMenu},
     {5,             "4.OFF",                                MotorSetOFF,            Null,                  MainMenu},
     {5,             "5.Back",                                 NullSubs,            MainMenu,          MainMenu},
};     

struct MenuItem MainMenu[5]=
{  //MenuCount         DisplayString             Subs                ChildrenMenus          ParentMenus
     {5,              "1.Time Set"    ,                NullSubs,            TimeMenu,              Null},
     {5,             "2.UVlamp Set",              NullSubs,          UvlampMenu,            Null},
     {5,             "3.UVfan Set",                NullSubs,          UvfanMenu,            Null},
     {5,           "4.Motor Set",                NullSubs,            MotorMenu,            Null},
      {5,             "5.Back",                        NullSubs,            MainMenu,              MainMenu},
};


//------------------------------------------------------------------------------

/***********************
* 全局变量声明区 *
***********************/
/*
struct MenuItem (*MenuPoint) = MainMenu; //结构体指针,指向结构体后由内部函数指针指向功能函数
vu8 DisplayStart = 0; //显示时的第一个菜单项
vu8 UserChoose = 0;      //用户所选菜单项
u8 DisplayPoint = 0; //显示指针
u8 MaxItems;                     //同级最大菜单数
vu8 ShowCount=2;        //同屏显示菜单数

/***********************
*显示函数区 *
***********************/
/*
void ShowMenu(void)
{
      u8 n;
     MaxItems = MenuPoint[0].MenuCount;//定义最大同级菜单
     DisplayPoint = DisplayStart;
     for(n=0;DisplayPoint<MaxItems&&n<ShowCount;n++)
         {
                if(DisplayPoint==UserChoose)
                 LCD1602_Show_Str(0,n,"->");
                 LCD1602_Show_Str(2,n,MenuPoint[DisplayPoint++].DisplayString);
         
         }

}


/***********************************************************************************/


  // KeyRunScan();                        
                         // UpdateDisplay();
                         // PtcRun();
                         // FanRun();
                    


           // Motor_Init();
                    //uart_init(115200);   
            //TIM4_PWM_Init(899000,0);     //不分频。PWM频率=72000000/900=8Khz
            //TIM_SetCompare2(TIM4,100);
                    //MotorSetTurnLeft();
                //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
               
               
void ERROR_CH(void)
{
  u8 temp_N,temp_F=0;
  temp_N=Get_Adc_Average(ADC_Channel_8,30);
   
    if (temp_N>5000)
    {
      LCD1602_ClearScreen();
        delay_ms(10);
      LCD1602_Show_Str(0, 0, "SYSTEM STOP");
        LCD1602_Show_Str(1, 0, "ERROR CODE:NTC");
            
    }
    temp_N=0;
    while(1)
    {
      Ledred_pro(10);
            
    }
// 可以增加风扇自检测试
   
}   




int main(void)
{   
                     
            u32 adcx;
            u16 adcx_v;
            u16 adc_value_16;
            float vx;
            
     
     
     
           u8 adcx1[2] ={ 0,0};
                 u8 adcx2[3] ={ 0,0,0};
                 
               u8 adc_vcc_1[3] ={0,0,0};
            // u8 adc_vcc_2[2] ={0,0};
                    
            
     
                    u16 led0pwmval=0;
                    delay_init();   
            
              LED_Init();
                    KEY_Init();
            FAN_Init();
          Adc_Init();
                    LCD1602_GPIO_Init();
                    LCD1602_Init();
            
                 
     
          LCD1602_ClearScreen();
            LCD1602_Show_Str(0, 0, "Temperature:");
                    Setzi();
                  Displayonechar(5,1,0x00);      
                 
        //LCD1602_Show_Str(0, 1, "Temperature:");   
     
           delay_ms(100);
      
           while(1)
                        
                {
                       //ERROR_CH();
                                      
                    
                    
                       adcx_v = Read_NTC();
                       adc_vcc_1[0]    =(adcx_v/100)+0x30;        //把得到的值放到数组里面;
             adc_vcc_1[1]    =(adcx_v%100/10)+0x30;
                       adc_vcc_1[2] =(adcx_v%10)+0x30;   
                 //LCD1602_ClearScreen();                              // 显示ADC的值 0~4096;
                       LCD1602_Show_Str(0, 0, "Temperature:");
                       LCD1602_Show_Str(2, 1, adc_vcc_1);          //第二行空两个字符再显示,
                       Setzi();
                         Displayonechar(5,1,0x00);        //显示摄示度
                    
                    
                     
            
                    //    void KeyRunScan();
                    //    void UpdateDisplay();
                    //    void PtcRun();
                    //    void LedRun();
                    //    void FanRun();
                        
                        
           /********显示NTC电压值********Dean-02-27*******
            
                       adc_value_16 = adcx_v*326/4096;
                       adcx1[0]    =(adc_value_16/1000)+0x30;        //把得到的值放到数组里面;
             adcx1[1]    =(adc_value_16%1000/100)+0x30;
                       adcx2[0]    =(adc_value_16%100/10)+0x30;
                       adcx2[1] =(adc_value_16%10)+0x30;         
                                                                   // 显示NTC电压值
                       LCD1602_Show_Str(2, 1, adcx1);          //第二行空两个字符再显示,
                         LCD1602_Show_Str(4, 1,".");            //adcx1占用两个显示,所以前面空4格字符开始显示
                       LCD1602_Show_Str(5, 1,adcx2);        //adcx1和字符“.”占用5个显示位,所以前面空5个字符开始显示
             LCD1602_Show_Str(7, 1,"V");                    //adcx2占两个显示位+前面5个,所以移动7位再显示字符   

                *************************************/         
        
                         delay_ms(280);   
                                 
                    
                    }

送给有需要的人!
         NTC.zip (110 KB, 下载次数: 3)
回复

使用道具 举报

该用户从未签到

6

主题

206

回帖

142

积分

二级逆天

本来无一物,何处惹尘

积分
142

终身成就奖

QQ
 楼主| 发表于 2020-3-4 10:42:37 | 显示全部楼层
回复

使用道具 举报

  • TA的每日心情
    难过
    2024-8-26 14:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    46

    主题

    2972

    回帖

    2209

    积分

    Allegro240812初级

    积分
    2209

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2020-3-4 10:53:40 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    72

    主题

    1594

    回帖

    0

    积分

    1元学习Allegro(2期)

    积分
    0

    终身成就奖优秀斑竹奖

    发表于 2020-3-4 14:19:08 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    38

    主题

    408

    回帖

    1815

    积分

    PADS-241024高级班

    积分
    1815

    终身成就奖特殊贡献奖

    发表于 2020-3-4 16:20:02 | 显示全部楼层
    ~只要思想不滑坡,办法总比困难多~
    回复

    使用道具 举报

    该用户从未签到

    517

    主题

    3568

    回帖

    2142

    积分

    二级逆天

    积分
    2142

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2020-3-4 19:46:31 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-6-14 16:03
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    0

    主题

    1万

    回帖

    7618

    积分

    二级逆天

    积分
    7618

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2020-3-4 20:07:55 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    244

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

    QQ
    发表于 2020-3-5 09:02:44 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    6

    主题

    206

    回帖

    142

    积分

    二级逆天

    本来无一物,何处惹尘

    积分
    142

    终身成就奖

    QQ
     楼主| 发表于 2020-3-5 09:36:11 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    6

    主题

    206

    回帖

    142

    积分

    二级逆天

    本来无一物,何处惹尘

    积分
    142

    终身成就奖

    QQ
     楼主| 发表于 2020-3-5 15:27:17 | 显示全部楼层

    Re:回 jjkks2020 的帖子

    qwrjnb:

    查表法最常用,18B20是总线方式。NTC是先计算好AD值存到数组里面,再通过查表后再转换成温度值。
    0a9fcebf-8cef-41b0-80bc-0536ee86ac4a.jpg
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表