玩转单片机之智能车小露——数字与字符串的转换与打印

news/2025/10/25 22:06:29/文章来源:https://www.cnblogs.com/loganxiang/p/19165905

在 玩转单片机之智能车小露——通过UART为单片机增加TTY终端 中我们在TTYEchoNumber中使用 printf 函数将数字输出到串口。其实数字很多时候都不是以数的形式表示的,几乎所有的输入和显示环节数字都是以字符串的形式来表示。
有没有想过,为什么使用键盘输入一串字符串,输入到计算机就会自动变成对应的数字了?有没有尝试过把单片机程序中的数字输出到串口、数码管或都显示屏上?
本文简单介绍单片机编程可能用到的数据与字符串的转换,以及标准输入输出stdio相关的一些补充知识。

printf使用(重定向)

#include <stdio.h>
void main(){printf("Hello,world!");
}

有多少人是从上面这个程序开始接触编程的?又有多少人在接触单片机后没有再使用过这个函数?
Keil的stdio中包含 printf 函数,但是使用时需要将 printf 的输出重定向到特定设备(如串口或显示屏),方法是重写putchar函数。
STC 库函数已默认将 printf 重定向到 UART,修改宏PRINTF_SELECT的值可以定向到不同的串口。

#define	PRINTF_SELECT  UART1		//选择 printf 函数所使用的串口,参数 UART1~UART4/********************* Printf 函数 ************************/
#if(PRINTF_SELECT == UART1)char putchar(char c){TX1_write2buff(c);return c;
}
#endif

printf 也可以定向到其它显示设备,如重写putchar函数将字符打印到 OLED 显示屏上并移动光标到下一个位置,即可以将 printf 重定向到 OLED 显示屏,在 玩转单片机之智能车小露——OLED显示屏控制 里我们将进行实现(如果有链接代表已完成实现)。

数字转换为字符串

数字转换为字符串一般都是用于输出和显示。转换原理也很简单,按位将数字替换成可以显示的数字代表的ASCII码值:
char = num + '0';
如果想具体了解转换过程可以搜索参考itoa函数的代码(不是标准库函数,不一定在所有平台中都可以直接使用)。实际上stdio提供了更加灵活的转换形式:

extern int printf(const char *, ...);
extern int sprintf(char *, const char *, ...);

sprintf用于将格式化的数据写入字符串中,而printf直接将格式化数据输出。这两个函数的功能在这里不再细述,需要注意的是,Keil Cx51是8位平台,printf 无法自动识别变量的位宽,直接使用%d%u打印数字时,可能会遇到输出异常的问题。(有没有哪个冤大头在ADC采样调试时使用 printf 输出采样数据一直显示错误,还在不停怀疑单片机或者库函数存在问题?)
要避免此类问题,必须显式定义数据类型传递给 printf 函数:

The optional characters b, h, and l may immediately precede the type character to respectively specify char, short, or long versions of the integer types d, i, u, o, and x.
(可选字母 b,h,l 可以用来指定 d,i,u,o,x 的整形是 char,short 还是 long)

char a = 1;
int b  = 12365;
long c = 0x7FFFFFFF;unsigned char x = 'A';
unsigned int y  = 54321;
unsigned long z = 0x4A6F6E00;printf ("char %bd int %d long %ld",a,b,c);
printf ("Uchar %bu Uint %u Ulong %lu",x,y,z);
printf ("xchar %bx xint %x xlong %lx",x,y,z);

字符串转换为数字

标准库stdlib提供了3个字符串转换为数字的函数,分别可以将字符串转换为浮点数、长整形和短整形。

extern float  atof (char *s1);
extern long   atol (char *s1);
extern int    atoi (char *s1);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/946461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据采集作业1 102302111 海米沙

作业一 1)用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息的实验 输出信息: 排名 学校名称 省市 学校类型 总分 …

ABC429(C,D,E)

C 思路:容斥原理 开桶统计元素个数 求$ A_i,A_j,A_k (i \lt j \lt k)$ 其中两个相等的元组数量: 若\(A_i\)有\(k\)个\(A_i\)和其他一个相等:\(ans = (k-1) \times (n-i-(k-1))\) 其他两个相等:先算出所有两两相等的…

列表,集合,字典的增、删、查、改方法对比

在Python中,列表(List)、集合(Set)和字典(Dict)是三种常用的数据结构,它们在增、删、查、改操作上各有特点。以下是它们的详细对比:1. 列表(List) 列表是有序的可变序列,支持重复元素。操作 方法 示例 说明…

