ARTICLE · 1019191
《单片机应用技术(第2版)》全书习题参考答案

单片机应用技术(第2版)
出版社:重庆大学出版社
ISBN:978-7-5689-6458-6
中等职业教育电子类专业系列教材
重庆市“职业教育规划教材”
作者:杨清德 尹金 熊林
编辑:陈一柳
字数(千):505 页数:334 印次:2-2
开本:16开 平装
出版时间: 2026-08-11
定价:¥53
本书以STC89C52国产单片机为教学平台,遵循“项目引领、任务驱动、理实合一”职教理念,淡化理论,突出技能训练与工程应用。全书分4个模块,含6个项目、22个任务及6个综合实训,内容循序渐进。模块一帮助学生认知单片机基础,完成最小系统搭建与开发环境调试;模块二讲解C51语言编程基础与应用,夯实编程能力;模块三传授输入/输出接口技术,包含LED控制等实操;模块四侧重综合应用与系统设计,涵盖串行通信等典型智能系统开发,覆盖职教高考知识点与岗位核心技能点。 本书可作为中职电子技术应用、机电一体化、物联网技术应用等专业的教学用书,也可作为职教高考备考、技能大赛训练、岗前培训及单片机爱好者的参考资料,助力学生掌握单片机核心技能,适配产业岗位与升学需求。
《单片机应用技术》(第2版)
全书习题参考答案
项目1 单片机系统搭建
任务1 51系列单片机认知
一、选择题
1.B 2. B 3. B 4. A 5. B 6. C 7. B 8. B
二、判断题
1.√ 2. × 3. × 4. √ 5. × 6. √ 7. × 8. √
三、填空题
1.单片微型计算机
2.16 位;32 位;8
3.8051;4;512
4.程序存储器(或 ROM/Flash);数据存储器(或 RAM)
5.P0;P3;32
6.PLCC-44;LQFP-44;LQFP-44
7.品牌标识;Flash EEPROM(电可擦除程序存储器)
8.算术运算;逻辑运算;移位运算
四、简答题
1.单片机是将中央处理器(CPU)、存储器(RAM/ROM)、定时器/计数器、并行I/O口、串行通信口等计算机核心功能模块,集成在一块半导体芯片上形成的微型计算机系统。其核心特征为体积小、功耗低、成本低、可靠性高、编程灵活;核心定位是“嵌入式控制”,作为智能设备的“大脑”,实现对硬件设备的精准控制、数据采集与逻辑运算,本质是为特定控制任务设计的“专用微型计算机”。
2.单片机按位数可分为4位、8位、16位、32位四类,具体如下:
4位单片机:CPU一次处理4位数据,内部资源简单、功耗极低、成本低廉,主要应用于电子手表、计算器、普通玩具等简单控制场景;
8位单片机:CPU一次处理8位数据,内部资源丰富、性价比高、编程难度适中,应用最广泛,如STC89C52,适用于嵌入式入门、工业控制等场景;
16位单片机:CPU一次处理16位数据,运算速度更快、存储容量更大,适用于电机调速控制、精密仪器测量、高端消费电子等复杂控制场景;
32位单片机:CPU一次处理32位数据,具备高速运算能力、丰富的外设接口,支持复杂算法与操作系统(如STM32),广泛应用于物联网网关、工业机器人、智能汽车控制系统等高端嵌入式场景。
3.略
任务2 STC89C52单片机引脚的认知
一、选择题
1.B 2. B 3. B 4. B 5. C 6. B 7. C 8. B
二、判断题
1.√ 2. × 3. × 4. × 5. √ 6. × 7. √ 8. √
三、填空题
1.晶振引脚;I/O 端口引脚
2.5;地(或 GND)
3.外部中断 0 请求端(INT0);外部中断 1 请求端(INT1)
4.11.0592;30
5.手动复位电路;混合复位电路
6.地址锁存允许;1/6
7.10k;准双向
8.低;高
四、简答题
1. 电源引脚:VCC(40脚)接+5V电源,GND(20脚)接地,为单片机提供工作电源。复位引脚:RST(9脚),高电平有效。当该引脚出现持续两个机器周期以上高电平时,单片机复位,程序从头开始执行。
2. P3.0(RXD):串行数据接收引脚,用于接收串口数据。P3.1(TXD):串行数据发送引脚,用于发送串口数据。P3.2(INT0)**:外部中断0输入引脚,下降沿或低电平触发中断。P3.3(INT1):外部中断1输入引脚,触发方式与INT0相同。
3. P0口:无上拉电阻,开漏输出,驱动能力最强,可驱动8个TTL负载,作通用I/O时需外接上拉电阻。P1/P2/P3口:内部自带上拉电阻,为准双向口,驱动能力较弱,可驱动4个TTL负载,无需外接上拉电阻即可正常使用。
任务3 开发环境搭建与程序下载
一、选择题
1.B 2. B 3. A 4. B 5. B 6. B 7. C 8. B
二、判断题
1.× 2. × 3. × 4. √ 5. × 6. √ 7. √ 8. √
三、填空题
1.实现软件汉化(支持中文显示)
2.F8
3.芯片
4.Objects
5.Translations
6.上电复位(或重新上电)
7.代码无语法错误和警告,编译成功
8.AT89C52
四、简答题
答案略
任务4 单片机最小系统组成与搭建
一、选择题
1.A 2. B 3. C 4. C(对应.hex 文件格式选项) 5. B 6. B 7. D 8. B
二、判断题
1.√ 2. × 3. √ 4. √ 5. × 6. × 7. √ 8. √
三、填空题
1.单片机芯片;电源电路;晶振电路;复位电路
2.11.0592MHz;30pF
3.hex
4.RST;高
5.低电平;高阻态
6.P0.0;P0.1
7.5;地(或 GND)
8.混合(或上电 + 手动)
四、简答题
答案略
项目2C51语言基础
任务1基础语法与数据处理
一、选择题
1.C2.B3.A4.D5.B6.C7.C8.B9.B10.C
二、判断题:
1.对2.错3.对4.错5.对6.对7.错8.错9.错10.错
三、填空题
1.bit2.unsigned char3.04.连续5.int arr[5];
6.07.08.&&9.下标10.float
四、简答题
1.bit:用于定义普通位变量,存储在单片机内部RAM可位寻址区(20H~2FH),取值为0或1,由编译器自动分配地址,不能定义位指针和位数组。sbit:用于定义特殊功能寄存器(SFR)中的可寻址位,必须关联SFR地址或已定义的sfr变量,用于直接操作单片机引脚或寄存器特定位。区别:bit定义通用位变量;sbit专门操作SFR中的某一位,需指定具体地址或位偏移。
2.变量定义规则:先定义后使用;标识符由字母、数字、下划线组成,不能以数字开头,不能用关键字;需指定数据类型;同一行可定义多个同类型变量,用逗号分隔,语句以分号结束。作用域:局部变量仅在定义它的函数/代码块内有效;全局变量在整个程序范围内有效。 生命周期:局部变量在函数调用时创建,退出时释放;全局变量在程序运行期间始终存在。 3.算术运算符:+加法、*乘法、%取余、++自增。 关系运算符:>大于、==等于、!=不等于,用于比较并返回0或1。逻辑运算符:&&逻辑与、||逻辑或、!逻辑非,用于条件组合判断。 位运算符:&按位与、|按位或、<<左移、~按位取反,直接对二进制位操作。
任务2 基本语句与程序结构
一、选择题
1.C2.C3.C4.A5.C6.B7.A8.A9.B10.C
二、判断题
1.对2.对3.错(应为整型或字符型)4.对5.错(do-while 条件判断在循环体之后)
6.对7.对8.错(continue 结束本次循环,继续下一次)9.对10.对
三、填空题
1. 循环2. switch3. 大括号 {}4. 步进表达式(或增量表达式)5. 循环条件
6. 17. break8. 假(0)9. unsigned int a = 10;10. P1 = 0xFF;(或 P1 = 1; 根据具体引脚)
四、简答题
1.三种基本结构:顺序结构、分支结构、循环结构。顺序结构:程序按书写顺序从上到下逐条执行,不跳转、不重复。分支结构:根据条件判断结果选择执行不同语句,常用if、if-else、switch实现。循环结构:条件成立时重复执行循环体,常用while、do-while、for实现。
2.if-else:适用于条件判断、区间判断,支持关系/逻辑运算,多分支需嵌套使用。switch:适用于固定值多分支选择,只能判断常量等值匹配,结构更清晰。执行区别:if-else按顺序判断条件;switch直接匹配常量值,遇到break立即退出。
3.区别:while:先判断条件,再执行循环体,条件不成立则一次都不执行。do-while:先执行一次循环体,再判断条件,循环体至少执行一次。典型应用:while(1):用于单片机主循环,让程序持续运行。do-while:用于按键检测、等待松手等必须先执行一次的场景。
任务3 函数
一、选择题
1. C2. C3. A4. B5. C6. B7. C8. B9. B10. C
二、判断题
1. 对2. 对3. 错(传递的是数组首地址)4. 对5. 错
6. 错(定义中的是形参,调用时的是实参)7. 对8. 对9. 错(可以多次调用)10. 对
三、填空题
1. 返回值类型、函数名、参数列表、函数体2. 原型3. int4. 值5. math.h
6. 延时7. void8. return9. 局部10. return
四、简答题
1.函数四部分:返回值类型、函数名、参数列表、函数体。声明:告知编译器函数名称、返回值、参数,不写具体功能代码,以分号结束。定义:实现函数具体功能,包含函数头和函数体代码。
2.值传递:传递数据副本,函数内修改不影响实参,适用于char、int等基本类型。地址传递:传递变量地址,通过指针可直接修改实参,适用于数组、需要修改外部变量的场景。
3.自定义函数:无参函数、有参函数、空函数。常用头文件:reg52.h、intrins.h、math.h。常用内部函数:_nop_()、_crol_()、_cror_()。
任务4 综合应用编程程序实践
一、选择题
1.A2.B3 C4.B5.C6.D7.B8.B9.D10.A
二、判断题
1. 对2. 对3. 错4. 错(do-while至少一次,while不一定)5. 对
6. 错(可以用软件延时实现)7. 错8. 对9. 错10. 对
三、填空题
1. 输出2. 13. 延时4.左移和右移5. case6. 条件表达式
7. 分支或选择8. 循环体9. 空循环(或for/while10. 自上而下)
四、简答题
1.执行特点:严格按书写顺序自上而下执行,无分支、无循环、无跳转。适用场景:I/O初始化、简单赋值、固定步骤的硬件控制。流水灯实现原理:通过逐行给P0口赋值,依次点亮对应LED,配合延时函数实现固定顺序亮灭。
2.使用了if-else和switch-case两种分支语句。核心逻辑:按键按下→消抖检测→模式变量mode自增→switch匹配模式→执行LED对应效果并更新数码管显示。
3.优势:代码量少、简洁易改、复用性强,无需重复写赋值语句。左移:for循环 +<< 左移运算符。右移:for循环 +>> 右移运算符。
五、综合题
1题
#include
#define uchar unsigned char
#define uint unsigned int
void delay_ms(uint x)
{
uinti, j;
for(i= x; i > 0; i--)
for(j= 120; j > 0; j--);//12MHz时约延时1ms
}
void main()
{
uchari;
P1=0x00;//低电平点亮,全亮
delay_ms(2000);//延时2秒
P1=0xFF;//全灭
delay_ms(2000);//延时2秒
for(i=0;i<8;i++)
{
P1=~(0x01< <i); </i);//依次点亮第i个LED(低电平有效)
delay_ms(500);//点亮0.5秒
P1=0xFF;//熄灭当前LED(实际上下一个循环会改变,但这里先灭)
}
P1=0xFF;
while(1);
}
2题
#include
sbit KEY=P3^0;// 定义按键引脚
void delay(unsigned int ms)
{
unsignedint i, j;
for(i=0; i <ms;i++)< span> </ms;i++)<>
for(j=0;j<120;j++);
}
void main()
{
while (1)
{
if(KEY==0)
{
P1= 0x00;//全亮(假设低电平点亮)
delay(500);
P1= 0xFF;//全灭
delay(500);
}
else
{
P1 = 0xFF;//按键未按下,全灭
}
}
}
项目3LED与控制按键
任务1单片机I/O口驱动LED
一、选择题
1.B2.B3.B4.A5.D6.A7.B8.C
二、判断题
1.×2.√3.×4.√5.√6.×7.√8.×
三、填空题
1.P2、P32.5~203.共阳极4.0xA55.hex(或 .hex)6.串口(UART / 下载)
7.返回值8.unsigned int(或整型 /int)
四、简答题
1. 原因:LED是电流驱动器件,工作电流需限制在5~20mA,串联限流电阻可防止电流过大烧毁LED与单片机I/O口。计算公式:R = (VCC − VLED)/ILED。实例:VCC=5V,红色LED压降2V,电流10mA,则 R=(5−2)÷0.01=300Ω,工程常用220Ω~330Ω。
2. 点亮方式:低电平点亮,利用单片机灌电流能力强的特点。灌电流:电流流入I/O口,P1口最大约10mA,可直接驱动LED。拉电流:电流从I/O口流出,仅约500μA,无法点亮LED。
3. 原理:点亮→延时→熄灭→延时,循环执行,形成闪烁效果。关键语句: 1.sbit定义I/O口 2.while(1)死循环 3. 自定义延时函数4. 高低电平赋值(LED=0/LED=1)。
任务2流水灯控制系统设计
一、选择题
1.B;2.B;3.A;4.C;5.D;6.B;7.B;8.C;9.C; 10.B;11.C;12.B;13.D ; 14.B
二、判断题
1.√ 2. × 3. √ 4. √ 5. × 6. × 7. √ 8. ×
三、填空题
1.P0、P1、P2、P3;2.VCC(+5V / 电源);3.P1 >> 7 或 P1 & 0x80;4.0x7F;
5.无符号整型(unsigned int);6..hex;7.循环,;8.高
四、简答题
1. (1)位操作法:用sbit单独定义每个LED,逐一点亮/熄灭,代码直观、易懂,但代码量大、重复多。(2)字节操作法:直接给端口赋十六进制值(如0xFE、0xFD),速度快,但需要提前计算所有端口值。 (3)移位操作法:使用<<左移、>>右移指令,代码最简洁、复用性强,适合循环流水效果。
2. 左移流水灯:从P1.0向P1.7依次点亮,使用左移运算符<<,配合延时实现依次点亮。 右移流水灯:从P1.7向P1.0依次点亮,使用右移运算符>>。原理:通过移位运算改变I/O口输出值,每次只让一位输出低电平,实现LED依次亮灭。
3. while(1):死循环,让流水灯无限循环执行,不停止。延时函数:控制流水灯移动速度,延时越长,移动越慢。移位运算:实现LED依次点亮的逻辑,自动切换点亮位置,无需重复写赋值语句。
任务3独立按键结构与编程
一、选择题
1.D2.B3.B4.A5.B6.C7.C8.B
二、判断题
1.√;2. ×;3. ×;4. √;5. √;6. √;7. √;8. ×
三、填空题
1.机械抖动2.硬件消抖,软件消抖3.GND(地)4.无符号整型(unsigned int)5.初始化6.逻辑取反7.悬空状态8..hex
四、简答题
1. 按键抖动:机械按键按下/松开时,电平会快速跳变,导致单片机误判多次按键。消抖目的:防止按键误触发,保证按键识别准确。软件消抖步骤:(1)检测到按键按下(低电平);(2)延时 10ms 左右;(3)再次检测,若仍为按下,确认有效按键。
2. 上拉电阻作用:将按键引脚稳定在高电平,避免悬空导致电平随机跳变。按键未按下:引脚被上拉为高电平;按键按下:引脚接地变为低电平;无上下拉电阻时,引脚悬空,单片机无法正确识别按键状态。
3. 核心逻辑:(1)检测按键是否按下;(2)软件消抖确认有效;(3)对LED执行取反操作(LED = !LED); (4)等待按键松开,防止连续触发。关键语句:LED = !LED;、while
;
任务4按键控制LED模式切换
一、选择题
1.C;2.B;3.A;4.B;5.C;6.C;7.A;8.B; 9.B; 10.C; 11.C; 12.A; 13.B1.C2.B3.A4.B5.C6.C7.A8.B
二、判断题
1.√;2. ×;3. √;4. √;5. ×;6. √;7. ×;8. √
三、填空题
1.P0.7;2.8 路流水灯(或流水灯模式);3.11111110;4.P1;5.延时后;
6.按位或(|);7.等待按键释放;8..hex
四、简答题
1. (1)定义一个模式变量mode,用于记录当前模式(如1、2、3); (2)检测按键按下,经软件消抖确认后,将mode值+1;(3)当mode超过最大值时,重置为1,实现模式循环切换;(4)使用switch-case语句,根据mode值执行对应的LED效果。
2. 作用:根据变量的不同数值,选择执行不同的程序分支,实现多模式控制。模式匹配: case 1:执行单个LED常亮; case 2:执行LED闪烁; case 3:执行8路流水灯;每个模式执行完毕后用break跳出,避免执行其他分支。
3. 使用语句:while
;原理:当检测到按键按下时,程序停在此循环中,直到按键松开、引脚变回高电平,才退出循环,保证一次按键只切换一次模式。
项目4中断与定时器/计数器应用
任务1 单片机中断系统认知
一、选择题
1.B 2. A 3. C 4. B 5. C
二、填空题
1.中断响应;中断返回
2.外部中断;内部中断;两
3.定时器 T1;外部中断 1
4.外部中断 0
5.定时器 / 计数器 T0;外部中断 0
三、判断题
√ 2. × 3. √ 4. × 5. √
四、简答题
1.中断定义:单片机执行主程序时,遇到内部 /外部紧急事件,CPU 自动暂停当前程序,转去执行专门的中断服务程序,处理完毕后自动返回原程序继续执行的机制。核心作用:①实时响应突发事件,提升系统实时性;②避免 CPU 长时间等待外设,提高 CPU 利用率;③实现多任务并行处理的效果。
2.配置语句
EA = 1; // 开启总中断
EX0 = 1; // 使能外部中断0
IT0 = 1; // 外部中断0下降沿触发
PX0 = 1; // 外部中断0设置为高优先级
任务2定时器/计数器原理与配置
(一)选择题
1.B 2. A 3. C 4. C 5. B
(二)填空题
1.定时功能;计数功能;16 位
2.定时器 T1;定时器 T0;不可
3.12
4.定时器 T0
5.0xDC00;0xDC;0x00
(三)判断题
1.× 2. × 3. √ 4. √ 5. ×
(四)简答题
1.模式 0:13 位计数器,计数范围 0~8191,定时精度较低,适用于早期兼容场景,现极少使用;
模式 1:16 位计数器,计数范围 0~65535,定时范围广,无自动重装,适用于长定时场景,为最常用模式;
模式 2:8 位自动重装计数器,TLx 计数、THx 存初值,溢出后自动重装,定时精度高,适用于高精度短定时、波特率发生器场景;
模式 3:仅适用于 T0,分为两个独立 8 位计数器,T1 停止计数,适用于需要额外扩展定时器数量的场景(如 T1 作波特率发生器时)。
2.定时器 T0 模式 1 初始化核心步骤:① 配置 TMOD 寄存器:TMOD = 0x01;(T0 模式 1、定时功能、GATE=0);② 计算并写入初值:TH0 = 0xDC; TL0 = 0x00;(11.0592MHz 晶振 10ms 定时初值);③ 使能中断:ET0 = 1; EA = 1;(使能 T0 中断、开启总中断);④ 启动定时器:TR0 = 1;(置位 TR0,启动 T0 计数)。
任务3 定时器控制数码管显示
(一)选择题
1.A 2.D 3.B 4.B 5.B
(二)判断题
1.× 2. × 3. √ 4. × 5. √
(三)实操编程题
1.硬件接线思路
器件 | 单片机引脚 | 接线说明 |
2 位共阴极数码管 | P0 口(P0.0~P0.7) | 数码管段码引脚(a~g、dp)→ P0 口,每引脚串联 10kΩ 上拉电阻(P0 口为开漏输出,需上拉) |
数码管位选 1 | P2.0 | 第一位数码管公共端 → P2.0(串联 1kΩ 限流电阻) |
数码管位选 2 | P2.1 | 第二位数码管公共端 → P2.1(串联 1kΩ 限流电阻) |
电源 | VCC/GND | 数码管公共端为阴极,低电平有效;单片机 VCC 接 5V,GND 共地 |
2.参考代码
#include
#define SEG_PORT P0 // 段码端口(P0口)
sbit BIT1 = P2^0; // 第一位数码管位选
sbit BIT2 = P2^1; // 第二位数码管位选
// 共阴极数码管段码表(0-9,含小数点dp,dp未使用)
unsigned char code SEG_TABLE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
// 全局变量
unsigned char count_5ms = 0; // 5ms计数变量(累计20次=100ms,累计100次=500ms)
unsigned char count_500ms = 0; // 500ms计数变量
unsigned int num = 0; // 00-99计数变量
unsigned char disp_buf[2]; // 显示缓冲区:disp_buf[0]=个位,disp_buf[1]=十位
// 函数声明
void Timer1_Init(void); // 定时器T1初始化(模式2,250μs)
void Display_Scan(void); // 数码管动态扫描函数
void Num_Update(void); // 数字更新函数
void main(void)
{
Timer1_Init(); // 初始化定时器T1
EA = 1; // 开启总中断
while(1)
{
Display_Scan(); // 循环执行动态扫描,保证显示稳定
}
}
// 定时器T1初始化函数(模式2,250μs定时,晶振11.0592MHz)
void Timer1_Init(void)
{
TMOD &= 0x0F; // 清空T1的模式位(低4位为T0,高4位为T1)
TMOD |= 0x20; // T1模式2(8位自动重装),定时功能(C/T=0)
TH1 = 0x1A; // 定时250μs初值(0x1A=26)
TL1 = 0x1A; // 模式2,TL1溢出后自动从TH1重装
ET1 = 1; // 使能T1中断
TR1 = 1; // 启动T1
}
// 定时器T1中断服务程序(250μs中断一次)
void Timer1_ISR(void) interrupt 3
{
count_5ms++; // 250μs×20=5ms
if(count_5ms >= 20) // 累计20次中断=5ms
{
count_5ms = 0;
count_500ms++; // 5ms×100=500ms
if(count_500ms >= 100)
{
count_500ms = 0;
Num_Update(); // 500ms更新一次数字
}
}
}
// 数字更新函数(00-99循环)
void Num_Update(void)
{
num++;
if(num >= 100) // 超过99则清零
{
num = 0;
}
// 拆分十位和个位,存入显示缓冲区
disp_buf[1] = num / 10; // 十位
disp_buf[0] = num % 10; // 个位
}
// 数码管动态扫描函数(轮询点亮两位数码管)
void Display_Scan(void)
{
// 点亮第一位数码管(个位)
SEG_PORT = 0x00; // 消影:先清空段码,防止串位
BIT1 = 1; // 共阴极,位选高电平点亮
BIT2 = 0;
SEG_PORT = SEG_TABLE[disp_buf[0]]; // 输出个位段码
// 短暂延时,保证显示稳定(约1ms)
for(unsigned char i=0; i<100; i++);
// 点亮第二位数码管(十位)
SEG_PORT = 0x00; // 消影
BIT1 = 0;
BIT2 = 1; // 点亮十位
SEG_PORT = SEG_TABLE[disp_buf[1]]; // 输出十位段码
for(unsigned char i=0; i<100; i++);
}
项目5 串行通信与模拟量转换
任务1 串行通信基础认知
一、单项选择题
1.C2.C3.B4.B5.C6.C7.B8.B
二、判断题
1.×2.√3.×4.√5.√6.×7.√8.√
三、填空题
1.全双工2.方式03.104.25.PCON6. SBUF7.SM28波特率
四、简答题
1. 单工:数据只能单向传输,一方固定发、一方固定收。例:广播、电视。 双工:可双向传输,但不能同时进行。例:对讲机。全双工:可同时双向收发数据。例:手机通话、RS-232、蓝牙。
2.异步通信:各自时钟,以帧为单位传输,有起始位、停止位,线路简单。同步通信:共用时钟,连续成块传输,速度快,硬件复杂。波特率必须一致:保证收发双方位同步,否则会出现数据错位、乱码。
3. 方式1:10位UART,波特率可变(由T1控制),用于点对点通信。方式2:11位UART,波特率固定,多用于多机通信。方式3:11位UART,波特率可变,兼顾多机通信与速率灵活。
任务2 串行通信数据收发编程
一、单项选择题
1. B 2. C 3. D 4. B 5. D 6. A 7. C 8. C
二、判断题
1. × 2. √ 3. × 4. √ 5. √ 6. √ 7. √ 8. √
三、填空题
1. P3.1 2. 0x50 3. 0xFD 4. 等待,中断 5. 定时器T1 6. ES 7. RI 8. RI,TI
(四)简答题
1. 交叉连接原因:发送端必须对接接收端,单片机TXD发数据,只能连接对方RXD;单片机RXD收数据,只能连接对方TXD,否则无法通信。电平处理:(1)单片机是TTL电平(0~5V),PC是RS232电平(±12V),必须用MAX232进行电平转换;(2)与3.3V模块通信时,需加分压/限流电阻或专用电平转换芯片,防止烧坏设备;(3)通信双方必须共GND,才能形成电流回路。
2.查询方式: 原理:CPU在主循环里不断轮询RI/TI标志位,等待收发完成。 优点:程序简单,易理解。 缺点:CPU一直占用,不能处理其他任务,效率低。中断方式: 原理:数据收发完成触发中断,CPU再处理,平时可执行其他程序。 优点:资源利用率高、实时性强,适合多任务系统。 缺点:程序稍复杂,需配置中断、清标志位。
3. 需配置:SCON、TMOD、TH1/TL1、TCON,如需中断还需配置IE。 核心初始化步骤:(1)SCON = 0x50:设置串口为方式1,允许接收;(2)TMOD |= 0x20:定时器T1设为模式2(8位自动重装);(3)TH1 = TL1 = 0xFD:11.0592MHz晶振下,设置9600波特率初值; (4)TR1 = 1:启动定时器T1; (5)(中断方式)EA=1,ES=1:打开总中断和串口中断。
任务3 A/D与D/A转换接口认知
一、单项选择题
1. C 2. B 3. C 4. C 5. B 6. B 7. C 8. C
二、判断题
1. √ 2. × 3. √ 4. × 5. √ 6. √ 7. × 8. √
三、填空题
1. 取样,保持 2. 8,1 3. ADDC,ADDB,ADDA 5. 8,DI0 6. 双缓冲,输入寄存器 7. 逐次逼近,DAC 8. 数字地,模拟地
四、简答题
1.A/D转换(模数转换):将模拟信号(电压/温度/声音等)转换成数字信号,供单片机识别处理。 作用:采集外部物理量,让单片机“感知世界”。 D/A转换(数模转换):将数字信号转换成模拟电压/电流信号输出。 作用:控制外部设备,让单片机“控制世界”。
2. 工作流程:(1)选择通道,锁存地址(ALE);(2)发启动信号(START),开始转换;(3)等待转换结束标志(EOC);(4)打开输出使能(OE),读取数字量。引脚功能:START:启动A/D转换; EOC:转换结束标志(转换完变高);OE:输出使能,控制转换结果送出。
3.三种工作模式:(1)直通模式:数据直接转换,无锁存;(2)单缓冲模式:一级锁存,适合单路输出;(3)双缓冲模式:两级锁存,适合多路同步输出。双缓冲最大优点:可实现多路D/A同步更新输出,无毛刺、时序一致,适合立体声、多电机同步控制。
项目6 智能控制系统开发
任务1 步进电机控制与状态显示
一、选择题
1.A 2.A 3.C 4.A 5.B 6.B 7.C 8.C
二、填空题
1. 1, 2, 3, 4 2. 16, 2, 5, 7, 8 3. 停止, 正转, 反转 4. 0x01, 清零, 清零 5. 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x1f 6. 0x00 7. 软件消抖 8. 0x08, 0x04, 0x02, 0x01
三、判断题
1.× 2.√ 3.√ 4.√ 5.× 6.√ 7.× 8.√
四、简答题
1. 4相步进电机通过依次给线圈通电产生旋转磁场,带动转子转动。正转:按A→B→C→D相序循环通电(如:0x01→0x02→0x04→0x08)。 转:按D→C→B→A相序循环通电(如:0x08→0x04→0x02→0x01)。每切换一次相序,电机转动一步,延时大小决定转速。
2. (1)0x38:设置16×2显示、8位数据口、5×7点阵; (2)0x0C:开显示、关光标、不闪烁; (3)0x06:写入字符后光标自动右移; (4)0x01:清屏,光标回到左上角。 (初始化必须按顺序执行并加延时,否则显示异常。)
3. (1)系统初始化:LCD1602初始化+ 电机端口初始化;(2)开机显示默认状态(如“State: STOP”);(3)循环扫描按键(正转/反转/停止),并做消抖处理;(4)按键触发后,更新电机运行状态,并在LCD实时显示;(5)根据状态执行:正转、反转或停止;(6)循环执行,实现实时控制与显示。
任务2 直流电机调速与温度联动
一、选择题
1.B 2. C 3. A 4. B 5. C 6. A 7. C 8. B
二、填空题
1.输入通道, IN02.START, OE3.增大, 0.003854.100
5.0, 1006.17.1008.0x01
三、判断题
1.× 2. √ 3. × 4. √ 5. √ 6. × 7. √ 8. √
四、简答题
1. PT100是铂电阻,温度越高,电阻值越大; PT100 与固定电阻构成分压电路,温度变化 → 输出电压变化;ADC0809将模拟电压转换成0~255 的数字量;单片机根据数字量、分压关系、PT100 特性公式,计算出当前温度。
2. PWM(脉冲宽度调制):通过改变高电平占空比来控制平均电压,实现电机调速。实现方法: (1)配置定时器0中断,产生固定周期的定时中断; (2)定义一个周期计数器(0~100);(3)计数器小于占空比时输出高电平,否则低电平;(4)改变占空比,即可改变电机平均电压,实现调速。
3.( 1)PT100感应温度,输出模拟电压;(2)ADC0809采集电压并转换成数字量;(3)单片机将数字量换算为实际温度值;(4)根据温度设置PWM 占空比(温度越高,占空比越大);(5)PWM 信号驱动直流电机,实现温度越高、转速越快;(6)循环采集、循环更新,实现自动联动控制。
任务3 智能家居设计
一、选择题
1.C 2. C 3. D 4. B 5. D 6. B 7. A 8. C
二、填空题
1.三2.ADC08093.数据(或DQ)4.15
5.486.自发光7.关闭显示, 开启显示8.LED灯, 步进电机
三、判断题
1.× 2. × 3. √ 4. √ 5. √ 6. × 7. × 8. √
四、简答题
1. (1)控制器层:STC89C52单片机,负责数据处理、逻辑判断、全局控制。(2)感知层:DS18B20温度传感器、光敏电阻、人体红外传感器,采集环境信息。(3)执行层:LED灯、继电器、步进电机、蜂鸣器,实现照明、窗帘、报警等控制。(4)人机交互层:OLED显示屏、按键,显示数据、切换模式。(5)通信层:串口模块,与电脑上位机通信。
2.通信特点:采用单总线(1-Wire)协议,仅需1根数据线+地线,接口简单、抗干扰强、无需外部ADC。读取流程:(1)初始化:主机发复位脉冲 → 传感器回应存在脉冲;(2)发跳过ROM命令(0xCC); (3)发温度转换命令(0x44),等待转换完成;(4)再次初始化;(5)发读暂存器命令(0xBE);(6)读取数据,获取温度值。
3. (1)光照联动:光敏电阻+ADC采集亮度 →光线暗时自动开灯,光线亮时关灯;(2)温度联动:DS18B20测温度 →温度过高启动电机制冷,温度过低制热,适宜则停止;(3)安防联动:人体红外传感器检测到人 →蜂鸣器报警、继电器启动、OLED显示报警信息;(4) 所有状态实时显示在OLED屏上,系统可在自动/手动模式间切换。
任务4 倒计时器设计
一、选择题
1. D 2. C 3. D 4. B 5. C 6. C 7. C 8. C
二、判断题
1. × 2. √ 3. √ 4. √ 5. × 6. √ 7. √ 8. √
三、填空题
1. 1002. 自动重装3. 使能定时器0中断4 . 主循环
5. 双6. 数字7. 计时8. 中断服务程序
四、简答题
1.51单片机定时器无法直接定时1秒,需采用中断累加方式。本任务:定时器设置为10ms中断一次,中断100次即为1秒。 流程:定时器产生10ms中断 → 中断计数累加 → 计满100次 → 时间减1。
2. 动态显示原理:利用人眼视觉暂留,快速轮流点亮每一位数码管,看上去像同时显示。本任务实现:(1)建立显示缓冲区,存放要显示的数字;(2)定时器0中断1ms扫描一位数码管;(3)倒计时数值变化时,更新缓冲区,数码管自动刷新显示。
3. 按键功能(启动/停止/复位三合一)(1) 停止状态 → 按下 →开始倒计时(2)运行状态 → 按下 →暂停倒计时(3)结束状态 → 按下 →复位到5秒,回到停止状态
三种系统状态(1)状态0:停止(初始态,倒计时暂停) (2)状态1:运行(倒计时递减)(3)状态2:结束(时间到,显示00,停止计时) 。