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

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

QQ登錄

只需一步,快速開始

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

單片機(jī)控制LED亮滅問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:143767 發(fā)表于 2021-5-25 14:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
請(qǐng)教各位一個(gè)問題,當(dāng)我按下KEY1時(shí)LED1亮,再按下KEY1,LED1滅,但當(dāng)我按KEY2時(shí)LED2卻不亮,以此類推,就是說只有按下KEY1,LED1亮,其他的都不亮,不知程序錯(cuò)在哪里,請(qǐng)教大家指點(diǎn)一下,謝謝!

內(nèi)容:按一次按鍵,led點(diǎn)亮,再按一次熄滅,以此循環(huán)
------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義

//sbit KEY=P3^3;  //定義按鍵輸入端口
//sbit LED=P1^2;  //定義led輸出端口
sbit KEY1=P1^1;  //定義按鍵輸入端口
sbit KEY2=P1^2;  //定義按鍵輸入端口
sbit KEY3=P1^3;  //定義按鍵輸入端口
sbit KEY4=P1^4;  //定義按鍵輸入端口

sbit LED1=P2^1;  //定義led輸出端口
sbit LED2=P2^2;  //定義led輸出端口
sbit LED3=P2^3;  //定義led輸出端口
sbit LED4=P2^4;  //定義led輸出端口

void DelayUs2x(unsigned char t);//函數(shù)聲明
void DelayMs(unsigned char t);
/*------------------------------------------------
                    主函數(shù)
------------------------------------------------*/
void main (void)
{
KEY1=1; //按鍵輸入端口電平置高
while (1)         //主循環(huán)
  {

  if(!KEY1)  //如果檢測(cè)到低電平,說明按鍵按下
    {
         DelayMs(10); //延時(shí)去抖,一般10-20ms
     if(!KEY1)     //再次確認(rèn)按鍵是否按下,沒有按下則退出
           {
        while(!KEY1);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待
               {
               LED1=!LED1;//釋放則執(zhí)行需要的程序
                         }
           }
        }

     //主循環(huán)中添加其他需要一直工作的程序
}
KEY2=1; //按鍵輸入端口電平置高
while (1)         //主循環(huán)
  {

  if(!KEY2)  //如果檢測(cè)到低電平,說明按鍵按下
    {
         DelayMs(10); //延時(shí)去抖,一般10-20ms
     if(!KEY2)     //再次確認(rèn)按鍵是否按下,沒有按下則退出
           {
        while(!KEY2);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待
               {
               LED2=!LED2;//釋放則執(zhí)行需要的程序
                         }
           }
        }

     //主循環(huán)中添加其他需要一直工作的程序
}
KEY3=1; //按鍵輸入端口電平置高
while (1)         //主循環(huán)
  {

  if(!KEY3)  //如果檢測(cè)到低電平,說明按鍵按下
    {
         DelayMs(10); //延時(shí)去抖,一般10-20ms
     if(!KEY3)     //再次確認(rèn)按鍵是否按下,沒有按下則退出
           {
        while(!KEY3);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待
               {
               LED2=!LED3;//釋放則執(zhí)行需要的程序
                         }
           }
        }

     //主循環(huán)中添加其他需要一直工作的程序
}
KEY4=1; //按鍵輸入端口電平置高
while (1)         //主循環(huán)
  {

  if(!KEY4)  //如果檢測(cè)到低電平,說明按鍵按下
    {
         DelayMs(10); //延時(shí)去抖,一般10-20ms
     if(!KEY4)     //再次確認(rèn)按鍵是否按下,沒有按下則退出
           {
        while(!KEY4);//如果確認(rèn)按下按鍵等待按鍵釋放,沒有釋放則一直等待
               {
               LED2=!LED4;//釋放則執(zhí)行需要的程序
                         }
           }
        }

     //主循環(huán)中添加其他需要一直工作的程序
}



}
/*------------------------------------------------
uS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
長(zhǎng)度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
while(--t);
}
/*------------------------------------------------
mS延時(shí)函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號(hào)字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{

while(t--)
{
     //大致延時(shí)1mS
     DelayUs2x(245);
         DelayUs2x(245);
}
}

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

使用道具 舉報(bào)

沙發(fā)
ID:796531 發(fā)表于 2021-5-25 15:19 | 只看該作者
本帖最后由 paladina 于 2021-5-25 15:30 編輯

KEY1=1; //按鍵輸入端口電平置高
while (1)         //主循環(huán)  你都while(1)了永遠(yuǎn)為真,一直在這個(gè)循環(huán)里執(zhí)行,怎么會(huì)執(zhí)行下面的循環(huán)。把下面的 while 去掉,這個(gè)第一個(gè)while 要包含下面代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:716656 發(fā)表于 2021-5-25 15:36 | 只看該作者
您看下主函數(shù)里的while(1)是從哪到哪
回復(fù)

使用道具 舉報(bào)

地板
ID:894154 發(fā)表于 2021-5-25 15:52 | 只看該作者
我第一次見主函數(shù)里面這么多while(1)的程序
回復(fù)

使用道具 舉報(bào)

5#
ID:883031 發(fā)表于 2021-5-25 16:00 | 只看該作者
都是while(1),跳入第一個(gè)后就出不來了。
回復(fù)

使用道具 舉報(bào)

6#
ID:332444 發(fā)表于 2021-5-25 16:06 | 只看該作者
  1. #include "reg52.h"
  2. sbit KEY1=P1^1;  //定義按鍵輸入端口
  3. sbit KEY2=P1^2;  //定義按鍵輸入端口
  4. sbit KEY3=P1^3;  //定義按鍵輸入端口
  5. sbit KEY4=P1^4;  //定義按鍵輸入端口

  6. sbit LED1=P2^1;  //定義led輸出端口
  7. sbit LED2=P2^2;  //定義led輸出端口
  8. sbit LED3=P2^3;  //定義led輸出端口
  9. sbit LED4=P2^4;  //定義led輸出端口

  10. void main()
  11. {
  12.         unsigned char Xd=0;

  13.         while(1)
  14.         {
  15.                 if(!K1&&!++Xd){LED1=!LED1;while(!K1);}
  16.                 if(!K2&&!++Xd){LED2=!LED2;while(!K2);}
  17.                 if(!K3&&!++Xd){LED3=!LED3;while(!K3);}
  18.                 if(!K4&&!++Xd){LED4=!LED4;while(!K4);}               
  19.         }
  20. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

7#
ID:332444 發(fā)表于 2021-5-25 16:11 | 只看該作者
忘記改為KEY1了,自己去改了,哈哈
回復(fù)

使用道具 舉報(bào)

8#
ID:143767 發(fā)表于 2021-5-25 16:20 | 只看該作者

多謝指點(diǎn),我試下看,謝謝
回復(fù)

使用道具 舉報(bào)

9#
ID:743654 發(fā)表于 2021-5-26 08:46 | 只看該作者
第一個(gè)while(1)死循環(huán),所以只有KEY1有效
回復(fù)

使用道具 舉報(bào)

10#
ID:926870 發(fā)表于 2021-5-26 08:54 | 只看該作者
僅僅只對(duì)key1起作用
回復(fù)

使用道具 舉報(bào)

11#
ID:332444 發(fā)表于 2021-5-26 14:51 | 只看該作者
經(jīng)典的獨(dú)立按鍵代碼能理解的似乎不多。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表