使用单片机点亮32个LED心形灯是一个有趣的项目,适合练习GPIO控制和灯光动画。以下是一个简单的步骤指南和相关代码示例,帮助你完成这个项目。
使用软件
Keil uVision5和Proteus 8
电路连接
在Proteus 8 完成如图所示的仿真图连接:
使用电子元器件:AT89C51单片机,LED灯和74HC595寄存器等。
程序设计
#include <REGX51.H>
#include <INTRINS.H>
sbit DS = P2^0;
sbit SHCP = P2^1;
sbit STCP = P2^2;
void delay_ms(unsigned int ms) {
unsigned int i, j;
do {
i = 12;
while(--i)
j = 247;
while(--j);
} while(--ms);
}
void HC595_Send32(unsigned long dat) {
unsigned char i;
STCP = 0;
for(i=0; i<32; i++) {
SHCP = 0;
DS = (dat & 0x80000000) ? 1 : 0;
dat <<= 1;
SHCP = 1;
_nop_();
}
STCP = 1;
_nop_();
}
code unsigned long LED_TABLE[32] = {
0x00000001, 0x00000002, 0x00000004, 0x00000008,
0x00000010, 0x00000020, 0x00000040, 0x00000080,
0x00000100, 0x00000200, 0x00000400, 0x00000800,
0x00001000, 0x00002000, 0x00004000, 0x00008000,
0x00010000, 0x00020000, 0x00040000, 0x00080000,
0x00100000, 0x00200000, 0x00400000, 0x00800000,
0x01000000, 0x02000000, 0x04000000, 0x08000000,
0x10000000, 0x20000000, 0x40000000, 0x80000000
};
void main() {
unsigned char index = 0;
while(1) {
for(index=0; index<32; index++) {
HC595_Send32(LED_TABLE[index]);
delay_ms(100);
}
HC595_Send32(0x00000000);
delay_ms(1000);
}
}
将该程序写入单片机,即可实现32个LED灯流水灯的效果。
(学生小白写作,大佬不喜勿喷)