找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1812|回复: 7
收起左侧

单片机声光报警程序,如何实现按住触摸按键,LED开始闪烁,松开触摸按键LED立即灭

[复制链接]
ID:902929 发表于 2021-4-11 00:12 | 显示全部楼层 |阅读模式
2222.png
回复

使用道具 举报

ID:884042 发表于 2021-4-11 01:13 | 显示全部楼层
这里将K1用作触摸按键,1为松开,0为按下。LED作为灯
代码:if(K1 == 0)
{
     LED=1;
     DELAY(3000);//延时
     LED=0;
     DELAY(3000);//延时
}
else

     LED=1;
回复

使用道具 举报

ID:902929 发表于 2021-4-11 10:30 | 显示全部楼层
xjx51 发表于 2021-4-11 01:13
这里将K1用作触摸按键,1为松开,0为按下。LED作为灯
代码:if(K1 == 0)
{

按照你这样确实可以实现,按住亮松开灭;可能我没有描述清楚,我的意思按住触摸按键,for语句一直运行LED闪烁,突然松开按键,LED灭;待再次按触摸按键,LED开始闪烁,松开LED即灭。
回复

使用道具 举报

ID:213173 发表于 2021-4-11 16:20 | 显示全部楼层
#include <reg51.h>

sbit key=P1^0;
sbit LED=P1^1;

bit flag;
unsigned char num;

void InitTimer0(void)//50ms@12MHz
{
    TMOD = 0x01;
    TH0 = 0x3C;
    TL0 = 0xB0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void main(void)
{
    InitTimer0();
    while(1)
    {
                if(!key)flag=1;
                else flag=0;
        }
}

void Timer0Interrupt(void) interrupt 1
{
        TH0 = 0x3C;
        TL0 = 0xB0;
        if(flag)
        {
                num++;
                if(num>=2)
                {
                        num=0;
                        LED=~LED;//低电平亮,闪烁频率5Hz
                }
        }
        else
        {
                num=0;
                LED=1;
        }
}
回复

使用道具 举报

ID:895574 发表于 2021-4-11 18:02 | 显示全部楼层
不是led=!led么,然后灭就是led为0么
回复

使用道具 举报

ID:668885 发表于 2021-4-12 11:07 | 显示全部楼层
LED取反也可以(不管它具体状态),或者直接设定LED=0
回复

使用道具 举报

ID:883031 发表于 2021-4-12 13:55 | 显示全部楼层
清冷萧然 发表于 2021-4-11 10:30
按照你这样确实可以实现,按住亮松开灭;可能我没有描述清楚,我的意思按住触摸按键,for语句一直运行LED ...

用for语句,执行不了其他动作,cpu的利用率会大大降低。
回复

使用道具 举报

ID:332214 发表于 2021-4-12 17:02 | 显示全部楼层
为什么要把检测按钮状态与灯的闪烁状态放在一个顺序逻辑上?外部中断、定时器都可以作为检测按钮状态来设置标志位,主程序执行灯闪烁与灭。条件满足啥执行啥,中断与定时器不影响主程序执行。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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