51单片机数码管左移显示特效及LED流水爆闪实现方法
以下是使用51单片机实现该功能的伪代码:
#include <reg51.h>
void delay(unsigned int ms) {
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 1141; j++);
}
void displayNumber(unsigned char num) {
unsigned char segments[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0xEE, 0x3E, 0x9C, 0x7A, 0x9E, 0x8E};
P1 = segments[num];
}
void main() {
unsigned char digits[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
unsigned char i;
while(1) {
// 数码管显示01234567左移一位成12345678
for(i = 0; i < 8; i++) {
displayNumber(i);
delay(500);
}
// 数码管显示89ABCDEF然后显示9ABCDEF灭ABCDEF灭灭一直显示全灭
for(i = 8; i < 16; i++) {
displayNumber(i);
delay(500);
}
displayNumber(0xFF);
delay(500);
displayNumber(0xFF);
delay(500);
displayNumber(0xFF);
delay(500);
displayNumber(0xFF);
delay(500);
// 让蜂鸣器响2s
P2 = 0x01;
delay(2000);
P2 = 0x00;
// 全部左移出来
for(i = 0; i < 8; i++) {
displayNumber(digits[i]);
delay(500);
}
// 重复以上现象两次
for(i = 0; i < 8; i++) {
displayNumber(i);
delay(500);
}
for(i = 8; i < 16; i++) {
displayNumber(i);
delay(500);
}
displayNumber(0xFF);
delay(500);
displayNumber(0xFF);
delay(500);
displayNumber(0xFF);
delay(500);
displayNumber(0xFF);
delay(500);
P2 = 0x01;
delay(2000);
P2 = 0x00;
for(i = 0; i < 8; i++) {
displayNumber(digits[i]);
delay(500);
}
// LED流水五次
for(i = 0; i < 5; i++) {
P3 = 0x01;
delay(500);
P3 = 0x02;
delay(500);
P3 = 0x04;
delay(500);
P3 = 0x08;
delay(500);
P3 = 0x10;
delay(500);
P3 = 0x20;
delay(500);
P3 = 0x40;
delay(500);
P3 = 0x80;
delay(500);
}
// LED爆闪
for(i = 0; i < 5; i++) {
P3 = 0xFF;
delay(100);
P3 = 0x00;
delay(100);
}
}
}
请注意,以上代码只是伪代码,实际上还需要对芯片进行正确的初始化和引脚配置等。具体实现方式可能因使用的单片机型号而有所不同。
原文地址: https://www.cveoy.top/t/topic/lEP0 著作权归作者所有。请勿转载和采集!