找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3154|回复: 11
打印 上一主题 下一主题
收起左侧

帮看看怎样改延时一个小时

[复制链接]
跳转到指定楼层
楼主
ID:63317 发表于 2016-6-6 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>STC89C51   11.0592
最小单片机实验板

//--定义要使用的IO口--//
sbit RELAY = P1^4;  //定义继电器使用的IO口
sbit K1    = P0^0;  //定义按键使用的IO口
unsigned int a;

void main()
{
    while(1)
    {   
        if(K1 == 0)    //如果按键按下
        {   a=2000;//这里延时一个小时怎样写
            RELAY = 0; //继电器闭合
            while(a--);
            a=2000;
            RELAY = 1; //这里延时一个小时怎样写
            while(a--);
        }
        else
        {
            RELAY = 1;
        }
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:125442 发表于 2016-6-6 15:24 | 只看该作者
加上延时60s就可以了
回复

使用道具 举报

板凳
ID:122684 发表于 2016-6-6 15:34 | 只看该作者
你可以延时函数 或者定时器
回复

使用道具 举报

地板
ID:63317 发表于 2016-6-6 15:36 | 只看该作者
小调调 发表于 2016-6-6 15:34
你可以延时函数 或者定时器

我是新手不会弄
回复

使用道具 举报

5#
ID:125449 发表于 2016-6-6 15:43 | 只看该作者
在线等答案
回复

使用道具 举报

6#
ID:120274 发表于 2016-6-7 13:29 | 只看该作者
同问这个
回复

使用道具 举报

7#
ID:123289 发表于 2016-6-7 14:00 | 只看该作者
较好的方法是用中断:
通常时间中断也只能是ms级(即使是16位的计时器,最大为65536/11.0592MHz=5925.92ms),所以要中断种再额外增加一个计时器K,每次中断K+1,当K凑成一小时时,
就做个标记,例JD=1。
而主程序中只判断JD时否为1,为1就表求一个小时到了,处理一下继电器,要记住处理后清JD=0.
回复

使用道具 举报

8#
ID:123289 发表于 2016-6-7 14:00 | 只看该作者
最蠢也最简单的办法是再增加一个循b,嵌套在a循环中。在主程序中硬延时,要占用CPU的资源,CPU不能再做其它的事了。
回复

使用道具 举报

9#
ID:125600 发表于 2016-6-7 14:11 | 只看该作者
强烈建议用定时器,7楼正解
回复

使用道具 举报

10#
ID:63317 发表于 2016-6-7 15:47 来自手机 | 只看该作者
yzwzfyz 发表于 2016-6-7 14:00
较好的方法是用中断:
通常时间中断也只能是ms级(即使是16位的计时器,最大为65536/11.0592MHz=5925.92ms ...

能给个源码吗朋友
回复

使用道具 举报

11#
ID:97438 发表于 2016-6-7 16:42 | 只看该作者
void Timer0Init(void)                //10毫秒@12.000MHz
{
        AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式
        TL0 = 0xF0;                //设置定时初值
        TH0 = 0xD8;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}
void Timer0(void) interrupt 1
{
Timer_Counter++;   
if (Timer_Counter >= 100)
{
        Timer_Counter = 0;
        Sec++;
}
if (Sec >= 60)
{
        Sec = 0;
        Min++;
}
if (Min >= 60)
{
        Min = 0;
        Hour++;
}

}
回复

使用道具 举报

12#
ID:97438 发表于 2016-6-7 16:43 | 只看该作者
主程序中查询hour的值就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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