找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

TM1650模塊單片機(jī)源程序(子函數(shù))

查看數(shù): 21232 | 評論數(shù): 30 | 收藏 19
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2018-3-25 08:08

正文摘要:

TM1650模塊子函數(shù),歡迎下載測試應(yīng)用. 取之于網(wǎng)絡(luò),分享給大家 單片機(jī)源程序如下: #include<STC12C5A.h> #include"tm1650.h" void Delay_us(uint i) //us延時(shí) {         for ...

回復(fù)

ID:386669 發(fā)表于 2020-8-1 16:42
正在看規(guī)格書寫1650的程序,還沒有拿到板子上面測試?戳藰永绦,對于有的師兄說按鍵掃描沒有反應(yīng),可能是有的單片機(jī)的端口輸入和輸出狀態(tài)要單獨(dú)設(shè)定,而樣例里面的單片機(jī)可能是不用設(shè)定的。
我這邊看規(guī)格書的時(shí)候也有個(gè)疑問,按鍵讀取的時(shí)候,只有一個(gè)字節(jié),又不區(qū)分地址,怎么能讀取28個(gè)按鍵呢?
問了代理,說是晚上回復(fù)。
ID:427868 發(fā)表于 2023-8-26 21:33
對比新舊版本規(guī)格書,發(fā)現(xiàn)舊版本TM1650的讀按鍵命令是0x49,而新版本的命令則是0x4F。新版本不能讀按鍵的可以修改一下試試(舊版本批號首位位是1,新版本批號首位是2).
ID:59884 發(fā)表于 2023-8-18 10:02
haide1998 發(fā)表于 2022-8-30 15:29
哪位高手把四位數(shù)碼管分離成28個(gè)LED,用于分別指示28個(gè)按鍵的執(zhí)行情況可好

如果我沒有理解錯(cuò),這個(gè)玩意用的是串行信號,對應(yīng)地址的存儲(chǔ)單元位,對應(yīng)著一個(gè)LED.對應(yīng)關(guān)系IC說明書可查。唯一要弄明白的就是,串行信號的傳輸規(guī)則。
ID:884711 發(fā)表于 2022-8-30 15:29
哪位高手把四位數(shù)碼管分離成28個(gè)LED,用于分別指示28個(gè)按鍵的執(zhí)行情況可好
ID:101990 發(fā)表于 2022-1-18 21:12
學(xué)習(xí)一下!不錯(cuò)的例程
ID:412814 發(fā)表于 2022-1-15 08:58
挺好的資料,學(xué)習(xí)了,謝謝樓主
ID:818864 發(fā)表于 2021-11-11 16:03
本帖最后由 什么都不懂啊 于 2021-11-11 19:07 編輯
這是單片機(jī)頭文件里面定義的一個(gè)數(shù)
sbit  CY                 =     PSW^7;
ID:951099 發(fā)表于 2021-8-6 10:32
DIO = CY;  cy是什么
ID:217038 發(fā)表于 2020-11-15 14:58
這個(gè)程序不錯(cuò),參考下
ID:316803 發(fā)表于 2020-11-10 17:12
雪城 發(fā)表于 2020-10-11 11:24
ASK 是錯(cuò)的  試試我改的
/************************************************************************* ...

TRI_DAT = 1;              //數(shù)據(jù)端口位輸入模式
TRI_DAT = 0;              //數(shù)據(jù)端口位輸出模式

這個(gè)數(shù)據(jù)端口位,在嗎定義的?
ID:828202 發(fā)表于 2020-10-11 11:25
liuzhengduo16 發(fā)表于 2018-10-22 15:02
我想問一下,我用賽元的MCU驅(qū)動(dòng)的這個(gè)芯片,為什么按鍵掃描的時(shí)候按鍵沒有任何反應(yīng)呢

ASK錯(cuò)了
ID:828202 發(fā)表于 2020-10-11 11:24
fox1357 發(fā)表于 2020-8-1 16:42
正在看規(guī)格書寫1650的程序,還沒有拿到板子上面測試?戳藰永绦,對于有的師兄說按鍵掃描沒有反應(yīng),可能 ...

ASK 是錯(cuò)的  試試我改的
/******************************************************************************
* 函 數(shù) 名: Ask1650(void)
* 函數(shù)功能: ACK信號
* 入口函數(shù): 無
* 返   回:  無
*******************************************************************************/
void Ask1650(void)//ACK信號
{
    int timeout = 1;
    TRI_DAT = 1;              //數(shù)據(jù)端口位輸入模式
    Delay_us(5);
     while((DIO)&&(timeout<=300))  //延時(shí)等待反饋信號
    {
        timeout++;
    }
    CLK = 1;
    Delay_us(5);
    CLK = 0;
    TRI_DAT = 0;              //數(shù)據(jù)端口位輸出模式

}
ID:828202 發(fā)表于 2020-10-11 11:22
程序 ACK 是錯(cuò)的  試了好久鍵盤讀不出鍵值 最后發(fā)現(xiàn)詢問SDA下拉提前了一個(gè)脈沖
uchar BL = 2;          //亮度等級
uchar CODE[11] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff}; //0~9顯示代碼
                   // 0    1    2    3    4    5    6    7    8    9   a


