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

標題: 關于在單片機程序中加入延時 [打印本頁]

作者: 鄭效桂    時間: 2024-3-29 16:09
標題: 關于在單片機程序中加入延時
#include<reg52.h>             //庫文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型
/********************************************************************
                            初始定義
*********************************************************************/

/*定義八位輸入為單片機P1口*/
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit IN5=P1^4;
sbit IN6=P1^5;
sbit IN7=P1^6;
sbit IN8=P1^7;

/*定義八位輸出為單片機P2口*/
sbit K8=P2^0;
sbit K7=P2^1;
sbit K6=P2^2;
sbit K5=P2^3;
sbit K4=P2^4;
sbit K3=P2^5;
sbit K2=P2^6;
sbit K1=P2^7;


/********************************************************************
                            延時函數
*********************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
        for(j=13;j>0;j--);
     { ;
     }
   }
}

/********************************************************************
                            主函數
*********************************************************************/
//急停  IN1
//手動  IN2 K1控制指示燈(前 IN3  K2控制指示燈  K3控制繼電器)(后 IN4  K4控制指示燈   K5控制繼電器)
//自動  IN5 K6控制指示燈
//自動啟停信號(光電開關發出信號)IN6  K7控制指示燈(同時控制K2 K3 K4 K5啟停)
void main()                                    //主程序
{   
    while(1)
    {        
        if(IN1==0)                    //急停按鈕開啟
        {
            if(IN2==0)            //手動按鈕開啟
            {               
                delay(500);
                K1=!K1;                    //K1控制手動按鈕指示燈
                while(!IN2);                                                               
                delay(100);               
            }
            if(K1==0)      //手動模式開啟
            {                        
                K6=1;
                K8=0;               
                if(IN3==0)        //IN3為前啟停信號
                {                                                            
                    delay(500);
                    K2=!K2;        //K2控制前指示燈                    
                    K3=!K3;        //K3控制前繼電器                                                               
                    while(!IN3);                    
                    delay(100);                    
                }               
                if(IN4==0)     //IN4為后啟停信號
                {                    
                    delay(500);
                    K4=!K4;       //K4控制后指示燈
                    K5=!K5;         //K5控制后繼電器
                    while(!IN4);
                    delay(100);                    
                }
            }               
            if(K1==1)//手動模式關閉
            {
                K2=1;
                K3=1;
                K4=1;
                K5=1;
                K7=1;
                K8=1;
            }
            if(IN5==0) //自動模式按鈕
            {               
                delay(500);
                K6=!K6;
                while(!IN5);
                delay(100);               
            }
            if(K6==0)
            {
                K1=1;
                K2=1;
                K3=1;
                K4=1;
                K5=1;
                K8=0;
                if(IN6==0)//光電開關產生信號
                {                                                                                                                                                                                                                        
                    K2=0;
                    K3=0;
                    K4=0;
                    K5=0;                    
                }
                if(IN6==1)
                {
                    K2=1;
                    K3=1;
                    K4=1;
                    K5=1;
                    K8=1;
                }                                
            }
            if((IN6==0)&&(K6==0))
            {
                delay(1000);
                if(IN2==0)
                {
                    delay(1000);
                    K1=!K1;      //K1控制手動按鈕指示燈
                    while(!IN2);
                    delay(1000);
                }
                if(K1==0)
                {
                    delay(1000);
                    K2=1;
                    K3=1;
                    K4=1;
                    K5=1;
                }
            }
        }                                                                        
        if(IN1==1)
        {                                
            K1=1;
            K2=1;
            K3=1;
            K4=1;
            K5=1;                                                                                
            K6=1;
            K7=1;
            K8=1;
        }
               
    }
}




代碼如上,求教各位大神。
if(IN3==0)        //IN3為前啟停信號
                {                                                            
                    delay(500);
                    K2=!K2;        //K2控制前指示燈                    
                    K3=!K3;        //K3控制前繼電器                                                               
                    while(!IN3);                    
                    delay(100);                    
                }      
我想實現的功能是:當K2=0時,延時幾秒后讓K7=0;當K2=1時,K7=1;
就這樣循環




