找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

關(guān)于單片機(jī)矩陣鍵盤(pán)多位數(shù)的輸入程序問(wèn)題

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 5 黑幣 回復(fù)本帖可獲得 5 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:849635 發(fā)表于 2021-9-18 21:39 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
矩陣鍵盤(pán)多位數(shù)的輸入,有問(wèn)題,大佬們幫忙看看
    while(1)
    {
         /*************判斷是不是連續(xù)掃描*****/
    conkey=Key_Scan();
        printf("%d\r",conkey);
   if(conkey==66)     //如果是66,進(jìn)入連續(xù)掃描模式
  {
        flagsw=1;
      printf("進(jìn)去了\r");
       while(conkey!=68)
         {  
             if(conkey!=420)
             {     
             printf("2進(jìn)去了\r");
           chgkey[0]=Key_Scan();

              conkey=Key_Scan();
             }
           while(conkey!=68)
         {  
              printf("3進(jìn)去了\r");
             if(conkey!=420)
             {
                 chgkey[1]=Key_Scan();
             conkey=Key_Scan();
             }
                while(conkey!=68)
         {   printf("4進(jìn)去了\r");
             if(conkey!=420)
             {
                 chgkey[2]=Key_Scan();
              conkey=Key_Scan();
             }
                  while(conkey!=68)
         {  
             if(conkey!=420)
             chgkey[3]=Key_Scan();
              conkey=68;
                   }
                }
             }
           keysum=chgkey[0]*1000+chgkey[1]*100+chgkey[2]*10+chgkey[3]*1;
                printf("%d\r",keysum);         
              LCD_ShowString(188,120,"wrong",RED,WHITE,16,0);   
             LCD_ShowIntNum(188,140,keysum,4,GREEN,WHITE,16);   
         }
     }
            


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

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2021-9-19 01:43 | 只看該作者
請(qǐng)你說(shuō)出有什么問(wèn)題
方便我們找錯(cuò)
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2021-9-19 08:48 | 只看該作者
說(shuō)說(shuō)你思路吧,看看你的思路是否清晰。
回復(fù)

使用道具 舉報(bào)

地板
ID:332444 發(fā)表于 2021-9-19 10:22 | 只看該作者
矩陣鍵盤(pán)值只有1位數(shù)要多位數(shù)需要自己去合成
回復(fù)

使用道具 舉報(bào)

5#
ID:332444 發(fā)表于 2021-9-19 10:24 | 只看該作者
那么多循環(huán)不怕邏輯混亂?
回復(fù)

使用道具 舉報(bào)

6#
ID:332444 發(fā)表于 2021-9-19 10:25 | 只看該作者
keysum=chgkey[0]*1000+chgkey[1]*100+chgkey[2]*10+chgkey[3]*1;有必要*1?填鴨式學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

7#
ID:849635 發(fā)表于 2021-9-19 11:15 | 只看該作者
yzwzfyz 發(fā)表于 2021-9-19 08:48
說(shuō)說(shuō)你思路吧,看看你的思路是否清晰。

如果,首先如果掃描的值是66,進(jìn)入連續(xù)鍵盤(pán),如果掃描的鍵不是68,如果不是亂碼(就是420),就寫(xiě)入數(shù)組chgkey,固定數(shù)組為四位,最后,將四位乘以加權(quán),得到的數(shù)即是我定義的一個(gè)全局變量
回復(fù)

使用道具 舉報(bào)

8#
ID:849635 發(fā)表于 2021-9-19 11:16 | 只看該作者
xianfajushi 發(fā)表于 2021-9-19 10:25
keysum=chgkey[0]*1000+chgkey[1]*100+chgkey[2]*10+chgkey[3]*1;有必要*1?填鴨式學(xué)習(xí)!

只是為了,對(duì)稱好看
回復(fù)

使用道具 舉報(bào)

9#
ID:123289 發(fā)表于 2021-9-19 17:11 | 只看該作者
本帖最后由 yzwzfyz 于 2021-9-21 22:14 編輯

思路不清,假設(shè)是計(jì)算器鍵盤(pán)輸入,輸入的長(zhǎng)短不定……
教你一個(gè)方法:
1、建立一個(gè)【輸入緩沖區(qū)】,長(zhǎng)度需足夠用,如256個(gè)字節(jié)。當(dāng)然用一個(gè)256個(gè)字節(jié)的數(shù)組替代也可。
2、每個(gè)鍵的鍵值不要超過(guò)255,這樣最多可以適用256個(gè)不同的鍵。
3、建立兩個(gè)指針:PC_INPUT,PC_USED。單字節(jié)即可。
4、串口中斷(鍵入)時(shí),將鍵值依PC_INPUT(0-255)指向【輸入緩沖區(qū)】的位置,并存入,每收存一個(gè)鍵值就將PC_INPUT+1,PC_INPUT循環(huán)使用(0-255),無(wú)需清0。僅在開(kāi)機(jī)時(shí)清0。數(shù)據(jù)分析不要在中斷中做,以免運(yùn)行時(shí)間太長(zhǎng)。即中斷只存數(shù)據(jù)。
5、在主程序中,分析鍵入的數(shù)據(jù)。
取鍵值的方法:當(dāng)PC_INPUT <> PC_USED 時(shí),就表示有新的鍵入了。
僅在開(kāi)機(jī)時(shí),讓PC_INPUT = PC_USED =0。
數(shù)據(jù)取自【輸入緩沖區(qū)】中,PC_USED所指的位置,每取一個(gè)鍵值就將PC_USED+1,PC_USED循環(huán)使用(0-255),無(wú)需清0。
當(dāng)PC_INPUT = PC_USED 時(shí),就表示輸入的鍵值取完了。
6、何時(shí)開(kāi)始?由你自己定,可以每輸入一個(gè),取一個(gè)。也可以鍵入某個(gè)值(如“=”號(hào)鍵值)時(shí),再開(kāi)始取,反正鍵輸入全部在緩沖區(qū)中,跑不掉!有PC_INPUT和PC_USED定位,也不會(huì)混亂。
7、分析處理數(shù)據(jù),這時(shí)你可以自由發(fā)揮了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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