void TM1650(uchar B1,uchar B2, uchar B3 ,uchar B4)
{
    uchar temp[5],temp1[5];
    uchar i;
    temp[1] = B1;
    temp[2] = B2;
    temp[3] = B3;
    temp[4] = B4;
    temp1[1]=temp[1] ;
    temp1[2]=temp[2] ;
    temp1[3]=temp[3] ;
    temp1[4]=temp[4] ;
    for( i=1 ; i < 5 ; i++ )
    {
        if (temp[i] == 97)
        {
           temp1[i] = 10;
        }   
    }
    Set1650(0x48,(BL*16+0x01));     //打開顯示 調(diào)節(jié)灰度
    Set1650(0x68, CODE[temp1[1]]);//數(shù)碼管顯示
    Set1650(0x6a, CODE[temp1[2]]);//數(shù)碼管顯示
    Set1650(0x6c, CODE[temp1[3]]);//數(shù)碼管顯示
    Set1650(0x6e, CODE[temp1[4]]);//數(shù)碼管顯示
}

/******************************************************************************
* 函 數(shù) 名: InitTM1650(void)
* 函數(shù)功能: 初始化TM1650
* 入口函數(shù): 無
* 返   回:  無
*******************************************************************************/
void InitTM1650(void)
{
    TRI_CLK = 0; //設(shè)置端口位輸出模式
    TRI_DAT = 0; //設(shè)置端口位輸出模式
    WPUA |= 0x20; //設(shè)置 RA5 RA4弱上拉
    Set1650(0x48,(BL*16+0x01));//設(shè)定亮度,開顯示八段顯示方式,后一個(gè)字節(jié)中高位用于亮度,低位用于七段或八段顯示方式和開關(guān)顯
                               //如:0x71為七級亮度,八段顯示方式,開顯示;0x79為為七級亮度,七段顯示方式,開顯示
}

/******************************************************************************
* 函 數(shù) 名: Set1650(uchar add,uchar dat)
* 函數(shù)功能: 按鍵掃描   寫顯存必須從高地址開始寫
* 入口函數(shù): add 地址  dat 數(shù)據(jù)
* 返   回:  無
*******************************************************************************/
void Set1650(uchar add,uchar dat)//數(shù)碼管顯示
{                                                         
    Start1650();     //開始   
    WrByte1650(add); //第一個(gè)顯存地址
    Ask1650();
    WrByte1650(dat); //第一個(gè)顯示數(shù)據(jù)
    Ask1650();
    Stop1650();      //停止
}

/******************************************************************************
* 函 數(shù) 名: Scan_Key(void)
* 函數(shù)功能: 按鍵掃描
* 入口函數(shù): 無
* 返   回:  rekey 按鍵掃描結(jié)果
*******************************************************************************/
uchar Scan_Key(void) // 按鍵掃描
{
    uchar i;
    uchar rekey;
    Start1650();              //開始
    WrByte1650(0x49);         //讀按鍵命令
    Ask1650();                //ASK
    //DIO = 1 ;
    TRI_DAT = 1;              //數(shù)據(jù)端口位輸入模式
    Delay_us(1);
    for(i=0;i<8;i++)
    {  
        CLK = 1;
        rekey = rekey<<1;
        if(DIO)
        {
            rekey++;
        }
        Delay_us(5);
        CLK = 0;   
        Delay_us(1);
    }
    TRI_DAT = 0;              //數(shù)據(jù)端口位輸出模式
    Ask1650();               //ASK
    Stop1650();              //停止
    return(rekey);
}

/******************************************************************************
* 函 數(shù) 名: WrByte1650(uchar oneByte)
* 函數(shù)功能: 寫一個(gè)字節(jié)
* 入口函數(shù): oneByte 要寫入的字節(jié)
* 返   回:  無
*******************************************************************************/
void WrByte1650(uchar oneByte)//寫一個(gè)字節(jié) 高位在前,低位在后
{
    uchar i;
    CLK = 0;
    Delay_us(5);
    for(i=0;i<8;i++)
    {
        oneByte = oneByte<<1;
        DIO = nC ;                      //進(jìn)位標(biāo)志 溢出1 空位0
        CLK = 0;
        Delay_us(5);
        CLK = 1;
        Delay_us(5);
        CLK = 0;
    }
}

