找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1029|回复: 4
收起左侧

按键指示灯闪烁,提示按下按键,单片机代码怎么写?求指导

[复制链接]
ID:709761 发表于 2022-4-26 16:54 | 显示全部楼层 |阅读模式
谢谢大家,非常感激大家在百忙之中抽时间回答我的问题.

程序要求是:按键灯先闪烁提示按下此键。按下后关闭闪烁
回复

使用道具 举报

ID:554500 发表于 2022-4-26 21:28 | 显示全部楼层


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

char st=0; //1-按键按下,0-按键释放

void LED_TASK()
{
  if(st)
  {
     LED=!LED; //灯闪烁
     delay(); //延时函数
   }
   else
  {
      LED=1;  //灯灭
   }
}

void KEY_SCAN()
{
     static char i=0,c=0;

    if(KEY==0)
   {
       if(i==0)
      {
            if(KEY==0&&c++>50)  //
           {
                i=1;
               st=1;   //按键按下
           }
     }
   }
   else  //按键释放,相应变量清零
  {
     i=0;
    c=0;
    st=0;
  }
}
回复

使用道具 举报

ID:709761 发表于 2022-4-27 09:55 | 显示全部楼层
按键灯闪烁提示按下此键,按下以后关闭闪烁
回复

使用道具 举报

ID:554500 发表于 2022-4-27 23:26 | 显示全部楼层

pic.gif

#include <reg52.h>

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

char st=0; //1-按键按下,0-按键释放

void delay(unsigned int x)
{
        while(x--);
}

void LED_TASK()
{
        static unsigned char i=0;
       
        if(i++<50)
                return;
        i=0;
       
  if(st)
  {
     LED=!LED; //灯闪烁

   }
   else
  {
      LED=1;  //灯灭
   }
}

void KEY_SCAN()
{
    static char i=0,c=0;

    if(KEY==0)
   {
       if(i==0)
      {
            if(KEY==0&&c++>50)  //
           {
                i=1;
               st=1;   //按键按下
           }
     }
   }
   else  //按键释放,相应变量清零
  {
    i=0;
    c=0;
    st=0;
  }
}

void main()
{
        while(1)
        {
                KEY_SCAN();
                LED_TASK();
                delay(10); //延时函数
        }
}

参考protus仿真.zip

4.63 MB, 下载次数: 2

回复

使用道具 举报

ID:149451 发表于 2022-4-28 05:02 | 显示全部楼层

我理解LZ的意思是没按下是LED闪烁,按一次其熄灭(相当于上电在某按键案件下LED闪烁,按下该键,LED熄灭)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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