linux磁盘管理-RAID介绍 - 详解

linux磁盘管理-RAID介绍 - 详解2025-10-25 21:54 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

详细介绍:语义网络(Semantic Net)对人工智能中自然语言处理的深层语义分析的影响与启示

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2023.2.24 操作系统期末考试回忆 山科 山东科技大学

5个简答题 1个6分30分操作系统的四个基本特征是什么?最基本特征是什么比较说明进程和程序的区别有哪些?列举几个操作系统中的时间换空间 空间换时间的例子SPOOLing 的组成,工作过程,以共享打印机为例某文件系统为一…

线段上随机取n个点的最大距离期望

Problem 在长为 $ a $ 的线段上独立地选取 $ n $ 个点($ n \geq 2 $),记相距最远的两点的距离为 $ X $,求 $ E(X) $。方法一:定义求解 记 $ A $ 为 $ X = t \(,\) B $ 为剩余 $ n-2 $ 个点在最远的两点间,则有 …

MusicFree 音乐

MusicFree是由大佬猫头猫开发的一款免费、开源的本地音乐播放器,同时支持Android、Windows、MacOS、Linux这几个客户端,很强大!MusicFree安装后就是一个纯粹的本地音乐播放器,但可以通过配置「插件」地址实现定制化…

P10老板一句‘搞不定就P0’,15分钟我用Arthas捞回1000万资损 - 指南

P10老板一句‘搞不定就P0’,15分钟我用Arthas捞回1000万资损 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

RuoYi-Cloud-Plus 数据权限实现原理解析

RuoYi-Cloud-Plus 数据权限实现原理解析 什么是数据权限? 数据权限是控制用户能够访问哪些数据的权限机制。在实际业务场景中,我们经常遇到这样的需求:普通员工只能查看自己创建的数据 部门经理可以查看本部门所有员…

详细介绍:JavaScript学习笔记(十五):ES6模板字符串使用指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Python毕业设计实例-基于python养老社区的查询预约架构(源码+LW+部署文档+全bao+远程调试+代码讲解等)

Python毕业设计实例-基于python养老社区的查询预约架构(源码+LW+部署文档+全bao+远程调试+代码讲解等)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: blo…

第5天(中等题 滑动窗口、逆向思维)

打卡第五天 两道中等题题1423.可获得的最大点数思路: n 表示数组总数,先算出数组总和,用滑动窗口选出剩下连续(n-k)个数的最小和,用总和-剩余数最小和,即得拿走数的最大值.(逆向思维,正难则反) 耗时≈一小时 明天继续

Meet in the middle 学习笔记

由于蒟蒻在模拟赛写 DFS 挂掉了,所以来学 Meet in the middle 。 「引入」 Meet in the middle 算法没有正式译名,常见的翻译为「折半搜索」、「双向搜索」或「中途相遇」,以下称折半搜索。 它适用于输入数据较小,…

华为堡垒机

1、打开了VM虚拟机,导入相关的.ovf文件2、导入成功之后,不要直接开机。添加1块硬盘、网卡后再开机 3、开机之后,默认的用户为coreshell,密码为Admin@123 初次登录会提示更改密码密码: 请更改控制台密码,因为首次登…

[HZOI] CSP-S模拟38 赛后总结

不予置评[HZOI] CSP-S模拟38 赛后总结 不予置评 T1:最小生成树(tree) #include<bits/stdc++.h> #define lid (id << 1) #define rid (id << 1 | 1) #define Blue_Archive return 0 #define int lo…

集合常见操作示例

集合(Set)是数学和编程中常用的数据结构,用于存储唯一元素(无重复值)。以下是集合的常见操作及其示例,涵盖数学集合和编程实现(以Python为例):1. 创建集合数学表示:A = {1, 2, 3} Python示例:A = {1, 2, 3}…

深入解析:港大和字节携手打造WorldWeaver:以统一建模方案整合感知条件,为长视频生成领域带来质量与一致性双重飞跃。

深入解析:港大和字节携手打造WorldWeaver:以统一建模方案整合感知条件,为长视频生成领域带来质量与一致性双重飞跃。pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

虚拟机下 安装 ubuntu 18.04

VMware虚拟机中安装Ubuntu18.04(linux发行版)【超详细图文教程】_vmware安装ubuntu18.04-CSDN博客

MinIO快速入门

MinIO快速入门1. MinIO 介绍 MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户。高性能 ,在标准硬件上,读/写速度上高达 183GB/秒和 171GB/秒,拥有更高的吞吐量和更低的延迟 可扩展性 ,为对象存储带来…