P0.0,0.1,0.2接三個(gè)按鍵,調(diào)節(jié)時(shí)間.
采用24小時(shí)制*********************************/
#include
#define uchar unsigned char
#define uint unsigned int
#define off 0
#define on 1
uchar SEC,MIN,HOUR,DIGIT,FLASH; //秒,分,時(shí),位
uint COUN; //4ms計(jì)數(shù)器,250次為1s
sbit P37=P3^7; //顯示秒的I/O口
sbit P17=P1^7;
uchar data paragraph[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-10數(shù)字
/****************************************************************************************
定時(shí)器0的中斷程序**/
void t0(void)interrupt 1 using 1
{TH0=0x4c;
TL0=0x00;
COUN=COUN+1; //計(jì)數(shù)器20ms加1,一直加50次到1s
if(COUN==20) //如果COUN到250
{COUN=off; //則清0
//FLASH=!FLASH; //秒取反
SEC=SEC+1;} //秒加1
if(SEC==60) //如果秒到60
{SEC=off; //則清0
MIN=MIN+1;} //秒進(jìn)位后分加1
if(MIN==60) //如果分到60
{MIN=off; //則清0
HOUR=HOUR+1;} //分進(jìn)位后時(shí)加1
if(HOUR==24) //如果時(shí)到24
{HOUR=off;} //時(shí)清0,一天到重新
}
/*****************************************************************************************
毫秒延時(shí)程序**/
void delay(uchar i)
{uchar a,b;
while(i--)
{for(a=0;a<5;a++)
for(b=0;b<100;b++);
}
}
/*****************************************************************************************
顯示刷新程序**/
void refurbish(void)
{
P1=paragraph[SEC%10]; //余數(shù)送P1
P3=DIGIT; //位左移5
delay(1);
P1=paragraph[SEC/10]; //整數(shù)送P1
P3=DIGIT<<1; //位驅(qū)動(dòng)4
delay(1); //延時(shí)1ms
P1=paragraph[MIN%10]; //余數(shù)送P1
P17=off;
P3=DIGIT<<2; //位左移3
delay(1);
P1=paragraph[MIN/10]; //整數(shù)送P1
P3=DIGIT<<3; //位驅(qū)動(dòng)2
delay(1); //延時(shí)1ms
P1=paragraph[HOUR%10]; //余數(shù)送P1
P17=off;
P3=DIGIT<<4; //位左移1
delay(1);
P1=paragraph[HOUR/10]; //整數(shù)送P1
P3=DIGIT<<5; //位驅(qū)動(dòng)
delay(1);
}
//*****************************************************************************************
//主程序
void main(void)
{P1=0xff;
P3=0xff;
DIGIT=0X01; //位選擇
TMOD=0X01; //定時(shí)器T0開作于模試1(16位計(jì)數(shù)器)
TH0=0x4c;
TL0=0x00;
SEC=off; //秒清0
MIN=off; //分清0
HOUR=off; //時(shí)清0
COUN=off; //20ms計(jì)數(shù)器
TR0=on; //打開定時(shí)器0
EA=on; //打開總中斷
ET0=on; //打開T0中斷
while(1)
refurbish();
}