#include "reg52.h"
void delay(unsigned int ms) {
// 简单的延时函数,具体实现取决于您的单片机时钟频率
// 这里只是一个占位符,您需要根据实际情况编写延时函数
unsigned int i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main() {
unsigned char i = 0; // 使用unsigned char来存储LED的状态,因为只需要0-7的值
P2 = 0xFF; // 初始化P2口所有LED为熄灭状态(假设高电平熄灭)
while (1) {
// 根据i的值点亮对应的LED
switch (i) {
case 0:
P2 = 0xBF; // 点亮第0个LED
break;
case 1:
P2 = 0xDF; // 点亮第1个LED
break;
case 2:
P2 = 0xEF; // 点亮第2个LED
break;
case 3:
P2 = 0xF7; // 点亮第3个LED
break;
case 4:
P2 = 0xFB; // 点亮第4个LED
break;
case 5:
P2 = 0xFE; // 点亮第5个LED
break;
case 6:
P2 = 0x7F; // 这里应该是0x7F而不是0xFF,因为0xFF会熄灭所有LED
// 但由于我们的逻辑是从0xBF开始的(即第0个LED点亮),
// 所以实际上在达到0xFF之前,我们已经遍历了所有LED。
// 因此,这里我们不需要设置P2为0x7F,而是应该让i重置为0。
// 但是,由于我们下面会有i = 0;的语句,所以这里可以留空或设置为任意值。
// 但为了代码清晰,我们可以选择不执行任何操作(即使用break;)。
break;
// 注意:我们没有case 7,因为当i=6时,我们会重置i为0。
// 如果真的需要case 7(比如为了完整性或后续扩展),可以在这里添加。
}
// 延时一段时间
delay(100); // 延时500毫秒,具体值可以根据需要调整
// 递增i,并在达到7后重置为0
i++;
if (i >= 7) { // 假设我们有7个LED需要遍历(实际上从0到6是7个状态)
i = 0; // 重置i为0,以重新开始循环
}
}
}
STC89C52单片机流水灯
最新推荐文章于 2025-03-15 14:58:53 发布