亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3540|回復: 5
收起左側

TM1640驅動16位8段LED數碼管實驗

[復制鏈接]
ID:97023 發表于 2025-9-5 11:53 | 顯示全部樓層 |閱讀模式
前段時間發了用洞洞板制作LED數碼管模塊的文章,
本壇網友“chxelc”建議,可以用TM1640等芯片通過兩根線就可以驅動多位數碼管,所以買了10片TM1640再次進行實驗。
TM1640.jpg
封裝:SSOP-28
封裝.png
共陰電路原理圖:
電路圖:共陰.png
用“立創”的EDA設計了PCB:
PCB設計.png
0.36寸四位LED數碼管長度是3.0CM,4個的長度就是12CM,排成一行的話就超過了“立創”10CM邊長免費的限制,但想到10CM邊長正方形對角線的長度已超過12CM,經實際放置,確實如此。因此就將整個PCB板旋轉45度,把最長的邊放在對角線上進行布局。
頂層布線:
頂層.png
底層布線:
底層.png
2D效果圖:
2D效果.png
3D效果圖:
3D效果.png
最后的成品:
成品1.jpg


成品2.jpg

成品3.jpg
單片機系統:STC15F2K08S2。
無小數顯示:16進制所有數字。
顯示效果(無小數).jpg
帶小數顯示:16進制所有數字。
顯示效果(有小數).jpg
16位同時依次顯示各段:A、B、C、D、E、F、G、DP段。
同時依次顯示各段.jpg
16位同時顯示數字:0~F。
各位同時顯示數字.jpg
由于LED數碼管是活動的,所以該模塊還可以測試數碼管的好壞。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的獎勵!

查看全部評分

回復

使用道具 舉報

ID:97023 發表于 2025-9-5 12:02 | 顯示全部樓層
  1. #include <STC15.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5.        
  6. #define TM1640MEDO_ADD  0x44         //地址模式的設置0x40自動加一模式 0x44固定地址模式
  7. #define TM1640MEDO_DISPLAY  0x88     //設置亮度小:0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8f最大0x80關閉
  8. #define TM1640MEDO_DISPLAY_OFF  0x80  //宏定義 關亮度設置

  9. #define Delay(us){_nop_();_nop_();_nop_();_nop_();}

  10. sbit DIN  = P3^7; //TM1640數據線
  11. sbit SCLK = P3^6; //TM1640時鐘線

  12. uchar buff[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};        //數字0~F
  13. //                0    1    2    3    4    5    6    7    8    9    A    b    C    d    E    F    -   
  14. //**************************************************************************************************
  15. //功能:延時1毫秒
  16. //***************************************************************************************************
  17. void Delay_xms(uint x)
  18. {
  19.   uint i,j;
  20.   for(i=0;i<x;i++)
  21.     for(j=0;j<112;j++);
  22. }

  23. //功能:12us延時
  24. void Delay_us(uint t)                                          
  25. {
  26.   for(;t>0;t--)
  27.    {
  28.         _nop_();
  29.    }
  30. }

  31. //啟始
  32. void TM1640_start()
  33. {
  34.         DIN=1;
  35.         SCLK=1;
  36.         Delay_us(1);
  37.         DIN=0;
  38.         Delay_us(1);
  39.         SCLK=0;
  40.         Delay_us(1);
  41. }

  42. //結束        
  43. void TM1640_stop()
  44. {
  45.         DIN=0;
  46.         SCLK=1;
  47.         Delay_us(1);
  48.         DIN=1;
  49.         Delay_us(1);
  50. }

  51. //寫數據        
  52. void TM1640_write(uchar date)
  53. {        
  54.         uchar i;
  55.         uchar aa;
  56.         aa=date;
  57.         DIN=0;
  58.         SCLK=0;
  59.         for(i=0;i<8;i++)
  60.         {
  61.                 SCLK=0;
  62.                 Delay_us(1);
  63.                 if(aa&0x01)
  64.                 {
  65.                         DIN=1;
  66.             Delay_us(1);
  67.         }
  68.                 else
  69.                 {
  70.             DIN=0;
  71.             Delay_us(1);
  72.         }
  73.         SCLK=1;
  74.         Delay_us(1);
  75.         aa=aa>>1;
  76.         }
  77.         DIN=0;
  78.         SCLK=0;
  79. }

  80. //TM1640初始化
  81. void TM1640_Init(void)
  82. {   
  83.         TM1640_start();
  84.         TM1640_write( TM1640MEDO_ADD ); //設置工作模式
  85.         TM1640_stop();
  86.         TM1640_start();
  87.         TM1640_write( TM1640MEDO_DISPLAY );//設置顯示亮度
  88.         TM1640_stop();                                       
  89. }

  90. //固定地址模式的顯示輸出函數
  91. void TM1640_display(uchar address,uchar date)
  92. {
  93.    TM1640_start();
  94.    TM1640_write( 0xc0 + address );      //傳顯示數據對應的地址,0-15位數碼管
  95. //   TM1640_write( buff[date] + 0x80 ); //傳1BYTE顯示數據,對應顯示buff[]數組內容,顯示小數點
  96.    TM1640_write( buff[date] );              //傳1BYTE顯示數據,對應顯示buff[]數組內容,不顯示小數點
  97.    TM1640_stop();
  98. }

  99. void main()
  100. {
  101.         uchar i,j,k;
  102.         TM1640_Init();
  103.        
  104.         while(1)
  105.         {
  106.                 //16位同時依次顯示各段
  107.                 j=1;
  108.                 for(i=0; i<8; i++)
  109.                 {
  110.                         for(k=0; k<16; k++)
  111.                         {
  112.                                 TM1640_start();
  113.                                 TM1640_write( 0xc0 + k );
  114.                                 TM1640_write(j);
  115.                                 TM1640_stop();
  116.                         }
  117.                         Delay_xms(3000);
  118.                         j = j<<1;
  119.                 }
  120.                
  121.                 //16位同時依次顯示:0~F
  122.                 for(i=0; i<16; i++)
  123.                 {
  124.                         for(j=0; j<16; j++)
  125.                         {
  126.                                 TM1640_display( j, i );
  127.                         }
  128.                         Delay_xms(5000);
  129.                 }
  130.                
  131.                 //從0~F,各位同時顯示數字
  132.                 for(i=0; i<16; i++)
  133.                 {
  134.                         TM1640_display(i,i);
  135.                 }
  136.                 Delay_xms(50000);
  137.         }
  138. }
復制代碼


回復

使用道具 舉報

ID:1144680 發表于 2026-5-3 14:25 | 顯示全部樓層
你用的MCU型號是啥?我的點不亮,STC8H8K64U
回復

使用道具 舉報

ID:97023 發表于 2026-5-5 01:38 | 顯示全部樓層
dcc60 發表于 2026-5-3 14:25
你用的MCU型號是啥?我的點不亮,STC8H8K64U

STC15F2K08S2
回復

使用道具 舉報

ID:1144680 發表于 2026-5-5 15:08 | 顯示全部樓層

謝謝!MCU不同,延時函數也不一樣,所以不亮,已經解決了。
回復

使用道具 舉報

ID:1028227 發表于 2026-5-6 21:18 來自觸屏版 | 顯示全部樓層
向你學習了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表