//99分計時器,需要用按鍵開關P3.2控制計時器啟動,按下按鍵啟動,松開按鍵停止倒計時,2秒后熄滅數碼管,重新按下按鍵,從0開始重新計時,需要怎么增加?給點思路。
#include"stc8.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit ge = P3^7;
sbit shi = P3^6;
sbit KEY = P3^2;
uchar count;
char sec,min;
bit flag;
uchar code table[]={0x12,0x3F,0x94,0x1C,0x39,0x58,0x50,0x1F,0x10,0x18,0x11,0x70,0xD2,0x34,0xD0,0xD1};
//uchar code table[]={
//0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,
//0x11,0xC1,0x63,0x85,0x61,0x71}; //0-9,a-f
sbit c = P1^7;
sbit b = P1^6;
sbit a = P1^5;
sbit h = P1^4;
sbit e = P1^3;
sbit f = P1^2;
sbit g = P1^1;
sbit d = P1^0;
void IO_init();
void delay(uchar n);
void T0_init();
void display();
void IO_init()
{
P3M0 = 0xc0; P3M1 = 0x00;
P1M0 = 0xff; P1M1 = 0x00;
}
void delay(uchar n)
{
uchar j,k;
for(j=n;j>0;j--)
for(k=125;k>0;k--);
}
void T0_init() //5毫秒@11.0592MHz
{
AUXR &= 0x7F; //定時器時鐘12T模式
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = 0x00; //設置定時初始值
TH0 = 0xEE; //設置定時初始值
TF0 = 0; //清除TF0標志
// TR0 = 1; //定時器0開始計時
ET0 = 1; //使能定時器0中斷
EA = 1;
}
void display()
{
static bit i=0;
static uchar temp=0;
P1=0;
i=~i;
if(++temp>=200)temp=0;
if(i==1)
{
ge = 1;
shi = 0;
P1=table[sec/10];
}
else
{
ge = 0;
shi = 1;
// if(temp<100)
P1=table[sec%10] ; //&0xcf;//閃秒 1110 1111
// else P1=table[min%10];
}
}
void main()
{
IO_init();
T0_init();
while(1)
{ if(!KEY)
TR0=1;
if(flag)
{
flag=0;
if(++count >= 200)
{
count = 0;
sec++;
if(sec >99)
{
sec = 0;
}
}
display();
}
}
}
void TM0_Isr() interrupt 1 //5毫秒
{
TL0 = 0x00; //設置定時初始值
TH0 = 0xEE; //設置定時初始值
// if(!KEY)
// {
// delay(20);
// if(!KEY)
// {
// while(!KEY);
flag=1;
}
|