教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

第03章 单片机C语言程序设计 单片机原理与应用-基于实例驱动和Pr

来源:网络收集 时间:2026-09-11
导读: 第03章 单片机C语言程序设计 习题解答 一、填空题 1.程序的基本结构有 顺序结构、分支结构、循环结构 。 2.C51的存储器模式有 SMALL、COMPACT、LARGE 。 3.C51中int型变量的长度为 16位 ,其值域为 0--65535 。 4.C51中关键字sfr的作用 定义51单片机内部

第03章 单片机C语言程序设计 习题解答

一、填空题

1.程序的基本结构有 顺序结构、分支结构、循环结构 。 2.C51的存储器模式有 SMALL、COMPACT、LARGE 。

3.C51中int型变量的长度为 16位 ,其值域为 0--65535 。

4.C51中关键字sfr的作用 定义51单片机内部一个字节的特殊功能寄存器 ,sbit的作用 定义51单片机片内可位寻址位 。

5.函数定义由 函数头 和 函数体 两部分组成。 6.C51的表达式由 运算符、运算对象 组成。 7.C51表达式语句由表达式和 分号 组成。 8.C51中“!”运算符的作用是 逻辑非 。 9.若函数无返回值,用 void 关键字指定。 10.若局部变量未初始化,其初值为 不确定 。 二、简答题

1.举例说明&和&&运算的差异。

答:(1)&(按位与)是位运算符,是双目运算。当二个位都等于1时,结果等于1,其它的结果都等于0。

(2)&&(逻辑与)是逻辑运算符。当两个及以上条件都同时成立的情况下“逻辑与”的运算结果才为“真”。

例:假设a = 1; b = 2;

如果执行a&b,则结果为0; 如果执行a&&b,则结果为1;

2、说明全局变量和局部变量的差异。 答:全局变量和局部变量的差异为:

(1)作用域不同。全局变量对所有的函数是可见的,所有函数都可以使用它;局部变量只

对定义它的函数可见,只能在定义它的函数中使用,其他函数不能使用它。

(2)一个源程序中的各个全局变量不能同名,而各个函数的局部变量可以同名。在一个函

数中,当全局变量与局部变量同名时,全局变量不起作用,局部变量起作用。

(3)全局变量定义时未初始化,系统自动默认初值为0;局部变量定义时未初始化,其初

值不确定。

3、说明C51中变量的存储类型及其特点。 答:C51中变量的存储类型有:

(1)data,特点是:以直接寻址方式访问内部数据存储器,速度最快。

(2)bdata,特点是:以直接寻址方式访问内部可位寻址数据存储器,允许位与字节混合访

问。 (3)idata,特点是:以间接寻址方式访问内部数据存储器,允许访问全部内部数据存储器。 (4)pdata,特点是:分页访问外部数据存储器,用MOVX @Ri指令访问。 (5)xdata,特点是:访问外部数据存储器,用MOVX @DPTR指令访问。

(6)code,特点是:访问程序存储器,用MOVC @A+DPTR指令访问。 4、说明i++和++i的异同。 答:(1)i++:先赋值,i再自加1。

(2)++i:i先自加1,再赋值。 例:假设i=3;

如果执行x = i++; 则x = 3,i = 4。 执行x = ++i; 则i = 4,x = 4。 5、何为函数声明?如何进行函数声明? 答:(1)函数声明即是声明被调函数的原型,包括被调函数名、函数类型(即返回值类型)、

形参表(包括形参个数及其数据类型)。

(2)声明函数原型可以按照写函数定义时的函数头,再加上分号即可。 三、Proteus仿真

1.在Proteus下,仿真实现3.6节内容。

答:设在存储区,有10个数据:99,15,30,13,27,28,7,0,33,67。编写程序,将其按照从大到小的次序排列。并按次序在数码管上显示。为了简化硬件电路,选用译码、显示一体化显示模块。仿真电路如图3-8所示。

图3-8 数据排序仿真电路

C语言参考程序如下。 #include

//定义头文件 //定义常量

#define uchar unsigned char

uchar A[10]= {99,15,30,13,27,28,7,0,33,67} ;

//定义数组,为了显示直观,对0-99之间的十进制数进行排序

int DIS[10] = {252,96,218,242,102,182,190,224,254,246};

//定义数码管显示0-9的引脚值

sbit pos_1 = P2^0; //定义4位数码管第1位使能引脚

sbit pos_2 = P2^1; //定义4位数码管第2位使能引脚 sbit pos_3 = P2^2; //定义4位数码管第3位使能引脚 sbit pos_4 = P2^3; //定义4位数码管第4位使能引脚 void taxisfun () {

uchar i,j,Temp;

//定义局部变量 //设置外循环

//排序函数

for (i=0; i<=8; i++) {

for (j=0; j<=8-i; j++) { //设置内循环,j<8-i 比用 j<=8 少用很多循环

if (A[j+1]>A[j]) {

Temp = A[j]; A[j] = A[j+1];

//当后一个数大于前一个数 //前后 2 数交换,前数送零时变量 //后数送前数 //零时变量送后数

A[j+1] = Temp;

}

} } }

void delay() { int i,j;

//定义两个内部循环变量 //设置外部循环 //设置内部循环

//延迟函数

for ( i = 0;i <= 3; i++)

for ( j = 0; j <= 200; j++); } void off() {

pos_1 = 1; pos_2 = 1; pos_3 = 1; pos_4 = 1; }

void main(void)

//主程序

//数码管4位全灭函数

//数码管第1位灭 //数码管第2位灭 //数码管第3位灭 //数码管第4位灭

{

int now_pos, now_num;

//定义程序全局变量,now_pos为排序后的10个数字的排序序号,now_num记录显示结果循环次数

taxisfun (); off();

//调用排序函数,对10个乱序数值进行从大到小排序 //数码管全灭,等待进入循环显示 //程序进入循环阶段

while(1) {

for (now_pos = 0; now_pos < 10; now_pos++) {

//10个从大到小排序后结果显示

for (now_num = 0; now_num < 100; now_num++)

//每个数值显示100次后,才显示下一个数值

{

P1 = DIS[now_pos]; //P1口输出当前显示数值的排序结果 pos_1 = 0; delay(); off();

//数码管第1位亮起 //显示延迟

//数码管4位全灭

P1 = DIS[A[now_pos] / 10]; //P1口显示排序后数值的十位 pos_3 = 0; delay(); off();

//数码管第3位亮起 //显示延迟 //数码管4位全灭

//P1口显示排序后数值的个位

P1 = DIS[A[now_pos] % 10]; pos_4 = 0; delay();

//数码管第4位亮起 //显示延迟 //数码管4位全灭

off(); } }

}; }

2. 在Proteus下,用汇编语言程序实现数据排序,并将排序结果通过数码管显示。

答:设有N个数存放在LIST地址开始的内部RAM存储区中,编写程序将N个数按由小到大次序存放在原来的存储区内。仿真电路如图3-8所示。

数据排序的方法有很多种,常用的是“冒泡法”,基本思想是:将相邻两个数作比较,即第一个数和第二个数比较,第二个数和第三个数比较,依次类推。若符合从小到大顺序的,则不改变它们在内存中的位置;否则交换它们的位置。如此反复,直至完成排序。

按“冒泡法”对N个数排序时,最多需要N-1次双重循环。但在 …… 此处隐藏:1426字,全部文档内容请下载后查看。喜欢就下载吧 ……

第03章 单片机C语言程序设计 单片机原理与应用-基于实例驱动和Pr.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/613080.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)