从单片机基础到程序框架(全集 2019pdf版).pdf - 第338页

二进制:1 第 3 个数 十进制:2 十六进制:2 二进制:10 分析: Gu8Buffe r[0]是 0,提取 了二维数组 的第 0 行第 0 个数 据。 Gu8Buffe r[1]是 1,提取 了二维数组 的第 0 行第 1 个数 据。 Gu8Buffe r[2]是 2,提取 了二维数组 的第 0 行第 2 个数 据。 【77.3 如何在单片机上练习本章节 C 语言程序?】 直接复制前 面章节中第十 一节的模板程 序, 练习代码时只…

100%1 / 836
{0x20,0x21,0x22}, //二维数组的第 2 行数
};
//函数名前面 unsigned char *,代表内部 return 返回的是 unsigned char *的指针。
unsigned char *GetRowData(unsigned char (*pu8Table)[3],unsigned char u8RowSec)
{
unsigned char *pu8Row;
pu8Row=(unsigned char *)&pu8Table[u8RowSec][0]; //提取某一行开始的地址(指针)
return pu8Row; //经过 return 通道对外输出指针,pu8Row 是一个指针类型的变量
}
unsigned char *pGu8Row; //接收 return 输出的指针
unsigned char Gu8Buffer[3]; //一维数组,存放从二维数组里提取出来的某一行数据
unsigned char i; // for 循环的变量
void main() //主函数
{
pGu8Row=GetRowData(table,0);//这里的 0 是表示选择二维表格的第 0 行数
for(i=0;i<3;i++)
{
Gu8Buffer[i]=pGu8Row[i]; //通过指针 pGu8Row 来搬运数据到一维数组 Gu8Buffer
}
View(Gu8Buffer[0]); //在电脑端观察存放二维数组某行数据的一维数组的内容
View(Gu8Buffer[1]); //在电脑端观察存放二维数组某行数据的一维数组的内容
View(Gu8Buffer[2]); //在电脑端观察存放二维数组某行数据的一维数组的内容
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
1 个数
十进制:0
十六进制:0
二进制:0
2 个数
十进制:1
十六进制:1
二进制:1
3 个数
十进制:2
十六进制:2
二进制:10
分析:
Gu8Buffer[0]是 0,提取了二维数组的第 0 行第 0 个数据。
Gu8Buffer[1]是 1,提取了二维数组的第 0 行第 1 个数据。
Gu8Buffer[2]是 2,提取了二维数组的第 0 行第 2 个数据。
【77.3 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口 51 习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。
第七十八节: typedef 和#define enum。
【78.1 typedef 和#define enum。
typedef 称为“类型定义#define 称为“宏定义”enum 称为“枚举”三者都有“一键替换”的能力,
但是应用的侧重点各有不同。请看下面的例子,要写一个函数,把学生的分数分为 3 个等级, 1 等级是“优”
(范围:“优”>=90 分),第 2 等级是“中”(范围:70 分<=“中”<90 分),第 3 等级是“差(范围:“差
<70 分)实现此算法的函数需要一个输入口和一个输出口,用来输入分数和输出判断结果,判断的结果用三
个数字常量 0,1,2 来表示,0 代表“优”,1 代表“中”,2 代表“差”。代码如下:
unsigned char GetGrade(unsigned char u8Score)
{
if(u8Score<70)
{
return 2; //2 代表“差”
}
else if(u8Score>=70&&u8Score<90)
{
return 1; //1 代表“中”
}
else
{
return 0; //0 代表“优”
}
}
上述代码没有添加任何“typedef,#define,enum”是“素颜照”级别的原始代码。现在对上述代
做一些美容,加入“typedef,#define,enum”的元素,代码如下:
#define BAD_MEDIUM 70 //宏定义。用 BAD_MEDIUM 来表示“差”和“中”分数的分界线
#define MEDIUM_GOOD 90 //宏定义。用 MEDIUM_GOOD 来表示“中”和“优”分数的分界线
typedef unsigned char u8; //用 typedef 为类型“unsigned char”增加一个名为“u8”的代言人
enum {GOOD = 0,MEDIUM,BAD}; //用 enum 把“0,1,2”三个常量转换为“GOOD,MEDIUM,BAD”
u8 GetGrade(u8 u8Score)
{
if(u8Score<BAD_MEDIUM) //等级分数分界线的判断
{
return BAD; //BAD 就是常量 2,代表“差”
}
else if(u8Score>=BAD_MEDIUM&&u8Score<MEDIUM_GOOD) //等级分数分界线的判断
{