久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18343|回復: 24
打印 上一主題 下一主題
收起左側

51單片機+TM1638驅動數碼管測試程序

  [復制鏈接]
跳轉到指定樓層
樓主
某寶上買的TM1638模塊測試程序 根據數據手冊搞出來的
騎遠飛TM1638 按鍵數碼管模塊
電路原理圖如下:




單片機源程序如下:
  1. #ifndef        _TM1638_H
  2. #define        _TM1638_H

  3. #include        <REGX51.H>

  4. #define        DATA_COMMAND        0X40
  5. #define        DISP_COMMAND        0x80
  6. #define        ADDR_COMMAND        0XC0

  7. //TM1638模塊引腳定義
  8. sbit        DIO=P1^0;
  9. sbit        CLK=P1^1;
  10. sbit        STB=P1^2;

  11. //共陰數碼管顯示代碼
  12. unsigned char code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
  13.                            0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};


  14. void TM1638_Write(unsigned char        DATA)                        //寫數據函數
  15. {
  16.         unsigned char i;
  17.         for(i=0;i<8;i++)
  18.         {
  19.                 CLK=0;
  20.                 if(DATA&0X01)
  21.                         DIO=1;
  22.                 else
  23.                         DIO=0;
  24.                 DATA>>=1;
  25.                 CLK=1;
  26.         }
  27. }
  28. unsigned char TM1638_Read(void)                                        //讀數據函數
  29. {
  30.         unsigned char i;
  31.         unsigned char temp=0;
  32.         DIO=1;        //設置為輸入
  33.         for(i=0;i<8;i++)
  34.         {
  35.                 temp>>=1;
  36.                 CLK=0;
  37.                 if(DIO)
  38.                         temp|=0x80;
  39.                 CLK=1;
  40.         }
  41.         return temp;
  42. }
  43. void Write_COM(unsigned char cmd)                //發送命令字
  44. {
  45.         STB=0;
  46.         TM1638_Write(cmd);
  47.         STB=1;
  48. }
  49. unsigned char Read_key(void)
  50. {
  51.         unsigned char c[4],i,key_value=0;
  52.         STB=0;
  53.         TM1638_Write(0x42);                           //讀鍵掃數據 命令
  54.         for(i=0;i<4;i++)               
  55.                 c[i]=TM1638_Read();
  56.         STB=1;                                                   //4個字節數據合成一個字節
  57.         for(i=0;i<4;i++)
  58.                 key_value|=c[i]<<i;
  59.         for(i=0;i<8;i++)
  60.                 if((0x01<<i)==key_value)
  61.                         break;
  62.         return i;
  63. }
  64. void Write_DATA(unsigned char add,unsigned char DATA)                //指定地址寫入數據
  65. {
  66.         Write_COM(0x44);
  67.         STB=0;
  68.         TM1638_Write(0xc0|add);
  69.         TM1638_Write(DATA);
  70.         STB=1;
  71. }
  72. /*
  73. void Write_oneLED(unsigned char num,unsigned char flag)        //單獨控制一個LED函數,num為需要控制的led序號,flag為0時熄滅,不為0時點亮
  74. {
  75.         if(flag)
  76.                 Write_DATA(2*num+1,1);
  77.         else
  78.                 Write_DATA(2*num+1,0);
  79. }          */
  80. void Write_allLED(unsigned char LED_flag)                                        //控制全部LED函數,LED_flag表示各個LED狀態
  81. {
  82.         unsigned char i;
  83.         for(i=0;i<8;i++)
  84.                 {
  85.                         if(LED_flag&(1<<i))
  86.                                 //Write_DATA(2*i+1,3);
  87.                                 Write_DATA(2*i+1,1);
  88.                         else
  89.                                 Write_DATA(2*i+1,0);
  90.                 }
  91. }

  92. //TM1638初始化函數
  93. void init_TM1638(void)
  94. {
  95.         unsigned char i;
  96.         Write_COM(0x8b);       //亮度 (0x88-0x8f)8級亮度可調
  97.         Write_COM(0x40);       //采用地址自動加1
  98.         STB=0;                           //
  99.         TM1638_Write(0xc0);    //設置起始地址

  100.         for(i=0;i<16;i++)           //傳送16個字節的數據
  101.                 TM1638_Write(0x00);
  102.         STB=1;
  103. }
  104. #endif
