51单片机实现按键控制8位流水灯逐位点亮和8位全亮/全灭仿真电路图
时间: 2024-06-08 22:09:46 浏览: 148
以下是基于Proteus软件的51单片机实现按键控制8位流水灯逐位点亮和8位全亮/全灭仿真电路图:
![image](https://user-images.githubusercontent.com/58088517/134018854-3d7c1e22-ae72-4d16-96e3-5f9e2c0a09ea.png)
其中,K1和K2代表两个按键,P1口接8位LED灯,P2口接K1和K2按键。
代码如下:
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; // 8位流水灯数据表
void delay(uint xms) // 延时函数
{
uint i, j;
for(i=xms; i>0; i--)
for(j=112; j>0; j--);
}
void main()
{
uchar i, j, k;
while(1)
{
if(P2 != 0xff) // 如果有按键按下
{
delay(10); // 延时去抖动
if(P2 != 0xff) // 再次判断是否有按键按下
{
if(P2 == 0xfe) // K1按键按下
{
P1 = 0xff; // 灯全亮
}
else if(P2 == 0xfd) // K2按键按下
{
P1 = 0x00; // 灯全灭
}
}
}
else // 如果没有按键按下
{
for(i=0; i<8; i++) // 8位流水灯
{
P1 = table[i]; // 显示第i个数据
for(j=0; j<50; j++) // 延时
{
for(k=0; k<50; k++);
}
}
}
}
}
```
注意:在实际硬件连接中,需要使用外部上拉电阻将K1和K2按键与VCC相连。
阅读全文