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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8693|回復: 18
收起左側

關于單片機延時程序的問題

  [復制鏈接]
ID:137704 發表于 2017-12-29 16:36 | 顯示全部樓層 |閱讀模式
30黑幣
#include<reg51.h>        //庫文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型


/********************************************************************
                            I/O定義
*********************************************************************/
sbit DOUT=P1^3;
sbit YOUT=P1^4;
sbit LED1=P3^7;
/********************************************************************
                            延時函數
*********************************************************************/
void delay()//延時程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
                            主函數
*********************************************************************/
void main()
{
        while(1)   //無限循環
        {
         if((DOUT==1&&YOUT==1))//當DO輸出低電平時
         {
            delay();//延時抗干擾
                if((DOUT==1&&YOUT==1))//確定 DO口輸出低電平
            {
                   LED1=1;   //這個地方我想添加一個延時的程序 有大神知道怎么添加嗎? 延時6個小時左右
                                 
                }
          else
              {
                               LED1=0;

                }
         }
        }
}   

回復

使用道具 舉報

ID:97438 發表于 2017-12-29 17:24 | 顯示全部樓層
把需求說得清楚點~你要延時十天八天都是可以的。定時器計數,然后判斷時間就可以了。
回復

使用道具 舉報

ID:258727 發表于 2017-12-29 20:48 | 顯示全部樓層
通過定時器做延時是很好的
回復

使用道具 舉報

ID:137704 發表于 2017-12-30 07:42 | 顯示全部樓層
luoluoluo136 發表于 2017-12-29 17:24
把需求說得清楚點~你要延時十天八天都是可以的。定時器計數,然后判斷時間就可以了。

就是DOUT YOUT都為1的時候 LED1一直點亮六小時 如果中途DOUT YOUT有一個為0的時候就退出循環 LED1熄滅 直到 DOUT YOUT 再次都為1  
回復

使用道具 舉報

ID:231046 發表于 2017-12-30 08:49 | 顯示全部樓層
是可以用定時器做延時,多長時間都 可以的
回復

使用道具 舉報

ID:78322 發表于 2017-12-30 09:36 | 顯示全部樓層
#include<reg51.h>        //庫文件 #define uchar unsigned char//宏定義無符號字符型 #define uint unsigned int  //宏定義無符號整型   /********************************************************************                             I/O定義 *********************************************************************/ sbit DOUT=P1^3; sbit YOUT=P1^4; sbit LED1=P3^7; uint16   Timecount; /********************************************************************                             延時函數 *********************************************************************/ void delay()//延時程序 {     uchar m,n,s;     for(m=20;m>0;m--)     for(n=20;n>0;n--)     for(s=248;s>0;s--); } /********************************************************************                             主函數 *********************************************************************/ void main() {     Timer0_init();     //開啟定時器0產生1s的中斷     while(1)   //無限循環     {         if((DOUT==1&&YOUT==1))//當DO輸出低電平時         {             delay();//延時抗干擾             if((DOUT==1&&YOUT==1))//確定 DO口輸出低電平             {                 LED1=1;   //這個地方我想添加一個延時的程序 有大神知道怎么添加嗎? 延時6個小時左右                 Timecoun = 0;                 while(Timecoun < 3600);             }             else             {                 LED1=0;             }         }     } } void timeint(void) interrupt 1 {     Timecount++; }
回復

使用道具 舉報

ID:259850 發表于 2017-12-30 09:51 | 顯示全部樓層
加個定時器
回復

使用道具 舉報

ID:78322 發表于 2017-12-30 12:02 | 顯示全部樓層
#include<reg52.h>        //庫文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型

#define DELAYTIME     (200)

typedef enum{false=0, true = 1}  bool;
/********************************************************************
                            I/O定義
*********************************************************************/
sbit DOUT=P1^3;
sbit YOUT=P1^4;
sbit LED1=P3^7;
unsigned short   Timecount;
bool   LedOffflag;
bool   KeyFlag;
/********************************************************************
                            延時函數
*********************************************************************/
void delay()//延時程序
{
    uchar m,n,s;
    for(m=20;m>0;m--)
    for(n=20;n>0;n--)
    for(s=248;s>0;s--);
}
/********************************************************************
                            主函數
*********************************************************************/
void Timer0_init()
{
    EA   = 1;
    ET0  = 1;
    TR0  = 1;
    TMOD = 0x01; //定時器0 計數模式 定時器1模式1
    TH0  = 0x0C;
    TL0  = 0xB0;
}

bool GetKey(void)
{
    if((DOUT==1&&YOUT==1))
         return true;
    else return false;
}


void main()
{
    Timer0_init();     //開啟定時器0產生1s的中斷
    while(1)   //無限循環
    {
        KeyFlag = GetKey();
        
        if(KeyFlag)
        {
            LED1 = 1;
            Timecount = 0;
            LedOffflag = false;
        }
        else if(LedOffflag)
        {
            LED1 = 0;
        }
    }
}
void timeint(void) interrupt 1
{
    TH0 = 0x00;
    TL0 = 0xB0;
    Timecount++;
    if(Timecount >= DELAYTIME)
    {
        Timecount = DELAYTIME;
        LedOffflag = true;
    }
}
這是重新寫的程序,需要延時多長時間,就修改宏DELAYTIME的值。
回復

