描述 stc单片机 按键控制灯亮灭和闪烁 上电灯不亮,按一下按键灯亮,再按一下灯闪烁,再按一下

描述stc单片机按键控制灯亮灭和闪烁上电灯不亮,按一下按键灯亮,再按一下灯闪烁,再按一下灯闪烁更快,再按一下灯灭。。。。如此循环... 描述
stc单片机
按键控制灯亮灭和闪烁

上电灯不亮,按一下按键灯亮,再按一下灯闪烁,再按一下灯闪烁更快,再按一下灯灭。。。。如此循环
展开
 我来答
zhxiufan
推荐于2016-02-12 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38384
国家科技进步奖

向TA提问 私信TA
展开全部
#include<reg51.h>
unsigned char times;
sbit key=P1^0;
sbit led=P1^4;
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
led=1;
while(1)
{
if(key==0)

{
while(key==0);

times++;

times%=3;

}

switch(times)

{
case 0:led=1;break;

case 1:led=0;break;

case 2:led=~led;delay(100);break;

default:break;

}

}

}
追问
你这个没有按键消震的程序
追答
按键消抖其实就是检测到有效按键后延时10~30毫秒再检测如果按键仍然有效则为按键有效.以下是加消抖的程序:
#include
unsigned char times;
sbit key=P1^0;
sbit led=P1^4;
void delay(unsigned char a)
{
unsigned char i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
led=1;
while(1)
{
if(key==0)

{
delay(10);

if(key==0)
{
while(key==0);

times++;
}
times%=3;

}

switch(times)

{
case 0:led=1;break;

case 1:led=0;break;

case 2:led=~led;delay(100);break;

default:break;

}

}

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2014-10-23 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
是需要程序吗?

什么语言?
追问
c语言
追答
#include
unsigned char n = 0;

sbit key = P3^7;
sbit led = P0^0;

void delay()
{
unsigned int i, j;
for(i = 0; i < 100; i++) for(j = 0; j <500; j++);
}

void readkey(void)
{
unsigned char i, j;
if(!key) {
for(i = 0; i < 10; i++) for(j = 0; j < 120; j++);
if(!key) {
n++;
n %= 4;
while(!key);
}
}
}

main()
{
while(1) {
switch(n) {
case 0: led = 1; readkey(); break;
case 1: led = 0; readkey(); break;
case 2: delay(); readkey();
case 3: delay(); readkey(); led = ~led;
}
}
}

本程序经过了实践验证,可以满足题目的要求。

提问者选择了一个错误的程序,并不能实现【闪烁】变换到【闪烁更快】。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式