
4个回答
展开全部
#define LED P1
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
void delay(unsigned int t)//12M晶振延迟约1ms
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void LED1(void)//轮流亮
{
unsigned char i,dat=0x01;
for(i=0;i<8;i++)
{
LED=dat;
dat<<=1;
delay(1000);
}
}
void LED2(void)//逐点亮
{
unsigned char i,dat=0x01;
for(i=0;i<8;i++)
{
LED=dat;
dat<<=1;
dat |=1;
delay(1000);
}
}
void LED3(void)//间隔亮
{
unsigned char i;
for(i=0;i<8;i++)
{
LED=0xff;
delay(1000);
LED=0x00;
delay(1000);
}
}
void mian()
{
while(1)
{
if(!K1)LED1();
else if(!K2)LED2();
else if(!K3)LED3();
}
}
最简单的实现方式,实际应用还需要进行很多的处理,比如按键的防抖动等。
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
void delay(unsigned int t)//12M晶振延迟约1ms
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void LED1(void)//轮流亮
{
unsigned char i,dat=0x01;
for(i=0;i<8;i++)
{
LED=dat;
dat<<=1;
delay(1000);
}
}
void LED2(void)//逐点亮
{
unsigned char i,dat=0x01;
for(i=0;i<8;i++)
{
LED=dat;
dat<<=1;
dat |=1;
delay(1000);
}
}
void LED3(void)//间隔亮
{
unsigned char i;
for(i=0;i<8;i++)
{
LED=0xff;
delay(1000);
LED=0x00;
delay(1000);
}
}
void mian()
{
while(1)
{
if(!K1)LED1();
else if(!K2)LED2();
else if(!K3)LED3();
}
}
最简单的实现方式,实际应用还需要进行很多的处理,比如按键的防抖动等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是P1^0~P1.7吧,注意,P1^0,P1.1内接比较器,内部没有上拉电阻,(驱动二极管时,需要外接上拉),其他口都接了,直接驱动二极管没有问题,此单片机每个口都能有20mA的驱动电流;建议采用灌电流,就是二极管共阳极接法。2051晶振典型值为24MHz。
程序较简单,可参考楼上
程序较简单,可参考楼上
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、把K1\K2\K3连接到P3.0~P3.2
2、分别定义:K1=轮流亮、K2=逐点亮、K3=间隔亮
3、编程定义定义每个键按下去的动作即可。
需要注意,P1口直接驱动LED,可能亮度不够。
2、分别定义:K1=轮流亮、K2=逐点亮、K3=间隔亮
3、编程定义定义每个键按下去的动作即可。
需要注意,P1口直接驱动LED,可能亮度不够。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
2楼编了,要感谢人家
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询