微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我的笨法C语言延时>10分钟程序,大侠们不要笑,试过有效的

我的笨法C语言延时>10分钟程序,大侠们不要笑,试过有效的

时间:10-02 整理:3721RD 点击:

/********************************************************************
实现功能:顺序控制程序
使用芯片:STC89C52RC
晶振:11.0592MHZ
编译环境:Keil
*********************************************************************/
/********************************************************************
四入四出继电器工控程序说明:
继电器K1闭合约>30秒后,继电器K1断开>10分钟,K3吸合,然后延时约>30秒,
继电器K3断开>30秒,如此循环!
*********************************************************************/
#include<reg52.h>          //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型
/********************************************************************
                            初始定义
*********************************************************************/
/*定义四位输入为单片机P1口*/
sbit IN0=P1^0;
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit IN3=P1^3;
/*定义四位输出为单片机P2口*/
sbit K1=P2^0;
sbit K2=P2^1;
sbit K3=P2^2;
sbit K4=P2^3;
/********************************************************************
                            延时函数
*********************************************************************/
void delay(uchar t)  //当t等于20时,大概延时0.2秒;当t等于10时,大概延时0.1秒;
{
uchar m,n,s;
for(m=t;m>0;m--)
for(n=500;n>0;n--)    //n=500"+"delay(500); //调用延时函数  为>30秒钟
for(s=248;s>0;s--);
}
/********************************************************************
                            主函数
*********************************************************************/
void main()
{
while(1)
{
K1=0; //继电器K1闭合
//K2=0; //继电器K2闭合
delay(500); //调用延时函数    //n=500"+"delay(500); //调用延时函数  为>30秒钟
K1=1; //继电器K1断开
//K2=1; //继电器K2断开
delay(500); //调用延时函数  //延时累计
delay(500); //调用延时函数  
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数  
delay(500); //调用延时函数  33*10=330秒=6分30秒
delay(500); //调用延时函数
delay(500); //调用延时函数  
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数  
delay(500); //调用延时函数  33*10*2=660秒=13分
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数
delay(500); //调用延时函数   累计15分钟
K3=0; //继电器K3闭合
//K4=0; //继电器K4闭合
delay(500); //调用延时函数
K3=1; //继电器K3断开
//K4=1; //继电器K4断开
delay(500); //调用延时函数
}
}
/********************************************************************
                              结束
*********************************************************************/

为什么要这样。定义uint 。不就行了么。100分钟都行啦

谢谢大侠指教!菜鸟不会,能帮助修改吗?不胜感激!

/**********************************************************
函数名称:delay_1ms
函数功能:1ms延时函数  12M晶振。,有点误差
入口参数:i  
出口参数:无
备  注:   
**********************************************************/
void delay_1ms(uint i)
{
        uint j;
        while(i--)
        {
                for(j=0;j<123;j++);
        }
}
、、、i和j的取值最大是65535 ,当i=50000时候,大约延时50S。然后你再嵌套一个循环,增加循环次数。就到10分钟了。
和你那个差不多。
    可以改一下j<123..改为j<65535   ,,也许一次循环就到10分钟了。具体参数自己仿真调试。
但是得提一下,你那个入口参数类型是uchar .最大取值255  。你却delay(500).明显超出类型会陷入无限循环。

谢谢大侠的指导,您的原理我已经懂了。
C语言没学过,函数的类型与取最大值都是一无所知的。如有车子放在旁边,不会开,运东西,只好边学车边挑了。哈哈!

谢谢小编分享了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top