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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助如何用矩陣鍵盤按出來任意兩位數

  [復制鏈接]
跳轉到指定樓層
樓主
您好,我想問個問題


51單片機如何用矩陣鍵盤按出來一個兩位數,并送之LCD顯示


我在做一個項目,溫度繼電器,想設置一個2位數的溫度閾值


目前我能做到按一個健,能搞成10   20  30 這樣的,但無法搞成想23   32這樣的


想問下能指點下嗎


我有想法,但代碼敲不出來  尷尬


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

使用道具 舉報

沙發
ID:213173 發表于 2019-3-9 20:37 | 只看該作者
用矩陣鍵盤按一次鍵出來特定兩位數或多位數都沒有問題,按出來任意(隨機)兩位數也不難。但這有什么實際意義呢?
回復

使用道具 舉報

板凳
ID:405033 發表于 2019-3-9 20:51 | 只看該作者
沒有貼代碼出來嗎,而且按出23等這些數字不就是在顯示那里改一下嗎
回復

使用道具 舉報

地板
ID:487478 發表于 2019-3-9 21:15 | 只看該作者
將按鍵定義成加減就行了,基數自己定,如從10加,從10減之類
回復

使用道具 舉報

5#
ID:469417 發表于 2019-3-9 22:11 | 只看該作者
這個個位與10位要進行拆分才能正常顯示,去看一下別人的代碼

評分

參與人數 3黑幣 +38 收起 理由
areyouok + 16 很給力!
春風十里吹 + 12 回帖助人的獎勵!
zhengchong60 + 10 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:466164 發表于 2019-3-9 22:46 | 只看該作者
定一個數組:
uchar set[2];
set[0]=按鍵值
set[1]=按鍵值
把數組發到數碼管。
回復

使用道具 舉報

7#
ID:137676 發表于 2019-3-9 23:18 | 只看該作者
這個好辦!一個全局變量,一個全局數組。變量記錄按鍵的次數,數組記錄按鍵值。很容易的。
回復

使用道具 舉報

8#
ID:404797 發表于 2019-3-9 23:22 | 只看該作者
     不知你的要求如何,我設計了一個利用4X4鍵盤矩陣產生2位數的方案,不知對你有用嗎,供參考。以下是原理圖:

以下是配套程序:
#include<reg51.h>
sbit kx0=P2^0;
sbit kx1=P2^1;
sbit kx2=P2^2;
sbit kx3=P2^3;
sbit ky0=P2^4;
sbit ky1=P2^5;
sbit ky2=P2^6;
sbit ky3=P2^7;
//====================================================
int KeyDown()
{char v,x,y;
x=4;y=4;
P2=0x0f;v=P2;
if(v!=0x0f){if(kx0==0)x=0;if(kx1==0)x=1;if(kx2==0)x=2;if(kx3==0)x=3;
             P2=0xf0;if(ky0==0)y=0;if(ky1==0)y=1;if(ky2==0)y=2;if(ky3==0)y=3;
             }
return x*4+y;
}
//###################################################
void main()
{char w,num,key;
  w=0;P0=0;
  while(1)
  {key=KeyDown();
   if(key<10)
   {key=KeyDown();while(key==KeyDown());
    if(w==0){num=key;w=1;}
else {num=num*10+key;w=0;}
    P0=(num/10)*16+num%10;
    }
   };
}

回復

使用道具 舉報

