c51单片机秒表程序c语言,利用51单片机制作秒表的详细过程
时间: 2023-08-13 19:04:54 浏览: 224
以下是一个简单的C51单片机秒表程序:
```
#include<reg52.h>
#include<intrins.h>
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
unsigned char xdata disp[6]={0,0,0,0,0,0}; //定义计时器每位的值
unsigned char xdata time_count=0; //定义计时器中断次数
bit flag=0; //定义计时器开关
void delay(unsigned int i) //延时函数
{
unsigned int j,k;
for(j=i;j>0;j--)
for(k=110;k>0;k--);
}
void init() //初始化函数
{
TMOD=0x01; //设置定时器0为模式1
TH0=(65536-50000)/256; //设置定时器初值
TL0=(65536-50000)%256;
TR0=1; //开启定时器0
ET0=1; //开启定时器0中断
EA=1; //开启总中断
}
void main()
{
init();
while(1)
{
if(k1==0) //开始计时
{
flag=1;
delay(10); //消抖
if(k1==0) //再次判断按键是否按下
{
flag=1;
time_count=0;
}
}
else if(k2==0) //停止计时
{
flag=0;
delay(10);
if(k2==0)
{
flag=0;
time_count=0;
}
}
else if(k3==0) //复位计时
{
flag=0;
delay(10);
if(k3==0)
{
flag=0;
time_count=0;
disp[0]=0;
disp[1]=0;
disp[2]=0;
disp[3]=0;
disp[4]=0;
disp[5]=0;
}
}
}
}
void timer0() interrupt 1 //定时器0中断服务函数
{
TH0=(65536-50000)/256; //重新赋初值
TL0=(65536-50000)%256;
time_count++;
if(time_count==20) //20次中断为1秒
{
time_count=0;
if(flag==1) //判断计时器是否开启
{
disp[5]++;
if(disp[5]==10)
{
disp[5]=0;
disp[4]++;
if(disp[4]==10)
{
disp[4]=0;
disp[3]++;
if(disp[3]==6)
{
disp[3]=0;
disp[2]++;
if(disp[2]==10)
{
disp[2]=0;
disp[1]++;
if(disp[1]==6)
{
disp[1]=0;
disp[0]++;
if(disp[0]==10)
{
disp[0]=0;
}
}
}
}
}
}
}
}
}
```
以上程序通过定时器0中断实现秒表计时,具体步骤如下:
1. 定义一个长度为6的数组`disp`,用于存储计时器每位的值,其中`disp[0]`为秒表的个位数,`disp[1]`为十位数,依次类推。
2. 定义一个计时器中断次数`time_count`,每次定时器中断后,`time_count`加1,当`time_count`等于20时,说明已经过去了1秒,将`time_count`清零。
3. 通过按键控制秒表的计时、停止和复位操作,其中按下`k1`键开始计时,按下`k2`键停止计时,按下`k3`键复位计时器。
4. 在定时器0中断服务函数中,判断计时器是否开启,如果开启,则每次中断将秒表的值加1,同时判断进位和显示。
最后,将程序下载到单片机上,连接按键和数码管,即可实现秒表计时功能。
阅读全文