5.1.数码管动态显示原理
所谓动态扫描显示即轮流向各位数码管送出段码和位码,利用发光管的余辉和人眼视觉暂留作用,使人眼的感觉好像各位数码管同时都在显示。明确了原理,我们要使电压电流表的三个位同时显示不同的值需要用到CW32的定时器功能,在定时器的中断服务程序里面执行显示刷新的动作。有关CW32的定时器和中断的相关知识请查看链接:【CW32F003E4核心板】入门学习教程。本文只讲述如何配置定时器中断并执行数码管刷新函数。
5.2.定时器中断配置
在配置定时器之前需要注意是否将系统时钟树配置完成,定时器利用了高级外设时钟 PCLK,在之前的时钟配置中,我们将高级外设时钟 PCLK的频率配置成了6MHz,这将影响我们对定时器的预分频和装填计数值的配置。
在本次实验中,我们使用定时器BTIM1进行中断配置,代码如下:
#include "BTIM1.h"
void Btim1_Init(void)
{
BTIM_TimeBaseInitTypeDef BTIM_TimeBaseInitStruct;
__RCC_BTIM_CLK_ENABLE(); //使能BTIM的时钟
NVIC_EnableIRQ(BTIM1_IRQn); //使能BTIM1的中断
BTIM_TimeBaseInitStruct.BTIM_Mode = BTIM_Mode_TIMER;//将定时器配置为计时模式
BTIM_TimeBaseInitStruct.BTIM_Period = 6000 - 1; // 1ms采集1次
BTIM_TimeBaseInitStruct.BTIM_Prescaler = BTIM_PRS_DIV1; // 6MHZ÷1÷6000 = 1000Hz
BTIM_TimeBaseInitStruct.BTIM_OPMode = BTIM_OPMode_Repetitive;//配置定时器连续运行
BTIM_TimeBaseInit(CW_BTIM1, &BTIM_TimeBaseInitStruct); //初始化BTIM1
BTIM_ITConfig(CW_BTIM1, BTIM_IT_OV, ENABLE); //配置BTIM1的中断,定时器溢出产生中断
BTIM_Cmd(CW_BTIM1, ENABLE); //使能BTIM1
}
5.3.数码管动态显示
在上一节的数码管显示数字的数码管显示模块Seg_Dis.c文件中,我们还需要添加三个函数和定义一个数组 Seg_Reg 来完成动态显示的功能。
uint8_t Seg_Reg[3] = {0,0,0}; //这个数组存放数码管显示三位的数字,0~9
void Close_Com(void) //关闭所有数码管的显示,防止重影
{
GPIO_WritePin(CW_GPIOB,GPIO_PIN_7,GPIO_Pin_SET); //PB07,COM1
GPIO_WritePin(CW_GPIOC,GPIO_PIN_3,GPIO_Pin_SET); //PC03,COM2
GPIO_WritePin(CW_GPIOC,GPIO_PIN_2,GPIO_Pin_SET); //PC02,COM3
}
void Display(uint32_t value)
{
uint8_t Hundreds;// 百位数
uint8_t Tens; // 十位数
uint8_t Units; // 个位数
Units = value % 10; //分别取余获得位数的值
Tens = value / 10 % 10;
Hundreds = value / 100 % 10;
Seg_Reg[0] = Hundreds; //将个十百位的数字分别存放进数组等待调用
Seg_Reg[1] = Tens;
Seg_Reg[2] = Units;
}
void Dis_Refresh(void) //函数将在定时器中断里调用,不断刷新数码管
{
/*静态变量从作用域上分属于局部变量;从生命周期上来看,它与用户程序的生命周期相同。*/
static uint8_t num = 0; //这里的静态临时变量num,轮询Seg_Reg数组
Close_Com(); //先关闭公共端,防止重影
Seg_Dis(num,Seg_Reg[num]); //调用显示函数
num++;
if(num > 2)
{
num = 0;
}
}
最后在定时器中断里不断调用显示刷新函数完成数码管的刷新显示:
void BTIM1_IRQHandler(void) //BTIM1的中断服务程序
{
static uint32_t Cnt=0; //Cnt作为计数标志位控制刷新函数是否执行
if (BTIM_GetITStatus(CW_BTIM1, BTIM_IT_OV))
{
BTIM_ClearITPendingBit(CW_BTIM1, BTIM_IT_OV); //清除中断标志位
Cnt++;
if (Cnt > 2) //3ms显示一个数码管
{
Cnt = 0;
Dis_Refresh(); //数码管扫描显示
}
}
}
5.4.实验效果
最终的实验效果如下图所示,人眼已经看不出闪烁,但实际上数码管是依次刷新显示。

