单片机C语言案例教程习题解答 习题1
1. 在图1-3中,若MCU的P0.0和P2.0两引脚均为低电平,则四位数码管上有何显示。
解:由图1-3可知,P0.0引脚为低电平,将使四位数码管的a笔划为低电平,P2.0为低电平,则使Q3导通,即数码管千位管的8个发光二极管正极为高电平,从而使千位管显示其a笔划。
2. 设有定义“sbit qw=P2^0;”,和赋值语句“qw=0;P0=0Xfe”,则将如何影响MCU的输
出引脚?
解:qw=0,,就是使P2.0为低电平,则使Q3导通,即数码管千位管的8个发光二极管正极为高电平,P0=0xfe,就是使P0.0为低电平,P0.1~P0.7为高电平。从而使千位管显示其a笔划。
3. 画出案例6源程序的函数架构及函数调用路线图。
解:案例6源程序的函数架构及函数调用路线图如下:
4. 将案例6源程序中Delay函数的for循环之式子2“i<500”分别改为“ i<5000”和
“ i<50000”后重新编译和下载运行,对比循环终值从500变成5000、再从5000变成50000对显示效果的影响。
解:先在数码管的千位管上显示8,其余各管无显示;再在百位管上显示0,其余各管无显示;又在十位管上显示5,其余各管无显示;再在个位管上显示1,其余各管无显示;
5. 写出图1-3中,数码管在单片机学习板中的电路连接要点。
解:四位数码管的8只笔段电极从a到小数点被依次接于P0.0到P0.7上,从左至右的四只位置电极被接在受控于P2.0至P2.3的Q3至Q6的集电极回路. 6. 写出图1-3中,DS1302在单片机学习板中的电路连接要点。
解: DS1302的时钟线SCLK与8051的P2.7相接,数据线DATA与P2.6相接,复位线RST与P2.5相接.
7. 写出图1-3中,AT24C02在单片机学习板中的电路连接要点。
解:AT24C02的串行时钟线SCL与8051的P3.6相接,串行数据线与P2.7所接,AT24C02的写保护脚WP接地(允许写入)。 习题2
1 设有如下定义: int a; crar b;
unsigned int c; unsigned char d;
则a称为什么变量?它表示数的起止范围是什么?b哪?c哪?d哪?
解:a称为整型号变量,它表示的数的起止范围是-32768~32767;b称为字符型变量,所表示数的起止范围是-128~127;c称为无符号整型变量,所表示数的起止范围是0~65535;d称为无符号字符型变量,所表示数的起止范围是0~225。 2 试说明语句“a+1;”与语句“a++”的区别。 解:“a+1”表示变量a与1的和,“a++”表示用变量a与1的和对变量a赋值;前者的a没有被赋值,后者的a被赋值。
3 写出if语句的一般形式、画出if语句的流程图,说明if语句的执行规则。 解:if语句的一般形式:
if(表达式) 语句
if语句的流程图
执行规则:首先对表达式进行判断,如果计算结果为“真”,那么执行“语句”,否则跳过“语句”。
4 写出if-else语句的一般形式、画出if-else语句的流程图,说明if-else语句的执行规则。 解:if?else语句的一般形式如下:
if(表达式)
语句1
else
语句2
if?else语句的流程图
其执行规则:首先计算表达式的值,如果为真,则执行语句1,否则执行语句2。
5 写出不带break的switch语句的一般形式,画出其流程图,说明其执行规则。 解:switch语句的一般形式如下:
switch (表达式) {
case 常量表达式1: 语句1 case 常量表达式2: 语句2 ?
?
case 常量表达式n: 语句n default: 语句n+1 }
其中不带break的switch结构流程图如右图。
不带break的switch语句的执行过程是:
首先计算小括号中的整型表达式的值,并以此寻找所匹配的常量表达式,匹配的常量表达式若是常量表达式x,流程就从常量表达式x进入switch结构,若没有一个能匹配的,流程就从default处进入switch结构,只要进入后,就从进入处就执行完到“}”为止的所有语句。
6写出带break的switch语句的一般形式,画出其流程图,说明其执行规则。
解:带break的switch语句的一般形式:
switch (表达式) {
case 常量表达式 1: 语句1 break; case 常量表达式 2: 语句2 break; ?
?
case 常量表达式 n: 语句n break; default: 语句n+1 }
带break的switch结构流程图如右图
带break的switch语句的执行过程是:
首先计算小括号中的整型表达式的值,并以此寻找所匹配的常量表达式,匹配的常量表达式若是常量表达式x,流程就从常量表达式x进入switch结构,若没有一个能匹配的,流程就从default处进入switch结构,进入switch结构后,若遇上break语句,流程就从该break语句上跳出switch结构;否则,就从进入处就执行完到“}”为止的所有语句,。
7 写出for语句的一般形式,画出其流程图,说明其执行规则。
解:for语句的一般形式:
for(表达式1;表达式2;表达式3) {
语句组 }
其中,”for(表达式1;表达式2;表达式3)”可称为循环头,下面大括号所界定范围称为循环体。
for语句的流程图如右图
它的执行规则如下:
A:先计算表达式1,再转B;
B:计算表达式2,若其值为真(1),则转C,若其值为假(0)则转E; C:执行for下面大括号中的语句组,执行完后转D;
D:计算表达式3,结束本次循环,转回B开始下一次循环;
E:结束循环。流程转出整个for循环结构,也就是去执行for循环结构后面的第一条语句。 8 写出while语句的一般形式,画出其流程图,说明其执行规则。 解:while语句的一般形式如下:
while(表达式) {
语句组 }
其流程图如下
执行规则如下:
先计算表达式,若表达式计算不为0,就执行一次循环体语句组,然后返回再次计算表达式。如此重复,直到表达式的值计算为0时,流程转出循环结构。另外,当且仅当大括号括住的语句组只是一个语句时,大括号也可省略
9 写出do-while语句的一般形式,画出其流程图,说明其执行规则。 解:do…while语句的一般形式:
do {
语句组
}while(表达式);
其流程图如图2-10所示。
其执行规则是:首先执行一次循环体语句,此后计算表达式的值;若表达式为1,就又返回去执行循环体语句;再计算表达式,若?;直到计算的表达式的值为0,流程就退出整个do?while结构。
还要注意的是,在do-while语句中,最后的”while(表达式)”后面的那一分号’:”不可少.
10 写出一维数组定义的一般形式。
解:一维数组定义的一般形式是:
类型说明符 数组名[常量表达式];
11写出二维数组定义的一般形式。
解:二维数组定义的一般形式:
类型说明符 数组名[常量表达式1][常量表达式2];
12 写出无参数函数定义的一般形式。
解:无参数函数定义的一般形式为:
类型标识符 函数名() {
函数体语句 }
13 写出有两个参数的函数定义的一般形式。
解:有两个参数函数定义的一般形式如下:
类型标识符 函数名(类型标识符 变量名1,类型标识符 变量名2) {