从单片机基础到程序框架(全集 2019pdf版).pdf - 第252页
第 1 个数 十进制:0 十六进制:0 二进制:0 第 2 个数 十进制:1 十六进制:1 二进制:1 第 3 个数 十进制:28 十六进制:1 C 二进制:111 00 第 4 个数 十进制:28 十六进制:1 C 二进制:111 00 分析: a 为 0。 b 为 1。 c 为 28。 d 为 28。 【58.8 如何在单片机上练习本章节 C 语言程序?】 直接复制前 面章节中第十 一节的模板程 序, 练习代码时只需要 更改 “ C…

u8GetDays=Cu8MonthBuffer[u8Month]; //这就是查表,马上获取常量数组表格里固定对应的天数。
return u8GetDays;
}
void main() //主函数
{
//第(1)个例子
if(89>=Cu8Level) //大于或者等于阀值,就输出 1。
{
a=1;
}
else //否则输出 0。
{
a=0;
}
if(95>=Cu8Level) //大于或者等于阀值,就输出 1。
{
b=1;
}
else //否则输出 0。
{
b=0;
}
//第(2)个例子
c=HanShu_switch(2); //用 switch 分支的函数获取 2 月份的总天数。
d=HanShu_const(2); //用 const 常量数组“查表”的函数获取 2 月份的总天数。
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。
View(d); //把第 4 个数 d 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...

第 1 个数
十进制:0
十六进制:0
二进制:0
第 2 个数
十进制:1
十六进制:1
二进制:1
第 3 个数
十进制:28
十六进制:1C
二进制:11100
第 4 个数
十进制:28
十六进制:1C
二进制:11100
分析:
a 为 0。
b 为 1。
c 为 28。
d 为 28。
【58.8 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。

第五十九节: 全局“一键替换”功能的#define。
【59.1 #define 作用和书写格式。】
上一节讲 const 的时候,讲到了当某个常量在程序中是属于需要频繁更改的“阀值”的时候,用 const
就可以提供“一键更改”的快捷服务。本节的#define 也具有此功能,而且功能比 const 更加强大灵活,它
除了可以应用在常量,还可以应用在运算式以及函数的“一键更改”中。所谓“一键更改”,其实是说,#define
内含了“替换”的功能,此“替换”跟 word 办公软件的“替换”功能几乎是一模一样的。#define 的“替换”
功能,除了在某些场合起到“一键更改”的作用,还可以在某些场合,把一些在字符命名上不方便阅读理解
的常量、运算式或函数先“替换”成容易理解的字符串,让程序阅读起来更加清晰更加方便维护。#define
的常见三种书写格式如下:
#define 字符串 常量 //注意,这里后面没有分号“;”
#define 字符串 运算式 //注意,这里后面没有分号“;”
#define 字符串 函数 //注意,这里后面没有分号“;”
具体一点如下:
#define AA 1 //常量
#define BB (a+b+c) //运算式
#define C add() //函数
需要注意的时候,#define 后面没有分号“;”,因为它是 C 语言中的“预处理”的语句,不是单片机运
行的程序指令语句。
【59.2 #define 的编译机制。】
#define 是属于“预编译”的指令,所谓“预编译”就是在“编译”之前就开始的准备工作。编译器在
正式编译某个源代码的时候,先进行“预编译”的准备工作,对于#define 语句,编译器是直接把#define
要替换的内容先在“编辑层面”进行机械化替换,这个“机械化替换”纯粹是字符串的替换,可以理解成 word
办公软件的“替换”编辑功能。比如以下程序:
#define A 3
#define B (2+6) //有括号
#define C 2+6 //无括号
unsigned long x=3;
unsigned long a;
unsigned long b;
unsigned long c;
void main() //主函数
{
a=x*A;
b=x*B;
c=x*C;