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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7702|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)驅(qū)動LED數(shù)碼管,按鍵TM1638芯片學(xué)習(xí)心得

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
TM1638是帶鍵盤掃描接口的LED(發(fā)光二極管顯示器)驅(qū)動控制專用電路,內(nèi)部集成有MCU 數(shù)字接口、數(shù)據(jù)鎖存器、LED 高壓驅(qū)動、鍵盤掃描等電路。主要應(yīng)用于冰箱、空調(diào) 、家庭影院等產(chǎn)品的高段位顯示屏驅(qū)動。
因?yàn)椴竭M(jìn)電機(jī)實(shí)驗(yàn)需要用到按鍵,但家有嬰兒,沒用松香鉻鐵之類的(技術(shù)早就還給老師了,也沒有條件),只好在網(wǎng)上找,找到一個由TM1638做成的成品,感覺做工還不錯,就買了一個,但其帶的程序一時沒看懂,花了些時間進(jìn)行學(xué)習(xí),覺得好精妙,就想分享一下。
絕不是給別人打廣告,這程序確實(shí)我理解了很久。
附件是它完整的程序。

調(diào)用實(shí)現(xiàn)程序主要是顯示與按鍵值獲取。
1.顯示:
為什么是0xc0|add呢?
因?yàn)樾酒f明有:高位都是11, 就是C了。

void Write_DATA(unsigned char add,unsigned char DATA)                //指定地址寫入數(shù)據(jù)
{
        Write_COM(0x44);
        STB=0;
        TM1638_Write(0xc0|add);
        TM1638_Write(DATA);
        STB=1;
}
2.按鍵獲取:
注意這兒是從低位開始讀的, 理解 的時候把B0~B7反過來理解就更好理解下面這個按鍵程序。在這兒花了很多時間來想這個。得到的 i 值就是按的第幾個鍵。這兒真的這個程序?qū)懙锰盍耍@個大神絕對的高手。


單片機(jī)程序
  1. unsigned char Read_key(void)
  2. {
  3.         unsigned char c[4],i,key_value=0;
  4.         STB=0;
  5.         TM1638_Write(0x42);                           //讀鍵掃數(shù)據(jù) 命令
  6.         for(i=0;i<4;i++)               
  7.                 c[i][i]=TM1638_Read();
  8.         STB=1;                                                   //4個字節(jié)數(shù)據(jù)合成一個字節(jié)
  9.         for(i=0;i<4;i++)
  10.                 key_value|=c[i][i]<<i;
  11.         for(i=0;i<8;i++)
  12.                 if((0x01<<i)==key_value)
  13.                         break;
  14.         return i;
  15. }
復(fù)制代碼

TM1638測試程序C51.rar

27.17 KB, 下載次數(shù): 113, 下載積分: 黑幣 -5

tm1638芯片數(shù)據(jù)手冊.pdf

873.68 KB, 下載次數(shù): 42, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:626079 發(fā)表于 2020-2-18 21:24 | 只看該作者
今晚上做了實(shí)驗(yàn),再對比程序。。

1.jpg (187.44 KB, 下載次數(shù): 66)

1.jpg

press1.jpg (177.72 KB, 下載次數(shù): 55)

press1.jpg

press2.jpg (180.37 KB, 下載次數(shù): 61)

press2.jpg

press3.jpg (179.35 KB, 下載次數(shù): 66)

press3.jpg

press4.jpg (183.43 KB, 下載次數(shù): 66)

press4.jpg

實(shí)物.jpg (130.01 KB, 下載次數(shù): 60)

實(shí)物.jpg
回復(fù)

使用道具 舉報

板凳
ID:626079 發(fā)表于 2020-2-18 21:31 | 只看該作者
但是這樣的顯示執(zhí)行結(jié)果不是我想要的。明天再研究改一下程序。我只需要按一個鍵做開關(guān),顯示1或0就可以了,別的鍵都不需要改變。或者有哪個大神幫我改一下。
回復(fù)

使用道具 舉報

