嵌入式技术与应用开发项项目三数码管显示设计与实现_第1页
嵌入式技术与应用开发项项目三数码管显示设计与实现_第2页
嵌入式技术与应用开发项项目三数码管显示设计与实现_第3页
嵌入式技术与应用开发项项目三数码管显示设计与实现_第4页
嵌入式技术与应用开发项项目三数码管显示设计与实现_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、项目三 数码管显示设计与实现任务6 数码管静态显示设计与实现目标利用STM32与数码管的接口技术,完成STM32的数码管静态显示电路设计和程序的设计、运行及调试。任务要求使用STM32F103R6芯片的PC0PC15引脚分别接2个共阴极LED数码管。个位数码管接PC0PC7;十位数码管接PC8PC15。采用静态显示方式,编写程序使2位数码管上循环显示 020。认识数码管嵌入式电子产品常用的显示器有LED和LCD两种方式LED数码显示器价格低廉、体积小、功耗低、而且可靠性好,因此得到广泛使用。数码管的结构和工作原理数码管内部是由八个LED(简称位段)组成,其中有七个条形LED和一个小圆点LED。

2、LED导通时,相应的线段或点发光,将这些LED排成一定图形,常用来显示数字09、字符AG,还可以显示H、L、P、R、U、Y、符号“”及小数点“.”等。LED数码管可以分为共阴极和共阳极两种结构。LED数码管引脚及内部结构 管脚排列 共阴极数码管 共阳极数码管认识数码管数码管的字型编码要使数码管上显示某个字符,必须使它的8个位段上加上相应的电平组合,即一个8位数据,这个数据就叫该字符的字型编码。通常用的位段的编码规则如下图所示。 D7 D6 D5 D4 D3 D2 D1 D0共阴极和共阳极数码管的字型编码是不同的,对于同一个字符,共阴极和共阳极的字型编码是反相的。dpgfedcba认识数码管数码

3、管的显示方法:有静态显示和动态显示两种方法。静态显示静态显示是指数码管显示某一字符时,相应的LED恒定导通或恒定截止。这种显示方式的各位数码管相互独立,公共端恒定接地(共阴极)或接电源(共阳极)。每个数码管的八个位段分别与一个八位I/O端口相连。I/O端口只要有字型码输出,数码管就显示给定字符,并保持不变,直到I/O口输出新的段码。认识数码管数码管的显示方法:有静态显示和动态显示两种方法。动态显示动态显示是一种一位一位地轮流点亮各位数码管的显示方式,即在某一时段,只选中一位数码管的“位选端”,并送出相应的字型编码;在下一时段按顺序选通另外一位数码管,并送出相应的字型编码;依此规律循环下去,即可

4、使各位数码管分别间断地显示出相应的字符。这一过程称为动态扫描显示。数码管静态显示电路设计按照任务要求,采用静态显示方式,数码管显示电路是由STM32F103R6、2个1位的共阴极LED数码管构成。STM32F103R6的PC0PC7引脚接个位数码管的AG七个位段;PC8PC15引脚接十位数码管的AG七个位段;由于小数点“.”DP位不用,PC7和PC15引脚也就不用了。数码管静态显示电路设计数码管静态显示程序设计数码管显示功能实现程序控制数码管内部的不同位段点亮,能显示出需要的字符。本电路采用共阴极结构的数码管,其公共端接地,这样可以控制每一只LED的阳极电平来使其发光或熄灭,阳极为高电平发光,

5、为低电平熄灭。“09”十个字符的字型编码如下: 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f通过PC0PC15输出“09”十个字符的字型编码,就可以在数码管上显示“09” 数字。数码管静态显示代码见源程序。【技能训练3-1】共阳极LED数码管应用如何使用共阳极LED数码管实现020循环显示呢?在任务6电路中,采用的是共阴极数码管。这里使用的是共阳极数码管,其公共端需要接电源。共阳极数码管显示“09”十个字符的字型编码与共阴极数码管的字型编码是反相的,字型编码如下: 0 xC0,0 xF9,0 xA4,0 xB0,0 x9