作者: 鄭效桂    時間: 2024-3-29 16:12
我自己寫了好幾種代碼,都是剛開始上電時K2吸合幾秒后,K7吸合,K2斷開時,K7斷開。然后再按下IN3時,K2跟K7狀態就同步了,延時效果就沒了
作者: 鄭效桂    時間: 2024-3-29 16:13
求教各位大佬,幫忙看看應該怎么寫
作者: kk17328    時間: 2024-3-29 17:43
可以用switch語句,做個狀態機延時
作者: 鄭效桂    時間: 2024-3-29 17:47
kk17328 發表于 2024-3-29 17:43
可以用switch語句,做個狀態機延時

麻煩幫我寫一下   我初學
作者: 鄭效桂    時間: 2024-3-29 17:51
鄭效桂 發表于 2024-3-29 17:47
麻煩幫我寫一下   我初學

if(IN3==0)                //IN3為前啟停信號
                                {                                                                                                                       
                                        delay(500);
                                        K2=!K2;                //K2控制前指示燈                                       
                                        K3=!K3;                //K3控制前繼電器                                                                                                                               
                                        while(!IN3);                                       
                                        delay(100);
                                }                                               
                                if(K2==0)
                                        {
                                                D(30);
                                                K7=0;
                                        }
                                        if(K2==1)
                                        {
                                                K7=1;
                                        }
我是這樣寫的,就是只有每次剛上電的時候才有延時效果,完成一個開  關   回合后,再按IN3就沒有延時效果了,K2  K7狀態就同步了
作者: xiaobendan001    時間: 2024-3-29 18:44
鄭效桂 發表于 2024-3-29 17:51
if(IN3==0)                //IN3為前啟停信號
                                {                                                                                                                       
                                        delay(500);

D(30);是啥意思

作者: a185980800    時間: 2024-3-29 20:09
學到這里說明你需要學點新的東西了,開始嘗試用定時器加狀態機來控制時間,后面延時函數必須拋棄掉。因為你放延時的時候單片機就直接停擺了,你程序越來越大延時的負面影響就越來越大。就算必須要延時也要盡量控制在微秒級,毫秒級的延時都盡量不要使用了
作者: 鄭效桂    時間: 2024-3-30 07:29
xiaobendan001 發表于 2024-3-29 18:44
D(30);是啥意思

是毫秒級延時
作者: 鄭效桂    時間: 2024-3-30 07:29
a185980800 發表于 2024-3-29 20:09
學到這里說明你需要學點新的東西了,開始嘗試用定時器加狀態機來控制時間,后面延時函數必須拋棄掉。因為你 ...

可以教教我嗎  大佬
作者: DoneDone    時間: 2024-3-30 08:42
a185980800 發表于 2024-3-29 20:09
學到這里說明你需要學點新的東西了,開始嘗試用定時器加狀態機來控制時間,后面延時函數必須拋棄掉。因為你 ...

說的對!最簡單粗暴的就是定時器里計數,主流程里判斷。
作者: 鄭效桂    時間: 2024-3-30 09:37
DoneDone 發表于 2024-3-30 08:42
說的對!最簡單粗暴的就是定時器里計數,主流程里判斷。

麻煩教我一下
作者: cedtek    時間: 2024-3-30 16:54
鄭效桂 發表于 2024-3-30 09:37
麻煩教我一下

本站有前輩分享過
請工程化,定制化你的單片機代碼




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 狠狠躁18三区二区一区 | 欧美日韩精品免费 | 在线观看国产www | 色资源在线观看 | 九九综合 | 91精品一区二区三区久久久久久 | 91观看| 免费观看一级黄色录像 | 狠狠亚洲| 成av在线| 狠狠婷婷综合久久久久久妖精 | 麻豆a级片 | 欧美日韩国产高清 | 天天看天天爽 | 一区二区播放 | 国产激情一区二区三区 | 国产区精品 | 亚洲aⅴ精品 | 欧美日韩电影免费观看 | 精品国产一区二区三区性色av | 欧美色综合 | 国产性色视频 | 日韩午夜影院 | 九七午夜剧场福利写真 | 亚洲va欧美va天堂v国产综合 | 国产亚洲精品成人av久久ww | 久久久国产精品视频 | 一区二区中文字幕 | www国产精品 | 国产精品久久久久久久久免费高清 | 亚洲国产欧美在线 | 国产91精品久久久久久久网曝门 | 岛国毛片 | 精品视频一区二区三区 | 色网站入口 | 91精品国产一区二区 | 亚洲aⅴ | 色婷婷综合久久久中字幕精品久久 | 欧美性猛交一区二区三区精品 | www.日本精品 | 黄网免费|