《基于构件化的嵌入式系统设计》 课件 项目3 GPIO和定时器的综合应用-实现数码管显示、键盘检测与控制、测温功能_第1页
《基于构件化的嵌入式系统设计》 课件 项目3 GPIO和定时器的综合应用-实现数码管显示、键盘检测与控制、测温功能_第2页
《基于构件化的嵌入式系统设计》 课件 项目3 GPIO和定时器的综合应用-实现数码管显示、键盘检测与控制、测温功能_第3页
《基于构件化的嵌入式系统设计》 课件 项目3 GPIO和定时器的综合应用-实现数码管显示、键盘检测与控制、测温功能_第4页
《基于构件化的嵌入式系统设计》 课件 项目3 GPIO和定时器的综合应用-实现数码管显示、键盘检测与控制、测温功能_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统设计

为了实现嵌入式系统设计的可移植和可复用,嵌入式硬件和嵌入式软件均采用构件化的设计思想,即对嵌入式硬件和嵌入式软件进行封装,供系统设计者调用,并倡导嵌入式软件分层设计的理念,以大幅度降低嵌入式技术学习难度和开发难度。

本书特色:项目任务驱动,突出学以致用,注重实践创新。每个项目且均采用了“通用知识”→“嵌入式构件设计”→“应用层程序设计”→“学以致用与创新”的学习流程。采用“搭积木”的思想,逐步提高嵌入式系统设计能力。

本书可作为高等学校电子信息类、计算机类、自动化类等专业的嵌入式系统设计教材,也可作为嵌入式技术培训教材,还可供从事嵌入式技术开发的工程技术人员参考。项目1:GPIO基础应用—实现闪灯和开关状态检测与控制功能项目2:利用定时中断实现频闪灯项目3:GPIO和定时器的综合应用—实现数码管显示、键盘测控、测温功能项目4:利用

UART

实现上位机和下位机的通信项目5:利用

Timer

实现PWM和输入捕获功能项目6:利用

ADC

设计简易数字电压表项目7:利用

SPI

实现多机串行通信项目8:利用

CAN

实现多机通信教

项目3GPIO和定时器的综合应用——实现数码管显示、键盘检测与控制、测温功能【项目导读】

数码管和键盘分别是嵌入式智能产品中常用的输出设备和输入设备。有些实际工程应用中需要对温度进行检测,实现某种控制功能。本项目是在项目1和项目2的基础上,综合利用GPIO和定时器实现数码管显示、键盘检测与控制、测温功能。【学习目标】(1)掌握数码管的通用知识,包括数码管的结构、基于MCU直接控制的数码管硬件构件设计方法、数码管的笔形码、基于MCU直接控制的数码管显示原理。(2)掌握键盘的通用知识,包括键盘的基本问题和两种接口方式。(3)熟悉带键盘扫描接口的数码管驱动控制专用芯片TM1637的功能特点,掌握基于TM1637的数码管和键盘硬件构件设计方法和软件构件设计方法。(4)掌握基于TM1637的数码管显示和键盘检测与控制的应用层程序设计方法。(5)熟悉1线数字式测温器件DS18B20的主要特点,掌握基于DS18B20的测温硬件构件设计方法和软件构件设计方法。(6)掌握基于DS18B20的测温功能应用层程序设计方法。项目3GPIO和定时器的综合应用——实现数码管显示、键盘检测与控制、测温功能任务3.1掌握数码管的通用知识3.1.1数码管的结构任务3.1掌握数码管的通用知识3.1.2基于MCU直接控制的数码管硬件构件设计

MCU需要9个GPIO引脚控制1位数码管,因此,若MCU直接控制4位独立数码管,则需要36个GPIO引脚,这将导致硬件电路连接复杂、MCU的GPIO引脚资源紧张。数据线位选线任务3.1掌握数码管的通用知识3.1.2基于MCU直接控制的数码管硬件构件设计

