数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 414|回复: 6

[C51] 帮我写一段代码 STC89c52单片机检测开关不停的按下松开就不报警 超过1秒...

[复制链接]
发表于 2025-6-18 23:44:15 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
代码要求:STC89c52单片机,检测一个开关如果一直不停的按下松开(1秒大概3次)就不报警,如果一直按下或一直松开就报警,时长定在1秒,超过1秒就报警。
我用豆包生成了很多个都没有成功,AI也不行啊,看着生成的代码感觉写的真好,就是不能实现功能,真奇怪。请大家在开发板上试试代码
发表于 2025-6-19 01:45:08 | 显示全部楼层
你上一个问题3年前也是关于按键。。。如果3年都搞不定按键还是弃坑吧
回复 支持 反对

使用道具 举报

发表于 2025-6-19 01:58:12 | 显示全部楼层
不就个摇篮系统么,罗辑直呼专业。 上硬件实现,功能更稳,三体更怕怕

参数给你仿真好了,照着这个搭就能一行代码不用写:



Q1-Q3 集电极波形给你仿出来,目前电位器 1/2 位置差不多就是 1s 报警延时,原理凑合看:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2025-6-19 08:44:18 | 显示全部楼层
定义2个变量,

if(key==0)
{ cnt1=0;}

if(key==1)
{ cnt2=0;}

定时器做一个1秒定时
cnt1++;
cnt2++;
if((cnt1==1000) || (cnt2==1000))  // 加到1000就是1秒
{
    cnt1=0;
    cnt2=0;
    out=1;  //输出


如果开关在1秒内有变化,cnt就会被清零,如果没变化就会有一个到1秒 溢出,
回复 支持 反对

使用道具 举报

发表于 2025-6-19 14:27:53 | 显示全部楼层
设定一个1s定时器,定时到就输出,然后开关检测到变化就复位定时器从头开始
如果用新的带上下边沿触发的片子就更简单些,直接用两个边沿触发中断复位定时器
回复 支持 反对

使用道具 举报

发表于 2025-6-19 17:26:11 | 显示全部楼层
bit getkeyflag=0;
int sj=0;

//key1=按钮



if( getkeyflag!=key1)//检测按钮有变化
{
getkeyflag=key1;
sj=0;//清零时间数值
}



DelayMs(1);//延时1ms
sj++;//当没有按钮变化,时间值一直++,
if(sj>=1000)//值加到1000毫秒,满足条件
{
//条件满足,报警


}
回复 支持 反对

使用道具 举报

发表于 2025-6-20 08:40:23 | 显示全部楼层
红外遥控8路搞了近10年,成功时落泪
继续努力,循序渐进不要一曝十寒
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-23 04:57 , Processed in 0.171600 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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