?? timer.c
字號(hào):
#include "timer.h"
#include "main.h"
#include "keyboard.h"
#include "led.h"
unsigned char display_buffer[4]; //顯示緩沖區(qū),共4位
unsigned char minute=0; //定義默認(rèn)定時(shí)時(shí)間
unsigned char second=0;
unsigned char setminute=0,setsecond=20; //設(shè)置定時(shí)時(shí)間
unsigned char n_50m_second; //保存多少個(gè)50毫秒的變量
unsigned char coming1=15; //15秒燈光提示
unsigned char coming2=3; // 3秒聲音提示
bit beepcome=0; //到時(shí)標(biāo)記位
//unsigned char flicker_time=0; //閃爍頻率
//unsigned char display_on=1; //顯示開關(guān)標(biāo)志。用來(lái)產(chǎn)生閃爍效果
unsigned int status=1; //狀態(tài)值 1 設(shè)置 ; 2 計(jì)時(shí)
unsigned int alarmtime1=0,alarmtime2=0;
unsigned int alarmspeed=300;
void timer0_isr(void) interrupt 1 using 1 //定時(shí)器0中斷處理倒計(jì)時(shí)函數(shù)
{
TL0=0xB9;
TH0=0x3C; //定時(shí)器重裝。定時(shí)50mS中斷一次
n_50m_second++;
if (n_50m_second>=20) //1秒到
{
n_50m_second=0; //清50毫秒計(jì)數(shù)
second--; //秒減1
if(second==0xff) //如果秒到00
{
second=59; //秒變59秒
minute--; //分減1
if(minute==0xff) //如果分到00
{
minute=0; //分清0
second=0;
beepcome=1; //標(biāo)記beepcome
TR0=0;
EA=0; //取消計(jì)時(shí)中斷
}
}
}
}
void timer(void)
{
if (minute ==0 && second<=coming1 && TR0==1) //開始燈光提示
{
alarmtime1+=10;
if (alarmtime1>=alarmspeed) {P0_0=~P0_0;alarmtime1=0;alarmspeed-=2;} //蜂鳴器,LED切換
if (minute ==0 && second<=coming2 && TR0==1) //開始聲音提示
{
alarmtime2+=10;
if (alarmtime2>=alarmspeed) {P0_1=~P0_1;alarmtime2=0; }
}
}
switch (status) //1為設(shè)置狀態(tài),2為計(jì)時(shí)狀態(tài)
{
case 1: //============================設(shè)置狀態(tài)===================================
{
if(key==KEY_START) //開始計(jì)時(shí)
{
minute=setminute; //載入設(shè)置時(shí)間
second=setsecond;
EA=1; //開始計(jì)時(shí)
TR0=1;
status=2; //進(jìn)入計(jì)時(shí)狀態(tài)
key=0;
}
if(key==KEY_MIN) //調(diào)整分功能
{
setminute++;
if (setminute>=100) setminute=0;
key=0;
}
if(key==KEY_SEC) //調(diào)整秒功能
{
setsecond++;
if (setsecond>=60) setsecond=0;
key=0;
}
if(key==KEY_RESET) //重置功能
{
key=0;
}
showset(); //調(diào)用顯示設(shè)置函數(shù)
display(display_buffer); //顯示結(jié)果
break;
}
case 2: //=======================計(jì)時(shí)狀態(tài)=====================================
{
if(key==KEY_RESET) //如果設(shè)置鍵按下
{
status=1; //進(jìn)入設(shè)置狀態(tài)
key=0; //清鍵值
}
if(key==KEY_MIN) //調(diào)整分功能
{
key=0;
}
if(key==KEY_SEC) //調(diào)整秒功能
{
key=0;
}
if(key==KEY_START) // 轉(zhuǎn)為暫停
{
TR0=~TR0; //暫停、啟動(dòng)計(jì)時(shí)器
key=0;
}
showtime(); //調(diào)用顯示時(shí)間函數(shù)
display(display_buffer); //顯示結(jié)果
break;
}
}
}
void showtime(void) //顯示當(dāng)前剩余時(shí)間
{
display_buffer[0]=second%10;
display_buffer[1]=second/10;
display_buffer[2]=minute%10;
display_buffer[3]=minute/10;
}
void showset(void) //顯示當(dāng)前設(shè)置時(shí)間
{
display_buffer[0]=setsecond%10;
display_buffer[1]=setsecond/10;
display_buffer[2]=setminute%10;
display_buffer[3]=setminute/10;
}
/*
void beeping(void)
{
if (beeptime>0)
{
P0_5=0;
P0_0=1;
beeptime--;
}
else
{
P0_5=1;
P0_0=0;
beepcome=0;
beeptime=20;
}
}
*/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -