STM32将数据从十六进制转换为ascii通过串口发送显示

/****************************************************************************
* 名	称: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);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值