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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

為什么這個單片機4*4按鍵總是無法識別?核心問題出在那,求幫助

[復制鏈接]
跳轉到指定樓層
樓主
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar temp;
uint i,key,yand;
uchar dispay_[7]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
uchar yand_[3]={0xfe,0xef,0xee};
void delay(uint i)
{
         uint m,n;
        for(m=i;m>0;m--)
                for(n=125;n>0;n--);
}

void keyscan()
{
  while(1)
        {P1=0xfe;
        temp=P1;

          if(temp&0xfe!=0xfe)
                {temp=P1;
                        switch(temp)
                         { case 0xee:
                                            key=4;
                                            yand=0;break;
                           case 0xde:
                                            key=5;
                                      yand=0;break;
                                 case 0xbe:
                                            key=6;
                                      yand=0;break;
                                 case 0x7e:
                                            key=7;
                                      yand=0;break;}     
         }
P1=0xfd;
        temp=P1;

          if(temp&0xfd!=0xfd)
                {temp=P1;
                        switch(temp)
                         { case 0xed:
                                            key=1;
                                            yand=1;break;
                           case 0xdd:
                                            key=2;
                                      yand=1;break;
                                 case 0xbd:
                                            key=3;
                                      yand=1;break;
                                 case 0x7d:
                                            key=4;
                                      yand=1;break;        }
         }                                    
P1=0xfb;
        temp=P1;
          if(temp&0xfb!=0xfb)
                {temp=P1;
                        switch(temp)
                         { case 0xeb:
                                            key=5;
                                            yand=1;break;
                           case 0xdb:
                                            key=6;
                                      yand=1;break;
                                 case 0xbb:
                                            key=7;
                                      yand=1;break;
                                 case 0x7b:
                                            key=1;
                                      yand=2;break;}
         }
P1=0xf7;
        temp=P1;
          if(temp&0xf7!=0xf7)
                {temp=P1;
                        switch(temp)
                         { case 0xe7:
                                            key=2;
                                            yand=2;break;
                           case 0xd7:
                                            key=3;
                                      yand=2;break;
                                 case 0xb7:
                                            key=4;
                                      yand=2;break;
                                 case 0x77:
                                            key=5;
                                      yand=2;break;        
            }
          }
         }         
}
void diapay()
{
        P2=yand_[yand];
        P0=dispay_[key-1];
}
void main()
{
         keyscan();
        diapay();
}



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

使用道具 舉報

沙發
ID:549631 發表于 2019-5-28 20:48 | 只看該作者
你這個函數又長又浪費機時 uchar keyscan() {   KEYBOARD=0xf0;//鍵盤列全置1   delay_10ms();   if(KEYBOARD!=0xf0)//有鍵按下   {     temp=KEYBOARD;//保存此時鍵值     delay_10ms();     if(KEYBOARD==temp)//再次確認鍵盤是否按下     {       uchar  i;       KEYBOARD=0x0f;//鍵盤行全置1;       delay_10ms();       keynum=temp|KEYBOARD//保存鍵盤的行值       for(i=0;i<16;i++)       {         if(keycode[i]==~keynum)         return (i);       }     }   return -1;   } }
回復

使用道具 舉報

板凳
ID:213173 發表于 2019-5-29 07:23 | 只看該作者
你把程序對比一下就知道問題在哪


  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar temp;
  5. uchar i,key,yand;
  6. uchar dispay_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
  7. uchar yand_[3]={0xfe,0xef,0xee};

  8. void delay(uint i)
  9. {
  10.         uint m,n;
  11.         for(m=i;m>0;m--)
  12.                 for(n=125;n>0;n--);
  13. }

  14. void keyscan()
  15. {
  16.         P1=0xf0;
  17.         if(P1!=0xf0)
  18.         {
  19.                 delay(10);
  20.                 if(P1!=0xf0)
  21.                 {
  22.                         temp=P1;
  23.                         temp|=0x0f;
  24.                         P1=temp;
  25.                         switch(P1)
  26.                         {
  27.                                 case 0xee:key=4;yand=0;break;
  28.                                 case 0xde:key=5;yand=0;break;
  29.                                 case 0xbe:key=6;yand=0;break;
  30.                                 case 0x7e:key=7;yand=0;break;
  31.                                 case 0xed:key=1;yand=1;break;
  32.                                 case 0xdd:key=2;yand=1;break;
  33.                                 case 0xbd:key=3;yand=1;break;
  34.                                 case 0x7d:key=4;yand=1;break;
  35.                                 case 0xeb:key=5;yand=1;break;
  36.                                 case 0xdb:key=6;yand=1;break;
  37.                                 case 0xbb:key=7;yand=1;break;
  38.                                 case 0x7b:key=1;yand=2;break;
  39.                                 case 0xe7:key=2;yand=2;break;
  40.                                 case 0xd7:key=3;yand=2;break;
  41.                                 case 0xb7:key=4;yand=2;break;
  42.                                 case 0x77:key=5;yand=2;break;
  43.                         }     
  44.                 }
  45.         }
  46. }


  47. void diapay()
  48. {
  49.         P2=yand_[yand];
  50.         P0=dispay_[key];
  51. }
  52. void main()
  53. {
  54.         while(1)
  55.         {
  56.                 keyscan();
  57.                 diapay();
  58.         }
  59. }
復制代碼



回復

使用道具 舉報

地板
ID:512883 發表于 2019-5-29 08:43 | 只看該作者
掃描的時候確實挺慢的,我再修改一下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩电影中文字幕在线观看 | 国精产品一品二品国精在线观看 | 欧美一区久久 | 精品久久久精品 | 国产精品视频网 | 国产精品v| 中文字幕一区二区在线观看 | 日韩精品一区二区三区久久 | 国产一区二区久久 | 91欧美精品成人综合在线观看 | 欧美日韩在线视频观看 | 亚洲免费视频一区 | 国产精品成人一区二区三区 | 免费一级黄色 | 国产日韩欧美一区二区在线播放 | 久久噜噜噜精品国产亚洲综合 | 久久一区 | 特黄一级| 做a视频在线观看 | 99久久精品国产一区二区三区 | 欧美成人精品一区二区三区 | 色一阁 | 欧美啪啪网站 | 91麻豆精品国产91久久久久久 | 成人免费视频网站在线看 | 亚洲欧美日韩精品久久亚洲区 | 欧美日韩国产综合在线 | 久久精品影视 | 99久久99久久精品国产片果冰 | 91麻豆精品国产91久久久久久 | 亚州av | 亚洲国产成人一区二区 | 成人久久18免费 | 黄色一级大片在线免费看产 | 午夜影院在线观看视频 | 国产精品日韩一区 | 中文字幕亚洲一区二区三区 | 国产免费一区二区三区 | 精品视频一区在线 | 精品久久久久久久久久久久 | 成人av一区|