欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單排5腳188數碼管的驅動方法探討 [打印本頁]

作者: WL0123    時間: 2026-3-30 21:56
標題: 單排5腳188數碼管的驅動方法探討
本帖最后由 WL0123 于 2026-3-30 22:07 編輯

極簡的單排5腳188數碼管的驅動方法試探
在一些低檔消費電子產品中常見一種單排5腳188和單排6腳1888數碼管。由于這種數碼管內部結構異于常見的數碼管。商家提供的內部LED與引腳關系圖看上去也感覺雜亂無章。仔細研究一番其實就是一種矩陣連接關系,以單排5腳188為例,將原圖重新排列一下就可以明顯看出來就是一種共陰關系。一次最多可以點亮4個筆段。如果單片機引腳直接連接數碼管有過流損壞單片機端口的風險,如果數碼管每個腳接限流電阻,由于需要點亮的筆段不確定,隨亮點多少不同亮度會不均勻,為此利用新型單片機端口的高阻模式和內置上拉電阻,按需要點亮的筆段使能上拉電阻提供驅動電流。作為當前用作共陰的端口設準雙向模式低電平,不論需要點亮的筆段多少,各筆段亮度一致。5腳188數碼管共16個筆段,需要分4次才能完成全部筆段掃描。由此制作一個表格,將8位標準段碼拆解為5位驅動碼。實踐證明:數碼管亮度能夠滿足大多數應用場景,并且無鬼影。還有其他更簡潔的驅動方式,歡迎壇友探討。




  1. //5腳188數碼管驅動程序示例
  2. //使用STC8H1K08單片機
  3. #include <STC8H.H>
  4. #include <intrins.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned int

  7. uchar code table[]={       //數碼管段碼0~f
  8. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  9. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  10. uint count;                //計數
  11. uchar num;                 //計數
  12. uchar w1,w2,w3;            //數碼管位
  13. bit flag;                  //中斷標志

  14. void Timer0_Init();        //初始化定時器0
  15. void display();                                //顯示函數

  16. //主函數
  17. void main()
  18. {//端口模式初始化       
  19.         P1M0 = 0x00;P1M1 = 0x00;//準雙向
  20.         P3M0 = 0x00;P3M1 = 0x00;//準雙向
  21.         P5M0 = 0x00;P5M1 = 0x00;//準雙向
  22.         P_SW2 |= 0x80;          //打開擴展存儲器
  23.         Timer0_Init();          //初始化定時器0
  24.         while(1)
  25.         {
  26.                 if(flag)
  27.                 {
  28.                         flag=0;           //周期5ms
  29.                         display();        //顯示函數
  30.                         if(++count>=100)  //0.5s
  31.                         {
  32.                                 count=0;
  33.                                 if(++num>188)num=0;
  34.                                 if(num>=100)w1=table[1];
  35.                                 else w1=0x00;
  36.                                 w2=table[num/10%10];
  37.                                 w3=table[num%10];
  38.                         }
  39.                 }
  40.         }
  41. }

  42. void Timer0_Isr(void) interrupt 1
  43. {
  44.         flag=1;
  45. }

  46. void Timer0_Init(void)                //5毫秒@11.0592MHz
  47. {
  48.         AUXR |= 0x80;           //定時器時鐘1T模式
  49.         TMOD &= 0xF0;           //設置定時器模式
  50.         TL0 = 0x00;             //設置定時初始值
  51.         TH0 = 0x28;             //設置定時初始值
  52.         TF0 = 0;                //清除TF0標志
  53.         TR0 = 1;                //定時器0開始計時
  54.         ET0 = 1;                //使能定時器0中斷
  55.         EA  = 1;                //使能總中斷
  56. }

  57. //數碼管顯示函數
  58. void display()
  59. {
  60.         static uchar i=0;       
  61.         uchar a[4];
  62.         switch(i)
  63.         {/******************5位***********4位**********3位**********2位**********1位***********/
  64.                 case 0: a[0]=(w3>>2&0x10)|(w3>>2&0x08)|(w3>>1&0x04)|(w3<<0&0x02)|(0 /*COM1*/); break;
  65.                 case 1: a[1]=(w2>>0&0x10)|(w2<<0&0x08)|(w2<<1&0x04)|(0 /*COM2*/)|(w3>>0&0x01); break;
  66.                 case 2: a[2]=(w2>>1&0x10)|(w2<<1&0x08)|(0 /*COM3*/)|(w2<<1&0x02)|(w3>>2&0x01); break;
  67.                 case 3: a[3]=(w2>>2&0x10)|(0 /*COM4*/)|(w1<<1&0x04)|(w1>>1&0x02)|(w3>>4&0x01); break;
  68.         }
  69.         P1M1=~(0x01<<i)&0x1f;   //P1.0~1.3輪流高阻轉準雙向
  70.         P1PU=a[i];              //按位使能上拉電阻提供高電平驅動電流,代替端口寄存器高電平
  71.         P1=a[i];                //按COM位提供低電平共地驅動電流,其它位為高阻模式,高低電平無關
  72.         i=++i%4;                //循環計數
  73. }

復制代碼








作者: jessie_Leung    時間: 2026-3-31 16:23
這種想法我曾經也試過,但是內部上拉電阻太大(30~50kΩ),提供的電流太小了,燈非常暗,我用的是應廣的pfs123。
您這個燈的亮度看起來還挺高,難道這個芯片的內部上拉電阻很小?
作者: 3038838599    時間: 2026-3-31 23:31
我最近也在琢磨這個,看見人家的產品的九齊單片機沒有高阻態,不知道怎么實現的




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1