基本信息
文件名称:FPGA设计与实战演练课件:数码管电路搭建与驱动程序设计.pptx
文件大小:9.17 MB
总页数:25 页
更新时间:2025-05-30
总字数:约2.13千字
文档摘要

数码管电路搭建与驱动程序设计

基于口袋机综合实验设计

一、实验目的

二、实验设备

三、实验原理

四、实验代码解析

五、实验步骤

六、实验现象

七、拓展思考

八、应用领域

一、实验目的

了解EDA软件。程序的下载和仿真

了解如何正确分配和配置单片机的I/O口

熟悉和使用数码管。

二、实验设备

口袋机

口袋机下载线

LC-PM3模块

JC-PM15实验扩展板

三、实验设备

实验器件简介:

数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极。大部分数码管阴极的形状为数字。管中充以低压气体,通常大部分为氖加上一些汞和/或氩。给某一个阴极充电,数码管就会发出颜色光,视乎管内的气体而定,一般都是橙色或绿色。静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

三、实验原理

拨码开关模块原理图:

原理图说明

采用4位共阳数码管,4个共阳极接4个三极管,8个笔画接74HC595的输出端。

功能说明

数码管一般都是动态扫描显示的,过程如下:三极管Q1的控制端D1设置第电平,第一个三极管打开,其他三极管关闭,数码管的12脚为高电平,通过74HC595的输入端按照时序输入8bit数据,在74HC595的输出端输出相应的电平,数码管的第一位就会显示相应的数字,关闭第一个三极管,打开第二个三极管,74HC595改变输出到第二个数码管要显示的数据,数码管的第二位就会显示相应额数字,同样原理把4位都显示,全部过程很快的执行,人眼就会觉得数码管的4个数字同时全部都显示了。

三、实验原理

实验原理:

为了降低单片机端口的驱动压力,我们在数码管的公共端加了一个三极管,低电平三极管导通,数码管的公共端正极就有正电压了。

三、实验原理

实验原理:

数码管的8个笔画引脚,通过74HC595连接,单片机通过3个引脚就可以给8个笔画引脚发送高低电平了。

三、实验原理

程序分析:

打开FGPIO文件,注释中是模块的端口定义

D1-D4是数码管的公共端,低电平有效

RST 595复位

CLK 595时钟

LAT 595锁存

EN 595输出使能

DATA 595串行数据

三、实验原理

程序分析:

所有端口都是初始化为推挽输出模式

判断要发送什么数据

三、实验原理

程序分析:

可以右键选择goto命令看一下D0-D9都是什么数据

可以看到在MAIN文件中,有一些宏定义

AA–Dp是定义了每个笔画对应的数据

D0-D9的含义是:让数码管显示0那就让相应的笔画点亮

可以看到每个数据都是0XFF–相应的笔画,是以为数据是0的时候点亮,1的时候是灭

所以是数据需要取反。所以就可以写成0xFF减去要点亮的笔画

三、实验原理

程序分析:

然后就是扫描时序了,先使用595把显示数据输出,然后再控制D1-D3让相应的位打开

每一个显示都要加100ms的延时,大家可以把延时去掉看看是什么效果

三、实验原理

程序分析:

回到主函数看看怎么调用显示函数的

定义了一个变量dis_mun用于显示这个数据

循环20次,显示的数据dis_mun加1

四、实验原理

模块引脚说明:

四、参考代码分析

STM32F4XX单片机GPIO框架图

五、参考代码分析

STM32F4XX单片机GPIO库函数解析-结构体

五、参考代码分析

STM32F4XX单片机GPIO库函数解析-结构成员配置

模式功能配置

速度配置

四、参考代码分析

STM32F4XX单片机GPIO库函数解析-结构成员配置

输出类型

端口上下拉初始状态

四、参考代码分析

数码管配置函数

详细配置函数见参考程序

五、参考代码分析

主函数

时钟初始化

开始

外设初始化

数码管显示

结束

五、实验步骤

1、将实验模块插在扩展模块的位置4,如下图

2、打开程序

3、下载程序

六、实验现象

修改程序,改变显示内容

在程序的主循环中有一个显示函数

display_fun(1234);//数码管显示

改变()中的显示数据,数码管就会改变

display_fun(5678);//数码管显示

实验程序:

LED_GPIO_init();//数码管GPIO初始化

delay_I