6、9,0 x92,0 x82,0 xF8,0 x80,0 x90在程序中,若继续使用共阴极数码管的字型编码,可以通过对共阴极字型编码取反来获得共阳极数码管的字型编码。共阳极数码管静态显示代码见源程序。共阳极数码管静态显示电路设计STM32存储器映射认识Cortex-M3存储器Cortex-M3存储器与STM32存储器之间的关系STM32采用的是Cortex-M3内核(又称为CM3内核),Cortex-M3内核是通过ICode、DCode、System总线与STM32内部的Flash、SROM相连接的,这种连接方式就直接关系到STM32存储器的结构组织。换句话说,Cortex-M3定义了一个存储器

7、结构,ST公司是按照Cortex-M3的存储器定义,设计出了自己的存储器结构,ST公司的STM32的存储器结构必须按照Cortex-M3定义的存储器结构来进行设计。STM32存储器映射认识Cortex-M3存储器Cortex-M3存储器Cortex-M3是32位的内核其PC指针可以指向232=4GB的0 x0000_00000 xFFFF_FFFF地址空间。Cortex-M3存储器是把程序存储器、数据存储器、寄存器、输入输出端口等组织在这个4GB空间的不同区域,这些区域是被明确的划分了。Cortex-M3存储器具有以下特点:Cortex-M3存储器映射是预定义的,并且还规定好了哪个位置使用哪条

8、总线;Cortex-M3存储器系统支持“位带(bitband)操作”。通过位带操作,实现了对单一bit位的操作。位带操作仅适用于一些特殊的存储器区域中;Cortex-M3存储器支持非对齐访问和互斥访问;Cortex-M3存储器支持小端模式和大端模式。STM32存储器映射Cortex-M3存储器映射存储器映射是指把芯片中或芯片外的FLASH、RAM以及外设等进行了统一编址,即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在接有外部RAM或FLASH的情况下可进行自定义。Cortex-M3存储器映射实现由于Cortex-M3对设备的地址进行了重新的映射,当访问存储

9、器或外设时,都是按照映射后的地址进行访问的。Cortex-M3存储器的4G地址空间被划分为大小相等的8块区域(是粗线条的),每块区域大小为512M。主要包括代码、SRAM、外设、外部RAM、外部设备、专用外设总线-内部、专用外设总线-外部、特定厂商等。Cortex-M3存储器映射结构。只要芯片制造商按照Cortex-M3存储器的结构,进行各自芯片的存储器结构设计,就允许芯片制造商灵活的分配存储器空间,以制造出各具特色的基于Cortex-M3的芯片。STM32存储器映射Cortex-M3存储器映射Cortex-M3存储器映射区域分析代码区(0 x0000_00000 x1FFF_FFFF)程序可

10、以在代码区、内部SRAM区以及外部RAM区中执行,通常是把程序放到代码区,从而使取指和数据访问各自使用自己的总线(指令总线与数据总线是分开的)。SRAM区(0 x2000_00000 x3FFF_FFFF)这个区域用于片内SRAM,是用于让芯片制造商连接片上的SRAM,这个区通过系统总线来访问。在SRAM区的底部,还有一个 1MB的位带区,这个位带区还有一个对应的32MB的“位带别名(alias)区”。也就是说,位带别名区里面的每个字对应位带区的一个bit位,每个位变量是32位(既1个字4个字节)。位带操作只适用于数据访问,不适用于取指。通过位带的功能,我们访问一个bit位,可以从位带别名区中

