亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 寫一個單片機繼電器控制程序遇到困難 [打印本頁]

作者: yn0879    時間: 2018-4-19 11:56
標題: 寫一個單片機繼電器控制程序遇到困難
目的是按鍵控制繼電器,當輸出高電平時繼電器釋放,約200毫秒后再次吸合,是單按鍵控制程序,用到switch case語句計按鍵次數,但是程序好像不能執行延時函數。
                        case(4):
                         LED1=1;
                         delayms(200);
                         LED1=0;
                         break;

這是第四次按按鍵的代碼只執行了LED1=1后面的就不執行了,是代碼寫錯了,還是其他原因,懇請高手指點,謝謝!

作者: yn0879    時間: 2018-4-19 11:58
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. sbit PB1=P2^1;
  4. sbit LED=P1^0;
  5. sbit LED1=P1^1;
  6. //sbit LED=P1^0;
  7. unsigned char f=0;
  8. void delayms(uint xms)
  9.         {
  10.                 uint i,j;
  11.                 for(i=xms;i>0;i--)
  12.                         for(j=125;j>0;j--);
  13.         }

  14. void main()
  15. {
  16.         while(1)
  17.         {
  18.                 if(PB1==0)
  19.                 {
  20.                         delayms(10);
  21.                         if(PB1==0)
  22.                         {
  23.                                 f++;
  24.                                 if(f==5)f=1;
  25.                         }
  26.                         while(PB1==0);

  27.                 }
  28.                 switch(f)
  29.                 {
  30.                         case(1):
  31.                                         LED=0;
  32.                                         //ddelay();
  33.                                         break;
  34.                         case(2):
  35.                                         LED=1;
  36.                                         break;
  37.                         case(3):
  38.                                         LED1=0;
  39.                                         //ddelay();
  40.                                         break;
  41.                         case(4):
  42.                          LED1=1;
  43.                          delayms(200);
  44.                          LED1=0;
  45.                          break;
  46.                 }
  47.                                
  48.         }
  49. }
復制代碼



作者: xy07580782    時間: 2018-4-20 18:58
好像是不能在case執行完一個語句后再加延時,我之前加過一個beep()函數也是一直循環響,高手指教一下唄
作者: wulin    時間: 2018-4-20 21:13
yn0879 發表于 2018-4-19 11:58

f要清0,否則程序不斷重復執行case(4):的內容,
#include <reg51.h>
#define uint unsigned int
sbit PB1=P2^1;
sbit LED=P1^0;
sbit LED1=P1^1;
//sbit LED=P1^0;
unsigned char f=0;
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=125;j>0;j--);
}

void main()
{
        while(1)
        {
                if(PB1==0)
                {
                        delayms(10);
                        if(PB1==0)
                        {
                                f++;
//                                if(f==5)f=1;
                        }
                        while(PB1==0);
                }
                switch(f)
                {
                        case(1):
                        LED=0;
                        LED1=1;
                        //ddelay();
                        break;
                        case(2):
                        LED=1;
                        break;
                        case(3):
                        LED1=0;
                        //ddelay();
                        break;
                        case(4):
                        LED1=1;
                        delayms(200);
                        LED1=0;
                        f=0;
                        break;
                }
        }
}
作者: 冰純    時間: 2018-4-20 21:15
繼電器動作需要時間,200ms延時太短,改為2000ms延時試一試
作者: yn0879    時間: 2018-4-20 22:23
2000ms也一樣
作者: yn0879    時間: 2018-4-20 22:29
wulin 發表于 2018-4-20 21:13
f要清0,否則程序不斷重復執行case(4):的內容,
#include
#define uint unsigned int

確實是這樣的,真的感謝你了,可是我也不懂是為什么,我的代碼前面已經用if語句限制了啊
作者: luoping121    時間: 2018-4-20 22:38
http://www.denmoz.com/bbs/dpj-114084-1.html 參考一下他們的
作者: wulin    時間: 2018-4-21 06:29
yn0879 發表于 2018-4-20 22:29
確實是這樣的,真的感謝你了,可是我也不懂是為什么,我的代碼前面已經用if語句限制了啊

你的代碼本身有缺陷,在主循環中不斷判斷按鍵狀態,按鍵按下f+1,switch(f)依據f值執行相應分支,f初始為0.switch(f)不執行任何分支,當f值等于1~4時,switch(f)是依據f值不斷重復執行相應分支,只是case(1):至case(3):的狀態固定,你看不出變化,當重復執行case(4):時問題就明顯反映出來了。如果改成如下代碼就可以避免這個問題。
#include <reg51.h>
#define uint unsigned int
sbit PB1=P3^4;
sbit LED=P1^0;
sbit LED1=P1^1;
unsigned char f=0;
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=125;j>0;j--);
}

void main()
{
        while(1)
        {
                if(PB1==0)
                {
                        delayms(10);
                        if(PB1==0)
                        {
                                f++;
                                if(f==5)f=0;
                                switch(f)
                                {
                                        case(0):
                                        LED=1;
                                        LED1=1;
                                        break;
                                        case(1):
                                        LED=0;
                                        LED1=1;
                                        //ddelay();
                                        break;
                                        case(2):
                                        LED=1;
                                        break;
                                        case(3):
                                        LED1=0;
                                        //ddelay();
                                        break;
                                        case(4):
                                        LED1=1;
                                        delayms(200);
                                        LED1=0;
                                        break;
                                }
                                while(!PB1);
                        }
                }
        }
}
作者: yn0879    時間: 2018-4-24 09:19
wulin 發表于 2018-4-21 06:29
你的代碼本身有缺陷,在主循環中不斷判斷按鍵狀態,按鍵按下f+1,switch(f)依據f值執行相應分支,f初始為 ...

謝謝了,你分析的很透徹
作者: 寒門癡子    時間: 2018-4-25 22:03
學習了。編程的細節很重要啊。感謝!




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1