#include <reg52.h>
#include <intrins.h>
#include "lm6066.h"
#include "at24cxx.h"
#include "am2301.h"
sbit jinshui=P1^1;
sbit paishui=P1^2;
sbit wuhuadianyuan=P1^3;
sbit wuhuafengji=P1^4;
sbit wuhuasanre=P1^5;
sbit yewei=P1^6;
sbit key_up=P3^2;
sbit key_down=P3^3;
sbit key_set=P3^4;
sbit key_shift=P3^5;
sbit key_shiftdec=P3^1;
bit backmenu=1;
uchar code start_log[]={
" 智 能 芳 香 机 "
"工作模式: 状态指示:工作"
"湿度: % 温度: 摄氏度"
"工作时间: : 停止时间: : "};
uchar code set_log[]={
"工作模式设定: "
"工作时间: : 停止时间: : "
"湿度上限: % 湿度下限: % "
"日期设置: "};
uchar data date[]={"0000年00月00日 00:00"};
uchar code *m1[]={"时控","湿度","手动"};
uchar data set_time[]={"00:00"};
uchar data set_time1[]={"00:00"};
uchar data shidu_max[]={"00"},shidu_min[]={"00"};
uchar month,day,hour,min,sec,monthd;
uint year;
uchar work_mod,start_Tm_h,start_Tm_m,stop_Tm_h,stop_Tm_m,max_temp,min_temp;
uchar stauts=1;
bit Scr_Hz=1;
bit jiance_flag;
void key_Exe(unsigned char key);
void readDat(void);
void saveDat(void);
void jiance(void);
//============================================
void init_time()
{
TMOD=0X01;
TH0=0X4C;
TL0=0X00;
TR0=1;
ET0=1;
EA=1;
}
//====================================================
uchar set_monthd(uchar m)
{ uchar len;
switch(m)
{
case 1: case 3: case 5: case 7: case 8:
case 10: case 12:len=31;break;
case 4: case 6: case 9: case 11:len=30;break;
case 2:if(year%4==0&&year%100!=0||year%400==0)len=29;
else len=28;break;
default:break;
}
return len;
}
//================================================
void time0() interrupt 1
{ uchar f,cnt;
TH0=0X4C;
TL0=0X00;
cnt++;f++;
if(cnt>=20){sec++;cnt=0;}
if(sec>=60){min++;sec=0;}
if(min>=60){hour++;min=0;}
if(hour>=24){day++;hour=0;};
monthd=set_monthd(month);
if(day>monthd){month++;day=1;}
if(month>12){year++;month=1;}
if(year>9999||year<0)year=0;
date[0]=year/1000+0x30;
date[1]=(year/100)%10+0x30;
date[2]=(year%100)/10+0x30;
date[3]=year%10+0x30;
date[6]=month/10+0x30;
date[7]=month%10+0x30;
date[10]=day/10+0x30;
date[11]=day%10+0x30;
date[15]=hour/10+0x30;
date[16]=hour%10+0x30;
date[18]=min/10+0x30;
date[19]=min%10+0x30;
if(f==40){f=0;Scr_Hz=1;}
}
//=====================================
uchar scan_key()
{
key_up=1;
if(key_up==0)
{
delay(30);
key_up=1;
if(key_up==0)
{
while(!key_up);
return 0xfb;
}
}
key_down=1;
if(key_down==0)
{
delay(30);
key_down=1;
if(key_down==0)
{
while(!key_down);
return 0xf7;
}
}
key_set=1;
if(key_set==0)
{
delay(30);
key_set=1;
if(key_set==0)
{
backmenu=1;
while(!key_set);
return 0xef;
}
}
key_shift=1;
if(key_shift==0)
{
delay(30);
key_shift=1;
if(key_shift==0)
{
while(!key_shift);
return 0xdf;
}
}
key_shiftdec=1;
if(key_shiftdec==0)
{
delay(30);
key_shiftdec=1;
if(key_shiftdec==0)
{
while(!key_shiftdec);
return 0xfd;
}
}
return -1;
}
//==================================
void main()
{
uchar key_val;
uchar i;
_RST=0;
BUSY=0;delay(10);
_RST=1;delay(200);
P1=0x00;
ClearRAM();
LCDBUS = 0xff;
initLCDM();
init_time();
readDat();delay(10); //读取上次设置数据
WriteTextScreen(set_log);
WriteStrXY(14,0,m1[work_mod]);
WriteStrXY(10,3,date);
WriteStrXY(10,1,set_time);
WriteStrXY(25,1,set_time1);
WriteStrXY(10,2,shidu_max);
WriteStrXY(25,2,shidu_min);
for(i=0;i<=200;i++)
{ key_val=scan_key();
if(key_val!=-1)break;
delay(25);
}
ClearRAM();
while(1)
{
key_val=scan_key();
if(key_val==0xdf)backmenu=0;
if(work_mod==2)
{
switch(key_val)
{
case 0xfb:key_val=0;paishui=!paishui;break;
case 0xf7:key_val=0;jinshui=!jinshui;break;
case 0xef:key_val=0;wuhuadianyuan=!wuhuadianyuan;wuhuafengji=!wuhuafengji;
wuhuasanre=!wuhuasanre;break;
default:break;
}
if(yewei==0)paishui=0; else jinshui=0;
}
jiance();
if(Scr_Hz==1&&backmenu==1)
{
Scr_Hz=0;
Rd_HT();
readDat();delay(10); //进入主画面读取上次数据,接口
WriteTextScreen(start_log);
WriteStrXY(25,0,date+15);
WriteStrXY(9,1,m1[work_mod]);
WriteStrXY(6,2,RH);
WriteStrXY(22,2,T);
WriteStrXY(10,3,set_time);
WriteStrXY(25,3,set_time1);
key_val=scan_key();
}
//各控制检测接口
if(key_val!=-1&&backmenu==0)
{
ClearRAM();
WriteTextScreen(set_log);delay(10);;
//if(key_val==-1)
WriteStrXY(14,0,m1[work_mod]);
WriteStrXY(10,3,date);
WriteStrXY(10,1,set_time);
WriteStrXY(25,1,set_time1);
WriteStrXY(10,2,shidu_max);
WriteStrXY(25,2,shidu_min);
while(1)
{
jiance();
key_val=scan_key();
key_Exe(key_val);
key_val=0;// saveDat();
if(backmenu==1)break;
}
}
}
}
//=========================================================
void key_Exe(uchar key)
{ uchar year_h;
if(key==0xdf)
{ stauts++;key=0;
if(stauts>13)stauts=1;
}
else if(key==0xfd)
{
stauts--;key=0;
if(stauts==0)stauts=13;
}
switch(stauts)
{
case 1:setcursor(14,0);break;
case 2:setcursor(10,1);break;
case 3:setcursor(13,1);break;
case 4:setcursor(25,1);break;
case 5:setcursor(28,1);break;
case 6:setcursor(10,2);break;
case 7:setcursor(25,2);break;
case 8:setcursor(10,3);break;
case 9:setcursor(12,3);break;
case 10:setcursor(16,3);break;
case 11:setcursor(20,3);break;
case 12:setcursor(25,3);break;
case 13:setcursor(28,3);break;
default:break;
}
if(key==0xfb)
{ // key=0;
switch(stauts)
{
case 1:work_mod++;if(work_mod>=3)work_mod=0;break;
case 2:start_Tm_h++;if(start_Tm_h>=24)start_Tm_h=0;
set_time[0]=start_Tm_h/10+0x30;set_time[1]=start_Tm_h%10+0x30;
delay(200);break;
case 3:start_Tm_m++;if(start_Tm_m>=60)start_Tm_m=0;
set_time[3]=start_Tm_m/10+0x30;set_time[4]=start_Tm_m%10+0x30;
delay(200);break;
case 4:stop_Tm_h++;if(stop_Tm_h>=24)stop_Tm_h=0;
set_time1[0]=stop_Tm_h/10+0x30;set_time1[1]=stop_Tm_h%10+0x30;
delay(200);break;
case 5:stop_Tm_m++;if(stop_Tm_m>=60)stop_Tm_m=0;
set_time1[3]=stop_Tm_m/10+0x30;set_time1[4]=stop_Tm_m%10+0x30;
delay(200);break;
case 6:max_temp++;if(max_temp>=100)max_temp=0;
shidu_max[0]=max_temp/10+0x30;shidu_max[1]=max_temp%10+0x30;
delay(200);break;
case 7:min_temp++;if(min_temp>=100)min_temp=0;
shidu_min[0]=min_temp/10+0x30;shidu_min[1]=min_temp%10+0x30;
delay(200);break;
case 8:year_h=(year/100);year_h++;year=year_h*100+year%100;
delay(200);break;
case 9:year++;delay(200);break;
case 10:month++;delay(200);break;
case 11:day++;delay(200);break;
case 12:hour++;delay(200);break;
case 13:min++;delay(200);break;
default:break;
}
}
else if(key==0xf7)
{
switch(stauts)
{
case 1:work_mod--;if(work_mod==-1)work_mod=0;break;
case 2:start_Tm_h--;if(start_Tm_h==-1)start_Tm_h=0;
set_time[0]=start_Tm_h/10+0x30;set_time[1]=start_Tm_h%10+0x30;
delay(200);break;
case 3:start_Tm_m--;if(start_Tm_m==-1)start_Tm_m=0;
set_time[3]=start_Tm_m/10+0x30;set_time[4]=start_Tm_m%10+0x30;
delay(200);break;
case 4:stop_Tm_h--;if(stop_Tm_h==-1)stop_Tm_h=0;
set_time1[0]=stop_Tm_h/10+0x30;set_time1[1]=stop_Tm_h%10+0x30;
delay(200);break;
case 5:stop_Tm_m--;if(stop_Tm_m==-1)stop_Tm_m=0;
set_time1[3]=stop_Tm_m/10+0x30;set_time1[4]=stop_Tm_m%10+0x30;
delay(200);break;
case 6:max_temp--;if(max_temp==-1)max_temp=0;
shidu_max[0]=max_temp/10+0x30;shidu_max[1]=max_temp%10+0x30;
delay(200);break;
case 7:min_temp--;if(min_temp==-1)min_temp=0;
shidu_min[0]=min_temp/10+0x30;shidu_min[1]=min_temp%10+0x30;
delay(200);break;
case 8:year_h=(year/100);year_h--;year=year_h*100+year%100;
delay(200);break;
case 9:year--;delay(200);break;
case 10:month--;delay(200);break;
case 11:day--;delay(200);break;
case 12:hour--;delay(200);break;
case 13:min--;delay(200);break;
default:break;
}
}
if(key==0xfb||key==0xf7)
{
WriteStrXY(10,3,date);
WriteStrXY(14,0,m1[work_mod]);
WriteStrXY(10,1,set_time);
WriteStrXY(25,1,set_time1);
WriteStrXY(10,2,shidu_max);
WriteStrXY(25,2,shidu_min);
}
if(key==0xef)
{
key=0;saveDat();ClearRAM();
backmenu=1;
}
}
//================================================
void saveDat(void)
{
EA=0;
wr_24cxx(70,work_mod);delay_iic();
wr_24cxx(71,set_time[0]);delay_iic();
wr_24cxx(72,set_time[1]);delay_iic();
wr_24cxx(73,set_time[3]);delay_iic();
wr_24cxx(74,set_time[4]);delay_iic();
wr_24cxx(75,set_time1[0]);delay_iic();
wr_24cxx(76,set_time1[1]);delay_iic();
wr_24cxx(77,set_time1[3]);delay_iic();
wr_24cxx(78,set_time1[4]);delay_iic();
wr_24cxx(79,shidu_max[0]);delay_iic();
wr_24cxx(80,shidu_max[1]);delay_iic();
wr_24cxx(81,shidu_min[0]);delay_iic();
wr_24cxx(82,shidu_min[1]);delay_iic();
wr_24cxx(83,year/1000+0x30);delay_iic();
wr_24cxx(84,(year/100)%10+0x30);delay_iic();
wr_24cxx(85,(year%100)/10+0x30);delay_iic();
wr_24cxx(86,year%10+0x30);delay_iic();
wr_24cxx(87,month/10+0x30);delay_iic();
wr_24cxx(88,month%10+0x30);delay_iic();
wr_24cxx(89,day/10+0x30);delay_iic();
wr_24cxx(90,day%10+0x30);delay_iic();
EA=1;
}
//=============================================
void readDat(void)
{
uchar h1,h2,h3,h4;
work_mod=rd_24cxx(70);delay_iic();
set_time[0]=rd_24cxx(71);delay_iic();
set_time[1]=rd_24cxx(72);delay_iic();
start_Tm_h=(set_time[0]-0x30)*10+(set_time[1]-0x30);
set_time[3]=rd_24cxx(73);delay_iic();
set_time[4]=rd_24cxx(74);delay_iic();
start_Tm_m=(set_time[3]-0x30)*10+(set_time[4]-0x30);
set_time1[0]=rd_24cxx(75);delay_iic();
set_time1[1]=rd_24cxx(76);delay_iic();
stop_Tm_h=(set_time1[0]-0x30)*10+(set_time1[1]-0x30);
set_time1[3]=rd_24cxx(77);delay_iic();
set_time1[4]=rd_24cxx(78);delay_iic();
stop_Tm_m=(set_time1[3]-0x30)*10+(set_time1[4]-0x30);
shidu_max[0]=rd_24cxx(79);delay_iic();
shidu_max[1]=rd_24cxx(80);delay_iic();
max_temp=(shidu_max[0]-0x30)*10+(shidu_max[1]-0x30);
shidu_min[0]=rd_24cxx(81);delay_iic();
shidu_min[1]=rd_24cxx(82);delay_iic();
min_temp=(shidu_min[0]-0x30)*10+(shidu_min[1]-0x30);
h1=rd_24cxx(83);delay_iic();
h2=rd_24cxx(84);delay_iic();
h3=rd_24cxx(85);delay_iic();
h4=rd_24cxx(86);delay_iic();
year=(h1-0x30)*1000+(h2-0x30)*100+(h3-0x30)*10+(h4-0x30);
h1=rd_24cxx(87);delay_iic();
h2=rd_24cxx(88);delay_iic();
month=(h1-0x30)*10+(h2-0x30);
h1=rd_24cxx(89);delay_iic();
h2=rd_24cxx(90);delay_iic();
day=(h1-0x30)*10+(h2-0x30);
}
//=============================================
void main_jiance()
{
uchar wenduzhi,shiduzhi;
wenduzhi=(T[0]-0x30)*10+(T[1]-0x30);
if(wenduzhi>=24)
{
paishui=1;
if(yewei==0)
{
if(wuhuadianyuan==1)
{
wuhuadianyuan=0;
wuhuafengji=0;
wuhuasanre=0;
}
paishui=0;jinshui=1;
}
}
if(yewei==1&&jinshui==1)jinshui=0;
shiduzhi=(RH[0]-0x30)*10+(RH[1]-0x30);
if(shiduzhi<=min_temp)
{
wuhuadianyuan=1;
wuhuafengji=1;
wuhuasanre=1;
}
else if(shiduzhi>=max_temp)
{
wuhuadianyuan=0;
wuhuafengji=0;
wuhuasanre=0;
}
}
//
void jiance()
{
if(work_mod==0)
{
if(start_Tm_h==hour&&start_Tm_m==min)
jiance_flag=1;
else if(stop_Tm_h==hour&&stop_Tm_m==min)
jiance_flag=0;
if(jiance_flag==1)main_jiance();
}
if(work_mod==1)main_jiance();
}
- [somniumchase] 大佬NB,不知道为什么,我在dosbox里面运行,那个笑脸显示在左上角,而且还卡住了 01/01 11:40
- [runxsystem] smaile.asm:2: error: parser: instruction expected 07/18 10:27
- [游客] 你说你妈呢 06/04 15:11
- [zkkpkk] 注意日期,很早以前的代码了,谁都一样,谁在第一个项目就写得漂亮的 05/11 11:56
- [qqqun238564439] 厉害! 04/10 10:54
- [游客] 二〇一五年六月七日 16:23:17 06/07 16:23
- [游客] 说句实话,代码写的非常垃圾。你缺乏基本的编程素养,不积跬步无以至千里,建议先把基础打扎实。 03/25 13:48
- [游客] www.aibiancheng.cn 爱编程 02/20 21:21
- [dreamsever] 大神,请问汇编语言可以编写或者调用窗口吗 12/19 19:19
- [dgkepu] 佩服佩服!!!谢谢分享! 12/06 06:57
- [qqqun238564439] 非常好 04/10 10:50
- [dreamsever] 求帮助,大神,请问汇编语言可以编写或者调用窗口吗,怎么实现,给点指导性的提示吧。 12/19 19:21
- [xiaofan086] 你好,本人初学汇编,请问汇编需要什么编译环境,即相应的软件等等,谢谢 01/03 15:02
- [hl458461178] 求帮助 如何让一个程序循环1000次 循环到255次后就与自己的思路叉开了 10/11 12:15
- [lizhengyong1217] 汇编学几回了,都是学着学着放弃了。由于立志做一名优秀的嵌入式编程人员,为了移植系统的需要,不得不,再 04/04 08:57
[ zaixuexi 发表于 2011-02-04 22:50 ]
挺好的,加油.
[ zhengcong3250 发表于 2011-02-05 13:27 ]
谢谢
[ parse 发表于 2012-02-24 20:07 ]
老师的C程序好精湛啊!
[ 游客 发表于 2014-03-25 13:48 ]
说句实话,代码写的非常垃圾。你缺乏基本的编程素养,不积跬步无以至千里,建议先把基础打扎实。
[ zkkpkk 发表于 2016-05-11 11:56 ]
注意日期,很早以前的代码了,谁都一样,谁在第一个项目就写得漂亮的