地板
ID:626079 發(fā)表于 2020-2-18 22:54 | 只看該作者
最簡單的改動,現(xiàn)在實(shí)現(xiàn)了只顯示1或0狀態(tài)。只是這樣的話理論上所有的按鍵都可以控制電機(jī)開啟了。。。。
                        while(Read_key()==i);                       //等待按鍵釋放
//                        if(num[i]>15)                                           //原程序是按一下鍵,自動計數(shù)加1.可以加到15
                       
                        if(num[i]>1)                                           //改為實(shí)現(xiàn)了只顯示1與0(加到1,就值改為0),1電機(jī)啟動,0電機(jī)斷開
                        num[i]=0;
                        Write_DATA(i*2,tab[num[i]]);
                        Write_allLED(1<<i);
                }
               
               
                if(num[i]==1)
                        {
                          //電機(jī)開啟程序
                        }
回復(fù)

使用道具 舉報

5#
ID:626079 發(fā)表于 2020-2-19 22:43 | 只看該作者
    今晚把TM1368.H加入步進(jìn)電機(jī)程序中,測試通過了對步進(jìn)電機(jī)開啟與停止的控制,這兒取的num[0]=1來控制,測試發(fā)現(xiàn)是左邊第一個鍵,
對這個模塊的整個測試過程就我這兒就結(jié)束了。

