使用51单片机89c52.
p1.0为低电平触发按键,p0.0为低电平输出触发继电器用的。
要求按下p1.0持续达到0.5秒(时间我可以改动),p0.0才会得到低电平让继电器跳动,约0.5秒后继电器再跳回。未达到指定时间不运行的,每次触发都是这么循环。
说明:自己写的代码貌似是时间叠加的比喻第一次约触发0.3秒虽然没有跳动,下次启动0.2秒就跳动了,所有不行,要每次都是从原始状态重新运行。
单片机按键延时给低电平代码
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
社区专家-Monster-XH 2023-11-10 14:35关注基于Monster 组和AIGC的调写:若有帮助,还望采纳~~:
- 代码如下
#include <REGX52.H> void delay(unsigned int ms) { // 一个大约1ms的延时函数,根据实际晶振频率调整 unsigned int i, j; for (i = ms; i > 0; i--) for (j = 110; j > 0; j--); } void main() { while (1) { if (P1_0 == 0) { // 检测按键是否按下 delay(500); // 延时0.5秒 if (P1_0 == 0) { // 再次检查按键是否仍然按下 P0_0 = 0; // 激活继电器 delay(500); // 维持0.5秒 P0_0 = 1; // 关闭继电器 } } } }这个代码片段执行以下操作:
- 持续检查P1.0是否被按下。
- 如果检测到按键按下,程序将等待0.5秒。
- 0.5秒后,如果按键仍然按下,则P0.0设为低电平激活继电器。
- 继电器保持激活状态0.5秒后,P0.0设回高电平关闭继电器。
- 如果按键在0.5秒内释放,不会激活继电器。
delay函数需要根据你的51单片机的晶振频率进行调整,以确保准确的延时。每个for循环的迭代次数取决于单片机的执行速度,你可能需要通过试验来确定适当的迭代次数以达到精确的延时。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录