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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12188|回復(fù): 8
收起左側(cè)

8個按鍵分別控制8個LED燈的亮滅,按一次松開常亮,按一次松開常滅,求助大神看看問題

[復(fù)制鏈接]
ID:405279 發(fā)表于 2018-10-24 00:14 | 顯示全部樓層 |閱讀模式
#include<reg51.h>
#define uchar unsigned char
#define uint  unsigned int
void delayms(uint y)
{
        uint i,j;
        for(i=y;i>0;i--)
                for(j=110;j>0;j--);
}
main(void)
{
while(1)
{       
      
            if(P1==0xfe)         
            {
                  delayms(1);
               if(P1==0xfe)
                         {
                           while(P1==0xfe)
                           delayms(1);
                        P2=0xfe;
                      }          
                }
                 if(P1==0xfe&&P2==0Xfe)
                 {
                       delayms(1);
                     if(P1==0xfe&&P2==0Xfe)
                         {         delayms(1);
                             while(P1==0xfe)
                                 
                             P2=0xff;
                                 
                         }
                 }
                if(P1==0xfd)         
            {
                   delayms(10);
               if(P1==0xfd)
                        {
                           while(P1==0xfd)
                        P2=0xfd;
                     }          
                }
                 if(P1==0xfd&&P2==0Xfd)
                 {
                     delayms(10);
                     if(P1==0xfd&&P2==0Xfd)
                         {       
                             while(P1==0xfd)
                          P2=0xff;
                         }
                 }
                 if(P1==0Xfb)
                 {
                    delayms(10);
                    if(P1==0xfb)
                        {
                           while(P1==0xfb)
                           P2=0xfb;
                        }
                 }
                 if(P1==0xfb&&P2==0xfb)
                 {
                    delayms(10);
                        if(P1==0xfb&&P2==0xfb)
                        {
                              while(P1==0xfb)
                                  P2=0xff;


                        }
                   }
                 if(P1==0xf7)
                 {
                     delayms(10);
                         if(P1==0xf7)
                         {
                            while(P1==0xf7)
                                P2=0xf7;
                         }
                 }
                 if(P1==0xf7&&P2==0xf7)
                 {
                     delayms(10);
                         if(P1==0xf7&&P2==0xf7)
                         {
                         while(P1==0xf7)
                         P2=0xff;
                         }
                 }
                 if(P1==0xef)
                 {
                    delayms(10);
                        if(P1==0xef)
                        {
                           while(P1==0xef)
                           P2=0xef;
                        }
                 }
                 if(P1==0xef&&P2==0xef)
                 {
                    delayms(10);
                        if(P1==0xef&&P2==0xef)
                        {
                        while(P1==0xef)
                        P2=0xff;
                        }
                 }
       if(P1==0xdf)
           {
              delayms(10);
                    if(P1==0xdf)
                    {
                      while(P1==0xdf)
                      P2=0xdf;
                    }
           }
           if(P1==0xdf&&P2==0xdf)
           {
              delayms(10);
                    if(P1==0xdf&&P2==0xdf)
                    {
                    while(P1==0xdf)
                    P2=0xff;
                    }
           }
           if(P1==0xbf)
           {
              delayms(10);
                    if(P1==0xbf)
                    {
                  while(P1==0xbf)
          P2=0xbf;
         }
       }
       if(P1==0xbf&P2==0xbf)
       {
          delayms(10);
          if(P1==0xbf&&P2==0xbf)
          {
          while(P1==0xbf)
          P2=0xff;
          }
       }
       if(P1==0x7f)
       {
          delayms(10);
          if(P1==0x7f)
          {
            while(P1==0x7f)
            P2=0x7f;
          }
       }
       if(P1==0x7f&&P2==0x7f)
       {
           delayms(10);
                   if(P1==0x7f&&P2==0x7f)
           {
           while(P1==0x7f)
           P2=0xff;
                     }
       }
}
}

回復(fù)

使用道具 舉報

ID:164602 發(fā)表于 2018-10-24 08:41 | 顯示全部樓層
沒有電路圖,我猜你是用的矩陣鍵盤吧。
矩陣鍵盤的鍵選擇,可不是你這樣搞的哦。
我在我的板子上試驗了一個,你看看:
#include<reg51.h>

#define GPIO_KEY P1

sbit LED0=P2^0;
sbit LED1=P2^1;
sbit LED2=P2^2;
sbit LED3=P2^3;
sbit LED4=P2^4;
sbit LED5=P2^5;
sbit LED6=P2^6;
sbit LED7=P2^7;

unsigned char KeyValue=9;

void Delay10ms();
void KeyDown();

void main(void)
{
        while(1)
        {
                KeyDown();
                if (KeyValue==0)
                {
                        LED0=~LED0;
                        KeyValue=9;
                }
                if (KeyValue==1)
                {
                        LED1=~LED1;
                        KeyValue=9;
                }
                if (KeyValue==2)
                {
                        LED2=~LED2;
                        KeyValue=9;
                }
                if (KeyValue==3)
                {
                        LED3=~LED3;
                        KeyValue=9;
                }
                if (KeyValue==4)
                {
                        LED4=~LED4;
                        KeyValue=9;
                }
                if (KeyValue==5)
                {
                        LED5=~LED5;
                        KeyValue=9;
                }
                if (KeyValue==6)
                {
                        LED6=~LED6;
                        KeyValue=9;
                }
                if (KeyValue==7)
                {
                        LED7=~LED7;
                        KeyValue=9;
                }
                if (KeyValue==8)
                {
                        LED0=1;
                        LED1=1;
                        LED2=1;
                        LED3=1;
                        LED4=1;
                        LED5=1;
                        LED6=1;
                        LED7=1;
                }
        }                               
}

