/****************************************************************************
* 名 称:char HexToAscii(u8 nHex)
* 功 能:单个16进制转ASCII码
* 入口参数:nHex 0x0A-0x0F.0x00-0x09
* 出口参数:转换后的ASCII码
* 说 明:16进制0x0A-0x0F.0x00-0x09转ASCII码A-F.0-9
****************************************************************************/
char HexToAscii(u8 nHex)
{
if(nHex <= 9) //数字0~9
{
return (nHex + 0x30);
}
else
{
if(nHex >= 0x0A && nHex <= 0x0F) //字母A~F
{
return (nHex + 0x37);
}
else
{
return 0xFF;
}
}
}
/****************************************************************************
* 名 称:
* 功 能:发送字符串
* 入口参数:无
* 出口参数:无
* 说 明:无
****************************************************************************/
void Usart_SendString(USART_TypeDef * pUSARTx, char *str)
{
unsigned int k=0;
do
{
Usart_SendByte( pUSARTx, *(str + k) );
k++;
} while(*(str + k)!='\0');
/* 等待发送完成 */
while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
{}
}
/****************************************************************************
* 名 称:display_dec
* 功 能:将十六进制数的万、千、百、十、个位取出,在百和十之间加上小数点(原始数据扩大了100倍),然后转换为ascii值并通过串口发送显示
* 入口参数:12345
* 出口参数:串口显示123.45
* 说 明:
****************************************************************************/
void display_dec(uint16_t ch)
{
char ch_value[6]={0};
char *p = ch_value;
int ch_databit[5]={0};
int *pb = ch_databit;
int i,k;
for(i=0;i<6;i++)
{
if(i == 3)//增加小数点
{
*p++ = '.';
}
else
{
if(i>3)
{
k=i-1;
}
else
{
k=i;
}
*pb =(ch / (int)pow(10,4-k)) % 10;//取万、千、百、十、个
*p++ = HexToAscii(*pb);//将数据位转换为ascii码值 //*p++表达式返回*p,存储=号右表的结果后,将地址自增1
}
}
p = ch_value;//将指针指向最初位置,避免数据发错
Usart_SendString(USART1, ch_value);
}