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

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

3天内不再提示

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

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2024-05-31 15:21 次阅读

4.1.数码管显示原理

(来源:CSDN,原文链接:[https://blog.csdn.net/qq_42189951/article/details/133347707]

数码管的显示原理是由多个发光的二极管共阴极或者共阳极组成的成“8”字形的显示器件。数码管通过不同的组合可用来显示数字0~9、字符A ~ F及小数点“.”。数码管的工作原理是通过控制外部的I/O端口进行驱动数码管的各个段码,使用不同的段码从而形成字符显示出我们要的数字。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母A、B、C、D、E、F、G、DP来表示。

当数码管特定的引脚加上高电平后,这些特定的发光二极管就会发亮,以形成我们眼睛看到的字样了。如:在一个共阴极数码管上显示一个“8”字,那么就对A、B、C、D、E、F、G对应的引脚置高电平。发光二极管的阳极共同连接至电源的正极称为共阳极数码管,这种类型的数码管点亮需要对引脚置低电平;发光二极管的阴极共同连接到电源的负极称为共阴极数码管,点亮共阴极数码管需要对相应的引脚置高电平。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

图4-1 数码管模型图

共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻

共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

4.2.数码管原理图与实物图

如果数码管可以显示多位数字,如我们的电压电流表所示。那么除了控制段码来选择要显示的内容,还要选择位码来控制某一个数码管的亮灭。

图4-2 电压电流表三位数码管

数码管的原理图如下,可以看出除了上述的段码引脚之外,还有COM1、COM2、COM3的位码引脚,三个位码引脚分别控制三个数码管的亮灭情况,且低电平有效。

图4-3 三位数码管原理图

4.3.数码管驱动显示

驱动显示数码管的思路是:先将A、B、C、D、E、F、G所代表的引脚从低到高编号,列出数码要显示数字的段码值。比如要显示数字5,则段码值为0x6d,二进制表示为01101101,这说明G置1,F置1,E置0,D置1,C置1,B置0,A置1,最高位则是DP的值。将要显示的数字以段码值的方式储存在数组里以供调用,可以简化程序。接着以循环的方式结合switch语句对A、B、C、D、E、F、G的亮灭情况进行单独计算,先将段码值确定后再进行位码的选择,可以避免因单片机执行程序的时间而造成显示效果的不足。

具体程序如下,将所有与数码管显示相关的函数保存在新建的 Seg_Reg.c 文件

/*  共阴数码管编码表:
 0x3f   0x06   0x5b  0x4f  0x66  0x6d  0x7d  0x07  0x7f  0x6f 
  0      1      2     3     4     5     6     7     8     9 
 0xbf   0x86   0xdb  0xcf  0xe6  0xed  0xfd  0x87  0xff  0xef           
  0.     1.     2.    3.    4.    5.    6.    7.    8.    9. */
 
             
uint8_t Seg_Table[20] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f,
                         0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87, 0xff, 0xef};
/*对段码值进行存储*/

void Seg_Init(void)      //查找原理图对数码管相关引脚进行初始化
{
  __RCC_GPIOA_CLK_ENABLE();//打开GPIOA的时钟
  __RCC_GPIOB_CLK_ENABLE();//打开GPIOB的时钟
  __RCC_GPIOC_CLK_ENABLE();//打开GPIOC的时钟
        
  GPIO_InitTypeDef GPIO_InitStruct; 
                
  GPIO_InitStruct.Pins = GPIO_PIN_0 | GPIO_PIN_4; //PA00,E;PA04,G
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.IT = GPIO_IT_NONE;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  GPIO_Init(CW_GPIOA, &GPIO_InitStruct);
        
  GPIO_InitStruct.Pins = GPIO_PIN_6 | GPIO_PIN_4 | GPIO_PIN_2 | GPIO_PIN_0 | GPIO_PIN_3 | GPIO_PIN_7; //PB06,B;PB04,C;PB02,D;PB00,F;PB03,DP  //PB07,COM1
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.IT = GPIO_IT_NONE;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
        
  GPIO_InitStruct.Pins = GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2; //PC04,A; //PC03,COM2;PC02,COM3
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.IT = GPIO_IT_NONE;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  GPIO_Init(CW_GPIOC, &GPIO_InitStruct);
}
void Seg_Dis(uint8_t Pos,uint8_t Num)   //Pos表示指定哪一个数码管亮,Num表示要显示的数字
{
  int i;
  uint8_t Dis_Value,Location;
  Location = Pos;
  Dis_Value = Seg_Table[Num];
        
  for(i = 0; i < 8; i++)      //通过循环确定每一个段码引脚的亮灭情况
  {
    switch(i)
      {
/*将Dis_Value右移i位,再和0x01(00000001)相与消除其他位的影响,可以确定该位的写入值,
  学员可以自己用一个实例比如0x6d(01101101)进行分析*/
        case 0:
          GPIO_WritePin(CW_GPIOC,GPIO_PIN_4,(Dis_Value > > i) & 0x01);    //PC04,A
          break;
        case 1:
          GPIO_WritePin(CW_GPIOB,GPIO_PIN_6,(Dis_Value > > i) & 0x01);    //PB06,B
          break;
        case 2:
          GPIO_WritePin(CW_GPIOB,GPIO_PIN_4,(Dis_Value > > i) & 0x01);    //PB04,C
          break;
        case 3:
          GPIO_WritePin(CW_GPIOB,GPIO_PIN_2,(Dis_Value > > i) & 0x01);    //PB02,D
          break;
        case 4:
          GPIO_WritePin(CW_GPIOA,GPIO_PIN_0,(Dis_Value > > i) & 0x01);    //PA00,E
          break;
        case 5:
          GPIO_WritePin(CW_GPIOB,GPIO_PIN_0,(Dis_Value > > i) & 0x01);    //PB00,F
          break;
        case 6:
          GPIO_WritePin(CW_GPIOA,GPIO_PIN_4,(Dis_Value > > i) & 0x01);    //PA04,G
          break;
        case 7:
          GPIO_WritePin(CW_GPIOB,GPIO_PIN_3,(Dis_Value > > i) & 0x01);    //PB03,DP
          break;
        default:
          break;
      }
  }
        
  switch(Location)    //确定段码后再选择位码
  {
    case 0:
      GPIO_WritePin(CW_GPIOB,GPIO_PIN_7,GPIO_Pin_RESET);  //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
      break;
    case 1:
      GPIO_WritePin(CW_GPIOB,GPIO_PIN_7,GPIO_Pin_SET);    //PB07,COM1
      GPIO_WritePin(CW_GPIOC,GPIO_PIN_3,GPIO_Pin_RESET);  //PC03,COM2
      GPIO_WritePin(CW_GPIOC,GPIO_PIN_2,GPIO_Pin_SET);    //PC02,COM3
      break;
    case 2:
      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_RESET);  //PC02,COM3
      break;
    default:
      break;
  }
}

