//99分倒計時
#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[]={
0x03,/*0*/
0x9F,/*1*/
0x25,/*2*/
0x0D,/*3*/
0x99,/*4*/
0x49,/*5*/
0x41,/*6*/
0x1F,/*7*/
0x01,/*8*/
0x09,/*9*/};
//sbit a = P2^7;
//sbit b = P2^6;
//sbit c = P2^5;
//sbit d = P2^4;
//sbit e = P2^3;
//sbit f = P2^2;
//sbit g = P2^1;
//sbit h = P2^0;
//sbit LED_com = P3^1;
void IO_init();
//void delay(uchar i);
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開始計時
TR0 = 0;
ET0 = 1; //使能定時器0中斷
EA = 1;
}
void display()
{
static bit i=0;
static uchar temp=0;
P1=0xff;
i=~i;
if(++temp>=200)temp=0;
if(i==1)
{
ge = 0;
shi = 1;
P1=table[min/10];
}
else
{
ge = 1;
shi = 0;
if(temp<100)
P1=table[min%10]&0xfe;//閃秒
else P1=table[min%10];
}
}
void main()
{
IO_init();
T0_init();
// ge = 0;
// shi = 0;
// P1=table[2];
while(1)
{
if(!KEY)
{
delay(20);
if(!KEY)
{
while(!KEY);
TR0 = 1;
if(flag)
{
flag=0;
if(++count >= 200)
{
count = 0;
sec--;
if(sec < 0)
{
sec = 59;
min--;
if(min < 0)
min=99;
}
}
display();
}
}
}
else
{
TR0 = 0;
}
}
}
void TM0_Isr() interrupt 1 //5毫秒
{
TL0 = 0x00; //設置定時初始值
TH0 = 0xEE; //設置定時初始值
flag=1;
}
|