9#
ID:137676 發表于 2019-3-10 00:28 | 只看該作者
void key_delayms(unsigned char xms)
{
        unsigned char i,j;
                for(i=xms;i>0;i--)
                        for(j=110;j>0;j--);

        
}
void deep(unsigned char b_beep)
{
        unsigned char i;
        for(i=0;i<20;i++)
        {
                BEEP=0;
                key_delayms(4);
                BEEP=1;
                key_delayms(b_beep+4);
        }
}
unsigned char  keyscan()
{
        unsigned char  temp,key;
        key=0xff;
        key_port=0xfe;        //μúò»DD¼üÅì
        temp=key_port&0xf0;
        if(temp!=0xf0)
        {
                key_delayms(10);    //Ïû3y°′¼ü¶¶¶ˉ
                temp=key_port;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=key_port;
                        switch(temp)
                        {
                                case 0xee:        key='D';        break;
                                case 0xde:        key='C';        break;
                                case 0xbe:        key='B';        break;
                                case 0x7e:        key='A';        break;
                        }
                        while(temp!=0xf0)  //ìõ¼tÂú×ãê±êÇ1£»μè′y°′¼üêí·Å£»
                        {
                                temp=key_port;         //Õaá½¾äêÇÔö¼ó3ìDòμÄÎ趨DÔ
                                temp=temp&0xf0;
                        }
                }                                
        }
        key_port=0xfd;         //μú¶tDD¼üÅì
        temp=key_port&0xf0;
        if(temp!=0xf0)
        {
                key_delayms(10);    //Ïû3y°′¼ü¶¶¶ˉ
                temp=key_port;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=key_port;
                        switch(temp)
                        {
                                case 0xed: key=        '#';        break;
                                case 0xdd: key=        '9';        break;
                                case 0xbd: key=        '6';        break;
                                case 0x7d: key=        '3';        break;
                        }
                        while(temp!=0xf0)  //ìõ¼tÂú×ãê±êÇ1£»μè′y°′¼üêí·Å£»
                        {
                                temp=key_port;         //Õaá½¾äêÇÔö¼ó3ìDòμÄÎ趨DÔ
                                temp=temp&0xf0;
                        }
                }                                
        }
        key_port=0xfb;                              //μúèyDD¼üÅì   
        temp=key_port&0xf0;
        if(temp!=0xf0)
        {
                key_delayms(10);    //Ïû3y°′¼ü¶¶¶ˉ
                temp=key_port;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=key_port;
                        switch(temp)
                        {
                                case 0xeb:        key='0';        break;
                                case 0xdb:        key='8';        break;
                                case 0xbb:        key='5';break;
                                case 0x7b:        key='2';break;
                        }
                        while(temp!=0xf0)  //ìõ¼tÂú×ãê±êÇ1£»μè′y°′¼üêí·Å£»
                        {
                                temp=key_port;         //Õaá½¾äêÇÔö¼ó3ìDòμÄÎ趨DÔ
                                temp=temp&0xf0;
                        }
                }
        }
        key_port=0xf7;            //μúËÄDD¼üÅì
        temp=key_port&0xf0;
        if(temp!=0xf0)
        {
                key_delayms(10);    //Ïû3y°′¼ü¶¶¶ˉ
                temp=key_port;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=key_port;
                        switch(temp)
                        {
                                case 0xe7:        key='*';break;
                                case 0xd7:        key='7';break;
                                case 0xb7:        key='4';break;
                                case 0x77:        key='1';break;
                        }
                        while(temp!=0xf0)  //ìõ¼tÂú×ãê±êÇ1£»μè′y°′¼üêí·Å£»
                        {
                                temp=key_port;         //Õaá½¾äêÇÔö¼ó3ìDòμÄÎ趨DÔ
                                temp=temp&0xf0;
                        }
                }                                
        }
        key_port=0xff;
    if(key!=0xff)
    deep(10);
        return key;
}
回復

使用道具 舉報