MCU直接控制四位一体组合数码管时,只需12个GPIO引脚,其中8个GPIO引脚控制数码管的8根数据线,4个GPIO引脚控制数码管的4根位选线。任务3.1掌握数码管的通用知识3.1.3数码管的笔形码共阳极数码管的笔形码(不带小数点)

若需要编制带小数点的笔形码,只需将此表中的h段改为“0”即可。

若使共阳极数码管的某段点亮,则该段对应的数据线应为低电平(逻辑0)。000000110xC00011111

10xF9111

0

00

00

0xA4111

0

0000

0xB01111

00

00

0x99111

00

00

0

0x9211

00000

0

0x8211111

000

0xF81

0000000

0x8011

00

0000

0x90111111110xFF

利用数组存放笔形码

若使共阳极数码管的某段不点亮,则该段对应的数据线应为高电平(逻辑1)。任务3.1掌握数码管的通用知识3.1.3数码管的笔形码【学以致用】

填写表3-3中共阴极数码管带小数点的“0.”

~

“9.”对应的笔形码。任务3.1掌握数码管的通用知识3.1.4基于MCU直接控制的数码管显示原理1、使某位数码管显示数据

例如,若要使第1位数码管显示数据“0”,则:

首先需要将位选线LED_CS1置为低电平,而其他位选线置为高电平;

然后将数码管数据

“0”对应的笔形码0xC0(11000000)送至数码管的8根数据线即可。011100000011任务3.1掌握数码管的通用知识3.1.4基于MCU直接控制的数码管显示原理2、使多位数码管轮流显示数据

例如,若要使4位数码管轮流显示“1”

“2”

“3”

“4”,则程序设计流程图如下:LED_CS1=0;LED_CS2=1;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xF9;

延时LED_CS1=1;LED_CS2=0;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xA4;

延时

LED_CS1=1;LED_CS2=1;LED_CS3=0;LED_CS4=1;LED_D7~LED_D0=0xB0;

延时

LED_CS1=1;LED_CS2=1;LED_CS3=1;LED_CS4=0;LED_D7~LED_D0=0x99;

延时

任务3.1掌握数码管的通用知识3.1.4基于MCU直接控制的数码管显示原理3、使多位数码管“同时”显示数据

若将延时时间缩短至5ms,则给人感觉4位数码管

“同时”显示“1”

“2”

“3”

“4”(视觉暂留)LED_CS1=0;LED_CS2=1;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xF9;

延时LED_CS1=1;LED_CS2=0;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xA4;

延时

LED_CS1=1;LED_CS2=1;LED_CS3=0;LED_CS4=1;LED_D7~LED_D0=0xB0;

延时

LED_CS1=1;LED_CS2=1;LED_CS3=1;LED_CS4=0;LED_D7~LED_D0=0x99;

延时

——动态扫描显示5ms5ms5ms5ms【知识巩固】

简述数码管动态扫描显示的原理和实现方法。任务3.2掌握键盘的通用知识3.2.1键盘的基本问题1、键盘操作、抖动问题4引脚直插式键盘按键实物图及内部结构图2引脚贴片式键盘按键实物图在嵌入式系统中,有两种常用的键盘按键。任务3.2掌握键盘的通用知识3.2.1键盘的基本问题1、键盘操作、抖动问题VCC按下抖动释放抖动稳定闭合5~10ms5~10ms理想实际

操作者几乎感觉不到抖动,但MCU以为操作者在此期间连续操作若干次键,从而引起按键命令的错误执行或重复执行,因此需要对按键抖动进行处理。(1)滤波去抖:实现键操作时电压的变化为理想的矩形波。(2)延时躲抖:MCU检测到有键被按下时,先软件延时10ms以避开按键抖动(惹不起但可以躲得起),然后再判断该键是否被按下。例如:电容滤波去抖。0.1uF任务3.2掌握键盘的通用知识3.2.1键盘的基本问题2、键盘连击问题

当按下某个键时,如果操作者还没有释放该键,则MCU以为操作者在连续操作该键(连击),对应的按键功能程序将会反复被执行。大多数应用场合需要防止连击,即一次按键只让MCU执行一次功能程序,该键不释放就不执行第二次。

