前言:最近老师介绍了一个显示测得数据的方法,觉得十分好用,分享一下
可以运用LCD显示字符串的函数进行显示,也可以用串口发送字符串的函数,这里用串口演示。
1.首先要包含头文件,才可以使用sprintf函数
#include <stdio.h>
2.定一个字符串数组,用于存储传送的内容;只需定义一个数组,转换存储完之后发送,再转换存储发送,这样子可以节省寄存器。
char Data_Arr[50];
/*特别注意,数组的个数要大于所转换字符串的个数,不然程序马上出问题*/
3.分别定义两种数据,用于模拟测量到的数据。
float F = 3.1415926;//浮点型
uint16_t D = 128;//整型
4.调用sprintf函数,以及串口发送字符串的函数;这里注意:浮点型写%f,整型写%d,其中%.2f表示浮点型数据保留两位小数。
sprintf(Data_Arr, "F = %.2f \r\n", F);/*浮点型转为字符串*/
USART_SendString(USART1,Data_Arr);
sprintf(Data_Arr, "D = %d \r\n", D);/*无符号整型转为字符串*/
USART_SendString(USART1,Data_Arr);
5.打开串口,查看接收到的数据
6.sprintf函数还可以一次性转换两个数据为字符串,最多好像只能两个;注意数据类型对应好就行。
sprintf(Data_Arr, "D = %d and F = %.2f \r\n", D, F);
USART_SendString(USART1,Data_Arr);//串口发送
运行结果为
总结:
1.可以将字符+数据拼接起来,显示十分方便;
2.若显示屏需要显示浮点型数据,对于小数点的处理十分友好,大部分的LCD显示函数没有显示浮点型的,这里可通过显示字符串类型的函数进行替代;
3.char Data_Arr[50];定义的数组里面的个数要足够的大,若小于转换的字符个数,程序会死机,
最好留有10-30%的余量,最好开始就直接给一个很大的数!!!!!!!!!!!
下面是全部的代码
#include <stm32f10x.h>
#include <stdio.h>
#include "usart.h"
#include "lze_lcd.h"
int main(void)
{
/*初始化*/
LCD_Init();//显示屏
MyUsart_Init();//串口
LCD_Clear(LCD_COLOR_WHITE); //清屏
/*定义数据*/
char Data_Arr[50];//用于存放数据和字符串,符号等等
/*特别注意,数组的个数要大于所转换字符串的个数,不然程序马上出问题*/
float F = 3.1415926;//浮点型
uint16_t D = 128;//无符号整型
while (1)
{
/*浮点型转为字符串*/
sprintf(Data_Arr, "F = %.2f", F);
LCD_WriteString (10, 10, LCD_COLOR_RED, LCD_COLOR_YELLOW, (uint8_t *)Data_Arr); //LCD显示
sprintf(Data_Arr, "F = %.2f \r\n", F);
USART_SendString(USART1,Data_Arr);//串口发送
/*无符号整型转为字符串*/
sprintf(Data_Arr, "D = %d", D);
LCD_WriteString (10, 30, LCD_COLOR_RED, LCD_COLOR_YELLOW, (uint8_t *)Data_Arr); //LCD显示
sprintf(Data_Arr, "D = %d \r\n", D);
USART_SendString(USART1,Data_Arr);//串口发送
/*浮点型+无符号整型一起发送*/
sprintf(Data_Arr, "D = %d and F = %.2f", D, F);
LCD_WriteString (10, 50, LCD_COLOR_RED, LCD_COLOR_YELLOW, (uint8_t *)Data_Arr); //LCD显示
sprintf(Data_Arr, "D = %d and F = %.2f \r\n", D, F);
USART_SendString(USART1,Data_Arr);//串口发送
}
}