[技术讨论] 小白请教各位大神,延时函数怎么写?

[复制链接]
 楼主| 曾小白 发表于 2024-11-25 16:01 | 显示全部楼层 |阅读模式
各位大佬,想要在这个程序的基础上增加一个延时函数,作用是想要在上电前三秒系统不工作,所以想延时3s才开始工作,按键生效。
#include <sc.h>//芯片头文件,会根据工程选项自动寻找对应型号头文件

#define uint8_t  unsigned char
#define uint16_t unsigned int
#define uint32_t unsigned long int


#define  FinshDingShi_8H              959  //定时8小时
#define  FinshDingShi_12H            1439  //定时12小时
#define  DLU_FinshDingShi            2879  

//#define  FinshDingShi_4MIN             7   //3MIN
//#define  DLU_FinshDingShi            11  //6MIN   

#define  LED1    RB1
#define  LED2    RB0
#define  LED3    RB4

#define  PTC_EN    RB2

#define  KEY       RB3

#define  FST       RB5

volatile  bit  Start_flat;
volatile  bit  Get_AC220_flat;
volatile  bit  biaozhi1;
volatile  bit  PTC_GPIO_flat;
volatile  uint16_t  tt=0;
volatile  uint16_t  aa=0;
volatile  uint16_t  Timer=0;
volatile  uint8_t   count=0;
volatile  uint8_t   Ptc_DingShi_flat=0;
volatile  uint8_t   count1=0;

void Init_System();


void   KEY_Ptc_DingShi_Scan(void)
{
   if(KEY)
   {
      if(count1>5)
      {
         Ptc_DingShi_flat++;
            if(Ptc_DingShi_flat>3)Ptc_DingShi_flat=0;
            aa=0;Timer=0;
         count1=0;
      }
      biaozhi1=0;count1=0;   
   }
   else if(biaozhi1==0)
   {
      if(KEY==0)
      {
         count1++;
         if(count1==65500)
         {
            count1=0;biaozhi1=1;
         }
      }
   }
}

void main()
{
Start_flat=0;
    Get_AC220_flat=0;
biaozhi1=0;
PTC_GPIO_flat=0;
Init_System();
Get_AC220_flat=1;
while(1)
{
asm("clrwdt");
KEY_Ptc_DingShi_Scan();
if(!FST)
{

if(!FST)
{
if(Start_flat==1)
{
aa++;
if(aa>=1500)
{
aa=0;
Timer++;
}  
}
count++;
if(count>2)
{
Get_AC220_flat=1;
count=0;
}
while(!FST);
}
}
if(Get_AC220_flat==1)
{
if(Ptc_DingShi_flat==0)
{
LED1=0;LED2=0;LED3=0;
PTC_EN=0;PTC_GPIO_flat=0;
Start_flat=0;   
}
else if(Ptc_DingShi_flat==1)
{
Start_flat=1;
LED1=0;
LED3=0;
if(Timer<=FinshDingShi_8H )
              {
LED2=1;
PTC_EN=1;
PTC_GPIO_flat=1;
              }
              else   if((Timer>FinshDingShi_8H )&&(Timer<=DLU_FinshDingShi))
              {
LED2=0;
PTC_EN=0;
PTC_GPIO_flat=0;
              }
              else if(Timer>DLU_FinshDingShi)
              {
Timer=0;aa=0;
              }
}
else if(Ptc_DingShi_flat==2)
{
Start_flat=1;
LED2=0;
LED3=0;
if(Timer<=FinshDingShi_12H )
              {
LED1=1;
PTC_EN=1;
PTC_GPIO_flat=1;
              }
              else   if((Timer>FinshDingShi_12H )&&(Timer<=DLU_FinshDingShi))
              {
LED1=0;
PTC_EN=0;
PTC_GPIO_flat=0;
              }
              else if(Timer>DLU_FinshDingShi)
              {
Timer=0;aa=0;
              }
}
else if(Ptc_DingShi_flat==3)//定时24小时=浅黄
{
Start_flat=1;
LED2=0;
LED1=0;
LED3=1;
PTC_EN=1;
PTC_GPIO_flat=1;
}
}
}
}
谢谢大佬们

评论

@xch :就是为了防止误判,通电后前三秒执行任何操作无效  发表于 2024-11-26 12:16
xch
“上电前系统不工作3秒” 好古怪的需求。也许烧柴油的内燃机可以工作。  发表于 2024-11-26 10:15
 楼主| 曾小白 发表于 2024-11-25 16:07 | 显示全部楼层
请问如何根据单片机内部晶振,设置延时函数?计算方式是什么样的?
求教!!!
 楼主| 曾小白 发表于 2024-11-26 08:42 | 显示全部楼层
有没有大佬帮帮忙啊?
咕咕呱呱孤寡 发表于 2024-11-26 08:50 | 显示全部楼层
定时器延时也行啊
 楼主| 曾小白 发表于 2024-11-26 09:10 | 显示全部楼层

那定时器延时该如何写?我纯新手,不太会
咕咕呱呱孤寡 发表于 2024-11-26 09:15 | 显示全部楼层
找个定时器的例程,自己看看计时是怎么整的,然后自己加判断,到你设定的值就启动
xionghaoyun 发表于 2024-11-26 11:29 | 显示全部楼层
while
前功尽弃 发表于 2024-11-26 11:36 | 显示全部楼层
曾小白 发表于 2024-11-26 09:10
那定时器延时该如何写?我纯新手,不太会

程序是怎么在执行流程的先去搞懂,这样你能明白怎么操作延时了 。或则花点学费,哈哈
chenczyaa 发表于 2024-11-26 13:07 | 显示全部楼层
这个要看你的晶振的啊,百度一下,直接用for就好了,放在main里的第一个运行就行了
xch 发表于 2024-11-26 17:57 | 显示全部楼层
在这个 Init_System() 函数里面启动一个定时器用作定时10mS中断源。
中断次数达到300次就调用 KEY_Ptc_DingShi_Scan 函。


另外文中  “flat”  是不是 flag 的意思?

 楼主| 曾小白 发表于 2024-11-30 12:04 | 显示全部楼层
丙丁先生 发表于 2024-11-26 13:57
//好的,我会逐行注释代码并添加延时函数。
//```c
#include  // 芯片头文件,会根据工程选项自动寻找对应 ...

谢谢大佬的回复,最后的开发板和原理图是想表达什么呢?
 楼主| 曾小白 发表于 2024-11-30 12:07 | 显示全部楼层
xch 发表于 2024-11-26 17:57
在这个 Init_System() 函数里面启动一个定时器用作定时10mS中断源。
中断次数达到300次就调用 KEY_Ptc_Din ...

应该是类似的意思,这个源码是上一个工程师遗留的
 楼主| 曾小白 发表于 2024-11-30 12:08 | 显示全部楼层
chenczyaa 发表于 2024-11-26 13:07
这个要看你的晶振的啊,百度一下,直接用for就好了,放在main里的第一个运行就行了 ...

我知道要看晶振,其实我之前的意思是说如何根据单片机晶振,设定延时函数。因为我之前都是直接用串口生产的,目前这一款单片机,并没有这样的工具,我才发现好像真的要自己设置一个延时函数的话我还没有弄明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部