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

[复制链接]
 楼主| 比神乐 发表于 2023-1-20 20:28 | 显示全部楼层 |阅读模式
今天主要捣鼓串口,串口搞好了,加在采样热敏电阻数码管显示的工程中。
采用串口0.
原理图:
4.jpg


5.jpg

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

  11. /*****************************************************************************************************
  12. * Function Name: main
  13. * Description  : This function implements main function.
  14. * Arguments    : None
  15. * Return Value : None
  16. ******************************************************************************************************/
  17. void main(void)
  18. {       
  19.         unsigned long int i=0;
  20.     /*<Generated by EasyCodeCube begin>*/
  21.     /*<UserCodeStart>*//*<SinOne-Tag><36>*/
  22.     IcResourceInit();
  23.     /*<UserCodeEnd>*//*<SinOne-Tag><36>*/
  24.     /*<UserCodeStart>*//*<SinOne-Tag><4>*/
  25.     /*****MainLoop*****/
  26.     while(1)
  27.     {
  28.         /*<UserCodeStart>*//*<SinOne-Tag><94>*/
  29.         if(T0Flag50ms)
  30.         {
  31.             T0Flag50ms=0;
  32.             /*<UserCodeStart>*//*<SinOne-Tag><95>*/
  33.             LedDisp();
  34.             /*<UserCodeEnd>*//*<SinOne-Tag><95>*/
  35.             /*<UserCodeStart>*//*<SinOne-Tag><97>*/
  36.             GetADCValue();
  37.             /*<UserCodeEnd>*//*<SinOne-Tag><97>*/
  38.             /*<UserCodeStart>*//*<SinOne-Tag><96>*/
  39.             GetTemperature();
  40.             /*<UserCodeEnd>*//*<SinOne-Tag><96>*/
  41.             /*<UserCodeStart>*//*<SinOne-Tag><98>*/
  42.             Led_DisplayData(TEMP%10,TEMP/10,TempSign,16);
  43.                         TxData[6]=(uint8_t)((TEMP/10)+0x30);
  44.                         TxData[7]=(uint8_t)((TEMP%10)+0x30);
  45.             //显示时钟点  DOTDISPLAY:开  DOTUNDISPLAY:关
  46.             Led_DisplayDot(DOTUNDISPLAY,DOTUNDISPLAY,DOTUNDISPLAY,DOTUNDISPLAY);
  47.                        
  48.             /*<UserCodeEnd>*//*<SinOne-Tag><98>*/
  49.             /*<Begin-Inserted by EasyCodeCube for Condition>*/
  50.         }
  51.                 i++;
  52.                 if(i>=9000000)
  53.                 {
  54.                         i=0;
  55.                         USCI0_HandleInfo.TxState = USCI0_STATE_READY;
  56.                         while(USCI0_UART_Transmit(&USCI0_HandleInfo, TxData, 10, 0xFFFF)== Status_OK);
  57.                        
  58.                 }
  59.         /*<UserCodeEnd>*//*<SinOne-Tag><94>*/
  60.         /*<Begin-Inserted by EasyCodeCube for Condition>*/
  61.     }
  62.     /*<UserCodeEnd>*//*<SinOne-Tag><4>*/
  63.     /*<Generated by EasyCodeCube end>*/
  64. }

初始化程序
  1. #include "SC_Init.h"
  2. #include "SC_it.h"
  3. #include "..\Drivers\SCDriver_list.h"
  4. #include "HeadFiles\SysFunVarDefine.h"
  5. /**************************************Generated by EasyCodeCube*************************************/
  6. void IcResourceInit()
  7. {
  8.     /*<UserCodeStart>*//*<SinOne-Tag><37>*/
  9.         SC_Init(); /***MCU init***/
  10.         
  11.     /*<UserCodeEnd>*//*<SinOne-Tag><37>*/
  12. }
  13. /*****************************************************
  14. *函数名称: SC_Init
  15. *函数功能: MCU初始化函数
  16. *入口参数:void
  17. *出口参数:void
  18. *****************************************************/
  19. void SC_Init(void)
  20. {
  21.         SC_GPIO_Init();
  22.         SC_OPTION_Init();
  23.         SC_TIM0_Init();
  24.         SC_ADC_Init();
  25.         SC_DDIC_Init();
  26.         SC_USCI0_Init();
  27.         /*write initial function here*/       
  28.         EA = 1;       
  29. }
  30. /*****************************************************
  31. *函数名称: SC_USCI0_Init
  32. *函数功能: USCI0初始化函数
  33. *入口参数:void
  34. *出口参数:void
  35. *****************************************************/
  36. void SC_USCI0_Init(void)
  37. {
  38.         /*USCI0_Init write here*/
  39.         GPIO_Init(GPIO0, GPIO_PIN_5,GPIO_MODE_IN_PU);
  40.         GPIO_Init(GPIO0, GPIO_PIN_6,GPIO_MODE_IN_PU);
  41.         USCI0_ITConfig(DISABLE,LOW);
  42.         USCI0_UART_Init(32000000,115200,USCI0_UART_Mode_10B,USCI0_UART_RX_ENABLE);                       
  43. }

