51单片机LED 数码管秒表的设计c语言代码
时间: 2023-09-12 12:10:54 浏览: 192
51单片机实现简单的秒表(含原理图,代码)——C语言实现
5星 · 资源好评率100%
以下是51单片机LED数码管秒表的设计c语言代码:
```c
#include <reg52.h> // 引入51单片机头文件
sbit D1 = P2^0; // 数码管段选引脚
sbit D2 = P2^1;
sbit D3 = P2^2;
sbit D4 = P2^3;
sbit D5 = P2^4;
sbit D6 = P2^5;
sbit D7 = P2^6;
sbit D8 = P2^7;
sbit LSA = P1^0; // 数码管位选引脚
sbit LSB = P1^1;
sbit LSC = P1^2;
unsigned char code table[] = { // 数码管显示0-9的编码
0xC0, 0xF9, 0xA4, 0xB0, 0x99,
0x92, 0x82, 0xF8, 0x80, 0x90
};
void delay(unsigned int i) { // 延时函数
while(i--);
}
void main() {
unsigned int i, j; // 定义变量
unsigned char num[8] = { // 定义数组存放数码管显示的数值
0, 0, 0, 0, 0, 0, 0, 0
};
while(1) {
for(i = 0; i < 1000; i++) { // 循环1000次,即1秒钟
for(j = 0; j < 1000; j++) { // 等待1毫秒
num[0] = i / 100; // 计算百位数值
num[1] = (i % 100) / 10; // 计算十位数值
num[2] = i % 10; // 计算个位数值
num[3] = j / 100; // 计算毫秒百位数值
num[4] = (j % 100) / 10; // 计算毫秒十位数值
num[5] = j % 10; // 计算毫秒个位数值
num[6] = num[7] = 0; // 数码管留空
for(int k = 0; k < 8; k++) { // 数码管循环显示
switch(k) {
case 0: LSA = 0; LSB = 0; LSC = 0; break; // 第1位数码管
case 1: LSA = 1; LSB = 0; LSC = 0; break; // 第2位数码管
case 2: LSA = 0; LSB = 1; LSC = 0; break; // 第3位数码管
case 3: LSA = 1; LSB = 1; LSC = 0; break; // 第4位数码管
case 4: LSA = 0; LSB = 0; LSC = 1; break; // 第5位数码管
case 5: LSA = 1; LSB = 0; LSC = 1; break; // 第6位数码管
case 6: LSA = 0; LSB = 1; LSC = 1; break; // 第7位数码管
case 7: LSA = 1; LSB = 1; LSC = 1; break; // 第8位数码管
}
P0 = table[num[k]]; // 数码管显示数值
delay(100); // 延时100微秒
P0 = 0x00; // 关闭数码管
}
}
}
}
}
```
以上代码实现了一个简单的51单片机LED数码管秒表,使用定时器计算时间,循环显示数值。
阅读全文