復制代碼


  1. #include        <REGX51.H>
  2. #include        <tm1638.h>

  3. unsigned char num[8];                //各個數碼管顯示的值

  4. int main(void)
  5. {
  6.         unsigned char i;
  7.         init_TM1638();                                   //初始化TM1638
  8.         for(i=0;i<8;i++)
  9.         Write_DATA(i<<1,tab[0]);                       //初始化寄存器
  10.         
  11.         while(1)
  12.         {
  13.                 i=Read_key();                          //讀按鍵值
  14.                 if(i<8)
  15.                 {
  16.                         num[i]++;
  17.                         while(Read_key()==i);                       //等待按鍵釋放
  18.                         if(num[i]>15)
  19.                         num[i]=0;
  20.                         Write_DATA(i*2,tab[num[i]]);
  21.                         Write_allLED(1<<i);
  22.                 }
  23.         }
  24. }

復制代碼

所有資料51hei提供下載:

TM1638 按鍵數碼管模塊.zip (802.45 KB, 下載次數: 398)


評分

參與人數 2黑幣 +55 收起 理由
火火火火~ + 5 謝謝
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏17 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:95542 發表于 2018-8-3 17:50 | 只看該作者
下載來學習一下
回復

使用道具 舉報

板凳
ID:583100 發表于 2019-7-17 20:19 | 只看該作者
很好,可以直接用。
回復

使用道具 舉報

地板
ID:361722 發表于 2019-8-12 13:35 | 只看該作者
新手進來學習下
回復

使用道具 舉報

5#
ID:361722 發表于 2019-8-12 13:35 | 只看該作者
新手進來學習
回復

使用道具 舉報

6#
ID:383374 發表于 2019-8-14 08:27 來自手機 | 只看該作者
寫的還不錯
回復

使用道具 舉報

7#
ID:98880 發表于 2019-8-14 10:55 | 只看該作者
TM1638的代碼,我下載看下,
回復

使用道具 舉報

8#
ID:410680 發表于 2020-1-31 23:34 | 只看該作者
好文章,正好需要
回復

使用道具 舉報

9#
ID:148715 發表于 2020-2-1 11:21 | 只看該作者
新手過來學習一i下。感覺非常不錯
回復

使用道具 舉報

10#
ID:410680 發表于 2020-2-1 12:38 | 只看該作者
下載測試很好用,謝謝分享
回復

使用道具 舉報

11#
ID:398504 發表于 2020-2-28 00:15 | 只看該作者
非常感謝,下載來試試看
回復

使用道具 舉報

12#
ID:462827 發表于 2020-2-28 10:01 | 只看該作者
這個不就是TM1638自帶的例程?!
回復

使用道具 舉報

13#
ID:372579 發表于 2020-3-12 10:13 | 只看該作者
非常感謝,剛好再找呢,謝謝
回復

使用道具 舉報

14#
ID:198286 發表于 2020-3-14 15:00 | 只看該作者
模塊早買了,商家程序也給了,就是不會點
回復

使用道具 舉報

15#
ID:518869 發表于 2020-6-28 14:15 | 只看該作者
這個讀函數 DIO=1設置為輸入,是啥意思呢?
unsigned char TM1638_Read(void)                                        //讀數據函數
{
        unsigned char i;
        unsigned char temp=0;
        DIO=1;        //設置為輸入
        for(i=0;i<8;i++)
        {
                temp>>=1;
                CLK=0;
                if(DIO)
                        temp|=0x80;
                CLK=1;
        }
        return temp;
}
回復

使用道具 舉報

16#
ID:593106 發表于 2021-3-13 00:03 | 只看該作者
12MHZ晶振,跑在1T的單片機會有錯誤,跑在12T單片機正常
回復

使用道具 舉報