void KeyDown(void)
{
        char a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)
        {
                Delay10ms();
                if(GPIO_KEY!=0x0f)
                {
                        GPIO_KEY=0X0F;
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        }
                        GPIO_KEY=0XF0;
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue;break;
                                case(0Xb0):        KeyValue=KeyValue+4;break;
                                case(0Xd0): KeyValue=KeyValue+8;break;
                                case(0Xe0):        KeyValue=KeyValue+12;break;
                        }
                        while((a<50)&&(GPIO_KEY!=0xf0))
                        {
                                Delay10ms();
                                a++;
                        }
                }
        }
}

void Delay10ms(void)
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
電路圖也發(fā)出來,程序都是與電路對應(yīng)的。
1.jpg

1.jpg

回復(fù)

使用道具 舉報

ID:23606 發(fā)表于 2018-10-24 08:49 | 顯示全部樓層
感覺太復(fù)雜了,一個按鍵按下對相應(yīng)的燈取反一下就行了
回復(fù)

使用道具 舉報

ID:357401 發(fā)表于 2018-10-24 09:14 | 顯示全部樓層
你這個if判斷這里:if(P1==0xfe)         
            {
                  delayms(1);
               if(P1==0xfe)
                         {
                           while(P1==0xfe)
                           delayms(1);
                        P2=0xfe;
                      }         
                }判斷有按鍵按下就亮燈,亮燈后并沒有其他后續(xù)可執(zhí)行任務(wù),并且你是放在while(1)的死循環(huán)里的。所以你的程序?qū)嶋H表現(xiàn)就是按一下就一直亮,再按一下就滅。
回復(fù)

使用道具 舉報

ID:111634 發(fā)表于 2018-10-24 09:27 | 顯示全部樓層
本帖最后由 zl2168 于 2018-10-24 10:48 編輯

介紹你一個按鍵操作案例。
實例5  4種不同方式鍵控信號燈
Proteus仿真一下,確認(rèn)有效。
實例5 不同方式鍵控?zé)?rar (31.72 KB, 下載次數(shù): 27)
4種不同方式鍵控信號燈.jpg
以上摘自張志良編著《80C51單片機仿真設(shè)計實例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1.書中電路和程序設(shè)計有詳細說明,程序語句條條有注解。
回復(fù)

使用道具 舉報

ID:313336 發(fā)表于 2018-10-24 09:40 來自觸屏版 | 顯示全部樓層
qwersdfgfg 發(fā)表于 2018-10-24 09:14
你這個if判斷這里:if(P1==0xfe)         
            {
                  delayms(1);

按鍵掃描出現(xiàn)問題了吧
回復(fù)

使用道具 舉報

ID:89515 發(fā)表于 2018-10-24 09:52 | 顯示全部樓層
#include<reg51.h>
#define uchar unsigned char
#define uint  unsigned int
void delayms(uint y)
{
        uint i,j;
        for(i=y;i>0;i--)
                for(j=110;j>0;j--);
}
void main(void)
{
while(1)
{            
     if(P1==0xfe)         
     {
   delayms(10);
   if(P1==0xfe)
   {
          while(P1==0xfe) ;
          delayms(10);
         ( P2&=0xfe)?(P2|=0x01):(P2&=0xfe);
   }         
     }
  //類似上……
}
}

回復(fù)

使用道具 舉報

ID:414462 發(fā)表于 2018-10-24 09:58 | 顯示全部樓層
程序搞復(fù)雜了
回復(fù)

使用道具 舉報

ID:839984 發(fā)表于 2020-11-6 22:37 來自觸屏版 | 顯示全部樓層
能不能幫忙用if語句寫一個開始八個全亮,之后按一個按鍵熄滅一個,在按一下,熄滅兩個,直到全滅為止
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲人成人一区二区在线观看 | 一级黄色片毛片 | 超碰3 | 精品国产乱码一区二区三区 | 在线观看国产精品一区二区 | 伊人青青久久 | 亚洲国产片| 久久国产精品-久久精品 | 三级在线观看 | 久久伊人久久 | 国产日韩欧美激情 | 一区影视 | 久久久精品视频一区二区三区 | 国产a区 | 中文字幕精品视频在线观看 | 免费黄色片在线观看 | 自拍偷拍中文字幕 | 久久欧美精品 | 青青99 | 国产精品久久久久久久午夜片 | 久久性色 | 精品1区2区| 亚洲人成网站777色婷婷 | 国产精品一区二区不卡 | 精品久久网 | 国产一级片一区二区 | 亚洲精品久久久久久首妖 | av在线天堂 | 欧美a在线看 | 久久这里有精品 | 国产精品美女久久久久aⅴ国产馆 | 日本一区二区视频 | 亚洲视频在线看 | 日韩一区二区在线免费观看 | 欧美黄a | 国产一区二区激情视频 | 亚洲一区二区三区在线免费 | 亚洲小说图片 | 中文字幕11页 | 午夜一级大片 | 国产一区二区三区色淫影院 |