C51编程完成单片机控制 3位数码管动态显示 000 ~100
时间: 2024-03-19 16:44:05 浏览: 143
以下是一个使用C51单片机控制3位数码管动态显示000~100的示例代码:
```c
#include <reg52.h>
// 定义数码管连接的IO口
#define DATA P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
// 定义计数变量
unsigned int cnt = 0;
// 数码管显示的数字
unsigned char code DisplayData[17] = {
// 0~9
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f,
// A~F
0x77, 0x7c, 0x39, 0x5e, 0x79,
0x71, 0x3d, 0x76
};
// 延时函数
void Delay(unsigned int i) {
while(i--);
}
// 数码管动态扫描函数
void DigDisplay() {
unsigned char i;
unsigned char buf[3];
buf[0] = cnt / 100; // 百位
buf[1] = cnt / 10 % 10; // 十位
buf[2] = cnt % 10; // 个位
for(i = 0; i < 3; i++) {
DATA = DisplayData[buf[i]];
switch(i) {
case(0):
LSA = 0; LSB = 0; LSC = 0; break; // 第一位,选择第一个数码管
case(1):
LSA = 1; LSB = 0; LSC = 0; break; // 第二位,选择第二个数码管
case(2):
LSA = 0; LSB = 1; LSC = 0; break; // 第三位,选择第三个数码管
}
Delay(100); // 扫描间隔
DATA = 0x00; // 清空数据口
}
}
// 主函数
void main() {
while(1) {
DigDisplay(); // 数码管动态扫描
cnt++; // 计数器加1
if(cnt == 101) cnt = 0; // 计数器清零
}
}
```
该程序中,使用P0口连接了3个数码管,使用P2.2、P2.3、P2.4三个IO口控制数码管选择。程序中使用了一个计数变量cnt,每次数码管扫描时将其转换为三个数字,并在对应的数码管上显示。同时,程序使用一个循环,每次计数器加1并进行数码管扫描,当计数器达到101时,将其清零重新开始计数。
注意,在实际使用中,需要根据具体的硬件连接情况进行修改。
阅读全文