找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7622|回复: 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;

                }
         }
        }
}   

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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  
回复

使用道具 举报

5#
ID:231046 发表于 2017-12-30 08:49 | 只看该作者
是可以用定时器做延时,多长时间都 可以的
回复

使用道具 举报

6#
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++; }
回复

使用道具 举报

7#
ID:259850 发表于 2017-12-30 09:51 | 只看该作者
加个定时器
回复

使用道具 举报

8#
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的值。
回复

使用道具 举报

9#
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是高电平还是低电平
回复

使用道具 举报

10#
ID:271988 发表于 2018-1-5 15:47 | 只看该作者
可以设置定时中断,定时6个小时的
回复

使用道具 举报

11#
ID:239750 发表于 2018-1-5 17:23 | 只看该作者
用通用定时器
回复

使用道具 举报

12#
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--);
回复

使用道具 举报

13#
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;就可以了
回复

使用道具 举报

14#
ID:272089 发表于 2018-1-6 08:31 | 只看该作者

回复

使用道具 举报

15#
ID:83493 发表于 2018-1-7 08:53 | 只看该作者
延时可以用定时器,自己写的延时delay函数时间不太准确
回复

使用道具 举报

16#
ID:60379 发表于 2018-1-7 11:54 | 只看该作者
这里讲解已经非常详细完整了
http://www.51hei.com/bbs/dpj-78271-1.html
回复

使用道具 举报

17#
ID:272717 发表于 2018-1-7 14:29 | 只看该作者
dayehetiantian 发表于 2018-1-5 15:47
可以设置定时中断,定时6个小时的

定时器定时延迟比较准确
回复

使用道具 举报

18#
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 单片机教程网

快速回复 返回顶部 返回列表