|
楼主 |
发表于 2010-5-2 19:35:55
|
显示全部楼层
终于写完了
2级菜单+调时+温度报警+高低温记录+闹铃+闹铃设定+报警温度设定
献丑
点击此处下载 ourdev_551131.rar(文件大小:184K) (原文件名:mega8.rar)
/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
?Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2010-5-1
Author : bianbo
Company :
Comments:
Chip type : ATmega8L
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
//PB0-PB7:PB0-DS1302_SCLK,PB1-DS1302_/RST,PB2-DS1302_I/O,PB3-MOSI,PB4-MISO,PB5-SCK
//PC0-PC6:PC0-LCM1602_D4,PC1-LCM1602_D5,PC2-LCM1602_D6,PC3-LCM1602_D7,PC4-BEEP,PC6-REST
//PD0-PD7:PD0-LCM1602_LED,PD1-OUT1,PD2-OUT0,PD3-GS,PD4-TEMP_DAT,PD5-LCM1602_RE,PD6-LCM1602_RW,PD7-LCM1602_RS
*****************************************************/
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#include <lcd1602.c>
#include <ds18b20.c>
#include <ds1302.c>
unsigned char menu_num,num2,num3,i,start,page,point,select,max_time[7],min_time[7],MAX=31,MIN=29,alarm_hour=19,alarm_minute=22;
unsigned int max_temper,min_temper;
unsigned char key();//键盘扫描
interrupt [EXT_INT1] void ext_int1_isr(void)
{
delay_ms(80);//消除毛刺
if( start==0)
{
start=1;
while(PIND.3==0);
}
else
{
if(PIND.3==0)
{
switch(key())
{
case 0b00000110:
while(PIND.3==0);
PORTD.0=~PORTD.0;
break;
case 0b00000010:
while(PIND.3==0);
num2++;
break;
case 0b00000100:
while(PIND.3==0);
num3++;
break;
case 0b00000000:
while(PIND.3==0);
select=0;
break;
}
};
}
}
unsigned char key()//键盘扫描
{
unsigned char temp_portd;
DDRD=DDRD&0b111110011;
temp_portd=PIND&0b00000110;
return (temp_portd);
}
void temper_warning()
{
unsigned char tem;
tem=(temper[1]-48)*10+(temper[2]-48);
if(temper[0]==49)
{
sprintf(lcd_buffer,"hot");
wr_lcd_string(13,1,lcd_buffer);
PORTC.4=1;
}
else
{
if(temper[0]==50)
{
sprintf(lcd_buffer,"cold");
wr_lcd_string(12,1,lcd_buffer);
PORTC.4=1;
}
else
{
if(tem<MAX&tem>MIN)
{
sprintf(lcd_buffer," ");
wr_lcd_string(12,1,lcd_buffer);
PORTC.4=0;
}
else
{
if(tem>=MAX)
{
sprintf(lcd_buffer,"hot");
wr_lcd_string(13,1,lcd_buffer);
PORTC.4=1;
}
else
{
sprintf(lcd_buffer,"cold");
wr_lcd_string(12,1,lcd_buffer);
PORTC.4=1;
}
}
}
}
}
void time_alarm()
{
trans_ds1302();
if(tr_time[2]==alarm_hour&&tr_time[1]==alarm_minute)
PORTC.4=1;
}
void dis_time()
{
unsigned char TH,TL;
wr_lcd_word(1,0,'2');
wr_lcd_word(2,0,'0');
wr_lcd_word(5,0,'-');
wr_lcd_word(8,0,'-');
wr_lcd_word(6,1,':');
wr_lcd_word(9,1,':');
TH=((time[0]&0x70)>>4)%10+48;//秒译码,消除CH
TL=(time[0]&0x0f)%10+48;
wr_address(10,1);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
TH=((time[1]&0xf0)>>4)%10+48;//分译码
TL=(time[1]&0x0f)%10+48;
wr_address(7,1);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
TH=((time[2]&0xf0)>>4)%10+48;//时译码
TL=(time[2]&0x0f)%10+48;
wr_address(4,1);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
TH=((time[3]&0xf0)>>4)%10+48;//日译码
TL=(time[3]&0x0f)%10+48;
wr_address(9,0);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
TH=((time[4]&0xf0)>>4)%10+48;//月译码
TL=(time[4]&0x0f)%10+48;
wr_address(6,0);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
TL=(time[5]&0x0f)%10+48;//星期译码
wr_address(12,0);
switch(TL)
{
case '7':
sprintf(lcd_buffer,"SUN");
wr_lcd_string(12,0,lcd_buffer);
break;
case '1':
sprintf(lcd_buffer,"MON");
wr_lcd_string(12,0,lcd_buffer);
break;
case '2':
sprintf(lcd_buffer,"TUES");
wr_lcd_string(12,0,lcd_buffer);
break;
case '3':
sprintf(lcd_buffer,"WED");
wr_lcd_string(12,0,lcd_buffer);
break;
case '4':
sprintf(lcd_buffer,"THURS");
wr_lcd_string(12,0,lcd_buffer);
break;
case '5':
sprintf(lcd_buffer,"FRI");
wr_lcd_string(12,0,lcd_buffer);
break;
case '6':
sprintf(lcd_buffer,"SAT");
wr_lcd_string(12,0,lcd_buffer);
break;
}
TH=((time[6]&0xf0)>>4)%10+48;//年译码
TL=(time[6]&0x0f)%10+48;
wr_address(3,0);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
}
void main(void)
{
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
PORTD.0=0;
DDRD.0=1;//背光i/o设为输入输出口
DDRC.4=1;//蜂鸣器i/o设为输入输出口
PORTD.0=0;
//************************************************************************************************
GICR|=0x80;//中断开
MCUCR=0x80;//中断触发方式
GIFR=0x80;//中断标志位
#asm("sei")//开放全局中断
set_ds1302();
lcd_init();
start=0;
sprintf(lcd_buffer,"HELLO!");
wr_lcd_string(5,0,lcd_buffer);
sprintf(lcd_buffer,"Press Any Key To Continue! ");
while(1)
{
unsigned char i,j=0;
for(i=0;i<28;i++)
{
wr_address(0,1);
while(lcd_buffer[j])
{
wr_lcd_inf(1,lcd_buffer[j++]);
if(start==1)
{
break;
}
}
delay_ms(500);
j=i;
if(start==1)
break;
};
if(start==1)
{
wr_lcd_inf(0,0x01);//清屏
break;
}
};
//************************************************************************************************
#asm("cli");//关闭全局中断
sprintf(lcd_buffer," By Ma Zhanwang");
wr_lcd_string(0,0,lcd_buffer);
sprintf(lcd_buffer,"Wait!");
wr_lcd_string(0,1,lcd_buffer);
wr_address(5,1);
for(i=0;i<12;i++)
{
wr_lcd_inf(1,0xa5);
delay_ms(500);
}
wr_lcd_inf(0,0x01);//清屏
//************************************************************************************************
sprintf(lcd_buffer,"1.Temperature 2.Time 3.Tem Recorder 4.Time Set 5.Tem Alarm S 6.Time Alarm S ");
page=0;
point=0;
menu_num=1;
select=0;
while(1)
{
wr_lcd_full(1,15,lcd_buffer+page);
wr_lcd_word(0,point,'*');
wr_lcd_word(0,~point,' ');
if(select==1)
{
wr_lcd_inf(0,0x01);//清屏
if(menu_num==1)//菜单1
{
sprintf(lcd_buffer,"Temperature");
wr_lcd_string(2,0,lcd_buffer);
num2=0;
num3=0;
GICR|=0x80;//中断开
MCUCR=0x80;//中断触发方式
GIFR=0x80;//中断标志位
#asm("sei")//开放全局中断
while(1)
{
trans_ds18b20(get_ds18b20());
if(num2==1)
{
wr_lcd_word(1,1,'^');
temper_warning();
}
if(num2==2)
{
PORTC.4=0;
num2=0;
wr_lcd_word(1,1,' ');
wr_address(12,1);
wr_lcd_inf(1,' ');
wr_lcd_inf(1,' ');
wr_lcd_inf(1,' ');
wr_lcd_inf(1,' ');
}
wr_address(3,1);
if(temper[0]==49)
wr_lcd_inf(1,temper[0]);
else
{
if(temper[0]==50)
wr_lcd_inf(1,'-');
else
wr_lcd_inf(1,' ');
}
wr_lcd_inf(1,temper[1]);
wr_lcd_inf(1,temper[2]);
wr_lcd_inf(1,'.');//小数点
wr_lcd_inf(1,temper[3]);
wr_lcd_inf(1,temper[4]);
wr_lcd_inf(1,223);
wr_lcd_inf(1,'C');
if(select==0)
{
#asm("cli");//关闭全局中断
PORTC.4=0;
wr_lcd_inf(0,0x01);//清屏
sprintf(lcd_buffer,"1.Temperature 2.Time 3.Tem Recorder 4.Time Set 5.Tem Alarm S 6.Time Alarm S ");
break;
}
}
}
else if(menu_num==2)//菜单2
{
num2=0;
num3=0;
GICR|=0x80;//中断开
MCUCR=0x80;//中断触发方式
GIFR=0x80;//中断标志位
#asm("sei")//开放全局中断
while(1)
{
read_ds1302();
if(num2==1)
{
wr_lcd_word(2,1,'&');
time_alarm();
if(num3==1)
{
num3=0;
++alarm_minute;
PORTC.4=0;
}
}
if(num2==2)
{
PORTC.4=0;
wr_lcd_word(2,1,' ');
num2=0;
}
dis_time();
if(select==0)
{
#asm("cli");//关闭全局中断
wr_lcd_inf(0,0x01);//清屏
sprintf(lcd_buffer,"1.Temperature 2.Time 3.Tem Recorder 4.Time Set 5.Tem Alarm S 6.Time Alarm S ");
break;
}
}
}
else if(menu_num==3)//菜单3
{
GICR|=0x80;//中断开
MCUCR=0x80;//中断触发方式
GIFR=0x80;//中断标志位
#asm("sei")//开放全局中断
sprintf(lcd_buffer,"MAX:");
wr_lcd_string(0,0,lcd_buffer);
sprintf(lcd_buffer,"MIN:");
wr_lcd_string(0,1,lcd_buffer);
max_temper=get_ds18b20();
min_temper=get_ds18b20();
read_ds1302();
for(i=0;i<6;i++)
{
max_time=time;
};
for(i=0;i<6;i++)
{
min_time=time;
};
num2=0;
num3=0;
while(1)
{
unsigned int T;
T=get_ds18b20();
if(T>max_temper)
{
max_temper=T;
read_ds1302();
for(i=0;i<6;i++)
{
max_time=time;
}
};
if(T<min_temper)
{
min_temper=T;
for(i=0;i<6;i++)
{
min_time=time;
}
};
for(i=0;i<2;i++)
{
if(!i)
trans_ds18b20(max_temper);
else
trans_ds18b20(min_temper);
wr_address(4,i);
if(temper[0]==49)
wr_lcd_inf(1,temper[0]);
else if(temper[0]==50)
wr_lcd_inf(1,'-');
else
wr_lcd_inf(1,' ');
wr_lcd_inf(1,temper[1]);
wr_lcd_inf(1,temper[2]);
wr_lcd_inf(1,'.');//小数点
wr_lcd_inf(1,temper[3]);
wr_lcd_inf(1,temper[4]);
wr_lcd_inf(1,223);
wr_lcd_inf(1,'C');
}
if(num2)
{
wr_lcd_inf(0,0x01);//清屏
for(i=0;i<6;i++)
{
time=max_time;
}
while(num2)
{
dis_time();
if(num2==2)
num2=0;
num3=0;
}
wr_lcd_inf(0,0x01);//清屏
}
if(num3)
{
wr_lcd_inf(0,0x01);//清屏
for(i=0;i<6;i++)
{
time=min_time;
}
while(num3)
{
dis_time();
if(num3==2)
num3=0;
num2=0;
}
wr_lcd_inf(0,0x01);//清屏
}
sprintf(lcd_buffer,"MAX:");
wr_lcd_string(0,0,lcd_buffer);
sprintf(lcd_buffer,"MIN:");
wr_lcd_string(0,1,lcd_buffer);
if(select==0)
{
#asm("cli");//关闭全局中断
wr_lcd_inf(0,0x01);//清屏
sprintf(lcd_buffer,"1.Temperature 2.Time 3.Tem Recorder 4.Time Set 5.Tem Alarm S 6.Time Alarm S ");
break;
}
}
}
else if(menu_num==4)//菜单4
{
unsigned char TH,TL;
wr_ds1302(0x8e,0x00);//0x80禁止写入,0x00允许写入
read_ds1302();
trans_ds1302();
dis_time();
num2=0;
num3=0;
GICR|=0x80;//中断开
MCUCR=0x80;//中断触发方式
GIFR=0x80;//中断标志位
#asm("sei")//开放全局中断
while(1)
{
if(num2==1)//年
{
time[0]=re_ds1302(0x81);//秒
wr_ds1302(0x80,time[0]|0x80);//停止振荡
num3=tr_time[6];
while(num2==1)
{
wr_lcd_word(3,0,' ');
wr_lcd_word(4,0,' ');
delay_ms(300);
if(num3>99) num3=1;
tr_time[6]=num3;
TH=tr_time[6]/10+48;//年译码
TL=tr_time[6]%10+48;
wr_address(3,0);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
delay_ms(200);
}
time[6]=((TH-48)<<4)|(TL-48);
wr_ds1302(0x8c,time[6]);//年,高四位年十位,第四位年个位
}
else if(num2==2)//月
{
num3=tr_time[4];
while(num2==2)
{
wr_lcd_word(6,0,' ');
wr_lcd_word(7,0,' ');
delay_ms(300);
if(num3>12) num3=1;
tr_time[4]=num3;
TH=tr_time[4]/10+48;//月译码
TL=tr_time[4]%10+48;
wr_address(6,0);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
delay_ms(200);
}
time[4]=((TH-48)<<4)|(TL-48);
wr_ds1302(0x88,time[4]);//月,第4秒十位,后四月分个位
}
else if(num2==3)//日
{
unsigned char max_dat;
time[4]=re_ds1302(0x89);//月份
time[6]=re_ds1302(0x8d);//年份
tr_time[4]=((time[4]&0x10)>>4)*10+(time[4]&0x0f);//月份
tr_time[6]=((time[6]&0xf0)>>4)*10+(time[6]&0x0f);//年份
switch(tr_time[4])
{
case 1:
max_dat=31;
break;
case 2:
if(tr_time[6]%4==0)
max_dat=29;
else
max_dat=28;
break;
case 3:
max_dat=31;
break;
case 4:
max_dat=30;
break;
case 5:
max_dat=31;
break;
case 6:
max_dat=30;
break;
case 7:
max_dat=31;
break;
case 8:
max_dat=31;
break;
case 9:
max_dat=30;
break;
case 10:
max_dat=31;
break;
case 11:
max_dat=30;
break;
case 12:
max_dat=31;
break;
}
num3=tr_time[3];
while(num2==3)
{
wr_lcd_word(9,0,' ');
wr_lcd_word(10,0,' ');
delay_ms(300);
if(num3>max_dat) num3=1;
tr_time[3]=num3;
TH=tr_time[3]/10+48;//月译码
TL=tr_time[3]%10+48;
wr_address(9,0);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
delay_ms(200);
}
time[3]=((TH-48)<<4)|(TL-48);
wr_ds1302(0x86,time[3]);//日,第5,4秒十位,后四位日个位
}
else if(num2==4)//星期
{
num3=tr_time[5];
while(num2==4)
{
wr_lcd_word(12,0,' ');
wr_lcd_word(13,0,' ');
wr_lcd_word(14,0,' ');
wr_lcd_word(15,0,' ');
delay_ms(300);
if(num3>7) num3=1;
tr_time[5]=num3;
TH=tr_time[5]/10+48;
TL=tr_time[5]%10+48;
switch(tr_time[5])
{
case 7:
sprintf(lcd_buffer,"SUN");
wr_lcd_string(12,0,lcd_buffer);
break;
case 1:
sprintf(lcd_buffer,"MON");
wr_lcd_string(12,0,lcd_buffer);
break;
case 2:
sprintf(lcd_buffer,"TUES");
wr_lcd_string(12,0,lcd_buffer);
break;
case 3:
sprintf(lcd_buffer,"WED");
wr_lcd_string(12,0,lcd_buffer);
break;
case 4:
sprintf(lcd_buffer,"THURS");
wr_lcd_string(12,0,lcd_buffer);
break;
case 5:
sprintf(lcd_buffer,"FRI");
wr_lcd_string(12,0,lcd_buffer);
break;
case 6:
sprintf(lcd_buffer,"SAT");
wr_lcd_string(12,0,lcd_buffer);
break;
}
delay_ms(200);
}
time[5]=((TH-48)<<4)|(TL-48);
wr_ds1302(0x8a,time[5]);//星期,后三位
}
else if(num2==5)//时
{
num3=tr_time[2];
while(num2==5)
{
wr_lcd_word(4,1,' ');
wr_lcd_word(5,1,' ');
delay_ms(300);
if(num3>23) num3=0;
tr_time[2]=num3;
TH=tr_time[2]/10+48;
TL=tr_time[2]%10+48;
wr_address(4,1);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
delay_ms(200);
}
time[2]=((TH-48)<<4)|(TL-48);
wr_ds1302(0x84,time[2]);//时,第7 位12/24 小时标志,bit7=1,12 小时模式,bit7=0,24 小时模式,第5 位:AM/PM 定义,AP=1 下午模式,AP=0 上午模式
}
else if(num2==6)//分
{
num3=tr_time[1];
while(num2==6)
{
wr_lcd_word(7,1,' ');
wr_lcd_word(8,1,' ');
delay_ms(300);
if(num3>59) num3=0;
tr_time[1]=num3;
TH=tr_time[1]/10+48;
TL=tr_time[1]%10+48;
wr_address(7,1);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
delay_ms(200);
}
time[1]=((TH-48)<<4)|(TL-48);
wr_ds1302(0x82,time[1]);//分,第6,5,4秒十位,后四位分个位
}
else if(num2==7)//秒
{
num3=tr_time[0]&0x7f;
while(num2==7)
{
wr_lcd_word(10,1,' ');
wr_lcd_word(11,1,' ');
delay_ms(300);
if(num3>59) num3=0;
tr_time[0]=num3;
TH=tr_time[0]/10+48;
TL=tr_time[0]%10+48;
wr_address(10,1);
wr_lcd_inf(1,TH);
wr_lcd_inf(1,TL);
delay_ms(200);
}
time[0]=((TH-48)<<4)|(TL-48)|0x80;
wr_ds1302(0x80,time[0]);//秒,第7位ch=0工作允许,第6,5,4秒十位,后四位秒个位
}
else if(num2==8)
{
time[0]=re_ds1302(0x81);//秒
wr_ds1302(0x80,time[0]&0x7f);//开始振荡
num2=0;
}
read_ds1302();
dis_time();
if(select==0)
{
#asm("cli");//关闭全局中断
wr_lcd_inf(0,0x01);//清屏
time[0]=re_ds1302(0x81);//秒
wr_ds1302(0x80,time[0]&0x7f);//开始振荡
wr_ds1302(0x8e,0x80);//0x80禁止写入,0x00允许写入
sprintf(lcd_buffer,"1.Temperature 2.Time 3.Tem Recorder 4.Time Set 5.Tem Alarm S 6.Time Alarm S ");
break;
}
}
}
else if(menu_num==5)//菜单5
{
unsigned char MAX_TH,MAX_TL,MIN_TH,MIN_TL;
sprintf(lcd_buffer,"Alarm Temperatue");
wr_lcd_string(0,0,lcd_buffer);
sprintf(lcd_buffer,"MAX:");
wr_lcd_string(0,1,lcd_buffer);
sprintf(lcd_buffer,"MIN:");
wr_lcd_string(8,1,lcd_buffer);
num2=0;
num3=0;
MAX_TH=MAX/10+48;
MAX_TL=MAX%10+48;
MIN_TH=MIN/10+48;
MIN_TL=MIN%10+48;
wr_address(5,1);
wr_lcd_inf(1,MAX_TH);
wr_lcd_inf(1,MAX_TL);
wr_address(13,1);
wr_lcd_inf(1,MIN_TH);
wr_lcd_inf(1,MIN_TL);
GICR|=0x80;//中断开
MCUCR=0x80;//中断触发方式
GIFR=0x80;//中断标志位
#asm("sei")//开放全局中断
while(1)
{
if(num2==1)
{
num3=MAX_TH;
while(num2==1)
{
wr_lcd_word(5,1,' ');
delay_ms(300);
if(num3>57) num3=48;
MAX_TH=num3;
wr_lcd_word(5,1,MAX_TH);
delay_ms(200);
}
MAX=(MAX_TH-48)*10+(MAX_TL-48);
}
else if(num2==2)
{
num3=MAX_TL;
while(num2==2)
{
wr_lcd_word(6,1,' ');
delay_ms(300);
if(num3>57) num3=48;
MAX_TL=num3;
wr_lcd_word(6,1,MAX_TL);
delay_ms(200);
}
MAX=(MAX_TH-48)*10+(MAX_TL-48);
}
else if(num2==3)
{
num3=MIN_TH;
while(num2==3)
{
wr_lcd_word(13,1,' ');
delay_ms(300);
if(num3>57) num3=48;
MIN_TH=num3;
wr_lcd_word(13,1,MIN_TH);
delay_ms(200);
}
MIN=(MIN_TH-48)*10+(MIN_TL-48);
}
else if(num2==4)
{
num3=MIN_TL;
while(num2==4)
{
wr_lcd_word(14,1,' ');
delay_ms(300);
if(num3>57) num3=48;
MIN_TL=num3;
wr_lcd_word(14,1,MIN_TL);
delay_ms(200);
}
MIN=(MIN_TH-48)*10+(MIN_TL-48);
}
else if(num2==5)
{
num2=0;
}
if(select==0)
{
#asm("cli");//关闭全局中断
wr_lcd_inf(0,0x01);//清屏
sprintf(lcd_buffer,"1.Temperature 2.Time 3.Tem Recorder 4.Time Set 5.Tem Alarm S 6.Time Alarm S ");
break;
}
}
}
else if(menu_num==6)//菜单6
{
unsigned char H_TH,H_TL,M_TH,M_TL,H;
sprintf(lcd_buffer,"Alarm Time");
wr_lcd_string(3,0,lcd_buffer);
wr_lcd_word(7,1,':');
H_TH=alarm_hour/10+48;
H_TL=alarm_hour%10+48;
M_TH=alarm_minute/10+48;
M_TL=alarm_minute%10+48;
wr_lcd_word(5,1,H_TH);
wr_lcd_word(6,1,H_TL);
wr_lcd_word(8,1,M_TH);
wr_lcd_word(9,1,M_TL);
num2=0;
num3=0;
GICR|=0x80;//中断开
MCUCR=0x80;//中断触发方式
GIFR=0x80;//中断标志位
#asm("sei")//开放全局中断
while(1)
{
if(num2==1)
{
num3=H_TH;
while(num2==1)
{
wr_lcd_word(5,1,' ');
delay_ms(300);
if(num3>50) num3=48;
H_TH=num3;
wr_lcd_word(5,1,H_TH);
delay_ms(200);
}
alarm_hour=(H_TH-48)*10+(H_TL-48);
}
else if(num2==2)
{
if(H_TH==50)
H=51;
else
H=57;
num3=H_TL;
while(num2==2)
{
wr_lcd_word(6,1,' ');
delay_ms(300);
if(num3>H) num3=48;
H_TL=num3;
wr_lcd_word(6,1,H_TL);
delay_ms(200);
}
alarm_hour=(H_TH-48)*10+(H_TL-48);
}
else if(num2==3)
{
num3=M_TH;
while(num2==3)
{
wr_lcd_word(8,1,' ');
delay_ms(300);
if(num3>53) num3=48;
M_TH=num3;
wr_lcd_word(8,1,M_TH);
delay_ms(200);
}
alarm_minute=(M_TH-48)*10+(M_TL-48);
}
else if(num2==4)
{
while(num2==4)
{
wr_lcd_word(9,1,' ');
delay_ms(300);
if(num3>57) num3=48;
M_TL=num3;
wr_lcd_word(9,1,M_TL);
delay_ms(200);
}
alarm_minute=(M_TH-48)*10+(M_TL-48);
}
else if(num2==5)
{
num2=0;
}
if(select==0)
{
#asm("cli");//关闭全局中断
wr_lcd_inf(0,0x01);//清屏
sprintf(lcd_buffer,"1.Temperature 2.Time 3.Tem Recorder 4.Time Set 5.Tem Alarm S 6.Time Alarm S ");
break;
}
}
}
}
else
{
if(PIND.3==0)
{
switch(key())
{
case 0b00000110:
while(PIND.3==0);
PORTD.0=~PORTD.0;
break;
case 0b00000010:
while(PIND.3==0);
page+=30;
menu_num+=2;
if(page>60)
{
page=0;
menu_num-=6;
}
break;
case 0b00000100:
while(PIND.3==0);
menu_num++;
point=~point;
if(menu_num>(page/30+1)*2)
menu_num-=2;
break;
case 0b00000000:
while(PIND.3==0);
select=1;
//wr_lcd_word(0,point,menu_num+48);
//delay_ms(1000);
break;
}
}
}
}
} |
|