找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教TM1628芯片讀按鍵問題,附單片機(jī)代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:472504 發(fā)表于 2023-3-29 13:23 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
按網(wǎng)上天微例程不能讀取按鍵,鍵值KEY[]一直是0xFF。請問讀鍵時(shí)單片機(jī)接DIO的口要不要設(shè)為輸入口,向1628送控制命令和傳顯示數(shù)據(jù)時(shí)再把單片機(jī)DIO驅(qū)動(dòng)口設(shè)為輸出口?
/****************讀取按鍵值并存儲(chǔ)*******************/                                   
void read_key(void)                //讀取5字節(jié)按鍵值并存入數(shù)組KEY[],從低字節(jié)、低位開始               
{                                                                              
  unsigned char i,j;                                                            
  send_command(0x42);         //發(fā)送讀按鍵命令                                    
  DIO=1;                              //釋放DIO數(shù)據(jù)總線                                                     
  for(j=0;j<5;j++)                 //連續(xù)讀取5個(gè)字節(jié)                                                
  {                                                                              
    for(i=0;i<8;i++)                                                              
    {
      CLK=0;                                                        
      KEY[j]=KEY[j]>>1;                                                            
      CLK=1;                                                                        
      if(DIO==1)                                                                    
      {                                                                             
        KEY[j]=KEY[j]|0x80;                                                         
      }                                                                             
      nop;                                                                          
    }                                                                              
    nop;                                                                          
    nop;                                                                          
  }                                                                              
  CLK=0;                                                                        
  DIO=0;                                                                        
  STB=1;                                                                        
}  


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

使用道具 舉報(bào)

沙發(fā)
ID:996773 發(fā)表于 2023-3-29 16:10 | 只看該作者
傳送顯示數(shù)據(jù)和讀鍵是兩碼事,也就是說不顯示也可以利用讀鍵,發(fā)送完讀鍵指令

后立刻要把單片機(jī)io數(shù)據(jù)口定義高電平,1628就可以數(shù)據(jù)輸出了,就可以讀鍵,這點(diǎn)很重要

很多人卡在這里
回復(fù)

使用道具 舉報(bào)

板凳
ID:472504 發(fā)表于 2023-3-29 16:28 | 只看該作者
hi等你 發(fā)表于 2023-3-29 16:10
傳送顯示數(shù)據(jù)和讀鍵是兩碼事,也就是說不顯示也可以利用讀鍵,發(fā)送完讀鍵指令

后立刻要把單片機(jī)io數(shù)據(jù)口 ...

send_command(0x42);         //發(fā)送讀按鍵命令                                    
DIO=1;                               //釋放DIO數(shù)據(jù)總線  

我發(fā)完0x42后已經(jīng)把DIO設(shè)為1了,但還是讀不到按鍵。請問讀按鍵時(shí)單片機(jī)DIO腳要設(shè)為輸入口嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:624769 發(fā)表于 2023-3-29 20:44 | 只看該作者
時(shí)序錯(cuò)了,你這樣永遠(yuǎn)讀到的 0xff
應(yīng)該這樣:
    for(i=0;i<8;i++)                                                              
    {
      CLK=0;
      KEY[j] >>= 1;  
      if(DIO)  KEY[j] |= 0x80;   
      CLK=1;                                                                        
    }                                       

回復(fù)

使用道具 舉報(bào)

5#
ID:1143321 發(fā)表于 2025-1-23 10:20 | 只看該作者
樓主我遇到跟您一樣的問題,按照天微例程配的時(shí)序,讀取按鍵值一直是0xff,請問您怎么解決的?
回復(fù)

使用道具 舉報(bào)

6#
ID:1143321 發(fā)表于 2025-1-23 10:21 | 只看該作者
樓主您好,我遇到您同樣的問題,按照天微例程配置的時(shí)序,按鍵讀取全是0xff,請問您如何解決的?
回復(fù)

使用道具 舉報(bào)

7#
ID:1109793 發(fā)表于 2025-1-23 13:08 | 只看該作者
除了地板層說的時(shí)序問題,還有讀之前要先STB = 0;
回復(fù)

使用道具 舉報(bào)

8#
ID:1109793 發(fā)表于 2025-1-23 17:59 | 只看該作者
xiaobendan001 發(fā)表于 2025-1-23 13:08
除了地板層說的時(shí)序問題,還有讀之前要先STB = 0;

手上只有1638,剛測試了一下,CLK = 1;的位置是可以放IF前邊的,能正常讀取。
只是CLK = 0;和CLK = 1;之間要有足夠長的延時(shí)。11.0592的主頻下,右移操作的延時(shí)是不夠用的。需要增加一點(diǎn)才行。
回復(fù)

使用道具 舉報(bào)

9#
ID:1078008 發(fā)表于 2025-2-9 16:26 | 只看該作者
一樣的問題,樓上說的方法都試過了,返回值依然固定為0xff。
一、顯示正常,因此推測讀指令0X42是可以正常發(fā)送的(否則顯示是否應(yīng)該不正常?)
二、STC單片機(jī),P30口,已設(shè)置為準(zhǔn)雙向口。
三、讀取前P30已經(jīng)置1。

推測因?yàn)闀r(shí)序或者信號問題,TM1628應(yīng)該沒有正常發(fā)送鍵值,沒有拉低數(shù)據(jù)線的電平,因?yàn)樽x取值固定為1,則返回0xff。目前問題未解決。
回復(fù)

使用道具 舉報(bào)

10#
ID:1078008 發(fā)表于 2025-2-10 12:05 | 只看該作者
已解決,官方代碼有問題導(dǎo)致時(shí)序不對。 send_command(0x42);這個(gè)函數(shù)里面,發(fā)送完0X42后把STB拉高了。應(yīng)該在讀回鍵值之后再拉高。
回復(fù)

使用道具 舉報(bào)

11#
ID:1109793 發(fā)表于 2025-2-10 12:43 | 只看該作者
wjccui 發(fā)表于 2025-2-9 16:26
一樣的問題,樓上說的方法都試過了,返回值依然固定為0xff。
一、顯示正常,因此推測讀指令0X42是可以正常 ...

會(huì)不會(huì)芯片有問題,或者按鍵接法不對?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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