子程序:
  1. void LedDisp()
  2. {
  3.     /*<UserCodeStart>*//*<SinOne-Tag><89>*/
  4.     uint8_t i;
  5.         for(i=0;i<8;i++)
  6.         {
  7.                 LedTemp[i] = 0;       
  8.         }
  9.     for(i=0;i<4;i++)
  10.         {
  11.                 LedSegData(LedCodeTab[LedDataTab[i]],LEDCOM0+i,DotTemp[i]);
  12.         LCDRAM[4]  = LedTemp[0];
  13.         LCDRAM[6]  = LedTemp[1];
  14.         LCDRAM[16] = LedTemp[2];
  15.         LCDRAM[17] = LedTemp[3];
  16.         LCDRAM[18] = LedTemp[4];
  17.         LCDRAM[19] = LedTemp[5];
  18.         LCDRAM[20] = LedTemp[6];
  19.         LCDRAM[23] = LedTemp[7];       
  20.         }
  21.    
  22.     /*<UserCodeEnd>*//*<SinOne-Tag><89>*/
  23. }
  24. /******************************************************************************************************
  25. **函数名称:void GetADCValue(void)*函数功能:得到ADC采集值并求取平均值*入口参
  26. *数:void*出口参数:void*功能说明:测十次,去掉最高最低值求平均值
  27. ******************************************************************************************************/
  28. void GetADCValue()
  29. {
  30.     /*<UserCodeStart>*//*<SinOne-Tag><85>*/
  31.     static unsigned int i=0;   
  32.     ADC_StartConversion();  //启动ADC采样
  33.     if(AdcFlag)
  34.     {   
  35.       AdcFlag=0;               
  36.       ADC_Value = ADC_GetConversionValue();  //得ADC采样值
  37.       if(ADC_Value >= value_max)  
  38.          value_max = ADC_Value;   //取一个最大值
  39.       if(ADC_Value <= value_min)  
  40.          value_min = ADC_Value;   //取一个最小值
  41.       ADC_ValueSum = ADC_ValueSum + ADC_Value;  //求和      
  42.       i++;
  43.       }
  44.     if(i==10)
  45.     {  
  46.       ADC_AverageValue = (ADC_ValueSum-value_max-value_min)/8; //去掉最大最小值求平均值
  47.       ADC_ValueSum=0;   //和清零,重测10次
  48.       i=0;
  49.       
  50.       value_min=5000;
  51.       value_max=0;
  52.     }   
  53.    
  54.     /*<UserCodeEnd>*//*<SinOne-Tag><85>*/
  55. }
  56. /******************************************************************************************************
  57. **函数名称:void GetTemperature()*函数功能:将温度对应的ADC值转为温度值*入口参
  58. *数:void*出口参数:void*功能说明:
  59. ******************************************************************************************************/
  60. void GetTemperature()
  61. {
  62.     /*<UserCodeStart>*//*<SinOne-Tag><86>*/
  63.     unsigned int i=0;
  64.     for(i=0;i<100;i++)
  65.     {
  66.      if((ADC_AverageValue >= ADCValueToTemp[i]) && (ADC_AverageValue < ADCValueToTemp[i+1]))
  67.       {                                                            
  68.         TEMP = i;           //得转换值对应数组下标
  69.         break;
  70.        }                             
  71.      }
  72.      
  73.     if(TEMP<15)
  74.      {
  75.         TempSign = 18;           //负温度显示‘-’
  76.         TEMP = 15 - TEMP;           //温度值
  77.      }
  78.      else
  79.      {
  80.         TempSign = 16;           //正温度不显示+                 
  81.         TEMP =  TEMP-15;       //温度值            
  82.      }
  83.    
  84.     /*<UserCodeEnd>*//*<SinOne-Tag><86>*/
  85. }
  86. /******************************************************************************************************
  87. **函数名称:void Led_DisplayData()*函数功能:LED显示数据*入口参数:Num1
  88. *COM1对应数据Num2 COM2对应数据Num3 COM3对应数据Num4 COM4对应数据*出口参数
  89. *:void*功能说明:数码管要显示的数据
  90. ******************************************************************************************************/
  91. void Led_DisplayData(unsigned int Num1,unsigned int Num2,unsigned int Num3,unsigned int Num4)
  92. {
  93.     /*<UserCodeStart>*//*<SinOne-Tag><87>*/
  94.     LedDataTab[0] = Num1;
  95.     LedDataTab[1] = Num2;
  96.     LedDataTab[2] = Num3;
  97.     LedDataTab[3] = Num4;
  98.    
  99.     /*<UserCodeEnd>*//*<SinOne-Tag><87>*/
  100. }
  101. /******************************************************************************************************
  102. **函数名称:void Led_DisplayDot()*函数功能:LED小数点显示*入口参数:DotDi
  103. *sp1 COM1位小数点DotDisp2 COM2位小数点DotDisp3 COM3位小数点DotDis
  104. *p4 COM4位小数点*出口参数:void*功能说明:选择是否显示小数点
  105. ******************************************************************************************************/
  106. void Led_DisplayDot(LedDotDisplay DotDisp1,LedDotDisplay DotDisp2,LedDotDisplay DotDisp3,LedDotDisplay DotDisp4)
  107. {
  108.     /*<UserCodeStart>*//*<SinOne-Tag><88>*/
  109.      DotTemp[0]=DotDisp1;   
  110.      DotTemp[1]=DotDisp2;  
  111.      DotTemp[2]=DotDisp3;  
  112.      DotTemp[3]=DotDisp4;
  113.    
  114.     /*<UserCodeEnd>*//*<SinOne-Tag><88>*/
  115. }
