版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章
数码管动态显示作者:黄克亚2025年5月本章概要CONTENTS数码管工作原理数码管动态显示时间项目实施数码管编码方式数码管动态显示学号项目实施数码管显示方式7.1数码管显示接口在单片机应用系统中,LED过于简单,LCD驱动相对复杂,数码管显示清晰,成本低廉,配置灵活,且单片机接口简单,编程容易。,如果需要显示的内容只有数字和某些字母,使用数码管是一种较好的选择。7.1数码管显示接口7.1.1数码管工作原理7.1数码管显示接口7.1.2数码管编码方式当LED数码管与微控制器相连时,一般将LED数码管的各笔段引脚a、b、…、g、dp按某一顺序接到MCU某一个并行I/O口D0、D1、……D7,当该I/O口输出某一特定数据时,就能使LED数码管显示出某个字符。
例如,要使共阳极LED数码管显示“0”:LED数码管的编码方式有多种:(1)按小数点计否可分为七段码和八段码;(2)按公共端连接方式可分为共阴字段码和共阳字段码,计小数点的共阴字段码与共阳字段码互为反码;(3)按a、b、…、g、dp编码顺序是高位在前,还是低位在前,又可分为顺序字段码和逆序字段码7.1数码管显示接口7.1.2数码管编码方式显示码的确定dpgfedcbaabcdefgdp共阴极型:a~g、Dp各笔段接控制端,接高电平时发光,低电平时不发光,控制某几段笔段发光,就能显示出某个数码或字符。共阳极型:是将各段发光二极管的正极连在一起,作为公共端COM,接低电平时发光,高电平时不发光,7.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g1f0e0d0c0b0a00xC07.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g1f1e1d1c0b0a10xF97.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g0f1e0d0c1b0a00xA47.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g0f1e1d0c0b0a00xB07.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g0f0e1d1c0b0a10x997.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g0f0e1d0c0b1a00x927.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g0f0e0d0c0b1a00x827.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g1f1e1d1c0b0a00xF87.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g0f0e0d0c0b0a00x807.1数码管显示接口7.1.2数码管编码方式abcdefgdpdp1g0f0e1d0c0b0a00x907.1数码管显示接口7.1.2数码管编码方式显示数字共阴顺序小数点暗共阳顺序小数点亮共阳顺序小数点暗dpgfedcba16进制0001111110x3F0x400xC01000001100x060x790xF92010110110x5B0x240xA43010011110x4F0x300xB04011001100x660x190x995011011010x6D0x120x926011111010x7D0x020x827000001110x070x780xF88011111110x7F0x000x809011011110x6F0x100x90共阴和共阳LED数码管八段编码表7.1数码管显示接口7.1.3数码管显示方式LED数码管显示电路在嵌入式应用系统中可分为静态显示和动态显示两种。每一位显示器的字段需要一个8位I/O口控制,显示时,每一位字段码分别从I/O控制口输出,保持不变直至CPU刷新显示为止。静态显示7.1数码管显示接口7.1.3数码管显示方式将显示各位的所有相同字段线连在一起,由一个8位I/O口控制,而每一位的公共端由另一个I/O口控制。每一位要想显示不同的内容,必须要采取轮流显示的方式。动态显示7.1数码管显示接口7.1.3数码管显示方式数码管动态显示动画演示7.2项目分析本节进行数码管动态显示学号项目分析。7.2项目分析项目分析—目标是在六位数码管上显示每位同学的学号选中数码管1PE15=0送显示码PE=0x7FFFPG=0x00F9数码管DS1DS2DS3位选码0x7FFF0xBFFF0xDFFF数码管DS4DS5DS6位选码0xEFFF0xF7FF0xFBFF数码管位选码表7.3项目实施对项目实施过程进行详细展示。7.3项目实施第一步:复制第6章创建工程模板文件夹到桌面,并将文件夹改名为“5DsgShow”,将原工程模板编译一下,直到没有错误和警告为止。项目实施4BeepKey5DsgShow第二步:点击“File/New”新建两个文件,将其改名为dsgshow.c和dsgshow.h并保存到工程模板下的APP文件夹中。并将dsgshow.c文件添加到APP项目组下。7.3项目实施第三步:在dsgshow.c文件中输入如下源程序,在程序中首先包含dsgshow.h头文件,然后创建2个函数,分别为DsgShowInit()函数和DsgShowNum()函数。项目实施#include"dsgshow.h“voidDsgShowInit(){GPIO_InitTypeDefGPIO_InitStructure;//打开GPIOE和GPIOG时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG,ENABLE);//配置GPIOE为输出推挽模式,为避免后续中断产生误动作,只初始化高8位
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_11|GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOE,&GPIO_InitStructure);//配置GPIOG为输出推挽模式GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOG,&GPIO_InitStructure);}参考程序代码7.3项目实施项目实施voidDsgShowNum()//数码管显示六位学号{
u16i;
while(1)
{
GPIO_Write(GPIOE,0x7FFF); //选中第一个数码管
GPIO_Write(GPIOG,0xc0); //送第一数字的段码
for(i=0;i<400;i++); //延时比较短的时间
GPIO_Write(GPIOE,0xBFFF);
GPIO_Write(GPIOG,0xf9);
for(i=0;i<400;i++);
GPIO_Write(GPIOE,0xDFFF);
GPIO_Write(GPIOG,0xa4);
for(i=0;i<400;i++);
GPIO_Write(GPIOE,0xEFFF);
GPIO_Write(GPIOG,0xb0);
for(i=0;i<400;i++);
GPIO_Write(GPIOE,0xF7FF);
GPIO_Write(GPIOG,0x99);
for(i=0;i<400;i++);
GPIO_Write(GPIOE,0xFBFF);
GPIO_Write(GPIOG,0x92);
for(i=0;i<400;i++);
}}参考程序代码7.3项目实施第四步:在dsgshow.h文件中输入如下源程序,其中条件编译格式不变,只要更改一下预定义变量名称即可,需要将我们刚定义函数的声明加到头文件当中。项目实施参考代码如下:#ifndef_DSGSHOW_H#define_DSGSHOW_H#include"stm32f10x.h"voidDsgShowInit(void);voidDsgShowNum(void);#endif第五步:在main.h文件的中间部分“#include"dsgshow.h"”语句,即包含dsgshow.h头文件,任何时候程序中需要使用某一源文件中函数,必须先包含其头文件,否则编译是不能通过的。main.h文件的源代码如下所示。参考代码如下:#ifndef_MAIN_H#define_MAIN_H#include"stm32f10x.h"#include"LED.h"#include"beepkey.h"#include"dsgshow.h"#endif7.3项目实施第六步:在main.c文件中输入如下源程序,其中main函数就是二条语句,分别调用DsgShowInit()对GPIOE和GPIOG进行初始化,调用DsgShowNum()函数进行动态扫描,由于在DsgShowNum()函数已经包含死循环结构,此处不需要重复构建。第七步:编译工程,如没有错误,则会在MDK文件夹中Objects文件夹生成“Template.hex”文件,如有错误则修改源程序直至没有错误为止。第八步:将生成的目标文件通过ISP软件下载到开发板微控制器的FLASH存储器当中,复位运行,检查实验效果。参考代码如下:#include“main.h"intmain(){
DsgShowInit();
DsgShowNum(); }项目实施7.4项目拓展上一节中介绍的数码管动态显示程序编写其实是很不专业的,其通用性也比较差,主要目的是让大家能够快速熟悉数码管动态显示控制方法。7.2项目分析项目分析—数码管动态显示时间本节将介绍一个新的实例,其项目任务是主程序赋值的三个变量:“hour”、“minute”、“second”的值显示在六位数码管上,并在小时个位和分钟个位数字下面显示一个点。因为本例中涉及到不同文件之间共享同一变量,这是我们前面没有接触过的,这一点我们需要注意。因为此项目是上一项目的扩展,所以工程文件和上一项目是完全一样的,只是部分文件代码有所改变,改动涉及填加、修改和删除,现在改动之处一一列出,供大家参考。7.2项目分析项目分析—数码管动态显示时间改动1在main.c文件中定义三个外部变量,并在main()函数中对其赋初值。修改后的main.c文件程序如下:7.2项目分析项目分析—数码管动态显示时间改动2在dsgshow.c文件包含语句(#include"dsgshow.h")的下面,输入如下语句:externu8hour,minute,second;声
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年烟草综合行政招聘考试笔试试题(含答案)
- 2026年烟草零售门店设备日常巡检内勤烟草公司招聘考试笔试试题(含答案)
- 2026 年骨科术后严重压疮护理个案分享
- 2026年秋季开学第一课:新时代青年使命
- 研学旅行资料印刷采购合同书范本
- 2026年秋季车辆工程专业开学第一课 专业技能培养路径
- 麻醉诱导后低血压预测及预防的研究进展
- 电梯导轨安装施工方案
- 2026年红十字应急救护知识竞赛题库附含答案
- 消防安全管理单位班组安全活动制度
- 2025-2030中国芋泥市场营销推广规模与未来投资效益行业深度调研及投资前景预测研究报告
- 钓鱼基础知识课件下载
- DB37-T 5310-2025《城镇排水管渠养护维修服务规范》
- 超导材料进展-深度研究
- 石油化工压力管道安装工艺及质量控制重点
- 沪粤版九年级物理 12.3 研究物质的比热容(学习、上课课件)
- 2024年中远海运物流所属宁波中远海运物流有限公司招聘笔试参考题库含答案解析
- 输变电工程“7S”管理策划
- 家庭医生签约服务考核表
- 酒店礼仪礼节培训
- QD系列切丁机说明书
评论
0/150
提交评论