标题: 小白求单片机编程思路,怎样实现定时? [打印本页]

作者: 芙蓉焊料    时间: 2023-9-19 09:48
标题: 小白求单片机编程思路,怎样实现定时?
用51单片机业余制作:按键加减1-9,代表1-9小时,单只数码管显示数字,到设定数字时间后启动28BYJ-48步进电机输出一定角度,然后停止3sz再转动同样角度,等待下一次定时到,请教怎样实现呢?求程序思路,万分感谢!

作者: jeyran    时间: 2023-9-19 17:25
要简单点的话,直接死等模式去做
作者: jeyran    时间: 2023-9-19 17:36
要简单点的话,直接死等模式吧:
while(1)
{
  while(m)
  {
     m --;
     delay_10ms();
     if(detect_keyboad())//有动作
     {
        n = get keyboard set();//获取设定值
        m = n *100;
        break;
      }
      
  }
  motor ctrl//转动电机
}
作者: 294479435    时间: 2023-9-19 17:43
建议分模块,按键只负责按键处理,比如扫描或者中断,显示负责显示,固定刷新率更新显示,步进电机负责步进电机
作者: xiaoshidai    时间: 2023-9-19 17:47
294479435 发表于 2023-9-19 17:43
建议分模块,按键只负责按键处理,比如扫描或者中断,显示负责显示,固定刷新率更新显示,步进电机负责步进 ...

初学者还是要有分模块的良好习惯
作者: 大漠落日    时间: 2023-9-19 17:55
直接上定时器,产生50ms中断,在中断中累加产生秒中断标志,当你设定定时后,开始计时,时间到,置位定时到标志,然后,输出一串脉冲,脉冲数目对应步进电机转动角度。做后再延时计时3秒,重新输出脉冲转动步进电机。
作者: yzwzfyz    时间: 2023-9-20 09:10
多读单片机原理的书,而后再行行动。这样靠谱一些。
作者: hero_71    时间: 2023-9-20 10:48
使用定时器T1和T2配置系统时间和定时时间,T1运行到T2的时间时,T2触发中断。此时,配置定时器0/1,计数3s的tick数,到了触发中断,中断事件中控制步进电机转动角度。
作者: 小飞飞呀呀    时间: 2023-10-7 22:45
1.使用延时函数 可以使用STM32提供的延时函数来实现延时功能,延时函数根据CPU时钟频率和延时时间计算出延时的时间,在延时期间CPU处于忙等待状态。  需要注意的是,延时函数会占用过多的CPU资源,并且在延时期间无法执行其他任务。  这种方式是初学者玩的,如果用到实际项目,除了大聪明,我找不到更好的词夸你。  2.使用定时器和中断 可以使用STM32内置的定时器和中断来实现延时功能。  将定时器配置为2小时的定时周期,并启用定时器中断。  在中断处理函数中设置标志位表示延时结束,并执行相应的操作。  需要注意的是,定时器中断的频率不能太高,否则会占用过多的系统资源,但中断频率也不能太慢,毕竟定时器是稀缺资源,一个定时器可能有很多不同的定时需求。  这个可能是最多人的选择,毕竟省心、省成本。  3.使用RTC实时时钟 可以使用STM32内置的RTC实时时钟模块来实现延时功能。  将RTC设置为2小时的计时周期,并启用RTC中断。  在中断处理函数中设置标志位表示延时结束,并执行相应的操作。  需要注意的是,RTC的精度相对于定时器较高,但配置和使用上相对复杂。  我一般不会用这种,因为配置比较麻烦,我比较懒。  4.使用外部实时时钟模块 可以使用外部的实时时钟模块,如DS1302等,来实现延时功能。  将实时时钟模块连接到STM32的GPIO口,通过SPI或I2C等总线协议与STM32进行通信,获取当前时间并计算出延时结束的时间。  需要注意的是,外部实时时钟模块的精度和配置相对于RTC更加复杂。  这种方式有点脱裤子放屁的感觉,还会增加硬件成本,不过有些场合确实需要这样做,比如你看老板不爽,老板又不懂技术的时候。
作者: zyftank    时间: 2023-10-8 09:32
定时可以用定时器实现
作者: 圣博朗西斯    时间: 2023-10-27 13:40
学会用定时器很重要的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1