11、,像访问普通内存一样操作。STM32存储器映射Cortex-M3存储器映射Cortex-M3存储器映射区域分析片上外设区(0 x4000_00000 x5FFF_FFFF)这个区域是用于片上外设寄存器的,不能在这个区域执行指令。在这个区域的底部,也有一个1MB的位带区,并有一个与其对应的32MB的位带别名区,用于快捷访问外设寄存器。外部RAM区(0 x6000_00000 x9FFF_FFFF)这个区域大小是1GB,是用于连接外部RAM的,在这个区域划分为外部RAM区的前半段和外部RAM区的后半段2部分,每部分大小是512MB。外部RAM区的前半段(0 x6000_00000 x7FFF_FF

12、FF)。这个区域用于片外RAM,可以缓存,并且可以执行指令。外部RAM区的后半段(0 x8000_00000 x9FFF_FFFF)。这个区域除了不可以缓存外,其他与前半段相同。STM32存储器映射Cortex-M3存储器映射Cortex-M3存储器映射区域分析外部外设区(0 xA000_00000 xDFFF_FFFF)这个区域大小是1GB,是用于连接外部设备的,在这个区域划分为外部外设区的前半段和外部外设区的后半段2部分,每部分大小是512MB。外部RAM区和外部外设区之间的区别是:外部RAM区允许执行指令,而外部设备区是不允许执行指令的。系统区(0 xE000_00000 xFFFF_F

13、FFF)这个区域是专用外设和供应商指定功能区域,这个区域是不能执行代码的。系统区主要包括Cortex-M3内核的系统级组件、内部专用外设总线、外部专用外设总线,以及由提供者定义的系统外设。外部专用外设总线有AHB外设总线和APB外设总线。AHB外设总线只用于Cortex-M3内部的AHB外设;APB外设总线既用于Cortex-M3内部的APB设备,也用于外部设备(“外部”是对内核而言)。STM32存储器映射STM32存储器映射前面介绍的Cortex-M3存储器映射,只是一个粗线条的模板。下面我们就针对ST公司的STM32存储器,来介绍STM32存储器映射。Cortex-M3存储器与STM32存

14、储器映射对比通过Cortex-M3存储器与STM32存储器映射对比,可以看出他们是很相似,不同的是STM32加入了很多实际的东西,如:Flash、SRAM等。只有加入了这些东西,才能成为可以工作的STM32芯片。STM32存储器映射STM32存储器的地址空间被划分为大小相等的8块区域,其中:Peripherals是外设的存储器映射,对该区域操作,既对相应外设进行操作;SRAM是运行时临时存放代码的地方;Flash是存放代码的地方;System Memory是STM32出厂时自带的,只能使用,不能写或擦除;Option Bytes是可以按照用户的需要进行配置。【技能训练3-2】编写外部设备文件在

15、任务6的数码管静态显示中,主文件smgxs.c 内容太多,没有条理,如何解决呢?这是由于数码管外部设备的初始化以及其它相关代码,都写在主文件中了。可以把外部设备分类单独写一个文件,这样就可以对数码管静态显示的代码进行优化了。 把延时函数和数码管都分开单独写一个文件和头文件,并保存在其对应的子目录里,使得数码管循环显示020的主文件变得简洁明了,还具有规范性和可读性。编写外部设备文件的代码,见源程序。任务7 数码管动态扫描显示设计与实现目标完成STM32的数码管动态扫描显示电路设计和程序的设计、运行及调试。任务要求采用数码管动态扫描方式,使用STM32F103R6芯片和6个共阴极LED数码管,通

16、过数码管动态扫描程序实现6个数码管显示“654321”。任务7 数码管动态扫描显示设计与实现数码管动态扫描显示电路设计根据任务要求,数码管动态扫描显示电路是由STM32F103R6、6位数码管和一片74LS245驱动电路组成。将所有位的段选控制端并联起来,接到PC0PC7引脚。PC0PC7引脚输出显示段码(包括小数点“.”DP段)。PC0PC7引脚通过一片74LS245依次接数码管的AG和DP引脚。PB0PB5引脚输出位码,PB0PB5引脚依次接数码管的位码引脚16。数码管动态扫描显示电路数码管动态扫描显示程序设计数码管动态扫描显示实现分析动态扫描是采用分时的方法,轮流点亮各位数码管的显示方式

