今天主要捣鼓串口,串口搞好了,加在采样热敏电阻数码管显示的工程中。
采用串口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>*/
}
效果图:
|