嵌入式流水灯设计,实现左右循环的流水灯功能的课程设计
时间: 2024-03-17 07:45:36 浏览: 53
基于ARM的嵌入式循环彩灯课程设计.doc
嵌入式流水灯设计通常使用单片机实现。以下是一个基于51单片机的左右循环流水灯设计方案:
硬件设计:
1. 51单片机
2. LED灯
3. 电阻
4. 按键
5. 杜邦线
6. 面包板
软件设计:
在Keil C51编译器中编写程序,实现左右循环流水灯的功能。
程序设计:
1. 定义I/O口
```c
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED4 = P0^3;
sbit LED5 = P0^4;
sbit LED6 = P0^5;
sbit LED7 = P0^6;
sbit LED8 = P0^7;
sbit KEY1 = P3^0; // 定义按键
```
2. 定义延时函数
```c
void Delay(unsigned int i)
{
while(i--);
}
```
3. 定义主函数
```c
void main()
{
unsigned char i = 0; // 定义变量i
unsigned char flag = 0; // 定义标志位
while(1) // 无限循环
{
if(KEY1 == 0) // 检测按键是否按下
{
Delay(5000); // 延时去抖
if(KEY1 == 0) // 再次检测按键是否按下
{
flag = !flag; // 改变标志位的状态
while(!KEY1); // 等待按键释放
}
}
if(flag == 0) // 左循环
{
for(i = 0; i < 8; i++) // 8个LED灯循环
{
switch(i) // 判断灯的位置
{
case 0: LED1 = 0; break;
case 1: LED2 = 0; break;
case 2: LED3 = 0; break;
case 3: LED4 = 0; break;
case 4: LED5 = 0; break;
case 5: LED6 = 0; break;
case 6: LED7 = 0; break;
case 7: LED8 = 0; break;
}
Delay(50000); // 延时
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 1; // 灯全灭
Delay(50000); // 延时
}
}
else // 右循环
{
for(i = 7; i >= 0; i--) // 8个LED灯循环
{
switch(i) // 判断灯的位置
{
case 0: LED1 = 0; break;
case 1: LED2 = 0; break;
case 2: LED3 = 0; break;
case 3: LED4 = 0; break;
case 4: LED5 = 0; break;
case 5: LED6 = 0; break;
case 6: LED7 = 0; break;
case 7: LED8 = 0; break;
}
Delay(50000); // 延时
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 1; // 灯全灭
Delay(50000); // 延时
}
}
}
}
```
这个程序实现了一个基于51单片机的左右循环流水灯。按下按键可以切换左右循环灯的方向。
阅读全文