Keil 编程技巧:实现 8 个 LED 流水灯和数码管动态显示
使用 Keil 软件实现 8 个 LED 流水灯和数码管动态显示
本文将介绍使用 Keil 软件编写代码,实现 8 个 LED 流水灯和数码管动态显示的两种方法。
1. 利用串行口实现 8 个 LED 流水灯的效果
#include <reg52.h>
sbit SER = P1^0;
sbit RCLK = P1^1;
sbit SRCLK = P1^2;
void delay(unsigned int time) {
while(time--);
}
void shiftOut(unsigned char dat) {
unsigned char i;
for(i = 0; i < 8; i++) {
SER = dat & 0x80;
dat <<= 1;
SRCLK = 0;
SRCLK = 1;
}
RCLK = 0;
RCLK = 1;
}
void main() {
unsigned char i, j;
while(1) {
for(i = 0; i < 8; i++) {
shiftOut(1 << i);
delay(50000);
}
for(j = 0; j < 8; j++) {
shiftOut(0x80 >> j);
delay(50000);
}
}
}
2. 时间间隔为 1s,实现 8 个 LED 流水灯的效果
#include <reg52.h>
sbit SER = P1^0;
sbit RCLK = P1^1;
sbit SRCLK = P1^2;
unsigned int count = 0;
void delay(unsigned int time) {
while(time--);
}
void shiftOut(unsigned char dat) {
unsigned char i;
for(i = 0; i < 8; i++) {
SER = dat & 0x80;
dat <<= 1;
SRCLK = 0;
SRCLK = 1;
}
RCLK = 0;
RCLK = 1;
}
void timer0() interrupt 1 {
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
count++;
if(count == 20) {
count = 0;
shiftOut(0xff);
delay(50000);
shiftOut(0x00);
delay(50000);
}
}
void main() {
TMOD = 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
EA = 1;
ET0 = 1;
TR0 = 1;
while(1);
}
代码说明:
- 代码使用 Keil 软件进行编译和调试。
- 代码中使用了 51 单片机自带的定时器 0,实现了 1 秒的时间间隔。
- 代码中定义了 shiftOut 函数,用于将数据写入串行口,实现 LED 的控制。
- 代码中定义了 delay 函数,用于实现时间延时。
总结:
本文介绍了两种使用 Keil 软件实现 8 个 LED 流水灯和数码管动态显示的方法。第一种方法使用串行口进行控制,第二种方法使用定时器 0 实现时间间隔。用户可以根据自己的需求选择合适的方案进行实现。
希望本文对你有所帮助。
原文地址: https://www.cveoy.top/t/topic/oh31 著作权归作者所有。请勿转载和采集!