|
你好。謝謝你的測(cè)試,給了我信心。今早又重新排列了一下文件順序,又可以了。原來(lái)是進(jìn)入快煮后那個(gè)實(shí)時(shí)溫度不會(huì)運(yùn)行,功能按鍵失效。
重排后正常文件如下
#include <reg52.h>
#include<intrins.h>
#define uint unsigned int
#define ulong unsigned long
#define uchar unsigned char //宏定義
sbit DQ = P3^7; //定義DS18B20總線I/O
#define LCD_DB P0 //定義LCD數(shù)據(jù)口
sbit LCD_RS=P2^1;
sbit LCD_RW=P1^5;
sbit LCD_E=P1^6;
void delay_n40us(uint n); //函數(shù)申明
uint ReadTemperature(void); //函數(shù)申明
void Delay_DS18B20(int num); //函數(shù)申明
void LCD_SramChar(uchar hang,uchar lie,char sign);
void LCD_WriteString(uchar hang,uchar lie,uchar *p);
//********延時(shí)函數(shù)***************
void delay_n40us(uint n)
{ uint i;
uchar j;
for(i=n;i>0;i--)
for(j=0;j<2;j++); //在這個(gè)延時(shí)循環(huán)函數(shù)中我只做了2次循環(huán),
}
//**********寫入LCD指令**********寫入命令****************
void LCD_write_command(uchar dat)
{
LCD_RS=0; //指令
LCD_RW=0; //寫入
LCD_DB=dat;
LCD_E=1; //允許
delay_n40us(1);//實(shí)踐證明,LCD1602 上,用for 循環(huán)1 次就能完成普通寫指令。
LCD_E=0; //產(chǎn)生下降沿
}
//*******************************
//********再寫數(shù)據(jù)函數(shù)*****向1602中寫入數(shù)據(jù)********
void LCD_write_data(uchar dat)
{
LCD_RS=1; //數(shù)據(jù)
LCD_RW=0; //寫入
LCD_DB=dat;
LCD_E=1; //允許
delay_n40us(1);
LCD_E=0; //產(chǎn)生下降沿
}
//************8LCD初始化**************
void LCD_init(void) //LCD_Initial();
{
LCD_write_command(0x01); //清除屏幕顯示----------------
delay_n40us(100);//實(shí)踐證明,LCD1602上,用for 循環(huán)200 次就能可靠完成清屏指令。
LCD_write_command(0x38); //設(shè)置8位格式,2行,5x7
LCD_write_command(0x06); //設(shè)定輸入方式,增量不移位--------------
LCD_write_command(0x0c); //整體顯示,關(guān)光標(biāo),不閃爍
LCD_E=0; //產(chǎn)生下降沿
}
/********************************************************************
* 名稱 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個(gè)字符顯示"b" ,
調(diào)用該函數(shù)如下 L1602_char(1,5,'b')
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無(wú)
***********************************************************************/
void LCD_SramChar(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
// enable(a);
LCD_write_command(a);
// write(sign);
LCD_write_data(sign);
}
/********************************************************************
* 名稱 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改變液晶中某位開(kāi)始的值,如果要讓第一行,第五個(gè)字符開(kāi)始顯示"ab cd ef" ,
調(diào)用該函數(shù)如下 L1602_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無(wú)
***********************************************************************/
void LCD_WriteString(uchar hang,uchar lie,uchar *p)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
LCD_write_command(a);
// enable(a);
while(1)
{
if(*p == '\0') break;
// write(*p);
LCD_write_data(*p);
p++;
}
}
//************15us延時(shí)子程序*******以下DS18B20部分******
void Delay_DS18B20(int num)
{
while(num--) ;
}
//***********初始化DS18B20
void Init_DS18B20(void)
{
bit q;
//DQ = 1; //把總線拿高
//Delay_DS18B20(1); //15us
DQ = 0; //給復(fù)位脈沖
Delay_DS18B20(80); //750us
DQ = 1; //把總線拿高 等待
Delay_DS18B20(8); //120us
q = DQ; //讀取18b20初始化信號(hào)
Delay_DS18B20(30); //等待450us確保初始化成功
DQ = 1; //把總線拿高 釋放總線
}
//***********從1820讀一個(gè)字節(jié)
uchar ReadOneChar(void)
{
unsigned char i=0;
uchar dat=0;
for (i=8;i>0;i--)
{
bit x;
dat>>=1; // 右移一位
DQ = 0; // 給復(fù)位脈沖信號(hào)
DQ = 1; // 拉高電平確實(shí)讀給脈沖信號(hào)
x=DQ; // 讀總線輸出一位數(shù)據(jù)
if(x)
dat|=0x80; // 高電平保存數(shù)據(jù)
Delay_DS18B20(5); //等待75us
}
return (dat); //返回讀出的十進(jìn)制數(shù)據(jù)
}
//*********向1820寫一個(gè)字節(jié)
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0; //給復(fù)位脈沖信號(hào)
DQ = dat&0x01; //寫入一位數(shù)據(jù)
Delay_DS18B20(5); //等待75微妙確保數(shù)據(jù)寫入
DQ = 1; //釋放總線為高電平
dat>>=1;
}
}
//讀取溫度
uint ReadTemperature(void)
{
uchar a=0;
uint t=0;
Init_DS18B20();
Delay_DS18B20(50);
WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0x44); //啟動(dòng)溫度轉(zhuǎn)換
Init_DS18B20();
WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE); //讀取溫度寄存器
a=ReadOneChar(); //讀低8位
t=ReadOneChar(); //讀高8位
t <<= 8; //高8位左移
t|=a; //高8位左移與低8位相或得到溫度值
t=t*0.0625*10+0.5; //接近真實(shí)溫度
return(t);
}
//延時(shí)子程序
/*void Delay(int num)
{
while( --num ); //此函數(shù)沒(méi)有調(diào)用
}
*/
//顯示溫度子程序
/*void Disp_Temperature(void) //顯示溫度
{
uint h;
int feng,ge,shi,bai;
LCD_init(); //LCD初始化
LCD_write_command(0x80);//第一行寫入數(shù)據(jù)
LCD_write_data('T'); //寫T 連續(xù)寫地址自動(dòng)+1
delay_n40us(15000); //延遲
LCD_write_data('e');
delay_n40us(15000);
LCD_write_data('m');
delay_n40us(15000);
LCD_write_data('p');
delay_n40us(15000);
LCD_write_data(':');
delay_n40us(15000);
h= ReadTemperature();
if(h<=0x07d0) //判斷溫度為正
{
h*=0.625;
bai=h/1000;
feng=h%10;
ge=h/10%10;
shi=h/100;
LCD_write_command(0x80+5); //從第一行第六個(gè)開(kāi)始顯示
LCD_write_data(0x30+bai);
delay_n40us(15000);
LCD_write_command(0x80+6);
LCD_write_data(0x30+shi);
delay_n40us(15000);
LCD_write_data(0x30+ge);
delay_n40us(15000);
LCD_write_data('.');
delay_n40us(15000);
LCD_write_data(0x30+feng);
delay_n40us(15000);
}
else //溫度為負(fù)時(shí)
{
h=h-1; //減1取反
h=(~h);
h*=0.625;
feng=h%10;
ge=h/10%10;
shi=h/100;
LCD_write_command(0x80+5);
LCD_write_data('-');
delay_n40us(15000);
LCD_write_data(0x30+shi);
delay_n40us(15000);
LCD_write_data(0x30+ge);
delay_n40us(150000);
LCD_write_data('.');
delay_n40us(1500);
LCD_write_data(0x30+feng);
delay_n40us(15000);
}
//*************顯示C*************
LCD_write_command(0x80+10); //共11位
LCD_write_data('C');
delay_n40us(15000);
} */
//主函數(shù)
/*void main(void)
{
Init_DS18B20();
while(1)
{
Disp_Temperature();
}
}
*/
//單片機(jī)電飯煲程序
//#include "includes.h"
uint temp;
uint count;
uint hour,minute,sec,oldsec=0;
uint hour1=0,minute1=0,sec1=0; //時(shí),分,秒
sbit green = P1^0; //工作指示燈
sbit red = P1^1; //停止指示燈
sbit Cook = P1^7; //速煮米飯
sbit Soup = P1^4; //精煮米飯
sbit congee = P2^3; //煮粥
sbit Stewed = P2^0; //煲湯
sbit KeepHeat = P3^3; //保溫
sbit menu = P3^2; //時(shí)間預(yù)約
sbit add = P3^4; //加
sbit dec = P3^5; //減
sbit Beep = P1^2; //蜂鳴器
sbit AddTemp = P1^3; //加熱
uint ModeFlag;
unsigned char mode;
void KeepTemp(void);
/*******************************************
****** 延時(shí)程序 ******
*******************************************/
void delay_ms(unsigned char ms) // 延時(shí)毫秒@12M,ms最大值255
{
unsigned char i;
while(ms--)
for(i = 0; i < 5; i++);
}
void delay00(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*******************************************
****** 設(shè)置工作模式 ******
*******************************************/
void SetMode()
{
if(Cook == 0) //速煮米飯
{
delay_ms(5);
while(!Cook);
sec = 0;
minute = 0;
count = 0;
Cook = 0;
ModeFlag = 1;
}
else if(Soup == 0) //精煮米飯
{
delay_ms(5);
while(!Soup);
sec = 0;
minute = 0;
count = 0;
Soup = 0;
ModeFlag = 2;
}
else if(KeepHeat == 0) //保溫
{
delay_ms(5);
while(!KeepHeat);
sec = 0;
minute = 0;
count = 0;
ModeFlag = 5;
}
else if(congee == 0) //煮粥
{
delay_ms(5);
while(!congee);
sec = 0;
minute = 0;
count = 0;
congee = 0;
ModeFlag = 3;
}
else if(Stewed == 0) //煲湯
{
delay_ms(5);
while(!Stewed);
sec = 0;
minute = 0;
count = 0;
Stewed = 0;
ModeFlag = 4;
}
}
/*******************************************
****** 速煮米飯部分 ******
*******************************************/
void CookRice(void) //速煮米飯
{
LCD_WriteString(1,1,"Cook Rice"); //指定位置開(kāi)始寫入字符串
AddTemp = 0; //開(kāi)始加熱
green = 0;
red = 1;
//Cook = 0;
if(temp >= 300) //超過(guò)50度
{
TR0 = 1;
if(sec!=oldsec)
{
oldsec=sec;
LCD_SramChar(1,11,(3 - minute)%100/10+0x30); //4分鐘
LCD_SramChar(1,12,(3 - minute)%10+0x30);
LCD_SramChar(1,13,':'); //指定位置寫入字符
LCD_SramChar(1,14,(59 - sec)%100/10+0x30);
LCD_SramChar(1,15,(59 - sec)%10+0x30);
}
}
else
TR0 = 0;
if((1- minute) == 0 && (59 - sec) == 0)
{
TR0 = 0; //這里要和上面的函數(shù)相同來(lái)控制工作時(shí)間
AddTemp = 1;
green = 1;
red = 0;
Cook = 1;
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
ModeFlag=5; //保溫
}
}
/*******************************************
****** 精煮米飯部分 ******
*******************************************/
void CookCong(void)
{
LCD_WriteString(1,1,"Cook Cong");
AddTemp = ~AddTemp; //開(kāi)始加熱
green = 0;
red = 1;
//Soup = 0;
if(temp >= 500) //超過(guò)50度
{
TR0 = 1;
if(sec!=oldsec)
{
oldsec=sec;
LCD_SramChar(1,12,(6 - minute)%100/10+0x30); //7分鐘
LCD_SramChar(1,13,(6 - minute)%10+0x30);
LCD_SramChar(1,14,':');
LCD_SramChar(1,15,(59 - sec)%100/10+0x30);
LCD_SramChar(1,16,(59 - sec)%10+0x30);
}
}
else
TR0 = 0; //&&(邏輯與)運(yùn)算符&&會(huì)先評(píng)估第一個(gè)值,如果為假則不評(píng)估第二個(gè)值
if((1 - minute) == 0 && (59 - sec) == 0)
{
TR0 = 0;
AddTemp = 1;
green = 1;
red = 0;
Soup = 1;
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
ModeFlag=5;
}
}
/*******************************************
****** 煮粥部分 *******
*******************************************/
void CookSoup(void) //煮粥
{
LCD_WriteString(1,1,"Cook Soup");
//delay00(200);
AddTemp = ~AddTemp; //開(kāi)始加熱
//congee = 0;
green = 0;
red = 1;
if(temp >= 450) //超過(guò)45度
{
TR0 = 1;
if(sec!=oldsec)
{
oldsec=sec;
LCD_SramChar(1,12,(3 - minute)%100/10+0x30); //工作4 分鐘
LCD_SramChar(1,13,(3 - minute)%10+0x30);
LCD_SramChar(1,14,':');
LCD_SramChar(1,15,(59 - sec)%100/10+0x30);
LCD_SramChar(1,16,(59 - sec)%10+0x30);
}
}
else
TR0 = 0;
if((1 - minute) == 0 && (59 - sec) == 0)
{
TR0 = 0;
AddTemp = 1;
green = 1;
red = 0;
congee = 1;
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
//KeepTemp();
ModeFlag=5;
}
}
/*******************************************
****** 煲湯部分 ******
*******************************************/
void Stewedsoup(void) //煲湯
{
LCD_WriteString(1,1,"Stew soup");
AddTemp = ~AddTemp; //開(kāi)始加熱
delay00(800);
green = 0;
red = 1;
//Stewed = 0; //時(shí)間不相等才執(zhí)行
if(temp >= 400) //超過(guò)40度
{
TR0 = 1;
if(sec!=oldsec)
{
oldsec=sec;
LCD_SramChar(1,12,(5 - minute)%100/10+0x30); //6分鐘
LCD_SramChar(1,13,(5 - minute)%10+0x30);
LCD_SramChar(1,14,':');
LCD_SramChar(1,15,(59 - sec)%100/10+0x30);
LCD_SramChar(1,16,(59 - sec)%10+0x30);
}
}
else
TR0 = 0;
if((1 - minute) == 0 && (59 - sec) == 0)
{
TR0 = 0;
AddTemp = 1;
green = 1;
red = 0;
Stewed = 1;
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
Beep = 0;delay00(200);Beep = 1;delay00(200);
ModeFlag=5;
}
}
/*******************************************
****** 保溫部分 *******
*******************************************/
void KeepTemp(void)
{
LCD_WriteString(1,1,"Keep Temp"); //9個(gè)字符位
AddTemp = 0; //開(kāi)始加熱
green = 0;
red= 0;
if(temp >= 300) //超過(guò)60度 測(cè)溫放大了10倍
{
AddTemp = 1; //停止加熱
green = 1;
}
else if(temp <= 250) //開(kāi)始加熱 30度
{
AddTemp = 0;
green = 0;
red=0;
}
}
/*******************************************
****** 按鍵部分 ******
*******************************************/
void key_scan()
{
unsigned char s1num=0;
if(menu==0)
{
delay00(50);
if(menu==0)
{
while(!menu);
s1num++;
// command(0x01);
LCD_write_command(0x01); //清除屏幕顯示
TR0 = 0; hour=0;minute=0;sec=0;
while(1)
{
if(menu==0)
{
delay00(50);
if(menu==0)
{
while(!menu);
s1num++;
}
}
if(s1num==1)
{
LCD_WriteString(2,1,"Set Mode:");
LCD_SramChar(2,10,mode/10+0x30);
LCD_SramChar(2,11,mode%10+0x30);
if(add==0)
{
delay00(30);
if(add==0)
{ while(!add);
mode ++;
if(mode >= 5)
mode = 0;
LCD_SramChar(2,10,mode/10+0x30);
LCD_SramChar(2,11,mode%10+0x30);
}
}
if(dec==0)
{
delay00(30);
if(dec==0)
{ while(!dec);
if(mode == 0)
mode = 5;
mode --;
LCD_SramChar(2,10,mode/10+0x30);
LCD_SramChar(2,11,mode%10+0x30);
}
}
}
if(s1num==2)
{
LCD_WriteString(2,0,"Set hour:");
LCD_SramChar(2,10,hour1/10+0x30);
LCD_SramChar(2,11,hour1%10+0x30);
if(add==0)
{
delay00(30);
if(add==0)
{ while(!add);
hour1 ++;
if(hour1 == 12)
hour1 = 0;
LCD_SramChar(2,10,hour1/10+0x30);
LCD_SramChar(2,11,hour1%10+0x30);
}
}
if(dec==0)
{
delay00(30);
if(dec==0)
{ while(!dec);
if(hour1 == 0)
hour1 = 12;
hour1 --;
LCD_SramChar(2,10,hour1/10+0x30);
LCD_SramChar(2,11,hour1%10+0x30);
}
}
}
if(s1num==3)
{
LCD_WriteString(2,0,"Set minute:");
LCD_SramChar(2,12,minute1/10+0x30);
LCD_SramChar(2,13,minute1%10+0x30);
if(add==0)
{
delay00(30);
if(add==0)
{ while(!add);
minute1 ++;
if(minute1 == 60)
minute1 = 0;
LCD_SramChar(2,12,minute1/10+0x30);
LCD_SramChar(2,13,minute1%10+0x30);
}
}
if(dec==0)
{
delay00(30);
if(dec==0)
{ while(!dec);
if(minute1 == 0)
minute1 = 60;
minute1 --;
LCD_SramChar(2,12,minute1/10+0x30);
LCD_SramChar(2,13,minute1%10+0x30);
}
}
}
if(s1num == 4)
{
s1num=0; //s1num清零
// command(0x01); //清屏
LCD_write_command(0x01); //清除屏幕顯示
delay_n40us(1);
ModeFlag = 6;
AddTemp = 1;
TR0 = 1;
break;
}
}
}
}
}
/*******************************************
****** 顯示預(yù)約剩余時(shí)間部分 ******
*******************************************/
void SetTime(void)
{
LCD_SramChar(1,1,(hour1 - hour)%100/10+0x30);//hour1 是設(shè)定的時(shí)間,hour是正常走的時(shí)間
LCD_SramChar(1,2,(hour1 - hour)%10+0x30);
LCD_SramChar(1,3,':');
if((minute1-minute)>0)
{
LCD_SramChar(1,4,(minute1 - 1 - minute)%100/10+0x30);
LCD_SramChar(1,5,(minute1 - 1 - minute)%10+0x30);
}
else
{
LCD_SramChar(1,4,'0');
LCD_SramChar(1,5,'0');
}
LCD_SramChar(1,6,':');
if(((hour1 - hour)>0)||((minute1-minute)>0))
{
LCD_SramChar(1,7,(59 - sec)%100/10+0x30);
LCD_SramChar(1,8,(59 - sec)%10+0x30);
}
else
{
LCD_SramChar(1,7,'0');
LCD_SramChar(1,8,'0'); //以上是本函數(shù)倒計(jì)時(shí)顯示,歸0后顯選擇的模式
}
LCD_WriteString(1,10," "); //每種模式的工作時(shí)長(zhǎng)填充到這里,不到0顯剩余時(shí)間
if((minute1 - 1 - minute) == 0 && (59 - sec) == 0 &&(hour1 - hour) == 0)
{
TR0 = 0;Beep = 0;delay00(200);Beep = 1;
ModeFlag = mode;
hour=0;minute=0;sec=0;
}
}
/*******************************************
****** 主函數(shù) ******
*******************************************/
void main()
{
EA = 1;
TMOD = 0X01;
ET0 = 1;
TH0 = 0X3C;
TL0 = 0XB0;
Beep = 1;
AddTemp = 1;
// LCD_Initial(); //LCD_init 上面的
LCD_init();
Init_DS18B20();
delay_ms(100);
temp = ReadTemperature(); //uint ReadTemperature() 上面的
//delay_ms(100); //在ASCII碼表中,0x30是十六進(jìn)制表示法,對(duì)應(yīng)于十進(jìn)制的48,它代表的字符是數(shù)字"0"。
while(1)
{
temp = ReadTemperature(); //讀取溫度
//Disp_Temperature();
LCD_WriteString(2,1,"NowTemp="); //修改后開(kāi)機(jī)顯示在下面行
LCD_SramChar(2,9,temp%10000/1000+0x30);
LCD_SramChar(2,10,temp%1000/100+0x30);
LCD_SramChar(2,11,temp%100/10+0x30);
LCD_SramChar(2,12,'.');
LCD_SramChar(2,13,temp%10+0x30);
LCD_SramChar(2,14,'C'); //不能寫0行0列的,本工程函數(shù)
SetMode();
key_scan(); //以下項(xiàng)目預(yù)約倒計(jì)時(shí)歸0后才顯示出來(lái)
switch(ModeFlag) //模式選擇
{
case 1: CookRice();break;
case 2: CookCong();break;
case 3: CookSoup();break;
case 4: Stewedsoup();break;
case 5: KeepTemp();break;
case 6: SetTime();break;
}
}
}
/*******************************************
****** 定時(shí)器定時(shí)部分 ******
*******************************************/
void t0() interrupt 1
{
TH0 = 0X3C;
TL0 = 0XB0;
count ++;
if(count >= 20)
{
count = 0;
sec ++;
if(sec == 60)
{
sec = 0;
minute ++;
if(minute == 60)
hour ++;
}
}
} |
|