使用道具 舉報

ID:137704 發表于 2018-1-5 14:42 | 顯示全部樓層
立里 發表于 2017-12-30 12:02
#include        //庫文件
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int ...

我的單片機是STC12C5204PWM的 外部晶振 12MHZ 照著你的程序燒錄后 只要一通電 LED就亮著 不管1.3 1.4是高電平還是低電平
回復

使用道具 舉報

ID:271988 發表于 2018-1-5 15:47 | 顯示全部樓層
可以設置定時中斷,定時6個小時的
回復

使用道具 舉報

ID:239750 發表于 2018-1-5 17:23 | 顯示全部樓層
用通用定時器
回復

使用道具 舉報

ID:268280 發表于 2018-1-5 17:51 | 顯示全部樓層
void delay(uint time)        //延時函數
{
        uint x,y;
        for(x=time;x>0;x--)
        for(y=110;y>0;y--);
回復

使用道具 舉報

ID:272089 發表于 2018-1-6 08:28 | 顯示全部樓層
死循環前面加個
TMOD=0x01;
EA=ET0=TR0=1;

主函數后面加一個

time0() interrupt 1
{
     TL0=(65536-50000)%0X100;
     TH0=(65536-50000)/0X100;
     c++;
     if(c>=1200){
               c=0;
               if(t>0)t--;
      }
}
注意主函數那要定義uint c=0,t;
只要在你要延時的地方加一個t=6;就可以了
回復

使用道具 舉報

ID:272089 發表于 2018-1-6 08:31 | 顯示全部樓層

回復

使用道具 舉報

ID:83493 發表于 2018-1-7 08:53 | 顯示全部樓層
延時可以用定時器,自己寫的延時delay函數時間不太準確
回復

使用道具 舉報

ID:60379 發表于 2018-1-7 11:54 | 顯示全部樓層
這里講解已經非常詳細完整了
http://www.zg4o1577.cn/bbs/dpj-78271-1.html
回復

使用道具 舉報

ID:272717 發表于 2018-1-7 14:29 | 顯示全部樓層
dayehetiantian 發表于 2018-1-5 15:47
可以設置定時中斷,定時6個小時的

定時器定時延遲比較準確
回復

使用道具 舉報

ID:272964 發表于 2018-1-7 23:16 | 顯示全部樓層
#include<reg51.h>        //庫文件 #define uchar unsigned char//宏定義無符號字符型 #define uint unsigned int  //宏定義無符號整型   /********************************************************************                             I/O定義 *********************************************************************/ sbit DOUT=P1^3; sbit YOUT=P1^4; sbit LED1=P3^7; /********************************************************************                             延時函數 *********************************************************************/ void delay()//延時程序 { uchar m,n,s; for(m=20;m>0;m--) for(n=20;n>0;n--) for(s=248;s>0;s--); } /********************************************************************                             主函數 *********************************************************************/ void main() {         while(1)   //無限循環         {          if((DOUT==1&&YOUT==1))//當DO輸出低電平時          {             delay();//延時抗干擾                 if((DOUT==1&&YOUT==1))//確定 DO口輸出低電平             {                    LED1=1;   //這個地方我想添加一個延時的程序 有大神知道怎么添加嗎? 延時6個小時左右                                                   }           else               {                                LED1=0;                  }          }         } }   
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕免费观看 | 国产日韩欧美二区 | 国产精品美女久久久久久久网站 | 99精品国产一区二区青青牛奶 | 日本成人一区二区 | 久久99精品久久久久婷婷 | 久久国产精品一区二区 | 国产精品1区 | 真人毛片 | 爱爱视频在线观看 | 国产一区二区三区在线 | 国产乱码精品一区二区三区中文 | 亚洲视频免费在线 | 亚洲天堂一区二区 | 亚洲美女在线视频 | 欧美精品久久久久 | 欧美成ee人免费视频 | 亚洲综合在线视频 | 一区二区三区精品 | 一区影院 | 精品一区二区三区四区视频 | 欧美激情久久久 | 免费一区 | 97免费在线观看视频 | 日韩一级免费大片 | 亚洲国产成人av好男人在线观看 | 久久精品视频免费看 | 日韩欧美一级精品久久 | 成人免费看电影 | a在线视频观看 | 九九九视频在线 | 国产精品视频999 | 亚洲成人精品在线 | 国产综合久久久久久鬼色 | 龙珠z在线观看 | 9久久婷婷国产综合精品性色 | 日韩国产中文字幕 | 亚洲一区二区三区四区五区午夜 | 成人一区二区在线 | 国产黄色精品 | 一本大道久久a久久精二百 国产成人免费在线 |