51单片机数码管显示头文件为#include<reg52.h>不加按键控制的秒表,秒表中能显示毫秒的代码
时间: 2023-12-29 20:02:27 浏览: 103
以下是一个使用51单片机控制数码管显示毫秒的简单秒表代码:
```c
#include <reg52.h>
sbit D1 = P1^0; // 数码管位选引脚
sbit D2 = P1^1;
sbit D3 = P1^2;
sbit D4 = P1^3;
unsigned char code LEDChar[] = { // 数码管显示字符编码
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90 // 9
};
void delay(unsigned int ms) {
unsigned int i, j;
for(i = ms; i > 0; i--)
for(j = 114; j > 0; j--);
}
void display(unsigned int ms) {
unsigned int i;
unsigned char digit[4] = {0};
digit[0] = ms / 1000;
digit[1] = (ms % 1000) / 100;
digit[2] = ((ms % 1000) % 100) / 10;
digit[3] = ((ms % 1000) % 100) % 10;
for(i = 0; i < 4; i++) {
switch(i) {
case 0:
D4 = 0;
D3 = 0;
D2 = 0;
D1 = 1;
P0 = LEDChar[digit[0]];
break;
case 1:
D4 = 0;
D3 = 0;
D2 = 1;
D1 = 0;
P0 = LEDChar[digit[1]];
break;
case 2:
D4 = 0;
D3 = 1;
D2 = 0;
D1 = 0;
P0 = LEDChar[digit[2]];
break;
case 3:
D4 = 1;
D3 = 0;
D2 = 0;
D1 = 0;
P0 = LEDChar[digit[3]];
break;
}
delay(2); // 数码管刷新延时
}
}
void main() {
unsigned int ms = 0;
while(1) {
display(ms); // 显示毫秒数
delay(1); // 毫秒级延时
ms++; // 毫秒数增加
if(ms > 9999) { // 毫秒数达到9999后归零
ms = 0;
}
}
}
```
这个代码通过循环不断地递增一个毫秒计数器,然后将计数器的值显示在数码管上。其中,`delay()` 函数用于延时,`display()` 函数用于将毫秒数转换为数码管的显示。在主函数中,通过不断增加毫秒数并显示,实现了一个简单的秒表功能。
阅读全文