STC89C52单片机电子秒表代码
时间: 2023-06-18 15:05:46 浏览: 120
以下是STC89C52单片机电子秒表的简单代码:
```
#include <reg52.h> //头文件
sbit LSA = P2^2; //数码管LS138的A0
sbit LSB = P2^3; //数码管LS138的A1
sbit LSC = P2^4; //数码管LS138的A2
sbit key1 = P3^0; //按键1
sbit key2 = P3^1; //按键2
unsigned char code table[] = { //数码管显示0~9的值
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
unsigned char second = 0; //秒数
unsigned char minute = 0; //分钟数
unsigned char hour = 0; //小时数
void display(unsigned char num) //数码管显示函数
{
LSA = 0; LSB = 0; LSC = 0; P0 = table[num%10]; //个位
delay(5);
LSA = 1; LSB = 0; LSC = 0; P0 = table[num/10]; //十位
delay(5);
}
void main()
{
TMOD = 0x01; //定时器0工作在模式1
TH0 = 0x3c; //计时1ms
TL0 = 0xb0;
TR0 = 1; //启动定时器0
ET0 = 1; //开定时器0中断
EA = 1; //全局中断开启
while(1)
{
display(hour); //显示小时数
display(minute); //显示分钟数
display(second); //显示秒数
if(key1 == 0) //按键1按下
{
delay(10); //延时去抖
if(key1 == 0) //再次检测按键1是否按下
{
TR0 = 0; //停止定时器0
second = 0; minute = 0; hour = 0; //清零
TR0 = 1; //重新启动定时器0
}
while(!key1); //等待按键1释放
}
if(key2 == 0) //按键2按下
{
delay(10); //延时去抖
if(key2 == 0) //再次检测按键2是否按下
{
TR0 = 0; //停止定时器0
}
while(!key2); //等待按键2释放
}
}
}
void timer0() interrupt 1 //定时器0中断函数
{
TH0 = 0x3c; //计时1ms
TL0 = 0xb0;
second++; //秒数加1
if(second == 60) //一分钟
{
second = 0; minute++; //秒数清零,分钟数加1
if(minute == 60) //一小时
{
minute = 0; hour++; //分钟数清零,小时数加1
if(hour == 24) //一天
{
hour = 0; //小时数清零
}
}
}
}
void delay(unsigned int i) //延时函数
{
unsigned int j, k;
for(j = i; j > 0; j--)
{
for(k = 110; k > 0; k--);
}
}
```
该程序实现了秒表的计时和清零功能,并且可以通过按键来暂停计时。其中用到了定时器0和其中断函数,以及延时函数和数码管显示函数等。用户可以根据具体需要进行修改和扩展。
阅读全文