10#
ID:137676 發表于 2019-3-10 00:46 | 只看該作者
void s_temp()
{
        key_dat=keyscan();
        if(key_dat!=0xff)
        {
                if((key_dat>='0')&&(key_dat<='9'))
                {
                        temp1[add]=key_dat-0x30;
                        switch (add)
                        {
                                case  0 :key_Data=temp1[0];
                                        break;
                                case  1 :key_Data=(temp1[0]*10)+temp1[1];
                                        break;
                        }
                        add++;
                       key_dat=0xff;
          }
          if(key_dat=='#')//表示確認
       {
             XXX=temp1[0]+temp1[1];   //xxx代表你的設定值
       }
}

評分

參與人數 1黑幣 +7 收起 理由
太陽之子 + 7 謝謝

查看全部評分

回復

使用道具 舉報

11#
ID:479806 發表于 2019-3-10 08:20 | 只看該作者
使用:十位=ge/10,個位=ge%10
或者直接定義sprintf的空數組將你的結果按你想要的位數和格式打印出來
回復

使用道具 舉報

12#
ID:104472 發表于 2019-3-10 09:17 | 只看該作者
其實用矩陣的四個鍵就可以了,一個加,一個減,一個左移,一個右移,這個還可以根據實際進行增減。
回復

使用道具 舉報

13#
ID:310519 發表于 2019-3-10 10:05 | 只看該作者
比如你想輸入溫度值為120:

定義2個變量,一個用來處理輸入input,一個用來存儲輸入的值temperature。

按下鍵,得到鍵值keyvalues,

if (input ==0)
{
    input =keyvalues;
}else{

      input =input *10 +keyvalues;
}

按下確定后,


temperature = input;

input =0;

評分

參與人數 1黑幣 +3 收起 理由
太陽之子 + 3 謝謝

查看全部評分

回復

使用道具 舉報

14#
ID:404797 發表于 2019-3-10 11:15 | 只看該作者
      再次理解你的需求,發現你是要從鍵盤矩陣輸入一個任意2位整數,并輸出到LCD顯示器上,為此本人將昨天的程序做了修改,做成一個從矩陣鍵盤獲取任意2位整數的函數(其實可以簡單獲得任意整數),獲取一個任意2位整數并在LCD上顯示。以供參考。
下面是修改后的程序:
#include<reg51.h>
sbit kx0=P2^0;
sbit kx1=P2^1;
sbit kx2=P2^2;
sbit kx3=P2^3;
sbit ky0=P2^4;
sbit ky1=P2^5;
sbit ky2=P2^6;
sbit ky3=P2^7;

sbit rs=P3^5;
sbit rw=P3^6;
sbit E=P3^7;
//==============================================================================
void delay(int ii){int i;for(i=0;i<ii;i++);}
void writeCmd(unsigned char c){E=0;rw=0;rs=0;delay(50);delay(50);P1=c;delay(50);E=1;delay(50);E=0; }
void writeDat(unsigned char c){E=0;rw=0;rs=1;delay(50);delay(50);P1=c;delay(50);E=1;delay(50);E=0;}
void Prtstr(char *cp){char i=0;while(cp!=0){writeDat(cp);i++;}}
//------------------------------------------------------------------------------
int KeyDown()
{char v,x,y;
x=4;y=4;
P2=0x0f;v=P2;
if(v!=0x0f){if(kx0==0)x=0;if(kx1==0)x=1;if(kx2==0)x=2;if(kx3==0)x=3;
             P2=0xf0;if(ky0==0)y=0;if(ky1==0)y=1;if(ky2==0)y=2;if(ky3==0)y=3;
             }
return x*4+y;
}
//---------------------------------------------------------------
int GetNum()
{char w,num,key;
  w=0;
  while(1)
  {key=KeyDown();
   if(key<10)
   {key=KeyDown();while(key==KeyDown());
    if(w==0){num=key;w=1;}
else {num=num*10+key;w=0;P0=(num/10)*16+num%10;return num;}
    P0=(num/10)*16+num%10;

    }
   };
}
//################################################################
void main()
{int n;
writeCmd(0x38);writeCmd(0x0f);writeDat('a');
while(1)
{writeCmd(0x80);
  Prtstr("Please Input Int:");
  n=GetNum();writeCmd(0x80+0x40);Prtstr("Your Input=");
  writeDat(n/10+0x30);writeDat(n%10+0x30);
  }
}

程序運行載圖如下:

評分

參與人數 1黑幣 +8 收起 理由
太陽之子 + 8 很感謝

查看全部評分

回復

使用道具 舉報

15#
ID:450993 發表于 2019-3-10 22:47 來自手機 | 只看該作者
瘋子本人 發表于 2019-3-9 20:51
沒有貼代碼出來嗎,而且按出23等這些數字不就是在顯示那里改一下嗎

我想設置個溫度閥值,能刷新的那種
回復

使用道具 舉報

16#
ID:450993 發表于 2019-3-10 22:48 來自手機 | 只看該作者
謝謝,太謝謝了各位大哥哥了,謝謝
回復

使用道具 舉報

17#
ID:450993 發表于 2019-3-10 22:52 | 只看該作者
twp90 發表于 2019-3-9 21:15
將按鍵定義成加減就行了,基數自己定,如從10加,從10減之類

如果是10的基數的話,這個簡單,我會
回復

使用道具 舉報

18#
ID:450993 發表于 2019-3-14 19:12 | 只看該作者
已解決
回復

使用道具 舉報

19#
ID:498702 發表于 2019-3-26 20:50 | 只看該作者

樓主方便將你的程序私發一下看看嗎,我最近學習也遇到了這個問題,好長時間了都沒有解決。方便的話,加一下qq:769868782
回復

使用道具 舉報

20#
ID:492413 發表于 2019-12-12 20:25 來自手機 | 只看該作者
怎么通過矩陣鍵盤輸入一個數據然后這個數據傳出去呢 而且能反復輸入  求解答
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美999| 在线欧美一区二区 | 国产精品视频网 | 国产欧美精品区一区二区三区 | 91久久国产综合久久 | 日韩在线视频一区 | 国产午夜在线 | 久久五月婷 | 免费高清av | 狠狠爱视频| caoporn地址| a级在线| 久久噜噜噜精品国产亚洲综合 | 欧美一级二级视频 | 国产中文视频 | v亚洲 | 中文字幕加勒比 | 午夜看看| 黄色免费三级 | 一区二区三区日韩 | 国产免费一区二区 | 911影院 | 一二区成人影院电影网 | 国产永久免费 | 九九久久久 | 成人欧美一区二区三区在线播放 | 欧美日韩国产一区二区三区 | 欧美精品一区二区在线观看 | 国产成人精品一区二区三区在线观看 | 天天操天天干天天爽 | 欧美日韩亚洲国产综合 | 青青激情网 | 男人的天堂在线视频 | 亚洲精品久久久久久久久久久 | 一区二区伦理电影 | 亚洲精美视频 | 亚洲一区二区三区在线 | 日韩精品一区二区三区视频播放 | 亚洲高清成人在线 | 91在线视频观看 | 午夜看片网站 |