设计一个基于51单片机的秒表计时器,计时时间显示格式:hh.mm.ss.SS,计时器有两个按钮:启动/停止按钮、复位按钮。计时器有两种工作状态:停止状态、计时状态。c语言代码
时间: 2024-02-13 16:02:38 浏览: 139
基于51单片机的电子计时秒表设计
好的,以下是一个基于51单片机的秒表计时器的C语言代码,计时时间显示格式为hh.mm.ss.SS,计时器具有两个按钮:启动/停止按钮和复位按钮,计时器有两种工作状态:停止状态和计时状态。这个代码使用定时器0来计时,使用LCD模块来显示计时时间。
```
#include <reg51.h>
#include <stdio.h>
#include <lcd.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = "0123456789";
uchar hour = 0, minute = 0, second = 0, msec = 0, state = 0;
bit start_flag = 0;
bit stop_flag = 0;
void delayms(uint ms)
{
uint i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void init_timer0()
{
TMOD |= 0x01; //16位定时器模式
TH0 = 0x4C; //装初值,定时1ms
TL0 = 0x00;
ET0 = 1; //打开定时器0中断
TR0 = 1; //启动定时器0
EA = 1; //打开总中断允许
}
void count_timer0() interrupt 1
{
TH0 = 0x4C; //装初值,定时1ms
TL0 = 0x00;
msec++;
if (msec == 100)
{
msec = 0;
second++;
if (second == 60)
{
second = 0;
minute++;
if (minute == 60)
{
minute = 0;
hour++;
}
}
}
}
void display_time()
{
uchar str[16];
sprintf(str, "%02d.%02d.%02d.%02d", hour, minute, second, msec);
lcd_show_string(1, 1, str);
}
void main()
{
init_timer0();
lcd_init();
lcd_clear();
while (1)
{
if (start_flag)
{
start_flag = 0;
stop_flag = 1;
state = 1;
}
if (stop_flag)
{
stop_flag = 0;
start_flag = 1;
state = 0;
}
if (state == 1)
{
display_time();
delayms(10);
}
if (P3 & 0x20)
{
delayms(10);
if (P3 & 0x20)
{
if (state == 0)
{
start_flag = 1;
}
else
{
stop_flag = 1;
}
}
}
if (P3 & 0x40)
{
delayms(10);
if (P3 & 0x40)
{
hour = 0;
minute = 0;
second = 0;
msec = 0;
lcd_clear();
state = 0;
}
}
}
}
```
请注意,这只是一个简单的示例代码,具体实现可能需要进行适当修改以适应实际硬件和应用场景。
阅读全文