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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3087|回復: 9
收起左側

K1能用K2不能用,新手調不出來望大佬指教,我把單片機代碼發出來了

[復制鏈接]
ID:200488 發表于 2021-8-10 15:36 | 顯示全部樓層 |閱讀模式
100黑幣
#include <reg52.h>
unsigned char date;
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^4;
sbit key2=P2^5;
sbit key3=P2^6;
sbit LED1=P1^0;
sbit LED2=P1^1;

void delay(uint z);
void Initial_com(void);

void delay(uint z)
{                                                                                                                                                                                          
    uint i,j;
    for(i=z;i>0;i--)
        for(j=110;j>0;j--);
}


void Initial_com(void)
{
EA=1;        //開總中斷
ES=1;        //允許串口中斷
ET1=1;        //允許定時器T1的中斷
TMOD=0x20;   //定時器T1,在方式2中斷產生波特率
PCON=0x00;   //SMOD=0
SCON=0x50;   // 方式1 由定時器控制
TH1=0xfd;    //波特率設置為9600
TL1=0xfd;
TR1=1;       //開定時器T1運行控制位

}

void main()
{
         Initial_com();
         while(1)
         {
        
          if(key1==0)
                {
                        delay(5);          //消抖動
                        if(key1==0)          //確認觸發
                                  {
                             LED1=0;
                                 SBUF=0XA0;
                                 delay(1000);        
                        }
                    if(key1==1)
                {
                        delay(5);          //消抖動
                        if(key1==1)          //確認觸發
                 {
                             LED1=1;
                                 SBUF=0X21;
                                  delay(500);
                                 }

                   if(key2==0)
                        {
                         delay(10);
                         if(key2==0)
                         {
                         LED2=0;
             SBUF=0X20;
             delay(1000);
                         }
                         if(key2==1)
                   {
                   delay(10);
                   {
                    LED2=1;
                       SBUF=0X30;
                       delay(500);
}
        }
                }
                  if(RI)         

                  {
                        date=SBUF;    //單片機接收
                        SBUF=date;    //單片機發送
                        RI=0;
                  }
                  }
                                                 }}}

回復

使用道具 舉報

ID:200488 發表于 2021-8-10 15:39 | 顯示全部樓層
需要解決的問題,想要實現藍牙跟實體按鍵都能控制的開關,同時具有反饋功能
回復

使用道具 舉報

ID:161164 發表于 2021-8-10 18:01 | 顯示全部樓層
你把key2 那段代碼放進了key1里了

評分

參與人數 1黑幣 +15 收起 理由
JXN.520 + 15

查看全部評分

回復

使用道具 舉報

ID:959439 發表于 2021-8-10 20:16 | 顯示全部樓層
key1是有一個常態的,不是1就是0,不能混用。應該按照自己的要求,為程序作適當的刪減
回復

使用道具 舉報

ID:213173 發表于 2021-8-10 20:46 | 顯示全部樓層
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit key1=P2^4;
sbit key2=P2^5;
sbit LED1=P1^0;
sbit LED2=P1^1;

unsigned char date;
void delay(uint z);
void Initial_com(void);

void delay(uint z)
{                                                                                                                                                                                          
    uint i,j;
    for(i=z;i>0;i--)
        for(j=110;j>0;j--);
}


void Initial_com(void)
{
        TMOD=0x20;//定時器1方式2(8位重載)
        TH1=0xfd;//定時器1重載
        TL1=0xfd;//定時器1重載
        TR1=1;        //開定時器1
        REN=1;        //允許串行接收
        SM0=0;        //設置串口方式1(8位UART波特率可變)
        SM1=1;        //設置串口方式1(8位UART波特率可變)
}

void main()
{
        Initial_com();
        while(1)
        {
                if(RI)                //查詢接收中斷請求標志位為1(已收到)
                {
                        RI=0;                //接收中斷請求標志位清0
                        date=SBUF;    //單片機接收
                        SBUF=date;    //單片機發送
                        while(!TI);
                        TI=0;
                }
                if(key1==0)
                {
                        delay(5);          //消抖動
                        if(key1==0)          //確認觸發
                        {
                                LED1=0;
                                SBUF=0XA0;
                                while(!TI);
                                TI=0;
                                while(!key1);//等待松手       
                                SBUF=0X21;
                                while(!TI);
                                TI=0;
                                LED1=1;
                        }
                }
                if(key2==0)
                {
                        delay(10);
                        if(key2==0)
                        {
                                LED2=0;
                                SBUF=0X20;
                                while(!TI);
                                TI=0;
                                while(!key2);//等待松手       
                                SBUF=0X30;
                                while(!TI);
                                TI=0;
                                LED2=1;
                        }
                }
        }
}

