51单片机秒表实验的实验代码
时间: 2023-10-08 13:10:24 浏览: 108
以下是一个基于51单片机的秒表实验的代码,其中使用了定时器和中断来实现计时功能:
```
#include <reg51.h>
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
}; //数码管段码表
unsigned int count=0; //计数值
unsigned char second=0; //秒数
unsigned char minute=0; //分钟数
void display(unsigned char num, unsigned char pos) //数码管显示函数
{
LSA=1; LSB=1; LSC=1; //清零
P0=table[num]; //段码
switch(pos) //位码
{
case(1): LSA=0; break;
case(2): LSB=0; break;
case(3): LSC=0; break;
default: break;
}
}
void timer0() interrupt 1 //定时器0中断函数
{
TH0=(65536-50000)/256; //定时50ms
TL0=(65536-50000)%256;
count++; //计数值加1
if(count==20) //1s
{
count=0;
second++; //秒数加1
if(second==60) //1min
{
second=0;
minute++; //分钟数加1
}
}
}
void main()
{
TMOD=0x01; //定时器0,模式1
TH0=(65536-50000)/256; //定时50ms
TL0=(65536-50000)%256;
ET0=1; //允许定时器0中断
EA=1; //允许总中断
TR0=1; //启动定时器0
while(1)
{
display(minute/10, 1); //十位数
display(minute%10, 2); //个位数
display(second/10, 3); //十分秒
display(second%10, 4); //个位秒
}
}
```
在上述代码中,`timer0()` 函数是定时器0的中断函数,每50ms触发一次,计数值 `count` 加1,当 `count` 累计到20时(即1s),秒数 `second` 加1,当 `second` 累计到60时(即1min),分钟数 `minute` 加1。同时,数码管显示函数 `display()` 在主程序中不断地调用,将分钟数和秒数显示在数码管上。需要注意的是,此代码中使用了共阳极数码管,如果使用共阴极数码管需要修改 `table[]` 数组中的段码表。
阅读全文