但是后來又看了這個Read_key()程序, 我把key_value|=c[ i]<<i; 這句改為key_value|=c[ i](我的理解是應(yīng)該這樣才科學(xué))[,發(fā)現(xiàn)結(jié)果顯示就不一樣了:按下左邊4個鍵中任何一個,都是只有左邊那個LED的最高位進(jìn)行0或1的變化,后面的LED都是顯示0無變化;按下右邊4個鍵中任何一個,都是中間那個LED(就是右邊4位數(shù)碼管的高位)進(jìn)行0或1的變化,其它的LED都是顯示0無變化。 求哪位大俠解惑啊。

  1. void main()
  2. {
  3.         unsigned char i;
  4.         DIANJICLK=0;
  5.         ENA=1;                                 //ENA-接的控制口,但一樣的,如果ENA=0,步進(jìn)電機(jī)卡起
  6.         DIR=1;                                 //DIR-接的控制口。初始化電機(jī)        低電平有效,測試,DIR=1,是正轉(zhuǎn), DIR=0反轉(zhuǎn)。

  7.         
  8.         /******調(diào)用TM1638按鍵顯示模塊********/
  9.         init_TM1638();                                   //初始化TM1638
  10.         for(i=0;i<8;i++)
  11.         Write_DATA(i<<1,tab[0]);                       //初始化寄存器
  12.         /******調(diào)用TM1638按鍵顯示模塊********/
  13.         

  14.         P2=0X00;
  15.         delay(2000);                            //延時等待系統(tǒng)穩(wěn)定。
  16.         P2=0XFF;
  17.         
  18.         Init_time();                 //初始化定時器        
  19.         
  20.         while(1)
  21.         {
  22.         /******調(diào)用TM1638按鍵顯示模塊得到返回值********/
  23.            
  24.                    i=Read_key();                          //讀按鍵值


  25.                 if(i<8)
  26.                 {
  27.                         num[i]++;
  28.                         while(Read_key()==i);                       //等待按鍵釋放
  29. //                        if(num[i]>15)                                           //原程序是按一下鍵,自動計數(shù)加1.
  30.                         
  31.                         if(num[i]>1)                                           //改為只顯示1與0,1電機(jī)啟動,0電機(jī)斷開
  32.                         num[i]=0;
  33.                         Write_DATA(i*2,tab[num[i]]);
  34.                         Write_allLED(1<<i);
  35.                 }
  36.                
  37.                
  38.                 if(num[0]==1)
  39.                         {
  40.                           //電機(jī)開啟程序
  41.                         Run_Status=~Run_Status;
  42.                         if(Run_Status)
  43.                         {
  44.                                 count=counttemp;
  45.                                 TR0=1;                       //開啟中斷產(chǎn)生脈沖信號
  46.                                  EA=1;
  47.                                 
  48.                         }
  49.                         else
  50.                         {
  51.                                 counttemp=count;
  52.                                     TR0=0;                       //關(guān)閉中斷停止脈沖信號
  53.                                    EA=0;
  54.                         }
  55.                         }

  56. //                Key_scan();
  57.          
  58.          }        
  59. }
復(fù)制代碼


控制步進(jìn)電機(jī)開關(guān).jpg (165.27 KB, 下載次數(shù): 76)

控制步進(jìn)電機(jī)開關(guān).jpg
回復(fù)

使用道具 舉報

6#
ID:292876 發(fā)表于 2020-3-19 16:53 | 只看該作者

   //------------下面是讀按鍵和鍵值分離程序------------

unsigned char Read_key(void)
{
        unsigned char c[4],i,key_value=0;
        STB=0;
        TM1638_Write(0x42);
        Delay10us();
        for(i=0;i<4;i++)
                c[i]=TM1638_Read();
        STB=1;                                       

            //K1組合8鍵
        if(c[0]==0x04) key_value=1;           //KS1K1
        if(c[0]==0x40) key_value=2;           //KS2K1
        if(c[1]==0x04) key_value=3;           //KS3K1
        if(c[1]==0x40) key_value=4;           //KS4K1
        if(c[2]==0x04) key_value=5;           //KS5K1
        if(c[2]==0x40) key_value=6;           //KS6K1
        if(c[3]==0x04) key_value=7;           //KS7K1
        if(c[3]==0x40) key_value=8;           //KS8K1
          //K2組合8鍵
        if(c[0]==0x02) key_value=9;           //KS1K2
        if(c[0]==0x20) key_value=10;   //KS2K2
        if(c[1]==0x02) key_value=11;   //KS3K2
        if(c[1]==0x20) key_value=12;   //KS4K2
        if(c[2]==0x02) key_value=13;   //KS5K2
        if(c[2]==0x20) key_value=14;   //KS6K2
        if(c[3]==0x02) key_value=15;   //KS7K2
        if(c[3]==0x20) key_value=16;   //KS8K2
          //K3組合8鍵
        if(c[0]==0x01) key_value=17;   //KS1K3
        if(c[0]==0x10) key_value=18;   //KS2K3
        if(c[1]==0x01) key_value=19;   //KS3K3
        if(c[1]==0x10) key_value=20;   //KS4K3
        if(c[2]==0x01) key_value=21;   //KS5K3
        if(c[2]==0x10) key_value=22;   //KS6K3
        if(c[3]==0x01) key_value=23;   //KS7K3
        if(c[3]==0x10) key_value=24;   //KS8K3

        return key_value;
}


回復(fù)

使用道具 舉報

7#
ID:292876 發(fā)表于 2020-3-19 16:54 | 只看該作者
這個模塊自帶程序?qū)嶋H使用不方便,可以按照上面的改,主程序按鍵如何操作很簡單了!判斷鍵值就行
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美日韩综合精品一区二区 | 99精品一级欧美片免费播放 | www亚洲一区 | 国产三级在线观看播放 | 欧区一欧区二欧区三免费 | 日本久久精品视频 | 天天干天天爱天天 | 97av视频| 国产激情91久久精品导航 | 亚洲免费精品 | 亚洲成人免费av | 欧美综合一区二区三区 | 国产日韩欧美91 | 一区二区免费在线观看 | 97国产精品视频人人做人人爱 | 精品国产一区二区三区性色av | 国产精品我不卡 | 精品在线一区 | 天天拍天天射 | 欧美aaa级| 婷婷在线视频 | 国产精品精品久久久 | 在线观看久草 | 91免费看片 | 欧美日韩精品一区二区三区蜜桃 | 在线日韩欧美 | 成年人精品视频 | 国产成人99久久亚洲综合精品 | 国产精品爱久久久久久久 | 天天夜夜人人 | 国产成人久久精品一区二区三区 | 成人免费视频 | www.国产| 在线观看免费黄色片 | 国产蜜臀| 国产精品视频一区二区三区不卡 | 日韩中出 | 亚洲av毛片 | 在线视频亚洲 | 欧美日韩在线观看视频网站 | 韩日免费视频 |