0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32数字电压电流表软件教程-实验四:数码管动态显示

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2024-05-31 15:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

    文章

    1892

    浏览量

    93710
  • 电压电流表
    +关注

    关注

    0

    文章

    25

    浏览量

    2257
  • CW32
    +关注

    关注

    1

    文章

    281

    浏览量

    1678
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    第6章 中断与数码管动态显示(6.1 6.2)

    中断是单片机系统重点中的重点,因为有了中断,单片机就具备了快速协调多模块工作的能力,可以完成复杂的任务。本章将首先带领大家学习一些必要的C语言基础知识,然后讲解数码管动态显示的原理,并最终借助于中断
    的头像 发表于 12-08 17:03 92次阅读

    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
    的头像 发表于 07-17 19:34 394次阅读
    【应用】工业现场的“智能<b class='flag-5'>显示</b>管家”:亿佰特EID051-1xx系列 Modbus<b class='flag-5'>数码管</b>解析

    如何利用万用检测数码管

    数码管,作为一种广泛应用于电子设备中的显示器件,其稳定性和可靠性对于设备的正常运行至关重要。为了确保数码管的质量,使用万用进行检测是电子工程师和维修人员的常用手段。本文将详细介绍如何
    的头像 发表于 02-05 17:39 2828次阅读

    数码管的结构与原理

    数码管,也被称作辉光或LED数码管,是一种能够显示数字、字母、符号等信息的电子设备。它广泛应用于各种电子设备中,如计算器、电子钟表、电子秤
    的头像 发表于 02-05 17:32 4092次阅读

    数码管共阴和共阳的区别

    在电子设备的众多显示元件中,数码管以其简单直观、成本低廉等特点,广泛应用于各类电子仪器仪表、数码时钟、电子秤等设备上,承担着数字和简单字符的显示
    的头像 发表于 02-05 17:29 7774次阅读

    四位数码管12个引脚怎么分配

    在电子显示技术中,四位数码管作为一种常见的显示器件,广泛应用于各种数字显示系统。其通过控制不同段(A-G)的发光二极
    的头像 发表于 01-30 15:00 5w次阅读