17、。它在某一时间段,只让其中一位数码管的“位选端”(com端)有效,并送出相应的字型编码。动态扫描过程如下:从段选线上送出字型编码,再控制位选端,字符就显示在指定数码管上,其他位选端无效的数码管都处于熄灭状态;持续保持1.5ms时间,然后关闭所有数码管显示;接下来又送出新的字型编码,按照上述过程又显示在另外一位数码管上,直到每一位数码管都扫描完为止。数码管动态扫描显示程序设计数码管动态扫描显示关键代码如下:for(i=1;i7;i+) GPIO_Write(GPIOB,weii-1); /位选,数码管一个一个轮流显示 GPIO_Write(GPIOC,tablei); /输出显示的字型码 Del

18、ay(20); /保持显示一段时间 GPIO_Write(GPIOB,0 x0ff); /使所有数码管都熄灭一段时间 Delay(20);数码管动态扫描显示代码,见源程序。IO口的位操作与实现位带区与位带别名区认识位带区与位带别名区在SRAM区和片上外设区的底部,都各有一个1MB的位带区,每个位带区都对应一个自己的32MB位带别名区。位带别名区可以把每个位(bit)扩展成一个32位的字,通过位带别名区访问这些字时,就可以达到访问原来位的目的。IO口的位操作与实现位带区与位带别名区SRAM 区的位带区与位带别名区在stm32f10 x.h头文件中,对SRAM 区的位带区和位带别名区的基址进行了宏

19、定义: /宏定义SRAM区的基址 #define SRAM_BASE (uint32_t)0 x20000000) /宏定义位带别名区的基址 #define SRAM_BB_BASE (uint32_t)0 x22000000)从上可以看出,SRAM区是从地址0 x2000_0000开始的1MB位带区,其对应的位带别名区的地址是从0 x2200_0000开始的32MB。IO口的位操作与实现位带区与位带别名区片上外设区的位带区与位带别名区在stm32f10 x.h头文件中,对片上外设区的位带区和位带别名区的基址进行了宏定义: /宏定义片上外设区的基址 #define SRAM_BASE (uin

20、t32_t)0 x40000000) /宏定义位带别名区的基址 #define SRAM_BB_BASE (uint32_t)0 x42000000)从上可以看出,SRAM区是从地址0 x4000_0000开始的1MB位带区,其对应的位带别名区的地址是从0 x4200_0000开始的32MB。IO口的位操作与实现位带操作位带地址映射Cortex-M3存储器有二个32MB的位带别名区,这二个区被映射为二个1MB的位带区。其中:对32MB的SRAM位带别名区访问,映射为对1MB SRAM位带区的访问;对32MB的外设位带别名区访问,映射为对1MB外设位带区的访问。IO口的位操作与实现位带地址映射S

21、RAM区的位带地址映射假设SRAM位带区的某个位(bit),此位的所在字节地址记为A,位序号为 n(n的值为07),则该位在位带别名区的地址为:AliasAddr = 0 x2200_0000+(A0 x2000_0000)*8+n)*4 = 0 x2200_0000+(A0 x2000_0000)*32+n*4上式中的“*4”表示一个字为4个字节,“*8”表示一个字节有8个bit(位)。对于SRAM区中,位带地址映射关系,如表3-3所示。IO口的位操作与实现位带地址映射片上外设区的位带地址映射假设片上外设位带区的某个位(bit),此位的所在字节地址记为A,位序号为 n(n的值为07),则该位

22、在位带别名区的地址为:AliasAddr = 0 x4200_0000+(A0 x4000_0000)*8+n)*4 = 0 x4200_0000+(A0 x4000_0000)*32+n*4上式中的“*4”表示一个字为4个字节,“*8”表示一个字节有8个bit(位)。对于片上外设区中,位带地址映射关系,如表3-4所示。IO口的位操作与实现位带操作使用位带操作,可以很容易的通过GPIO的引脚。这样,就不需要使用GPIO_SetBits ()和GPIO_ResetBits ()函数。在C语言中使用位带操作在C编译器中,不能直接支持位带操作。最简单的做法就是使用define宏定义一个位带别名区的地址。#define DEVICE_REG0 (volatile unsigned long *) (0 x40000000)#define DEVICE_REG0_BIT0 (volatile unsigned long *) (0 x42000000)#define DEVICE_RE

温馨提示

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

评论

0/150

提交评论