图5-1 数码管动态显示效果图
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
数码管
+关注
关注
32文章
1894浏览量
94407 -
电压电流表
+关注
关注
0文章
26浏览量
2282 -
CW32
+关注
关注
1文章
323浏览量
1953
发布评论请先 登录
相关推荐
热点推荐
CW32L012电压电流表设计思路
CW32L012C8T6 定位为 电机控制、电源管理、智能仪表、工业传感器 等领域的高性价比解决方案,尤其适合需要 高精度模拟信号处理 + 复杂数字控制 的混合信号系统, ARM
cw32控制五线四项步进电机
工程描述:采用cw32为主控,通过uln2003输入5vTTL电平,输出高电压来用制五线四相步进电动机,所有的IO口均已引出。
原理图及PCB:
发表于 01-26 06:56
CW32单片机如何让生活更便捷
较大,且有LCD显示、低功耗要求的应用场合。这种广泛的适用性使得CW32单片机在各种产品中都有出色的表现,比如智能马桶、燃气表、水表、LED调光板、电子显微镜、可燃气体报警器、料位开关、温控器
发表于 12-11 06:11
第6章 中断与数码管动态显示(6.1 6.2)
中断是单片机系统重点中的重点,因为有了中断,单片机就具备了快速协调多模块工作的能力,可以完成复杂的任务。本章将首先带领大家学习一些必要的C语言基础知识,然后讲解数码管动态显示的原理,并最终借助于中断
CW32 MCU在高频率运行下的系统稳定性的提升方案
,通过合理的电源管理和热管理策略,保持系统稳定性,包括动态电压调节(DVS)、节能模式切换、以及散热方案优化等。
通过这些稳定性提升方案,开发者能够有效应对CW32 MCU在高频运行时面临的挑战,确保系统在高性能工作的同时,保持
发表于 12-04 08:04
基于芯源CW32 MCU的LED闪烁示例及代码分析
最近我在项目中使用了芯源的CW32 MCU,这是一款非常适合物联网和低功耗应用的微控制器。在初步学习和使用中,我做了一个简单的LED闪烁实验,通过这篇帖子给大家分享一下代码及相关的配置步骤。
硬件
发表于 12-04 06:52
CW32 MCU温度监测应用
监测环境温度,并通过串口将数据发送到PC端进行显示。
硬件连接
CW32 MCU
LM35温度传感器
USB转串口模块
代码实现
#include \"cw32f030.h\"
发表于 12-03 08:03
基于芯源半导体MCU cw32芯片制作的USB电压电流表
0.91 oled显示出来。本USB电压电流表为宽电压设计,支持4.2V到40宽电压输入,相比较于传统4.2V-40V稳压芯片有更多的好处。还使用芯源半导体MCU
发表于 12-02 06:39
原厂 FZH114C 一款LED(发光二极管、数码管、点阵屏)驱动控制专用芯片
FZH114C通过灵活的亮度调节、单线通讯和动态扫描设计,显著简化了多位数码管或LED点阵屏的驱动电路设计。其独特的引脚排列(如VDD位于引脚13)和SOP16封装,使其在紧凑型设计中更具优势。开发时需注意共阴设计、段驱动电流设
发表于 11-19 14:43
FZH114 LED(发光二极管、数码管、点阵屏)驱动控制专用芯片,集成数字通讯电路、 解码电路、数据锁存器、震荡器
显示、LED点阵屏、机顶盒显示等。
工业控制设备:需要多位数码管或LED点阵显示的场景。
注意事项
段驱动电流:建议设置为2/8及以上,以
发表于 11-19 11:13
CW32 MCU用什么IDE开发?
推荐使用IAR Embedded Workbench for ARM、Keil μVision for ARM等IDE开发CW32 MCU应用,其中新版本IAR EWARM直接支持CW32 MCU,Keil MDK-ARM则需要安装CW
发表于 11-12 07:52
CW32 MCU的工作电压、工作温度是多少?
CW32通用型MCU工作电压是1.65V~5.5V,射频MCU工作电压则是1.8V/2.2V~3.6V;通用型CW32F系列MCU,比如:CW
发表于 11-12 06:49
级联动态扫描显示数码管问题
GD32F103C8T6
硬件SPI连接移位寄存器74HC595级联,动态扫描显示五位数码管
是否需要电平转换芯片TXB0104
数码管选择共阴极和共阳极区别是什么
若使用TXB010
发表于 10-07 20:36
【应用】工业现场的“智能显示管家”:亿佰特EID051-1xx系列 Modbus数码管解析
数码管。亿佰特新推出的EID051-1xx系列Modbus数码管,以多种核心优势,成为工业现场的一大助力。一.什么是Modbus数码管?Modbus数码管是一种通过R
CW32数字电压电流表软件教程-实验四:数码管动态显示
评论