这一篇文章主要介绍用C语言制作一个按钮控制的简易0~99计时器。
设计思路:一个按钮实现三个功能:开始、暂停、清零,当第一次按下按钮的时候开始计时,第二次按下按钮时暂停计时,第三次按下按钮时清零。
基本电路图如下:
使用的代码如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar count,key_flag,num;
sbit key = P3^2;
bit key_state;
void Delay(uchar n) //延时程序
{
uchar i,j;
for(i = 0;i < n;i++)
for(j = 0;j < 200;j++);
}
void Timer0() interrupt 1 //T0中断服务程序
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
num++;
if(num == 20) //每50ms*20=1s刷新一次
{
num = 0;
count++;
P2 = tab[count%10]; //显示个位
if(count/10 == 0) //显示十位,十位为0则不显示
P0 = 0xc0;
else
P0 = tab[count/10];
if(count == 60) //计满59秒后回0
count = 0;
}
}
void Key_Event() //按键处理子程序
{
if(key_state == 0)
key_flag = (key_flag+1)%3;
switch(key_flag)
{
case 1: //启动计时
TR0 = 1;break;
case 2: //停止计时
TR0 = 0;break;
case 0: //清零
P0 = 0xff;P2 = 0xc0;count = 0;num = 0;break;
}
}
void main()
{
P0 = 0xff;P2 = 0xc0;count = 0;num = 0;
key_flag = 0; //按键标志初值为0
key_state = 1;
TMOD = 0x01; //T0定时50ms
TCON = 0x01;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
EA = 1; //开放中断
ET0 = 1; //等待按键
EX0 = 1;
TR0 = 1;
while(1)
{
if(key_state != key)
{
Delay(10);
key_state = key;
Key_Event();
}
}
}
/*仅供学习参考*/