单片机三位数码管显示秒表程序
时间: 2023-12-09 10:04:18 浏览: 210
下面是基于51单片机的三位数码管显示秒表程序,可以实现秒表计时和计次功能:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
// 数码管段选位选通端口
sbit dula = P2^6;
sbit wela = P2^7;
// 数码管段码定义
uchar code table[] = {
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f // 9
};
// 延时函数
void Delay(uint i)
{
while(i--);
}
// 数码管显示函数
void Display(uchar x, uchar y, uchar z)
{
uchar i;
dula = 1; // 打开第一位数码管
P0 = table[x];
Delay(100);
dula = 0; // 关闭第一位数码管
dula = 1; // 打开第二位数码管
P0 = table[y];
Delay(100);
dula = 0; // 关闭第二位数码管
dula = 1; // 打开第三位数码管
P0 = table[z];
Delay(100);
dula = 0; // 关闭第三位数码管
}
// 秒表计时函数
void Timer()
{
uchar i, j, k;
for(i = 0; i < 60; i++) // 秒数
{
for(j = 0; j < 60; j++) // 分钟数
{
for(k = 0; k < 10; k++) // 毫秒数
{
Display(j/10, j%10, i); // 显示分钟和秒钟
Delay(1000); // 延时1s
}
}
}
}
// 秒表计次函数
void Count(uint n)
{
uchar i, j, k;
while(n--)
{
for(i = 0; i < 60; i++) // 秒数
{
for(j = 0; j < 60; j++) // 分钟数
{
for(k = 0; k < 10; k++) // 毫秒数
{
Display(j/10, j%10, i); // 显示分钟和秒钟
Delay(1000); // 延时1s
}
}
}
}
}
void main()
{
wela = 0; // 全选通
Display(0, 0, 0); // 显示0
while(1)
{
if(P3 == 0x01) // 按键1按下
{
Timer(); // 秒表计时
}
if(P3 == 0x02) // 按键2按下
{
Count(5); // 秒表计次
}
}
}
```
在该程序中,我们使用了一个延时函数 `Delay()` 来实现程序的时间控制,可以根据实际需要进行调整。同时,我们还定义了一个数码管显示函数 `Display()`,通过控制数码管的段选位和位选通端口来实现三位数码管的显示。在主函数中,我们通过读取按键输入来触发秒表计时和计次功能。
阅读全文