<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CW32數字電壓電流表軟件教程(三):數碼管顯示數字

武漢芯源半導體 ? 來源:CW32生態社區 ? 2024-05-14 14:20 ? 次閱讀

4.1.數碼管顯示原理

數碼管的顯示原理是由多個發光的二極管共陰極或者共陽極組成的成“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。

52982f4a-11a8-11ef-a297-92fbcf53809c.png

圖4-1 數碼管模型圖

共陽極數碼管的8個發光二極管的陽極(二極管正端)連接在一起。通常,公共陽極接高電平(一般接電源),其它管腳接段驅動電路輸出端。當某段驅動電路的輸出端為低電平時,則該端所連接的字段導通并點亮。根據發光字段的不同組合可顯示出各種數字或字符。此時,要求段驅動電路能吸收額定的段導通電流,還需根據外接電源及額定段導通電流來確定相應的限流電阻。

共陰極數碼管的8個發光二極管的陰極(二極管負端)連接在一起。通常,公共陰極接低電平(一般接地),其它管腳接段驅動電路輸出端。當某段驅動電路的輸出端為高電平時,則該端所連接的字段導通并點亮,根據發光字段的不同組合可顯示出各種數字或字符。此時,要求段驅動電路能提供額定的段導通電流,還需根據外接電源及額定段導通電流來確定相應的限流電阻。

4.2.數碼管原理圖與實物圖

如果數碼管可以顯示多位數字,如我們的電壓電流表所示。那么除了控制段碼來選擇要顯示的內容,還要選擇位碼來控制某一個數碼管的亮滅。

52b6c46e-11a8-11ef-a297-92fbcf53809c.png

圖4-2 電壓電流表三位數碼管

數碼管的原理圖如下,可以看出除了上述的段碼引腳之外,還有COM1、COM2、COM3的位碼引腳,三個位碼引腳分別控制三個數碼管的亮滅情況,且低電平有效。

52dcbf0c-11a8-11ef-a297-92fbcf53809c.png

圖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所示:

5308ea28-11a8-11ef-a297-92fbcf53809c.png

圖4-4 電壓電流表程序下載接線

4.4.實驗效果

最終的實驗效果如下圖所示:

53299930-11a8-11ef-a297-92fbcf53809c.png

5359d12c-11a8-11ef-a297-92fbcf53809c.png

53856918-11a8-11ef-a297-92fbcf53809c.png

圖4-5 數碼管顯示實驗效果



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 發光二極管
    +關注

    關注

    13

    文章

    1144

    瀏覽量

    65721
  • 數碼管
    +關注

    關注

    31

    文章

    1830

    瀏覽量

    90005
  • 驅動電路
    +關注

    關注

    151

    文章

    1475

    瀏覽量

    107712
  • 限流電阻
    +關注

    關注

    2

    文章

    72

    瀏覽量

    17040
  • 電壓電流表
    +關注

    關注

    0

    文章

    12

    瀏覽量

    2024

原文標題:CW32數字電壓電流表軟件教程-實驗三:數碼管顯示數字

文章出處:【微信號:武漢芯源半導體,微信公眾號:武漢芯源半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    CW32數字電壓電流表-產品硬件設計要點

    主要功能: 1、對5-99V的電壓與0.1-3A的電流進行測量與顯示 2、通過藍牙發送測得的數據 3、作為一款CW32+數碼管的迷你開發板
    的頭像 發表于 04-25 15:20 ?1208次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>數字</b><b class='flag-5'>電壓電流表</b>-產品硬件設計要點

    51單片機數碼管顯示數字分離)

    數字顯示數據并賦值給數碼管顯示緩存{LedBuff[i] = LedChar[buf[i]];}}unsigned char code LedChar[]={//0-F在
    發表于 02-20 21:02

    數碼管顯示

    最近我用ICL7107做了個電壓表,檢查后電路正常,接通電源數碼管顯示數字為什么總是跳(顯示不穩定)?
    發表于 12-14 20:17

    數碼管數字顯示電路

    本帖最后由 wwwuze 于 2019-6-2 20:52 編輯 數碼管數字顯示電路數碼管引腳圖(每個數碼管+5v共陽極端要接一個20
    發表于 05-30 21:49

    使用單片機來控制數碼管顯示不同數字

      想要使用單片機來控制數碼管顯示不同數字,那么我們先要了解數碼管的內部結構以及器驅動原理。數碼管可以看成是由8個發光二極
    發表于 01-14 16:34

    LED數碼管顯示數字

    LED數碼管顯示數字
    發表于 07-14 07:42

    數字電流表的設計

    1 應用背景1.1設計意義數字電流表的誕生打破了傳統電子測量儀器的模式和格局。它顯示清晰直觀、讀數準確,采用了先進的數顯技術,大大地減少了因人為因素所造成的測量誤差事件。數字
    發表于 08-06 06:22

    數碼管顯示數字以及字母

    1、數碼管顯示數字以及字母
    發表于 10-29 08:25

    OpenHarmony開發板驅動數碼管顯示數字

    本案例基于潤和的OpenHarmony開發板完成驅動數碼管顯示數字的功能. 數碼管型號為TM1637. 程序中通過"信息顯示器"模塊完成對
    發表于 12-03 17:44

    怎樣去設計一個基于單片機的數字電流表

    數字電流表的誕生打破了傳統電子測量儀器的模式和格局。它顯示清晰直觀、讀數準確,采用了先進的數顯技術,大大地減少了因人為因素所造成的測量誤差事件。數字
    發表于 12-13 06:51

    數字電壓表仿真數碼管不亮

    數字電壓表采用數模轉換芯片但是數碼管不亮
    發表于 12-22 22:55

    數碼管的結構和功能,如何使用數碼管

    數碼管顯示一、實驗目的:1、了解數碼管的結構和功能;2、學會如何區分三極管個引腳并正確使用三極管
    發表于 01-10 07:42

    外部中斷控制數碼管顯示數字

    外部中斷控制數碼管顯示數字增減外部中斷每發生一次,在共陰數碼管顯示一個數字,且每中斷一次
    發表于 01-11 07:17

    proteus仿真8只數碼管滾動顯示數字

      名稱:8只數碼管滾動顯示數字串  軟件:proteus  keil 4  語言:C 語言  使用說明:本例中,通過proteus 仿真8只數碼管
    發表于 04-14 17:32

    求:推薦微型寬溫數字電壓電流表

    各位大神: 因項目需求,需采購寬溫微型數字電壓電流表頭。工作溫度范圍是:-40°~60°,最低也要在-25°~50°。 不知群里的大神有推薦么?
    發表于 08-27 15:22
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>