在软件设计时,可这样做:当MCU检测到某个键被按下时,只执行一次功能程序,然后等待按键释放。任务3.2掌握键盘的通用知识3.2.2键盘的两种接口方式(基于MCU引脚直接连接)1、独立式键盘

各个键相互独立,按照一对一的方式连接到MCU的GPIO引脚或外部中断引脚上,另一端接地。

采用查询扫描时,MCU可通过直接读取KEY引脚的电平状态来判断键是否被按下。

采用外部中断扫描时,一般利用按键的下降沿触发MCU中断。

查键方便,但占用MCU的I/O引脚资源较多,因此一般适用于键较少的场合。

任务3.2掌握键盘的通用知识3.2.2键盘的两种接口方式(基于MCU引脚直接连接)2、矩阵式键盘

4×4=16个键,只需要MCU的8个GPIO引脚,应用于键较多的场合。

结构原理:

R1~R4引脚作为行线,C1~C4引脚作为列线,在每个行线和列线的交叉点放置一个键,当某个键被按下时,其对应的行线和列线短路,MCU通过检测是否有行线和列线短路来确定是否有键被按下,并确定被按下键的位置。行线列线任务3.2掌握键盘的通用知识【知识巩固】(1)按键抖动处理方法有哪些?它们的优点和缺点分别是什么?(2)什么是键盘连击?如何防止键盘连击现象?按键连击可以用于什么场合?(3)键盘有几种接口方式?分别对应的适用场合是什么?任务3.3基于TM1637的数码管和键盘构件设计

前面学习的数码管硬件构件和键盘硬件构件,均采用MCU的GPIO引脚直接连接方式,其优点是原理简单。但在同时需要使用数码管和键盘的应用系统设计中,若使用上述硬件构件,则明显存在占用过多GPIO引脚资源的缺点。

为了解决这一问题,可改用专门的数码管和键盘驱动芯片(如TM1637芯片)来简化硬件电路。

任务3.3基于TM1637的数码管和键盘构件设计3.3.1基于TM1637的数码管和键盘硬件构件设计1、TM1637功能特点

TM1637是一种带键盘扫描接口的数码管驱动控制专用芯片。可支持最多

6位

8段共阳极数码管显示;支持

2×8矩阵键盘扫描;两线串行接口(CLK、DIO),即MCU只需两个GPIO引脚即可与TM1637进行串行通信。数码管数据线/键盘扫描引脚数码管位选线引脚时钟线引脚串行数据输入/输出线引脚键盘数据输入引脚电源引脚(3.3~5V)接地引脚任务3.3基于TM1637的数码管和键盘构件设计3.3.1基于TM1637的数码管和键盘硬件构件设计1、TM1637功能特点任务3.3基于TM1637的数码管和键盘构件设计3.3.1基于TM1637的数码管和键盘硬件构件设计2、基于TM1637的数码管和键盘硬件构件设计图【思考总结】

使用TM1637驱动数码管和键盘,与基于MCU的GPIO引脚直接驱动数码管和键盘,有什么好处?两种驱动方式有何区别?任务3.3基于TM1637的数码管和键盘构件设计

基于TM1637的数码管和键盘软件构件TM1637_LED_KB由tm1637_led_kb.h头文件和tm1637_led_kb.c源文件组成,若使用该软件构件,则只需将这两个文件添加到所建工程的05_App(应用外设软件构件)文件夹中,即可实现MCU通过TM1637控制数码管显示功能和键盘扫描功能。

其中,tm1637_led_kb.h头文件主要包括头文件的包含、必要的宏定义、存放数码管笔形码的数组、存放键盘编码和对应键名的数组以及对外接口函数的声明,而tm1637_led_kb.c源文件是该软件构件对外接口函数的具体实现。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx用户只要熟悉tm1637_led_kb.h

头文件的内容,即可使用该软件构件进行编程。3.3.2基于TM1637的数码管和键盘软件构件的组成及使用方法任务3.3基于TM1637的数码管和键盘构件设计【学以致用】

