单片机C语言案例教程习题解答

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

单片机C语言案例教程习题解答习题11.在图1-3中,若MCU的P0.0和P2.0两引脚均为低电平,则四位数码管上有何显示。解:由图1-3可知,P0.0引脚为低电平,将使四位数码管的a笔划为低电平,P2.0为低电平,则使Q3导通,即数码管千位管的8个发光二极管正极为高电平,从而使千位管显示其a笔划。2.设有定义“sbitqw=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“i500”分别改为“i5000”和“i50000”后重新编译和下载运行,对比循环终值从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接地(允许写入)。习题21设有如下定义:inta;crarb;unsignedintc;unsignedchard;则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(表达式)语句1else语句2ifelse语句的流程图其执行规则:首先计算表达式的值,如果为真,则执行语句1,否则执行语句2。5写出不带break的switch语句的一般形式,画出其流程图,说明其执行规则。解:switch语句的一般形式如下:switch(表达式){case常量表达式1:语句1case常量表达式2:语句2case常量表达式n:语句ndefault:语句n+1}其中不带break的switch结构流程图如右图。不带break的switch语句的执行过程是:首先计算小括号中的整型表达式的值,并以此寻找所匹配的常量表达式,匹配的常量表达式若是常量表达式x,流程就从常量表达式x进入switch结构,若没有一个能匹配的,流程就从default处进入switch结构,只要进入后,就从进入处就执行完到“}”为止的所有语句。6写出带break的switch语句的一般形式,画出其流程图,说明其执行规则。解:带break的switch语句的一般形式:switch(表达式){case常量表达式1:语句1break;case常量表达式2:语句2break;case常量表达式n:语句nbreak;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){函数体语句}14在什么情况下函数定义时的类型说明符可以缺省?解:当函数的返回值类型为整型或字符型时,函数定义的类型说明符可以缺省。15何谓局部变量?局部变量有何特点?解:在函数内部定义的变量叫做局部变量,局部变量只能在定义它的函数内有效,因此,在不同的函数中,可以定义同名的局部变量。16何谓全局变量?全局变量有何特点?解:在函数外部定义的变量叫做全局变量,全局变量在从其定义位置起,到整个程序结束处有效。在一个函数内,若有与全局变量同名的局部变量,则在该函数内,全局变量不起作用。习题31上机编程,把案例7沿顺时针方向的跑马灯,改为逆时针方向的跑马灯。解:这只需调整Disp_led函数内部各程序段的顺序即可,即把该函数内的第一场和第四场的顺序保持不变,把第二场程序段与第六场程序段位置交换、第三场程序段与第五场程序段交换即可。2上机编程,把案例8沿顺时针方向的巡逻灯,改为逆时针方向的巡逻灯。解:同上题,这也只需调整Disp_led函数内部各程序段的顺序即可,即把该函数内的第一场和第七场的顺序保持不变,把第二场程序段与第十二场程序段位置交换、第三场程序段与第十一场程序段交换,第四场程序段与第十场程序段交换,第五场程序段与第九场程序段交换,第六场程序段与第八场程序段交换即可。3上机编程,把案例9向右移动的流水灯,改为向左移动的流水灯。解:这也只需调整Disp_led函数内部各程序段的顺序即可,即把该函数内把第一场程序段与第八场程序段位置交换、第二场程序段与第七场程序段交换,第三场程序段与第六场程序段交换,第四场程序段与第五场程序段交换即可。4上机编程,把案例10效果图中的第四幕改为第一幕,第三幕改为第二幕,第二幕改为第三幕,第一幕改为第四幕。解:只修改各if语句小括号中的表达式,即把原来的“a==1”改为“a==4”,“a==2”改为“a==3”,“a==3”改为“a==2”,“a==4”改为“a==1”即可。5上机编程,把案例12中的倒数数显示,改为顺数数显示。解:把主函数main修改如下:main(){intn,m;n=0;while(1){if(n==10000)n=0;for(m=1;m=20;m++)Disp_led(n);n++;}}习题41何谓中断?51单片机中有哪几个中断资源?解:让计算机正常运行程序时,因某突发事件的产生而暂停正在运行的程序,转去执行应对突发事件的相应程序,执行完该相应程序后,再返回原暂停处接着运行原来的程序,这种应对机制称为中断。单片机中有5个中断资源。2写出定义中断服务函数的一般形式。解:中断请求服务函数的编写形式如下:函数类型函数名(形式参数表)interruptn[usingm]{…}其中,interrupt后面的n表示中断号,其值为0~4,后面的方括号表示其为可选项,using后面的m表示使用的工作寄存器组号,初学者可以不选而用其默认值。在C51中对5个中断号代表的中断源规定如下:中断源C51中对中断源的编号外中断INT00定时器/计数器T01外中断INT12定时器/计数器T13串行口中断43根据REG51.h头文件的有关定义,单片机中有哪两个与中断有关的寄存器,它们各自的功能是什么?解:REG51.h头文件中所定义的IE寄存器和IP寄存器,就是两个与中断有关的寄存器,IE的功能是可设置各中断的允许与否,IP的功能是设置各中断的中断优先级。4写出仅允许外中断1中断的IE赋值语句。解:仅允许外中断1中断的IE赋值语句:IE=0x84;5写出仅允许计数器1中断的IE赋值语句。解:仅允许计数器1中断的IE赋值语句:IE=0x88;6写出同时允许外中断1中断和计数器1中断的IE赋值语句。解:同时允许外中断1中断和计数器1中断的IE赋值语句:IE=0x8c;7写出让计数器1中断的优先级高于外中断1中断的优先级的IP赋值语句。解:计数器1中断的优先级高于外中断1中断的优先级的IP赋值语句:IP=0x08;8怎样才能产生一次外中断?解:把单片机的第12脚或第13脚对地短路并断开,就能产生一次外中断。9怎样才能产生一次定时器中断?解:(1)设置IE,允许一定时器中断,如EA=1;ET0=1;//允许T0中断(2)设置TMOD寄存器,以确定定时器工作方式,如TMOD=0x01;//设定T0为定时器模式(3)设定T0的计数赋初值,如TH0=(65536-50000)/256;TL0=(65536-50000)%256;(4)启动定时器,如TR0=1;当从15536起,每微秒计数1次,50毫秒就产生一次定时器中断。说明,当T0的C/T位为0时,每个工作周期自动计数1次,10怎样才能产生一次计数器中断?解:(1)设置IE,允许一定时器中断,如EA=1;ET0=1;//允许T0中断(2)设置TMOD寄存器,以确定计数器工作方式,如TMOD=0x05;//设定T0为计数器模式(3)设定T0的计数赋初值,如TH0=0xff;TL0=0xf0;(4)启动计数器,如TR0=1;当从0

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功