从单片机基础到程序框架(全集 2019pdf版).pdf - 第123页
分析: 通过实验结 果,发现在单 片机上的计算 结果和 我们的分析是 一致的。 【28.6 如何在单片机上练习本章节 C 语言程序?】 直接复制前 面章节中第十 一节的模板程 序, 练习代码时只需要 更改 “ C 语言学习区 域” 的 代码就可 以了, 其它 部分的 代码 不要动 。编 译后 ,把程 序下 载进带 串口 的 51 学 习板, 通过 电脑 端的串 口助 手软件 就可 以观 察到不同的 变量数值,详 细方法请看第 十一节 内…

在电脑串口助手软件上观察到的程序执行现象如下:
开始...
第 1 个数
十进制:23
十六进制:17
二进制:10111
第 2 个数
十进制:1
十六进制:1
二进制:1
第 3 个数
十进制:7
十六进制:7
二进制:111
第 4 个数
十进制:0
十六进制:0
二进制:0
第 5 个数
十进制:2
十六进制:2
二进制:10
第 6 个数
十进制:1
十六进制:1
二进制:1
第 7 个数
十进制:0
十六进制:0
二进制:0
第 8 个数
十进制:4
十六进制:4
二进制:100
分析:
通过实验结果,发现在单片机上的计算结果和我们的分析是一致的。
【28.6 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。

第二十九节:“先余后商”和“先商后余”提取数据某位,哪家强?
【29.1 先余后商。】
求商求余除了数学运算外,在实际单片机项目中还有一个很常用的功能,就是提取某个数的个十百千位。
提取这些位有什么用呢?用途可大了,几乎凡是涉及界面显示的项目都要用到,比如数码管的显示,液晶屏
的显示。提取某个数的个十百千位是什么意思呢?比如 8562 这个数,提取处理后,就可以得到千位的 8,百
位的 5,十位的 6,个位的 2。这里提到的“个,十,百,千”位只是一个虚数,具体是多少应该根据实际项
目而定,也有可能是“个,十,百,千,万,十万,百万...”等位,总之,提取的思路和方法都是一致的。
下面以 8562 这个数为例开始介绍提取的思路和方法。
第一步:先把 8562 拆分成 8562,562,62,2 这四个数。怎么拆分呢?用求余的算法。比如:
8562 等于 8562%10000;
562 等于 8562%1000;
62 等于 8562%100;
2 等于 8562%10;
第二步:再从 8562,562,62,2 这四个数中分别提取 8,5,6,2 这四个数。怎么提取呢?用求商的算法。比
如:
8 等于 8562/1000;
5 等于 562/100;
6 等于 62/10;
2 等于 2/1;
第三步:最后,把第一步和第二步的处理思路连写在一起如下:
8 等于 8562%10000/1000;
5 等于 8562%1000/100;
6 等于 8562%100/10;
2 等于 8562%10/1;
仔细观察,上述处理思路的规律感特别清晰,我们很容易发现其中的规律和原因,如果要提取“万,十
万,百万...”的位数,也是用一样的思路。另外,多说一句,根据我的经验,有一些单片机的 C 编译器可
能不支持 long 类型数据的求余求商连写在一起,那么就要分两步走“先求余,再求商”,分开来操作。比如:
unsigned char a;
a=8562%10000/1000; //提取千位。
分成两步走之后如下:
unsigned char a;
a=8562%10000;
a=a/1000; //提取千位。
提取其它位分两步走的思路也是一样,不多说。
【29.2 先商后余。】