用at89c52 . 两个按键,第一个按键按下不松开,第二个按键松开,实现第一种流水灯, 八个 LED 依次点亮,每次亮一个;第一个按键松开,第二个按键按下不松开,实 现第二种流水灯,八个 LED 依次灭一个,七个亮,一个灭电路连接方式
时间: 2024-04-05 21:02:10 浏览: 147
基于at89c52单片机的流水灯程序
这是一道和上一道题目相似的问题,只是实现的流水灯的亮灭方式不同。以下是基于AT89C52实现上述功能的电路连接方式:
<img src="https://img-blog.csdnimg.cn/20211210150846401.png" width="600">
按键1接在P3.2引脚,按键2接在P3.3引脚。8个LED灯分别接在P0口的8个引脚。
程序代码如下:
```c
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit key1 = P3^2;
sbit key2 = P3^3;
void delay(uint xms) //延时函数
{
uint i, j;
for(i=xms; i>0; i--)
for(j=110; j>0; j--);
}
void main()
{
uchar i, j;
while(1)
{
if(key1 == 0) //第一个按键按下
{
while(key2 == 1) //等待第二个按键按下
{
for(i=0; i<8; i++)
{
P0 = ~(1<<i); //依次点亮
delay(100);
}
}
}
else if(key2 == 0) //第二个按键按下
{
while(key1 == 1) //等待第一个按键按下
{
for(i=7; i>=0; i--)
{
P0 = ~(0x7f>>i); //依次灭去
delay(100);
}
}
}
else
{
P0 = 0xff; //熄灭所有LED灯
}
}
}
```
程序的逻辑如下:
当第一个按键按下后,程序进入循环,等待第二个按键按下。一旦检测到第二个按键按下,程序开始执行第一种流水灯的逻辑:依次点亮8个LED灯,每次只有一个亮。
当第二个按键按下后,程序进入循环,等待第一个按键按下。一旦检测到第一个按键按下,程序开始执行第二种流水灯的逻辑:依次灭去8个LED灯,每次只有一个灭。
当两个按键都没有按下时,所有LED灯都熄灭。
阅读全文