根据tm1637_led_kb.h头文件,写出实现下列功能的函数调用语句。

(1)对TM1637进行初始化。

(2)TM1637驱动数码管动态显示保存在数组disp[4]中的数据。

(3)TM1637控制数码管清屏。

(4)将用于保存数码管显示数据的数组disp[4]中的元素值更新为{5,6,7,8}。

(5)将TM1637扫描2×8矩阵式键盘而获取的按下键的键名赋给变量key_name。3.3.2基于TM1637的数码管和键盘软件构件的组成及使用方法任务3.4基于TM1637的数码管显示的应用层程序设计3.4.1使用软件延时实现数码管先后显示不同的数据

在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现数码管先后显示不同的数据。1)工程总头文件includes.h:包含04、05、06文件夹中的头文件2)主程序源文件main.c:

定义数组(数码管显示数据缓冲区);初始化;

在主循环中实现数码管先后显示不同的数据在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【学以致用与创新】

(1)在主循环中,实现4位数码管先后显示2组数据。例如在1秒内显示年份“2023”,在下1秒内显示月日“0317”。

(2)在主循环中,实现4位数码管显示秒计数值。

(3)实现数码管的高位灭零功能:对于数据“0015”,数码管上只显示“15”,而高位的“00”不显示。任务3.4基于TM1637的数码管显示的应用层程序设计3.4.2使用定时中断实现数码管先后显示不同的数据

在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现数码管先后隔秒显示年份和月日的效果。1)工程总头文件includes.h:

包含04、05、06文件夹中的头文件2)主程序源文件main.c:

定义全局数组(存放数码管显示的数据);

在主程序中,初始化;

在主循环中,数码管显示全局数组中对应的数据在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【学以致用与创新】

(1)实现数码管显示秒计数值。

(2)实现数码管显示分和秒的计数值,并且隔秒显示分和秒之间的小数点,即实现显示相对时钟的效果。3)中断服务程序源文件isr.c:声明全局数组;

在定时中断服务程序中,实现定时功能(更新全局数组的数据)任务3.5基于TM1637的键盘检测与控制的应用层程序设计3.5.1键盘检测与控制的查询程序流程任务3.5基于TM1637的键盘检测与控制的应用层程序设计3.5.2应用实例参考程序

在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现对某个键(如1号键)的按键次数进行统计,并在数码管上显示该键的按键次数。1)工程总头文件includes.h:

包含04、05、06文件夹中的头文件2)主程序源文件main.c:

定义局部变量,初始化;

在主循环中,扫描键盘并执行按键功能程序在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【学以致用与创新】

(1)实现在某位数码管上显示按键的键名。

(2)实现在4位数码管上分别显示按照顺序按下的4个键的键名。例如,按照顺序依次按'1'、'2'、'3'、'4'键时,4位数码管依次显示“1”“2”“3”“4”。【实践验证】

将等待按键释放对应的语句去掉,重新运行程序,观察实验现象,体会语句的作用。任务3.6基于DS18B20的测温功能设计与实现3.6.1DS18B20的主要特点和基于DS18B20的测温硬件构件设计1、DS18B20的功能特点

DS18B20是

1线数字式

测温器件。其特点如下:

(1)只有3个工作引脚:电源引脚VDD、接地引脚GND和数据总线引脚DQ。

(2)MCU只需要一个GPIO引脚即可与DS18B20的DQ引脚进行串行总线通信,其中MCU作为主设备,DS18B20作为从设备,可灵活采用单主单从或一主多从的总线结构,实现单点或多点测温。

(3)测量温度范围为-55℃~+125℃,其中在-10℃至+85℃精确度为±0.5℃。其最高分辨率(默认设置)为12位(二进制),对应0.0625℃的温度分辨率。任务3.6基于DS18B20的测温功能设计与实现3.6.1DS18B20的主要特点和基于DS18B20的测温硬件构件设计2、基于DS18B20的测温硬件构件设计图任务3.6基于DS18B20的测温功能设计与实现3.6.2基于DS18B20的测温软件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论