效果图:
0.jpg 1.jpg 2.jpg 3.jpg
adolphcocker 发表于 2023-3-10 16:51 | 显示全部楼层
EBS002 是什么板子              
plsbackup 发表于 2023-3-10 18:13 | 显示全部楼层
这个是iic接口的吗》              
bartonalfred 发表于 2023-4-4 14:19 | 显示全部楼层
热敏电阻对地短路会烧电路吗?  
benjaminka 发表于 2023-4-4 15:40 | 显示全部楼层
热敏电阻适合哪些情况               
 楼主| 比神乐 发表于 2023-4-5 09:44 | 显示全部楼层

新定义的一种板子
pl202 发表于 2023-4-6 17:51 | 显示全部楼层
求助个NTC热敏电阻的ADC采集
dspmana 发表于 2023-5-5 22:43 | 显示全部楼层
热敏电阻测温最常用的读取方法是什么?
hilahope 发表于 2023-5-6 00:14 | 显示全部楼层
如何检测NTC热敏电阻的阻值?
vivilyly 发表于 2023-5-7 10:27 | 显示全部楼层
电压比较法是一种简单直接的测量方法,它通过将热敏电阻与一个已知电阻串联在一起,然后将它们的两端接到单片机的模拟输入引脚上,利用单片机内部的ADC模块来测量两个电阻并计算出热敏电阻的电阻值。
adolphcocker 发表于 2023-5-7 14:10 | 显示全部楼层
如何利用热敏电阻实现温控               
linfelix 发表于 2023-5-7 15:28 | 显示全部楼层
使用ADC模块对模拟输入引脚的电压进行采样并转换为数字量。
abotomson 发表于 2023-5-7 16:24 | 显示全部楼层
ntc热敏电阻10k的 测得温度偏高怎么办,该选5k的还收15k的
kmzuaz 发表于 2023-5-7 16:43 | 显示全部楼层
将热敏电阻与已知电阻串联起来,组成一个电压分压网络。
hearstnorman323 发表于 2023-5-7 16:52 | 显示全部楼层
在单片机程序中初始化ADC模块,并设置相应的采样参数。
wwppd 发表于 2023-5-7 17:18 | 显示全部楼层
热敏电阻怎么测试               
usysm 发表于 2023-5-7 19:32 | 显示全部楼层
电桥法是一种更加精确的测量方法,它将热敏电阻与另外三个已知电阻组成一个电桥,通过调整电桥的平衡点来测量热敏电阻的电阻值。
vivilyly 发表于 2023-5-7 19:39 | 显示全部楼层
热敏电阻高精度的读取方法是哪种              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部