在主函数里调用Seg_Dis函数即可在对应位置显示相应数字(别忘了初始化),各位学员熟练之后可以通过define定义每个引脚的写入,使代码更加简洁美观。程序下载接线如图4-4所示:

图4-4 电压电流表程序下载接线

4.4.实验效果

最终的实验效果如下图所示:

图4-5 数码管显示实验效果

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数码管
    +关注

    关注

    31

    文章

    1843

    浏览量

    90236
  • 电压电流表
    +关注

    关注

    0

    文章

    24

    浏览量

    2035
  • 驱动显示
    +关注

    关注

    1

    文章

    4

    浏览量

    3514
  • CW32
    +关注

    关注

    1

    文章

    145

    浏览量

    383
收藏 人收藏

    评论

    相关推荐

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

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

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

    数码管显示原理是由多个发光的二极管共阴极或者共阳极组成的成“8”字形的显示器件。数码管通过不同的组合可用来显示
    的头像 发表于 05-14 14:20 2997次阅读
    <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>

    基于单片机的数字电压表设计与仿真

    1中电压值由直流稳压电源提供,输入电压值均为数字万用读数,测量值均为设计样品
    发表于 01-11 09:15

    51单片机数码管显示数字分离)

    数字显示数据并赋值给数码管显示缓存{LedBuff[i] = LedChar[buf[i]];}}unsigned char code LedChar[]={//0-F在
    发表于 02-20 21:02

    LED数码管显示数字

    LED数码管显示数字
    发表于 07-14 07:42

    数字电流表的设计

    1 应用背景1.1设计意义数字电流表的诞生打破了传统电子测量仪器的模式和格局。它显示清晰直观、读数准确,采用了先进的数显技术,大大地减少了因人为因素所造成的测量误差事件。数字
    发表于 08-06 06:22

    OpenHarmony开发板驱动数码管显示数字

    本案例基于润和的OpenHarmony开发板完成驱动数码管显示数字的功能. 数码管型号为TM1637. 程序中通过"信息显示器"模块完成对
    发表于 12-03 17:44

    数码管的结构和功能,如何使用数码管

    数码管显示一、实验目的:1、了解数码管的结构和功能;2、学会如何区分三极管个引脚并正确使用
    发表于 01-10 07:42

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

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

    LED数码管显示实验

    LED数码管显示实验 一.实验目的1.掌握数字、字符转换成显示段码的
    发表于 05-16 02:07 6112次阅读
    LED<b class='flag-5'>数码管</b><b class='flag-5'>显示</b><b class='flag-5'>实验</b>

    数码管流动显示数字3

    慧净HL-1 配套C实验例程100例【实验18】数码管流动显示数字3),很好的C51学习资料程序。
    发表于 03-21 16:47 8次下载

    数码管闪烁显示数字

    慧净HL-1 配套C实验例程100例【实验22】数码管闪烁显示数字),很好的C51学习资料程序。
    发表于 03-21 16:43 35次下载

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

    5.1.数码管动态显示原理 所谓动态扫描显示即轮流向各位数码管送出段码和位码,利用发光管的余辉和人眼视觉暂留作用,使人眼的感觉好像各位数码管
    的头像 发表于 05-31 15:23 135次阅读
    <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>

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

    基于[CW32数字电压电流表软件教程-实验七:基本数据处理算法(均值滤波)],可以对电压电流进行
    的头像 发表于 05-31 15:50 177次阅读
    <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>

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

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