
51单片机一键控制一个LED,每按一下按键LED闪烁一种频率,共闪烁三种频率.有好的答案加 10
第一次按下按键进入一种频率松手后还在这个频率中一直工作,当我第二次按下进入第二个频率松手后在第二个频率中一直工作,直到我在按下按键才改变依次类推。P1.0led输出,P3...
第一次按下按键进入一种频率松手后还在这个频率中一直工作,当我第二次按下进入第二个频率松手后在第二个频率中一直工作,直到我在按下按键才改变依次类推。P1.0 led输出,P3.4按键输入检测脚,,求一个C语言程序详解。
展开
4个回答
展开全部
#include<reg51.h>
unsigned char n = 0;
sbit key = P3^4;
sbit led = P1^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) {
while(!key); //等待按键释放
n++;
n %= 4; //n = 0~3
}
}
}
main()
{
while(1) {
switch(n) {
case 0: led = 1; readkey(); break; //熄灭
case 1: delay(); readkey(); //慢速闪烁
case 2: delay(); readkey(); //中速闪烁
case 3: delay(); readkey(); led = ~led; //快速闪烁
}
}
}
unsigned char n = 0;
sbit key = P3^4;
sbit led = P1^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) {
while(!key); //等待按键释放
n++;
n %= 4; //n = 0~3
}
}
}
main()
{
while(1) {
switch(n) {
case 0: led = 1; readkey(); break; //熄灭
case 1: delay(); readkey(); //慢速闪烁
case 2: delay(); readkey(); //中速闪烁
case 3: delay(); readkey(); led = ~led; //快速闪烁
}
}
}
更多追问追答
追答
你写的这种程序,一个个的函数,时间长短不齐。
用来控制不同的显示闪烁频率,还可以。
怎么能和读出按键联合使用?
检测按键,还能一会检测的密集一些,一会慢慢的检测?
----------
按键检测,是应该用同样的时间间隔来检测。
这样才不会遗漏按键的操作。
检测几十次、或检测几百次,改变一次LED,即可出现不同的闪烁频率。
应该先写好独立按键的检测程序,
然后再编写,如何控制闪烁延时的程序。
----------
我在上面给出的程序,可以实现不同的闪烁频率。
你可以试验一下。
展开全部
#include<reg51.h>
#define uchar unsigned char
sbit key=P3^4;
sbit led=P1^0;
uchar timeCnt=0;
void delay( unsigned int t)
{
uchar i,j;
for(i=t;i>0;i--)
for(j=250;j>0;j--);
}
void shanshuo1()
{
led=0;
delay(500);
led=1;
delay(500);
}
void shanshuo2()
{
led=0;
delay(1000);
led=1;
delay(1000);
}
void shanshuo3()
{
led=0;
delay(1500);
led=1;
delay(1500);
}
void main()
{
while(1)
{
if(key==0)
{
timeCnt++;
if(timeCnt==4) timeCnt=0;
}
if(timeCnt==1) shanshuo1();
if(timeCnt==2) shanshuo2();
if(timeCnt==3) shanshuo3();
}
}
#define uchar unsigned char
sbit key=P3^4;
sbit led=P1^0;
uchar timeCnt=0;
void delay( unsigned int t)
{
uchar i,j;
for(i=t;i>0;i--)
for(j=250;j>0;j--);
}
void shanshuo1()
{
led=0;
delay(500);
led=1;
delay(500);
}
void shanshuo2()
{
led=0;
delay(1000);
led=1;
delay(1000);
}
void shanshuo3()
{
led=0;
delay(1500);
led=1;
delay(1500);
}
void main()
{
while(1)
{
if(key==0)
{
timeCnt++;
if(timeCnt==4) timeCnt=0;
}
if(timeCnt==1) shanshuo1();
if(timeCnt==2) shanshuo2();
if(timeCnt==3) shanshuo3();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好!
是c语言还是汇编,私信说明一下
是c语言还是汇编,私信说明一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询