評分

參與人數 1黑幣 +30 收起 理由
JXN.520 + 30

查看全部評分

回復

使用道具 舉報

ID:959346 發表于 2021-8-10 21:35 | 顯示全部樓層
你key2的處理放到key1的按下處理里面了,所以你要先按著key1,同時按著key2,再松開key1,key2不松開,才能響應key2 。
把key2的處理和串口接收處理放到key1處理的外面,如下
void main()
{
        Initial_com();
        while(1)
        {

                if(key1==0)
        {
                delay(5);          //消抖動
                if(key1==0)          //確認觸發
            {
                 LED1=0;
                 SBUF=0XA0;
                 delay(1000);        
            }
            if(key1==1)
            {
                delay(5);          //消抖動
                if(key1==1)          //確認觸發
                {
                         LED1=1;
                    SBUF=0X21;
                    delay(500);
                }
                  
                  }
                }
                if(key2==0)
        {
                 delay(10);
                 if(key2==0)
                 {
                         LED2=0;
                         SBUF=0X20;
                         delay(1000);
                   }
            if(key2==1)
                       {
                               delay(10);
                               {
                                LED2=1;
                                   SBUF=0X30;
                                   delay(500);
                                }
                }
              }
              if(RI)         

              {
            date=SBUF;    //單片機接收
            SBUF=date;    //單片機發送
            RI=0;
              }
        }
}

評分

參與人數 1黑幣 +30 收起 理由
JXN.520 + 30

查看全部評分

回復

使用道具 舉報

ID:386001 發表于 2021-8-11 10:02 | 顯示全部樓層
你的按鍵是按下和松開都有操作,但是你的程序邏輯太過簡單,且有點混亂

評分

參與人數 1黑幣 +15 收起 理由
JXN.520 + 15

查看全部評分

回復

使用道具 舉報

ID:296833 發表于 2021-8-11 10:39 | 顯示全部樓層
寫程序的時候注意格式,注意統一縮進,這樣子才不會混亂。你的程序,縮進混亂,大括號寫得隨意,所以把自己看混了。正常應該是
{key1==0}
{key1==1}
{key2==0}
{key2==1}
四個獨立的并列程序段,你的程序互相嵌套了,整理下。
另外,建議學習循環掃描按鍵的方式,實際程序應用不會用延時消抖的。

大括號

大括號



評分

參與人數 1黑幣 +30 收起 理由
JXN.520 + 30

查看全部評分

回復

使用道具 舉報

ID:849376 發表于 2021-8-11 13:06 | 顯示全部樓層
key == 0 觸發就不要寫key == 1了

評分

參與人數 1黑幣 +15 收起 理由
JXN.520 + 15

查看全部評分

回復

使用道具 舉報

ID:849376 發表于 2021-8-11 13:07 | 顯示全部樓層
key1 == 0 能觸發,但如果你key1 == 0不觸發就一直進key == 1里面了

評分

參與人數 1黑幣 +15 收起 理由
JXN.520 + 15

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美一区二区三区久久人妖 | 久久久久久久久久久91 | 精精国产xxxx视频在线 | 一区二区三区在线电影 | 亚洲成人一区二区 | 亚洲va国产日韩欧美精品色婷婷 | 性色av一区| 久久这里只有精品首页 | 91精品久久久久久久 | 国产91亚洲精品一区二区三区 | 亚洲三区在线观看 | 在线日韩不卡 | 91国产精品 | 成人精品一区二区三区中文字幕 | 欧美不卡网站 | 久久久久久亚洲国产精品 | 国产乱精品一区二区三区 | 久久国产精品久久国产精品 | 国产女人与拘做视频免费 | 福利在线观看 | 中文字幕一区在线观看视频 | 一区二区三区国产 | 欧美精品在线播放 | 国产精品日韩在线 | 精品欧美一区二区中文字幕视频 | 成年人在线电影 | 九九综合 | 欧美日韩电影一区 | 日批日韩在线观看 | 九色91视频| 免费日韩网站 | 日韩午夜网站 | 欧美一级免费看 | 久久成人精品视频 | 一道本不卡视频 | 女人精96xxx免费网站p | 日本粉嫩一区二区三区视频 | 亚洲 欧美 日韩在线 | 久一精品| 国产毛片久久久久久久久春天 | 在线精品一区二区三区 |