17#
ID:593106 發表于 2021-3-13 00:06 | 只看該作者
lastreg 發表于 2020-6-28 14:15
這個讀函數 DIO=1設置為輸入,是啥意思呢?
unsigned char TM1638_Read(void)                             ...

單片機把DIO拉高,就是說對應管腳是單片機內部電阻在拉高,如果TM1638的DIO管腳輸出電平為低,單片機對應bit為0,反之是1
回復

使用道具 舉報

18#
ID:5501 發表于 2021-4-14 23:39 | 只看該作者
51單片機IO 讀 一般設置1 為輸入
回復

使用道具 舉報

19#
ID:187802 發表于 2021-9-17 10:04 | 只看該作者
不錯,剛好手上有個這片子的表頭。
回復

使用道具 舉報

20#
ID:42615 發表于 2022-5-6 10:07 | 只看該作者
Write_oneLED(unsigned char num,unsigned char flag);
Write_allLED(unsigned char LED_flag) ;

這兩個函數沒有用吧?
回復

使用道具 舉報

21#
ID:1011444 發表于 2022-5-8 21:25 | 只看該作者
資料很有用,已下載看過了,謝謝分享!
回復

使用道具 舉報

22#
ID:884711 發表于 2022-8-6 13:51 | 只看該作者
zxy2266 發表于 2020-3-14 15:00
模塊早買了,商家程序也給了,就是不會點

俺也是,反復的都是一樣的全程,總是學到實際應用的技術,只想把每一個按鍵應用到各自的功能,LED發光管也能對應的顯示不同的IO口狀態。
回復

使用道具 舉報

23#
ID:884711 發表于 2022-8-21 07:44 | 只看該作者
void Write_allLED(unsigned char LED_flag)                                        //控制全部LED函數,LED_flag表示各個LED狀態
{
        unsigned char i;
        for(i=0;i<8;i++)
                {
                        if(LED_flag&(1<<i))
                                //Write_DATA(2*i+1,3);
                                Write_DATA(2*i+1,1);
                        else
                                Write_DATA(2*i+1,0);
                }
}
看了N多全程,這個LED顯示都這么寫的,總不會靈活應用
回復

使用道具 舉報

24#
ID:1081040 發表于 2023-8-1 20:37 | 只看該作者
void Write_allLED(u8 LED_flag)                                        //控制全部LED函數,LED_flag表示各個LED狀態
{
        u8 i;
        for(i=0;i<8;i++)
                {
                        if(LED_flag&(1<<i))
                                {
                                //Write_DATA(2*i+1,3);
                                Write_DATA(2*i+1,1);
                                }
                        else
                                Write_DATA(2*i+1,0);
                }
}

這里報下面的警告要怎么 解決吶

main.c(32): warning C188: 'parameter 1': value truncated
回復

使用道具 舉報

25#
ID:433219 發表于 2023-8-3 19:37 | 只看該作者
1638 驅動10個數碼管+3x8個按鍵,最優綜合ic
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区在线 | 九色网址 | 日韩午夜网站 | 国产精品99久久久久久久vr | 欧美性生活视频 | 国产1区2区 | 欧美日韩国产一区二区三区 | 精品久久一区二区 | 91av国产在线视频 | 艹逼网| 久久精品国产免费看久久精品 | 亚洲欧美综合精品久久成人 | 日韩视频专区 | 亚洲一区二区电影网 | 久久这里只有 | 国产一区二区三区四区三区四 | 欧美日韩电影一区二区 | 午夜大片 | 国产一区二区三区色淫影院 | 久草网站| 国产免费观看一级国产 | 亚洲精品成人 | 爱高潮www亚洲精品 中文字幕免费视频 | 午夜影院污 | 久久涩涩 | 做a视频| www.国产视频 | 日韩国产一区二区 | 最新高清无码专区 | 精品久久1| a级网站 | 99热电影| 日韩免费在线 | 欧美一级小视频 | 影视先锋av资源噜噜 | 日韩视频中文字幕 | 97精品视频在线 | 日本成人在线网址 | 一区在线免费视频 | 一区在线播放 | www312aⅴ欧美在线看 |