打印
[开发工具]

【新定义MCU开发板测评】RD8x3x 核心板+EBS002 扩展板热敏电阻采样数码管显示串口打印

[复制链接]
1204|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天主要捣鼓串口,串口搞好了,加在采样热敏电阻数码管显示的工程中。
采用串口0.
原理图:






代码:
#include "SC_Init.h"        // MCU initialization header file, including all firmware library header files
#include "SC_it.h"
#include "..\Drivers\SCDriver_list.h"
#include "HeadFiles\SysFunVarDefine.h"
#include "HeadFiles\FunctionType.h"
#include "rd8_conf.h"
/**************************************Generated by EasyCodeCube*************************************/
USCI0_HandleInfoDef USCI0_HandleInfo;
/*************************************.Generated by EasyCodeCube.************************************/
uint8_t TxData[10] = {0x74,0x65,0x6d,0x70,0x3d,0x3a,0,0,0x0d,0x0a};

/*****************************************************************************************************
* Function Name: main
* Description  : This function implements main function.
* Arguments    : None
* Return Value : None
******************************************************************************************************/
void main(void)
{       
        unsigned long int i=0;
    /*<Generated by EasyCodeCube begin>*/
    /*<UserCodeStart>*//*<SinOne-Tag><36>*/
    IcResourceInit();
    /*<UserCodeEnd>*//*<SinOne-Tag><36>*/
    /*<UserCodeStart>*//*<SinOne-Tag><4>*/
    /*****MainLoop*****/
    while(1)
    {
        /*<UserCodeStart>*//*<SinOne-Tag><94>*/
        if(T0Flag50ms)
        {
            T0Flag50ms=0;
            /*<UserCodeStart>*//*<SinOne-Tag><95>*/
            LedDisp();
            /*<UserCodeEnd>*//*<SinOne-Tag><95>*/
            /*<UserCodeStart>*//*<SinOne-Tag><97>*/
            GetADCValue();
            /*<UserCodeEnd>*//*<SinOne-Tag><97>*/
            /*<UserCodeStart>*//*<SinOne-Tag><96>*/
            GetTemperature();
            /*<UserCodeEnd>*//*<SinOne-Tag><96>*/
            /*<UserCodeStart>*//*<SinOne-Tag><98>*/
            Led_DisplayData(TEMP%10,TEMP/10,TempSign,16);
                        TxData[6]=(uint8_t)((TEMP/10)+0x30);
                        TxData[7]=(uint8_t)((TEMP%10)+0x30);
            //显示时钟点  DOTDISPLAY:开  DOTUNDISPLAY:关
            Led_DisplayDot(DOTUNDISPLAY,DOTUNDISPLAY,DOTUNDISPLAY,DOTUNDISPLAY);
                       
            /*<UserCodeEnd>*//*<SinOne-Tag><98>*/
            /*<Begin-Inserted by EasyCodeCube for Condition>*/
        }
                i++;
                if(i>=9000000)
                {
                        i=0;
                        USCI0_HandleInfo.TxState = USCI0_STATE_READY;
                        while(USCI0_UART_Transmit(&USCI0_HandleInfo, TxData, 10, 0xFFFF)== Status_OK);
                       
                }
        /*<UserCodeEnd>*//*<SinOne-Tag><94>*/
        /*<Begin-Inserted by EasyCodeCube for Condition>*/
    }
    /*<UserCodeEnd>*//*<SinOne-Tag><4>*/
    /*<Generated by EasyCodeCube end>*/
}

