欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7041|回復: 19
收起左側

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

  [復制鏈接]
ID:450993 發表于 2019-3-9 17:49 | 顯示全部樓層 |閱讀模式
您好,我想問個問題


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


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


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


想問下能指點下嗎


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


回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:487478 發表于 2019-3-9 21:15 | 顯示全部樓層
將按鍵定義成加減就行了,基數自己定,如從10加,從10減之類
回復

使用道具 舉報

ID:469417 發表于 2019-3-9 22:11 | 顯示全部樓層
這個個位與10位要進行拆分才能正常顯示,去看一下別人的代碼

評分

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

查看全部評分

回復

使用道具 舉報

ID:466164 發表于 2019-3-9 22:46 | 顯示全部樓層
定一個數組:
uchar set[2];
set[0]=按鍵值
set[1]=按鍵值
把數組發到數碼管。
回復

使用道具 舉報

7#
無效樓層,該帖已經被刪除
ID:137676 發表于 2019-3-9 23:18 | 顯示全部樓層
這個好辦!一個全局變量,一個全局數組。變量記錄按鍵的次數,數組記錄按鍵值。很容易的。
回復

使用道具 舉報

ID:404797 發表于 2019-3-9 23:22 | 顯示全部樓層
     不知你的要求如何,我設計了一個利用4X4鍵盤矩陣產生2位數的方案,不知對你有用嗎,供參考。以下是原理圖:
ask6a.JPG
以下是配套程序:
#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;
    }
   };
}

回復

使用道具 舉報

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;
}
回復

使用道具 舉報

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 謝謝

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

ID:104472 發表于 2019-3-10 09:17 | 顯示全部樓層
其實用矩陣的四個鍵就可以了,一個加,一個減,一個左移,一個右移,這個還可以根據實際進行增減。
回復

使用道具 舉報

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 謝謝

查看全部評分

回復

使用道具 舉報

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);
  }
}

程序運行載圖如下:
ask6b.JPG

評分

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

查看全部評分

回復

使用道具 舉報

ID:450993 發表于 2019-3-10 22:47 來自觸屏版 | 顯示全部樓層
瘋子本人 發表于 2019-3-9 20:51
沒有貼代碼出來嗎,而且按出23等這些數字不就是在顯示那里改一下嗎

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

使用道具 舉報

ID:450993 發表于 2019-3-10 22:48 來自觸屏版 | 顯示全部樓層
謝謝,太謝謝了各位大哥哥了,謝謝
回復

使用道具 舉報

ID:450993 發表于 2019-3-10 22:52 | 顯示全部樓層
twp90 發表于 2019-3-9 21:15
將按鍵定義成加減就行了,基數自己定,如從10加,從10減之類

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

使用道具 舉報

ID:450993 發表于 2019-3-14 19:12 | 顯示全部樓層
已解決
回復

使用道具 舉報

ID:498702 發表于 2019-3-26 20:50 | 顯示全部樓層

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

使用道具 舉報

ID:492413 發表于 2019-12-12 20:25 來自觸屏版 | 顯示全部樓層
怎么通過矩陣鍵盤輸入一個數據然后這個數據傳出去呢 而且能反復輸入  求解答
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表