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

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

QQ登錄

只需一步,快速開始

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

單片機(jī)按鍵點(diǎn)亮LED燈條的程序問題,為什么放直接在while(1)中就不行呢?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
按鍵點(diǎn)亮LED燈條,鍵號(hào)越大點(diǎn)亮的越多。在主函數(shù)中 , P2=LED2;P3=LED3;  放在if(key!=-1)中才可以保持按鍵值,否則按鍵彈上去后就恢復(fù)到原始狀態(tài),為什么放直接在while(1)中就不行呢



代碼如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. unsigned char table[]={0x11,0x12,0x14,0x18,0x21,
  4.          0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};
  5. void delay(int x)
  6. {
  7.         int i,j;
  8.         for(i=x;i>0;i--)
  9.                 for(j=110;j>0;j--);
  10. }
  11. unsigned char keys_scan()     //鍵盤掃描
  12. {
  13.         unsigned char i,j,hcode,zcode;
  14.         P1=0xf0;     //行拉低,列拉高
  15.         if((P1&0xf0)!=0xf0)   // 判斷是否有鍵按下
  16.         {
  17.                 delay(20);     //延時(shí)抖動(dòng)
  18.                 if((P1&0xf0)!=0xf0)
  19.                 {
  20.                         hcode=0xfe;     //初始值
  21.                         for(j=0;j<4;j++)
  22.                         {
  23.                                 P1=hcode;
  24.                                 if((P1&0xf0)!=0xf0)
  25.                                 {
  26.                                         zcode=~P1;     //取反判斷行坐標(biāo)
  27.                                         for(i=0;i<16;i++)
  28.                                         {
  29.                                                 if(zcode==table[i])
  30.                                                         return i;
  31.                                         }
  32.                                 }        
  33.                                 else
  34.                                         hcode=_crol_(hcode,1);   
  35.                         }
  36.                 }
  37.         }
  38.         return -1;
  39. }
  40. void main(void)
  41. {
  42.         unsigned char key,i,LED2,LED3;
  43.         key=-1;
  44.         P2=0x00;
  45.         P3=0X00;
  46.         while(1)
  47.         {
  48.                 key=keys_scan();        
  49.                 if(key!=-1)
  50.                 {
  51.                         LED2=0x00;
  52.                         LED3=0X00;
  53.                         for(i=0;i<=key;i++)
  54.                         {
  55.                                 if(i<8)
  56.                                 {                                
  57.                                         LED2<<=1;
  58.                                         LED2++;
  59.                                 }
  60.                                 else
  61.                                 {
  62.                                         LED3<<=1;
  63.                                         LED3++;
  64.                                 }
  65.                         }
  66.                         P2=LED2;
  67.                         P3=LED3;
  68.                 }
  69.                
  70.         }
  71.         
  72. }
復(fù)制代碼

全部資料51hei下載地址:
EXP16.rar (57.18 KB, 下載次數(shù): 6)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:332444 發(fā)表于 2020-3-24 08:37 | 只看該作者
單獨(dú)把 P2=LED2;                         P3=LED3;放在  if(key!=-1)外應(yīng)該可以,出蝦米問題?
回復(fù)

使用道具 舉報(bào)

板凳
ID:697917 發(fā)表于 2020-3-24 08:47 | 只看該作者
你的邏輯編寫有問題,key_scan()中仔細(xì)看看
                        for(j=0;j<4;j++)
                        {
                               P1=hcode;
                                if((P1&0xf0)!=0xf0)
                                {
                                        zcode=~P1;     //取反判斷行坐標(biāo)
                                        for(i=0;i<16;i++)
                                        {
                                                if(zcode==table)
                                                        return i;
                                        }
                                }        
                                else
                                        hcode=_crol_(hcode,1);   
                        }

循環(huán)下 P1=hcode;每次都重新賦值,那4次掃描有什么不同。
回復(fù)

使用道具 舉報(bào)

地板
ID:704397 發(fā)表于 2020-3-24 10:34 | 只看該作者
本帖最后由 DEVOTION 于 2020-3-24 10:38 編輯
黎明初至 發(fā)表于 2020-3-24 08:47
你的邏輯編寫有問題,key_scan()中仔細(xì)看看
                        for(j=0;j

hcode的初值是0xfe,設(shè)在for循環(huán)外面的,如果 按下的行不是P1.0,就會(huì)執(zhí)行else,hcode的值左移
回復(fù)

使用道具 舉報(bào)

5#
ID:704397 發(fā)表于 2020-3-24 10:35 | 只看該作者
xianfajushi 發(fā)表于 2020-3-24 08:37
單獨(dú)把 P2=LED2;                         P3=LED3;放在  if(key!=-1)外應(yīng)該可以,出蝦米問題?

如果直接放在外面,LED只有在按下鍵不松開的時(shí)候才亮,鍵彈上來后就又恢復(fù)到原始滅的狀態(tài)
回復(fù)

使用道具 舉報(bào)

6#
ID:332444 發(fā)表于 2020-3-24 11:07 | 只看該作者
從道理來講,LED保存的值只有在按鍵按下時(shí)會(huì)被修改,因此,不存在按鍵判斷外被修改的可能,因此,是可以放在按鍵判斷外.
之所以看到按鍵按下與釋放不同的結(jié)果,是因?yàn)檠h(huán)太快的緣故,當(dāng)放下按鍵時(shí)的值可能是隨機(jī)的.

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区在线日韩在线深爱 | 欧美日韩黄色一级片 | 91精品国产一区二区三区香蕉 | 国产精品99999999 | 一级片网址 | 久久久av | 欧美三区 | 凹凸日日摸日日碰夜夜 | 精品区一区二区 | 毛片高清| 色吧色综合 | 91精品国产91久久久久久 | 欧美国产亚洲一区二区 | 国产亚洲一区精品 | 高清色| 久久久久久国产精品 | 亚洲欧美中文字幕在线观看 | aaaaaaa片毛片免费观看 | 色爱综合 | 日韩欧美手机在线 | 国产精品高潮呻吟久久aⅴ码 | 九九九精品视频 | 久久国产三级 | 91精品一区二区三区久久久久 | 交专区videossex农村 | 日本不卡一区二区 | 在线国产视频 | 亚洲一二三在线观看 | 日韩精品在线免费 | 亚洲一区二区三区免费在线观看 | 日韩二三区 | 久久伊人免费视频 | 欧美日韩国产高清 | 久久久精彩视频 | 亚洲成人精品一区二区 | 免费黄色大片 | 蜜桃免费一区二区三区 | 日韩精品一区二区三区在线播放 | 精品一区二区三区四区五区 | 欧美成人一级 | 欧美日韩国产一区二区三区不卡 |