给我51单片机的代码,内容是创意彩灯要求:通过点亮组合发光二极管,显示不同的花样(至少有六种花样,三十二个灯),并且可以通过按键来控制花样切换的 速度
时间: 2024-02-13 18:06:36 浏览: 97
以下是一个简单的基于51单片机的创意彩灯代码,可以实现六种不同花样的显示,并且可以通过按键来控制花样切换的速度:
```c
#include <reg51.h> // 引入51单片机头文件
#define uchar unsigned char // 定义无符号字符类型
uchar patterns[6][32] = { // 定义六种花样,每个花样包含32个灯的状态
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 全灭
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}, // 全亮
{0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,
0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81}, // 正方形
{0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18}, // 十字架
{0x00,0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 等腰三角形
{0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x42,
0x24,0x18,0x18,0x24,0x42,0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,0x42,0x24} // 交叉
};
uchar speed = 0; // 定义初始速度为0
uchar count = 0; // 定义计数器,用于控制花样切换速度
void delay(uchar t) // 延时函数,用于控制花样切换的速度
{
uchar i, j;
for(i = 0; i < t; i++)
{
for(j = 0; j < 120; j++);
}
}
void main()
{
uchar i, j;
uchar key = 0; // 定义按键变量,用于控制花样切换速度
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0xfc; // 初始值
TL0 = 0x67;
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许总中断
while(1)
{
if(key != P1) // 检测按键是否有变化
{
delay(10); // 延时去抖
if(key != P1) // 再次检测按键是否有变化
{
key = P1;
speed++; // 花样切换速度加1
if(speed > 5) speed = 0; // 如果速度已经达到最大值,则重置为0
}
}
delay(20); // 延时,用于控制花样切换速度
}
}
void timer0() interrupt 1 // 定时器0中断服务程序
{
TH0 = 0xfc; // 重新加载初始值
TL0 = 0x67;
count++; // 计数器加1
if(count >= (6 - speed)) // 如果计数器达到花样切换速度
{
count = 0;
for(i = 0; i < 6; i++) // 显示六种不同的花样
{
for(j = 0; j < 32; j++) // 控制32个灯的状态
{
P2 = patterns[i][j]; // 将当前花样的状态输出到P2口
delay(1); // 延时,控制灯的亮灭
}
}
}
}
```
注意:这只是一个简单的示例代码,可能需要根据实际情况进行修改和优化。此外,由于我并不知道您使用的具体硬件平台和开发环境,以上代码可能需要根据实际情况进行调整和修改。
阅读全文