利用单片机和8 个LED 发光二极管等器件,制作一个单片机控制的流水灯系统: 单片机的P2.0~P2 .7 接有8个发光二极管, 运行程序,单片机控制8个发光二极管进行流水灯操作,流水灯从上到下依次点亮,反复循环。对本实验进行改进,增加一个按键接到P3.0,要求按一下即可实现流水灯的停止,再按一下又可实现流水灯的重新显示,原理图与代码应如何修改
时间: 2023-05-31 11:04:56 浏览: 365
原理图修改:
1. 在P3.0引脚处添加一个按键,将一端接GND,另一端接P3.0引脚。
2. 在按键的另一端和P3.0引脚之间串联一个10kΩ的上拉电阻。
代码修改:
1. 在主程序中添加一个全局变量stopFlag,用于存储流水灯的停止状态,默认值为0。
2. 在主程序中添加一个函数stopLight(),用于改变stopFlag的值,实现流水灯的停止和重新显示。
3. 在主程序的while循环中,通过判断stopFlag的值,来决定是否执行流水灯操作。
修改后的代码如下:
```C
#include <reg51.h>
#define LED P2
sbit KEY = P3^0;
unsigned char stopFlag = 0;
void delay(unsigned int i)
{
while(i--);
}
void stopLight()
{
if(stopFlag == 0)
stopFlag = 1;
else
stopFlag = 0;
}
void main()
{
unsigned char i;
while(1)
{
if(KEY == 0) // 检测按键是否按下
{
delay(1000); // 延时去抖
if(KEY == 0)
{
stopLight(); // 执行流水灯停止/重新显示操作
while(!KEY); // 等待按键释放
}
}
if(stopFlag == 0) // 判断流水灯是否停止
{
for(i=0; i<8; i++)
{
LED = ~(1<<i);
delay(50000);
}
for(i=7; i>0; i--)
{
LED = ~(1<<i);
delay(50000);
}
}
}
}
```
阅读全文