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

    文章

    1874

    浏览量

    90931
  • 电压电流表
    +关注

    关注

    0

    文章

    24

    浏览量

    2073
  • CW32
    +关注

    关注

    1

    文章

    183

    浏览量

    578
收藏 人收藏

    评论

    相关推荐

    基于CW32F003E4P7的数字电压电流表产品方案

    产品实物: 一、产品概述 数字电压电流表,又称为数显电流电压表,是以数字形式显示,能够同时检测电流
    的头像 发表于 06-25 11:55 852次阅读
    基于<b class='flag-5'>CW</b>32F003E4P7的<b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b>产品方案

    CW32数字电压电流表软件进阶教程-3.电压电流标定

    标定是通过测量标准器的偏差来补偿仪器系统误差,从而改善仪器或系统准确度、精度的操作。为了提高电压电流表在测量时的测量精度和准确度,需要对电压电流进行标定校准。 常见的标定原理如下:假设一个采样系统
    的头像 发表于 05-31 16:20 646次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件</b>进阶教程-3.<b class='flag-5'>电压电流</b>标定

    CW32数字电压电流表软件进阶教程-2.电压电流值做均值滤波

    实验运行7.1章节例程时 [CW32数字电压电流表软件进阶教程-1.电压电流同时
    的头像 发表于 05-31 15:57 443次阅读

    CW32数字电压电流表软件进阶教程-1.电压电流同时显示

    基于[CW32数字电压电流表软件教程-实验七:基本数据处理算法(均值滤波)],可以对电压电流进行
    的头像 发表于 05-31 15:50 627次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件</b>进阶教程-1.<b class='flag-5'>电压电流</b>同时<b class='flag-5'>显示</b>

    CW32数字电压电流表软件教程-实验七:基本数据处理算法(均值滤波)

    有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=∑f(x,y)/m,m为该模板中包含当前像素在内的像素总个数。这本是数字图像处理的一种方法,但也可以用在我们数字电压电流表
    的头像 发表于 05-31 15:47 339次阅读

    CW32数字电压电流表软件教程-实验五:ADC采样及显示

    数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。 6.1.2.
    的头像 发表于 05-31 15:28 504次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>-<b class='flag-5'>实验</b>五:ADC采样及<b class='flag-5'>显示</b>

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

    原理是由多个发光的二极共阴极或者共阳极组成的成“8”字形的显示器件。数码管通过不同的组合可用来显示数字0~9、字符A ~ F及小数点“.”
    的头像 发表于 05-31 15:21 911次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>-<b class='flag-5'>实验</b>三:<b class='flag-5'>数码管</b><b class='flag-5'>显示</b><b class='flag-5'>数字</b>

    CW32数字电压电流表软件教程(五):ADC采样及显示

    模拟数字转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。通
    的头像 发表于 05-21 10:34 1081次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>(五):ADC采样及<b class='flag-5'>显示</b>

    CW32数字电压电流表软件教程(三):数码管显示数字

    数码管显示原理是由多个发光的二极共阴极或者共阳极组成的成“8”字形的显示器件。数码管通过不同的组合可用来
    的头像 发表于 05-14 14:20 2.2w次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>(三):<b class='flag-5'>数码管</b><b class='flag-5'>显示</b><b class='flag-5'>数字</b>

    【紫光同创盘古PGX-Nano教程】——(盘古PGX-Nano开发板/PG2L50H_MBG324第五章)数码管动态显示实验例程

    灯、按键、拨码开关等。 二:实验目的 动态控制左边4位八段数码管显示不同的数值; 三:实验要求 4个
    发表于 05-08 18:19

    CW32数字电压电流表软件教程(一):LED原理与驱动基础知识详解

    LED 驱动指的是通过稳定的电源为 LED 提供合适的电流电压,使其正常工作点亮。LED 驱动方式主要有恒流和恒压两种。
    的头像 发表于 05-06 15:33 1687次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b><b class='flag-5'>软件教程</b>(一):LED原理与驱动基础知识详解

    CW32数字电压电流表-产品硬件设计要点

    主要功能: 1、对5-99V的电压与0.1-3A的电流进行测量与显示 2、通过蓝牙发送测得的数据 3、作为一款CW32+数码管的迷你开发板
    的头像 发表于 04-25 15:20 1842次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b>-产品硬件设计要点

    CW32数字电压电流表-产品制作注意事项

    焊接排针再焊接数码管,且需要像上图一样确保排针底部不要凸出PCB,否则会与数码管发生干涉 2、外壳安装 如果您计划使用淘宝或其他渠道购买的公版外壳,在焊接数码管前请先仔细阅读下方内容 注:建议先焊接
    的头像 发表于 04-24 17:29 378次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>数字</b><b class='flag-5'>电压电流表</b>-产品制作注意事项

    【每周一练】盘古1K开发板 练习三:动态数码管显示

    实验目的: 掌握数码管显示原理,实现数码管动态显示 实验要求: 实现
    发表于 12-10 16:45

    【每周一练】盘古1K开发板 练习三:动态数码管显示实验

    实验目的:掌握数码管显示原理,实现数码管动态显示 实验要求:实现
    发表于 11-24 11:21