|
//用定時(shí)器T0的中斷實(shí)現(xiàn)長時(shí)間定時(shí)
#include<reg52.h> // 包含51單片機(jī)寄存器定義的頭文件
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P3^5; //按一下,減5分鐘--(原5分鐘)
sbit K2=P3^4; //按一下,加5分鐘--(原5分鐘)
sbit D1=P3^2; //將D1位定義為P3.2引腳
sbit LED1=P3^3; //秒閃指示燈
sbit fm=P3^1; //按鍵提示音+狀態(tài)翻轉(zhuǎn)提示音、
unsigned char Countor,miao,min,shi,j; //設(shè)置全局變量,儲(chǔ)存定時(shí)器T0中斷次數(shù)
//延時(shí)
void DelayMS(uint ms)
{
uchar t;
while(ms--)for(t=0;t<120;t++);
}
/**************************************************************
函數(shù)功能:主函數(shù)
**************************************************************/
void main(void)
{
EA=1; //開總中斷
ET0=1; //定時(shí)器T0中斷允許
TMOD=0x01; //使用定時(shí)器T0的模式2
TH0=(65536-50000)/256; //定時(shí)器T0的高8位賦初值
TL0=(65536-50000)%256; //定時(shí)器T0的高8位賦初值
TR0=1; //啟動(dòng)定時(shí)器T0
Countor=0; //從0開始累計(jì)中斷次數(shù)
min=0;
j=0;
D1=1;
while(1)//無限循環(huán)等待中斷
{
if(K1==0)
{
while(K1==0);
fm=0; // 按鍵提示音
DelayMS(1000);
fm=1;
if(j>1)
{
j--;
}
if(j==0)
{
j=1;
}
DelayMS(200);
}
if(K2==0)
{
while(K2==0);
fm=0; //按鍵提示音
DelayMS(1000);
fm=1;
if(j<99)
{
j++;
if(j==99)
{
min=0;
}
}
DelayMS(200);
}
}
}
/**************************************************************
函數(shù)功能:定時(shí)器T0的中斷服務(wù)程序
**************************************************************/
void Time0(void) interrupt 1 using 0 //“interrupt”聲明函數(shù)為中斷服務(wù)函數(shù)
//其后的1為定時(shí)器T0的中斷編號(hào);0表示使用第0組工作寄存器
{
Countor++; //中斷次數(shù)自加1
if(Countor==20) //若累計(jì)滿20次,即計(jì)時(shí)滿1s
{
Countor=0; //將Countor清0,重新從0開始計(jì)數(shù)
LED1=~ LED1;
miao++;
if(miao==60)
{
min++;
if(min>=j)
{
D1=~D1;
fm=0; //狀態(tài)翻轉(zhuǎn)提示音,滴滴三聲
DelayMS(1500);
fm=1;
DelayMS(2000);
fm=0;
DelayMS(1500);
fm=1;
DelayMS(2000);
fm=0;
DelayMS(3000);
fm=1;
DelayMS(1000);
min=0;
}
}
}
TH0=(65536-50000)/256; //定時(shí)器T0的高8位重新賦初值
TL0=(65536-50000)%256; //定時(shí)器T0的高8位重新賦初值
} |
|