小白求助,单片机流水控制灯相关。

单片机求助 专栏收录该内容
1 篇文章 0 订阅

要求:利用P0口的低三位组成独立键盘,编写程序读取键盘的输入状态:

利用P1口控制共阳极的八只LED灯,
当1键按下后,LED进行自上而下流水闪烁,
当2键按下后,LED进行自下而上流水闪烁,当3键按下后,LED进行闪烁发光

进行流水灯操作是要求一次流水3秒钟,进行循环5次后,LED全部熄灭:

进行内烁操作是要求闪烁频率为2Hz,闪5次后修止闪烁,LED全部点亮:

以上操作进行过程中,健盘按下后,可随时切换LED发光模式
如图接线:在这里插入图片描述
程序:`
#include<reg51.h>

sbit key0 = P0^0;
sbit key1 = P0^1;
sbit key2 = P0^2;

void delay()
{
unsigned char i,j,k;
for(i=15;i>0;i–)
{
for(j=124;j>0;j–)
{
for(k=200;j>0;j–);
}
}

}
void delayh()
{//同上,0.5s
int d,f,t;
for(d=191;d>0;d–)
{
for(f=125;f>0;f–)
{
for(t=125;t>0;t–);
}
}
}

unsigned char keyscan()
{

unsigned char  keyscan_num, temp;
 
 P0  = 0xff ;
 temp = P0;
 
 if(~(temp&0xff))
 {		

      if(key0 == 0)
	  {
	     keyscan_num = 0;
	  }
	  else if(key1 == 0)
	  {
       	 keyscan_num = 1;
	  }
	  else if(key2 == 0)
	  {
	      keyscan_num = 2;
	  }
	  return keyscan_num;
 }

}

void main()
{
unsigned char key_num;
unsigned char a=0,b=0,c=0;
while(1)
{
key_num = keyscan();
switch(key_num)
{
case 0 :goto function0;
case 1 :goto function1;
case 2 :goto function2;
default :
break;
}
//由上往下
function0:
P1 = 0x7f;
delay();
P1 = 0xbf;
delay();
P1 = 0xdf;
delay();
P1 = 0xef;
delay();
P1 = 0xf7;
delay();
P1 = 0xfb;
delay();
P1 = 0xfd;
delay();
P1 = 0xfe;
delay();
a++;
if(a<=5)
{
key_num = keyscan();
switch(key_num)
{
case 0 : goto function0;
case 1 : goto function1;
case 2 : goto function2;
default : goto function0;
break;
}
}
else {break;}
//由下往上
function1 :
P1 = 0xfe;
delay();
P1 = 0xfd;
delay();
P1 = 0xfb;
delay();
P1 = 0xf7;
delay();
P1 = 0xef;
delay();
P1 = 0xdf;
delay();
P1 = 0xbf;
delay();
P1= 0x7f;
delay();
b++;
if(b<=5)
{
key_num = keyscan();
switch(key_num)
{
case 0 : goto function0;
case 1 : goto function1;
case 2 : goto function2;
default : goto function1;
break;
}
}
else {break;}

	 function2:
	 P1 = 0x00;
	 delayh();
	  c++;
	 if(c<=5)
	 {
	 key_num = keyscan();
	 switch(key_num)
			{
	    case 0 : goto function0;
		case 1 : goto function1;
		case 2 : goto function2;
		default : goto function2;
		break;
			}
	 }
	 else {P1 = 0x00;}
	 
}

}
`
问题描述:进行仿真的时候最后一个灯直接亮了……

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

晨 光 文 具_CraffeLi

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值