/******************************************************************************
* 函 數(shù) 名: Stop1650(void)
* 函數(shù)功能: 停止信號
* 入口函數(shù): 無
* 返   回:  無
*******************************************************************************/
void Stop1650(void)//停止信號
{
    CLK = 1;
    DIO = 0;
    Delay_us(5);
    DIO = 1;         
}

/******************************************************************************
* 函 數(shù) 名: Ask1650(void)
* 函數(shù)功能: ACK信號
* 入口函數(shù): 無
* 返   回:  無
*******************************************************************************/
void Ask1650(void)//ACK信號
{
    int timeout = 1;
    TRI_DAT = 1;              //數(shù)據(jù)端口位輸入模式
    Delay_us(5);
     while((DIO)&&(timeout<=300))  //延時(shí)等待反饋信號
    {
        timeout++;
    }
    CLK = 1;
    Delay_us(5);
    CLK = 0;
    TRI_DAT = 0;              //數(shù)據(jù)端口位輸出模式

}


/******************************************************************************
* 函 數(shù) 名: Start1650(void)
* 函數(shù)功能: 開始信號
* 入口函數(shù): 無
* 返   回:  無
*******************************************************************************/
void Start1650(void)//開始信號
{
    CLK = 1;
    DIO = 1;
    Delay_us(5);
    DIO = 0;
}

/******************************************************************************
* 函 數(shù) 名: Delay_us(uint i)
* 函數(shù)功能: us延時(shí)
* 入口函數(shù): i 延時(shí)長度
* 返   回:  無
*******************************************************************************/
void Delay_us(uint i)//us延時(shí)
{
    for(;i>0;i--)
    {
        NOP();
        NOP();
        NOP();
        NOP();
        NOP();
    }
}
ID:386669 發(fā)表于 2020-8-1 17:53
fox1357 發(fā)表于 2020-8-1 16:42
正在看規(guī)格書寫1650的程序,還沒有拿到板子上面測試。看了樣例程序,對于有的師兄說按鍵掃描沒有反應(yīng),可能 ...

我大概明白了,這個(gè)芯片無法判斷兩個(gè)按鍵,0-255只需要返回一個(gè)值,就代表某一個(gè)具體按鍵。
ID:791173 發(fā)表于 2020-6-27 22:30
正在找這個(gè)內(nèi)容,多謝樓主;
ID:242109 發(fā)表于 2020-5-18 10:31
請問這款蕊片需要用戶主動(dòng)掃描嗎?還是寫入數(shù)據(jù)后,蕊片自動(dòng)刷新?
ID:263951 發(fā)表于 2020-1-11 20:40
liuzhengduo16 發(fā)表于 2018-10-22 15:02
我想問一下,我用賽元的MCU驅(qū)動(dòng)的這個(gè)芯片,為什么按鍵掃描的時(shí)候按鍵沒有任何反應(yīng)呢

你的問題解決了嗎,我也要碰上SC的單片機(jī),不能讀按鍵
ID:636445 發(fā)表于 2019-11-6 08:31
謝謝了
ID:295805 發(fā)表于 2019-7-26 16:05
謝樓主分享了。學(xué)習(xí)學(xué)習(xí)
ID:479519 發(fā)表于 2019-7-3 13:12
!好東西
ID:493236 發(fā)表于 2019-5-27 14:53
很好,但是沒有黑幣了、、、
ID:486481 發(fā)表于 2019-5-17 16:55
謝謝了
ID:314601 發(fā)表于 2019-4-30 13:06
安靜的麻瓜 發(fā)表于 2019-1-4 14:50
請問,這個(gè)是pic的還是51的,我是個(gè)新手  求指教呀

51的升級版   也屬于51
ID:314601 發(fā)表于 2019-4-30 13:06
主函數(shù)部分沒有嗎     主要是按鍵掃描判斷       有點(diǎn)搞不懂
ID:374174 發(fā)表于 2019-4-25 20:22
謝了!
ID:461792 發(fā)表于 2019-1-4 14:50
請問,這個(gè)是pic的還是51的,我是個(gè)新手  求指教呀
ID:310569 發(fā)表于 2018-12-21 21:17
下來看看是否適合
ID:106045 發(fā)表于 2018-11-28 16:35
謝謝了
ID:289967 發(fā)表于 2018-10-22 15:02
我想問一下,我用賽元的MCU驅(qū)動(dòng)的這個(gè)芯片,為什么按鍵掃描的時(shí)候按鍵沒有任何反應(yīng)呢
ID:39626 發(fā)表于 2018-9-17 20:12
這個(gè)程序不錯(cuò),找了好久總算找到合適的方案了

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

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

快速回復(fù) 返回頂部 返回列表