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

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

QQ登錄

只需一步,快速開始

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

求單片機(jī)大神幫我看看這個(gè)需要改哪里?非常感謝(單片機(jī)鍵盤)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:971185 發(fā)表于 2021-10-26 15:24 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
3黑幣
  1. #include<reg51.h>
  2. void delay50ms()
  3. {
  4. unsigned t;
  5.         for(t=0;t<0x01;t++)
  6.         {
  7.                 TMOD=0x10;
  8.                 TH1=0x33;
  9.                 TL1=0xb0;
  10.                 TR1=1;
  11.                 while(!TF1);
  12.                 TF1=0;
  13.         }
  14. }
  15. unsigned char n[17]={0xcf,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x81};
  16. unsigned char k;
  17. unsigned char scan_key(void)
  18. {
  19.         unsigned char temp;
  20.         P1=0x0f;
  21.         while(temp!=0x0f)
  22.         {
  23.                 delay50ms();
  24.         }
  25.         while(temp!=0x0f)
  26.         {
  27.                 P1=0xfe<<1;
  28.                 switch(temp)
  29.                 {
  30.                         case 0xee:k=1;break;
  31.                         case 0xde:k=2;break;
  32.                         case 0xbe:k=3;break;
  33.                         case 0x8e:k=4;break;
  34.                         case 0xed:k=5;break;
  35.                         case 0xdd:k=6;break;
  36.                         case 0xbd:k=7;break;
  37.                         case 0x8d:k=8;break;
  38.                         case 0xeb:k=9;break;
  39.                         case 0xdb:k=10;break;
  40.                         case 0xbb:k=11;break;
  41.                         case 0x8b:k=12;break;
  42.                         case 0xe8:k=13;break;
  43.                         case 0xd8:k=14;break;
  44.                         case 0xb8:k=15;break;
  45.                         case 0x88:k=16;break;
  46.                         default:break;
  47.                                 }
  48.                         }
  49.                 P2=n[k];
  50.                 P3=~n[k];
  51.                 return 0;
  52. }
復(fù)制代碼


屏幕截圖 2021-10-26 152352.png (75.49 KB, 下載次數(shù): 61)

屏幕截圖 2021-10-26 152352.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:916650 發(fā)表于 2021-10-27 08:34 | 只看該作者
個(gè)人覺得你的代碼邏輯有很大的問題,沒有理解按鍵檢測(cè)的原理。

首先,你定義了一個(gè)temp,然后P1=0x0f,怎么突然之間就跳到while(temp!=0x0f)了?中間不應(yīng)該有個(gè)temp=P1的過程?

其次,檢測(cè)到temp!=0x0f后,為什么讓P1=0xfe<<1?這也不會(huì)令P1最終得到真實(shí)的按鍵狀態(tài)啊。最終只會(huì)導(dǎo)致P1==0x00。

最后,switch(temp)這,temp并沒有得到真實(shí)的按鍵狀態(tài)(P1口)對(duì)應(yīng)的電平狀態(tài),自然會(huì)導(dǎo)致switch(temp)下面的語句沒起任何作用。

建議找本教材,比如郭天祥的,看看按鍵檢測(cè)的原理以及例程。或者看看視頻的講解,理解原理之后再寫代碼。
回復(fù)

使用道具 舉報(bào)

板凳
ID:916650 發(fā)表于 2021-10-27 09:12 | 只看該作者




  1.                 #include<reg52.h>
  2.                 #include<intrins.h>
  3.                 #define uchar unsigned char
  4.                 #define uint unsigned int
  5.                                
  6.                 sbit DX=P2^6;//(P0為數(shù)碼管輸出端口)
  7.                 sbit WX=P2^7;
  8.                 sbit S2=P3^4;
  9.                
  10.                                
  11.                 uchar code Table_D[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  12.                 uchar code Table_W[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  13.                        
  14.                 void Delay_Us(uchar x);
  15.                 void Delay_Ms(uchar x);
  16.                 void Display(uint x);
  17.                
  18.                 void Key_Scan();
  19.                
  20.                 uchar Display_Num;
  21.                                
  22.                 void main()
  23.                         {
  24.                                 while(1)
  25.                                 {
  26.                                         Key_Scan();
  27.                                         Display(Display_Num);
  28.                                 }
  29.                         }
  30.                                
  31.                 void Delay_Us(uchar x)//12MHz_Delay:6x+10us;11.0592MHz=12MHz_Delay*1.085.
  32.                                 {
  33.                                          while(x--);
  34.                                 }
  35.                
  36.                 void Delay_Ms(uchar x)//12MHz_Delay:x+0.5~1Ms;11.0592MHz=12MHz_Delay*1.085.
  37.                                 {
  38.                                         while(x--)
  39.                                         {
  40.                                                 Delay_Us(75);
  41.                                                 Delay_Us(75);
  42.                                          }
  43.                             }
  44.                                
  45.                                 void Display(uint x)
  46.                                  {
  47.                                         P0=0xff;
  48.                                         WX=1;
  49.                                         WX=0;
  50.                                         P0=Table_D[x/100];
  51.                                         DX=1;
  52.                                         DX=0;
  53.                                         P0=Table_W[0];
  54.                                         WX=1;
  55.                                         WX=0;               
  56.                                         Delay_Ms(5);
  57.                                        
  58.                                         P0=0xff;
  59.                                         WX=1;
  60.                                         WX=0;
  61.                                         P0=Table_D[x%100/10];
  62.                                         DX=1;
  63.                                         DX=0;
  64.                                         P0=Table_W[1];
  65.                                         WX=1;
  66.                                         WX=0;       
  67.                                         Delay_Ms(5);
  68.                                        
  69.                                         P0=0xff;
  70.                                         WX=1;
  71.                                         WX=0;
  72.                                         P0=Table_D[x%100%10];
  73.                                         DX=1;
  74.                                         DX=0;
  75.                                         P0=Table_W[2];
  76.                                         WX=1;
  77.                                         WX=0;
  78.                                         Delay_Ms(5);
  79.                                  }
  80.                                
  81.                                 void Key_Scan()
  82.                                 {
  83.                                         uchar temp,Key;
  84.                                        
  85.                                         P3=0xf0;
  86.                                         temp=P3;
  87.                                         temp=temp&0xf0;
  88.                                         if(temp!=0xf0)
  89.                                         {
  90.                                                 Delay_Ms(10);
  91.                                                 if(temp!=0xf0)
  92.                                                 {
  93.                                                         temp=P3;
  94.                                                         temp=temp|0x0f;
  95.                                                         P3=temp;
  96.                                                         Key=P3;
  97.                                                        
  98.                                                         switch(Key)
  99.                                                         {
  100.                                                                 case 0xee:Display_Num=1*1;break;
  101.                                                                 case 0xde:Display_Num=2*2;break;
  102.                                                                 case 0xbe:Display_Num=3*3;break;
  103.                                                                 case 0x7e:Display_Num=4*4;break;
  104.                                                                
  105.                                                                 case 0xed:Display_Num=5*5;break;
  106.                                                                 case 0xdd:Display_Num=6*6;break;
  107.                                                                 case 0xbd:Display_Num=7*7;break;
  108.                                                                 case 0x7d:Display_Num=8*8;break;
  109.                                                                
  110.                                                                 case 0xeb:Display_Num=9*9;break;
  111.                                                                 case 0xdb:Display_Num=10*10;break;
  112.                                                                 case 0xbb:Display_Num=11*11;break;
  113.                                                                 case 0x7b:Display_Num=12*12;break;
  114.                                                                
  115.                                                                 case 0xe7:Display_Num=13*13;break;
  116.                                                                 case 0xd7:Display_Num=14*14;break;
  117.                                                                 case 0xb7:Display_Num=15*15;break;
  118.                                                                 case 0x77:Display_Num=16*16;break;
  119.                                                         }
  120.                                                 }
  121.                                         }
  122.                                 }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2021-10-27 11:32 | 只看該作者
  1. #include<reg51.h>

  2. unsigned char n[]={
  3.         0xc0,0xf9,0xa4,0xb0,
  4.         0x99,0x92,0x82,0xf8,
  5.         0x80,0x90,0x88,0x83,
  6.         0xc6,0xa1,0x86,0x81};

  7. unsigned char k;

  8. void Timer1Init()   //1毫秒@12.000MHz
  9. {
  10.         TMOD= 0x10;                //設(shè)置定時(shí)器模式
  11.         TL1 = 0x18;                //設(shè)置定時(shí)初始值
  12.         TH1 = 0xFC;                //設(shè)置定時(shí)初始值
  13.         TF1 = 0;                //清除TF0標(biāo)志
  14.         TR1 = 1;                //定時(shí)器0開始計(jì)時(shí)
  15. }

  16. void scan_key(void)
  17. {
  18.         static bit sign;
  19.         static unsigned char count;
  20.         unsigned char temp;
  21.         P1=0x0f;
  22.         if(P1!=0x0f)
  23.         {
  24.                 if(++count>=10 && sign==0)
  25.                 {
  26.                         sign=1;
  27.                         temp=P1;
  28.                         temp|=0xf0;
  29.                         P1=temp;
  30.                         switch(P1)
  31.                         {
  32.                                 case 0xee:k=1;break;
  33.                                 case 0xde:k=2;break;
  34.                                 case 0xbe:k=3;break;
  35.                                 case 0x7e:k=4;break;
  36.                                 case 0xed:k=5;break;
  37.                                 case 0xdd:k=6;break;
  38.                                 case 0xbd:k=7;break;
  39.                                 case 0x7d:k=8;break;
  40.                                 case 0xeb:k=9;break;
  41.                                 case 0xdb:k=10;break;
  42.                                 case 0xbb:k=11;break;
  43.                                 case 0x7b:k=12;break;
  44.                                 case 0xe7:k=13;break;
  45.                                 case 0xd7:k=14;break;
  46.                                 case 0xb7:k=15;break;
  47.                                 case 0x77:k=16;break;
  48.                                 default:break;
  49.                         }
  50.                 }
  51.         }
  52.         else
  53.         {
  54.                 sign=0;
  55.                 count=0;
  56.         }
  57. }
  58. void main()                                                //主函數(shù)
  59. {
  60.         Timer1Init();
  61.         while(1)
  62.         {
  63.                 if(TF1)
  64.                 {
  65.                         TF1=0;
  66.                         TL1 = 0x18;
  67.                         TH1 = 0xFC;
  68.                         scan_key();
  69.                 }
  70.                 P2=n[k/10];
  71.                 P3=~n[k%10];
  72.         }
  73. }
復(fù)制代碼





回復(fù)

使用道具 舉報(bào)

5#
ID:752974 發(fā)表于 2021-10-27 16:56 | 只看該作者
這種矩陣鍵盤用反轉(zhuǎn)法比較簡(jiǎn)單,給你一個(gè)參考代碼。
{  
  P1 = 0x0f;
//行置低,列置高(讀列)
   if(P1!=0x0f)
    {
     // P1 = 0x0f;
      delaym(40);  //延時(shí)去抖。約60MS,可根據(jù)實(shí)際情況修改
      if(P1!=0x0f)
     {
            switch(P1)//掃描列
              {
                     case 0x07:i=3;break;
                     case 0x0b:i=2;break;
                     case 0x0d:i=1;break;
                     case 0x0e:i=0;break;
                     default:break;
             }
         //反轉(zhuǎn)行列電平,讀行
       P1 = 0xf0;
            switch(P1)
            {
                   case 0x70:j=3;break;
                   case 0xb0:j=2;break;
                   case 0xd0:j=1;break;
                   case 0xe0:j=0;break;
                   default:break;
            }
   while(P1!=0xf0);   //等待鍵釋放
  return key_word[i][j];//返回鍵值
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线小视频 | 91国内精品久久 | 亚洲乱码一区二区 | 亚洲视频 欧美视频 | 一级看片免费视频囗交动图 | 午夜影院在线 | 成人高清在线 | 不卡的av在线 | 日韩国产免费 | 色网站在线 | 人人人干 | 国产片一区二区三区 | 羞羞视频网站在线观看 | 久久国产精品免费视频 | 综合二区 | 黄色毛片免费看 | 97国产一区二区 | 日本精品视频 | av免费网站在线观看 | 在线免费观看黄网 | 久久久99国产精品免费 | 国产欧美日韩精品一区 | 国产综合精品一区二区三区 | 亚洲九九| 精品一区二区三区免费视频 | 国产精品有限公司 | 亚洲一区二区视频 | 成人av电影在线 | 久久99精品久久 | 精品久久久久久久 | 成人1区2区| 精品国产区 | 午夜在线视频 | 日韩中文字幕在线观看 | 中文视频在线 | 91精品久久久久久久久中文字幕 | 99精品网 | 国产精品九九九 | 亚洲一区二区三区久久 | 国产精品日韩一区二区 | 日韩视频精品在线 |