Keil编程:51单片机键盘控制LED

打开单片机开关时,按照01010101点亮。按下按键1,实现流水灯功能;按下按键2,按01,23,45,67,01,23,,循环点亮;按下按键3,实现呼吸灯功能。想问一下... 打开单片机开关时,按照01010101点亮。按下按键1,实现流水灯功能;按下按键2,按01,23,45,67,01,23,,循环点亮;按下按键3,实现呼吸灯功能。想问一下程序该怎么编?
不要用汇编语言
展开
 我来答
意法半导体(中国)投资有限公司 2020-01-15
展开全部
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
zhxiufan
2017-11-19 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38398
国家科技进步奖

向TA提问 私信TA
展开全部
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar led1,led2;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
void delay(int a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
main()
{
unsigned int i;
led1=0xfe;
led2=0xfc;
while(1)
{
P0=0x55;
if(key1==0)
{
P0=led1;
led1=_crol_(led1,1);
delay(200);
}
if(key2==0)
{
P0=led2;
led1=_crol_(led1,2);
delay(200);
}
if(key3==0)
{
for(i=1;i<500;i++)
{
P0=0xff;
delay(i);
P0=0x00;
delay(500-i);
}
for(i=1;i<500;i++)
{
P0=0x00;
delay(i);
P0=0xff;
delay(500-i);
}
}
}
}
意法半导体(中国)投资有限公司
2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
11kxmx
2017-11-19 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:70%
帮助的人:3010万
展开全部
刚开始 输出0X55 或0xAA即可
然后判断按键是否按下
单灯流水 for(i=0;i<8;i++)
{ P1=0x01>>i;delayms(200);}
双灯流水
for(i=0;i<8;i+=2)
{ P1=0x03>>i;delayms(500);}
呼吸灯不知怎样呼吸,假如一个灯渐亮渐暗程序如下:
for(i=0;i<100;i++)
{ LED=0;delay100us(i);LED=1;delay100us(100-i);}
假设LED=0是点亮,那么上面就逐渐变亮过程
一亮一灭是10ms 250次就是2·5S
逐渐变暗过程和上面一样,只不过把LED=0 LED=1相互颠倒一下就是了
更多追问追答
追问
谢谢回答。
这些每个模块的编程都有,关键是不会和按键联系起来,例如按键1实现什么功能,按键2又实现什么功能,就想问问这些按键该怎么编程呢?
之前简单编了一下,发现按键1按下后,就陷入流水灯死循环,按键2就无反应了,想问问这该怎么解决,需要具体的编程,谢谢
追答
if(key1==0){消抖;flag=1;}//按键是非自锁的,用flag暂存后就实现了自锁,按一次丢手 flag值被保存,如果没有其它按键按下,则flag值不变
if(key2==0){消抖;flag=2;}
if(key3==0){消抖;flag=3;}
if(flag==1){单灯流水}//一次执行一次流水循环;不是死循环,但程序总体是大循环
因此如果没有其它按键按下,一直执行它,而不是仅仅一次
if(flag==2){双灯流水}
if(flag==3){呼吸灯}
呼吸灯呼吸一次时间长,期间对按键没有反应;可以在呼吸程序中间加Key1 key2判断
如果按下按键,flag值同样可以改变,并用break跳出循环
而流水灯流水一次时间短,按键多按一会就检测到了,如果嫌其反应慢,也可以像呼吸灯一样,中间加按键检测
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式