初始化程序
#include "SC_Init.h"
#include "SC_it.h"
#include "..\Drivers\SCDriver_list.h"
#include "HeadFiles\SysFunVarDefine.h"
/**************************************Generated by EasyCodeCube*************************************/
void IcResourceInit()
{
    /*<UserCodeStart>*//*<SinOne-Tag><37>*/
        SC_Init(); /***MCU init***/
        
    /*<UserCodeEnd>*//*<SinOne-Tag><37>*/
}
/*****************************************************
*函数名称: SC_Init
*函数功能: MCU初始化函数
*入口参数:void
*出口参数:void
*****************************************************/
void SC_Init(void)
{
        SC_GPIO_Init();
        SC_OPTION_Init();
        SC_TIM0_Init();
        SC_ADC_Init();
        SC_DDIC_Init();
        SC_USCI0_Init();
        /*write initial function here*/       
        EA = 1;       
}
/*****************************************************
*函数名称: SC_USCI0_Init
*函数功能: USCI0初始化函数
*入口参数:void
*出口参数:void
*****************************************************/
void SC_USCI0_Init(void)
{
        /*USCI0_Init write here*/
        GPIO_Init(GPIO0, GPIO_PIN_5,GPIO_MODE_IN_PU);
        GPIO_Init(GPIO0, GPIO_PIN_6,GPIO_MODE_IN_PU);
        USCI0_ITConfig(DISABLE,LOW);
        USCI0_UART_Init(32000000,115200,USCI0_UART_Mode_10B,USCI0_UART_RX_ENABLE);                       
}

子程序:
void LedDisp()
{
    /*<UserCodeStart>*//*<SinOne-Tag><89>*/
    uint8_t i;
        for(i=0;i<8;i++)
        {
                LedTemp[i] = 0;       
        }
    for(i=0;i<4;i++)
        {
                LedSegData(LedCodeTab[LedDataTab[i]],LEDCOM0+i,DotTemp[i]);
        LCDRAM[4]  = LedTemp[0];
        LCDRAM[6]  = LedTemp[1];
        LCDRAM[16] = LedTemp[2];
        LCDRAM[17] = LedTemp[3];
        LCDRAM[18] = LedTemp[4];
        LCDRAM[19] = LedTemp[5];
        LCDRAM[20] = LedTemp[6];
        LCDRAM[23] = LedTemp[7];       
        }
   
    /*<UserCodeEnd>*//*<SinOne-Tag><89>*/
}
/******************************************************************************************************
**函数名称:void GetADCValue(void)*函数功能:得到ADC采集值并求取平均值*入口参
*数:void*出口参数:void*功能说明:测十次,去掉最高最低值求平均值
******************************************************************************************************/
void GetADCValue()
{
    /*<UserCodeStart>*//*<SinOne-Tag><85>*/
    static unsigned int i=0;   
    ADC_StartConversion();  //启动ADC采样
    if(AdcFlag)
    {   
      AdcFlag=0;               
      ADC_Value = ADC_GetConversionValue();  //得ADC采样值
      if(ADC_Value >= value_max)  
         value_max = ADC_Value;   //取一个最大值
      if(ADC_Value <= value_min)  
         value_min = ADC_Value;   //取一个最小值
      ADC_ValueSum = ADC_ValueSum + ADC_Value;  //求和      
      i++;
      }
    if(i==10)
    {  
      ADC_AverageValue = (ADC_ValueSum-value_max-value_min)/8; //去掉最大最小值求平均值
      ADC_ValueSum=0;   //和清零,重测10次
      i=0;
      
      value_min=5000;
      value_max=0;
    }   
   
    /*<UserCodeEnd>*//*<SinOne-Tag><85>*/
}
/******************************************************************************************************
**函数名称:void GetTemperature()*函数功能:将温度对应的ADC值转为温度值*入口参
*数:void*出口参数:void*功能说明:
******************************************************************************************************/
void GetTemperature()
{
    /*<UserCodeStart>*//*<SinOne-Tag><86>*/
    unsigned int i=0;
    for(i=0;i<100;i++)
    {
     if((ADC_AverageValue >= ADCValueToTemp[i]) && (ADC_AverageValue < ADCValueToTemp[i+1]))
      {                                                            
        TEMP = i;           //得转换值对应数组下标
        break;
       }                             
     }
     
    if(TEMP<15)
     {
        TempSign = 18;           //负温度显示‘-’
        TEMP = 15 - TEMP;           //温度值
     }
     else
     {
        TempSign = 16;           //正温度不显示+                 
        TEMP =  TEMP-15;       //温度值            
     }
   
    /*<UserCodeEnd>*//*<SinOne-Tag><86>*/
}
/******************************************************************************************************
**函数名称:void Led_DisplayData()*函数功能:LED显示数据*入口参数:Num1
*COM1对应数据Num2 COM2对应数据Num3 COM3对应数据Num4 COM4对应数据*出口参数
*:void*功能说明:数码管要显示的数据
******************************************************************************************************/
void Led_DisplayData(unsigned int Num1,unsigned int Num2,unsigned int Num3,unsigned int Num4)
{
    /*<UserCodeStart>*//*<SinOne-Tag><87>*/
    LedDataTab[0] = Num1;
    LedDataTab[1] = Num2;
    LedDataTab[2] = Num3;
    LedDataTab[3] = Num4;
   
    /*<UserCodeEnd>*//*<SinOne-Tag><87>*/
}
/******************************************************************************************************
**函数名称:void Led_DisplayDot()*函数功能:LED小数点显示*入口参数:DotDi
*sp1 COM1位小数点DotDisp2 COM2位小数点DotDisp3 COM3位小数点DotDis
*p4 COM4位小数点*出口参数:void*功能说明:选择是否显示小数点
******************************************************************************************************/
void Led_DisplayDot(LedDotDisplay DotDisp1,LedDotDisplay DotDisp2,LedDotDisplay DotDisp3,LedDotDisplay DotDisp4)
{
    /*<UserCodeStart>*//*<SinOne-Tag><88>*/
     DotTemp[0]=DotDisp1;   
     DotTemp[1]=DotDisp2;  
     DotTemp[2]=DotDisp3;  
     DotTemp[3]=DotDisp4;
   
    /*<UserCodeEnd>*//*<SinOne-Tag><88>*/
}
效果图:

使用特权

评论回复
沙发
adolphcocker| | 2023-3-10 16:51 | 只看该作者
EBS002 是什么板子              

使用特权

评论回复
板凳
plsbackup| | 2023-3-10 18:13 | 只看该作者
这个是iic接口的吗》              

使用特权

评论回复
地板
bartonalfred| | 2023-4-4 14:19 | 只看该作者
热敏电阻对地短路会烧电路吗?  

使用特权

评论回复
5
benjaminka| | 2023-4-4 15:40 | 只看该作者
热敏电阻适合哪些情况               

使用特权

评论回复
6
比神乐|  楼主 | 2023-4-5 09:44 | 只看该作者

新定义的一种板子

使用特权

评论回复
7
pl202| | 2023-4-6 17:51 | 只看该作者
求助个NTC热敏电阻的ADC采集

使用特权

评论回复
8
dspmana| | 2023-5-5 22:43 | 只看该作者
热敏电阻测温最常用的读取方法是什么?

使用特权

评论回复
9
hilahope| | 2023-5-6 00:14 | 只看该作者
如何检测NTC热敏电阻的阻值?

使用特权

评论回复
10
vivilyly| | 2023-5-7 10:27 | 只看该作者
电压比较法是一种简单直接的测量方法,它通过将热敏电阻与一个已知电阻串联在一起,然后将它们的两端接到单片机的模拟输入引脚上,利用单片机内部的ADC模块来测量两个电阻并计算出热敏电阻的电阻值。

使用特权

评论回复
11
adolphcocker| | 2023-5-7 14:10 | 只看该作者
如何利用热敏电阻实现温控               

使用特权

评论回复
12
linfelix| | 2023-5-7 15:28 | 只看该作者
使用ADC模块对模拟输入引脚的电压进行采样并转换为数字量。

使用特权

评论回复
13
abotomson| | 2023-5-7 16:24 | 只看该作者
ntc热敏电阻10k的 测得温度偏高怎么办,该选5k的还收15k的

使用特权

评论回复
14
kmzuaz| | 2023-5-7 16:43 | 只看该作者
将热敏电阻与已知电阻串联起来,组成一个电压分压网络。

使用特权

评论回复
15
hearstnorman323| | 2023-5-7 16:52 | 只看该作者
在单片机程序中初始化ADC模块,并设置相应的采样参数。

使用特权

评论回复
16
wwppd| | 2023-5-7 17:18 | 只看该作者
热敏电阻怎么测试               

使用特权

评论回复
17
usysm| | 2023-5-7 19:32 | 只看该作者
电桥法是一种更加精确的测量方法,它将热敏电阻与另外三个已知电阻组成一个电桥,通过调整电桥的平衡点来测量热敏电阻的电阻值。

使用特权

评论回复
18
vivilyly| | 2023-5-7 19:39 | 只看该作者
热敏电阻高精度的读取方法是哪种              

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

436

主题

3424

帖子

7

粉丝