代码如下:- #include <STC12C5A.H>
- #include <i2c.H>
- #include <intrins.h>
- #include <LCD320240.H>
- #include <DS12C887.H>
- #include <NongLi.H>
- #include <ZiKu.H>
- /*
- AT24C08 地址分配
- 0 电源开关
- 1 声音开关
- 2 背光设置
- 3 时间制式
- */
- sbit Beep=P3^3;
- sbit IRsignal=P3^2;//红外接收输入
- sbit Error=P3^0;
- unsigned char IR_DATA; //全局红外键值
- bit Power_SW;
- bit Sound_SW;//声音开关状态
- unsigned char BG_DATA;//背光设置数据
- unsigned char KE;//背光比例
- /*全局日期变量*/
- unsigned char year,month,day;//年,月,日,星期(公历)
- unsigned char N_year,N_month,N_day;//年,月,日(农历)
- unsigned char Time_inf;//时间制式
- unsigned char hour,min,sec;
- unsigned char week;
- unsigned char M_temp,D_temp;//当年春节所在的公历月,日
- /*全局节日变量*/
- unsigned char DATE_TEMP;
- bit DISP_SW;
- /*用户密码*/
- unsigned char USER_PassWord[6];
- /*设置日期/时间临时数组*/
- unsigned char DATE_TIME[6];
- void ms(ms)//通用延时函数
- {
- unsigned int x,y;
- for(x=ms;x>0;x--)
- for(y=220;y>0;y--)if((Power_SW==0)&&(IR_DATA==20))if(IR_DATA==20){IAP_CONTR=0x60;};
- }
-
- void KEY_BEP()//按键声
- {
- if(Sound_SW==1)
- {
- Beep=0;
- ms(80);
- Beep=1;
- }
- }
- void InitUART()
- {
- TMOD = 0x20;
- SCON = 0x50;
- TH1 = 0xB0;
- TL1 = TH1;
- PCON = 0x00;
- ES = 1;
- TR1 = 1;
- }
- void TEST_()//功能测试,此函数程序中不直接应用
- {
- unsigned char DATA,AD;
- EEPROM_Write(1,2);//写数据到24C08
- DATA=EEPROM_Read(1);//读24C08数据
- LCD_GotoXY(1,2,0);//设置工作窗口
- AD=PCF8591_Read_Data(1);//读取AD值
- Write_B(3,0,0,1);//一位数字显示
- Write_D(1,100,0,0,IR_DATA);
- Write_Photo(5,130,32,32,ZF_Year);
- Write_Photo(15,130,32,32,ZF_Month);
- Write_Photo(20,130,32,32,ZF_Day);
- Conversion(12,2,3);//农历转换
- Write_Photo(0,130,16,32,Num_0);
- Write_Photo(5,130,16,32,Num_1);
- Write_Photo(10,130,16,32,Num_2);
- Write_Photo(15,130,16,32,Num_3);
- Write_Photo(20,130,16,32,Num_4);
- Write_Photo(25,130,16,32,Num_5);
- Write_Photo(30,130,16,32,Num_6);
- Write_Photo(35,130,16,32,Num_7);
- Write_Photo(0,180,16,32,Num_8);
- Write_Photo(5,180,16,32,Num_9);
- }
- /**************************延时0.9ms子程序**********************/
- void Delay0_9ms(void)
- {
- unsigned char a,b,c;
- for(c=8;c>0;c--)
- for(b=190;b>0;b--)
- for(a=2;a>0;a--);
- }
- /***************************延时1ms子程序**********************/
- void Delay1ms(void)
- {
- unsigned char a,b;
- for(b=195;b>0;b--)
- for(a=30;a>0;a--);
- }
- /***************************延时4.5ms子程序**********************/
- void Delay4_5ms(void)
- {
- unsigned char a,b,c;
- for(c=7;c>0;c--)
- for(b=168;b>0;b--)
- for(a=300;a>0;a--);
- }
- void INIT()
- {
- Sound_SW=EEPROM_Read(1);//读取声音开关状态
- ms(10);
- BG_DATA=EEPROM_Read(2);//读取背光设置值
- ms(10);
- if(Sound_SW==1)
- {
- Beep=0;
- ms(1000);
- Beep=1;
- }
- init_lcd();//LCD初始化
- DS_INIT();//时钟初始化
- }
- void Power_ON()//开机画面
- {
- PCF8591_Write_Data(200);//背光全开
- ms(5000);
- LCD_Graphic();
- LCD_DrawRectangle(0,0,319,239,1);////画外框
- Write_Photo(12,50,128,64,Photo1);//标志
- Write_Photo(10,130,32,32,ZF_Meng);
- Write_Photo(15,130,32,32,ZF_Yan);
- Write_Photo(20,130,32,32,ZF_Ke);
- Write_Photo(25,130,32,32,ZF_Ji);
- ms(20000);
- Com_Dat(0xf0,0x08);//清屏
- KE=EEPROM_Read(2);
- if(KE==0)BG_DATA=0;
- if(KE==7)BG_DATA=200;
- if(KE<7&&KE>0){BG_DATA=(KE*10)+30;}
- PCF8591_Write_Data(BG_DATA);
- Write_Photo(0,0,48,64,Photo_L);
- Write_Photo(34,0,48,72,Photo_R);
- Write_Photo(0,160,320,79,Photo_main);
- LCD_DrawRectangle(0,0,319,239,1);////画外框
- }
- void main_Disp()
- {
- unsigned char year_shi,year_ge;
- unsigned char month_shi,month_ge;
- unsigned char day_shi,day_ge;
- unsigned char hour_shi,hour_ge;
- unsigned char min_shi,min_ge;
- unsigned int LD_X,LD_Y;
- unsigned int Celestial_stem,shengxiao;//干支,生肖
- LCD_DrawRectangle(0,0,319,239,1);////画外框
- Com_Dat(0x10,0x10);//粗体
- year=DS_Read(9);
- month=DS_Read(8);
- day=DS_Read(7);
- hour=DS_Read(4);
- min=DS_Read(2);
- sec=DS_Read(0);
- Time_inf=EEPROM_Read(3);
- Conversion(year,month,day);//农历转换
- Celestial_stem=((2000+N_year)-3)%60;//计算干支
- shengxiao=((2000+N_year)-1900)%12;//计算生肖年
- SendStr(5,140,0,"农");
- SendStr(5,165,0,"历");
- SendStr(8,150,0,DD[Celestial_stem]);
- SendStr(12,150,0,Sheng[shengxiao]);
- SendStr(14,150,0,"年");
- Com_Dat(0x10,0x00);//粗体
- LD_X=17;
- LD_Y=140;
- if((hour==0)&&(min==0)&&(sec==0))
- {
- while(1)
- {
- SendStr(LD_X,LD_Y,1," ");
- SendStr(LD_X+18,LD_Y,1," ");
- break;
- }
- }
- if(N_month!=11)LD_X+=2;
- switch(N_month)
- {
- case 1:{Write_Photo(LD_X,LD_Y,32,33,ZF_zheng);}break;
- case 2:{Write_Photo(LD_X,LD_Y,32,33,ZF_2);}break;
- case 3:{Write_Photo(LD_X,LD_Y,32,33,ZF_3);}break;
- case 4:{Write_Photo(LD_X,LD_Y,32,33,ZF_4);}break;
- case 5:{Write_Photo(LD_X,LD_Y,32,33,ZF_5);}break;
- case 6:{Write_Photo(LD_X,LD_Y,32,33,ZF_6);}break;
- case 7:{Write_Photo(LD_X,LD_Y,32,33,ZF_7);}break;
- case 8:{Write_Photo(LD_X,LD_Y,32,33,ZF_8);}break;
- case 9:{Write_Photo(LD_X,LD_Y,32,33,ZF_9);}break;
- case 10:{Write_Photo(LD_X,LD_Y,32,33,ZF_shi);}break;
- case 11:{Write_Photo(LD_X,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+4,LD_Y,32,33,ZF_1);}break;
- case 12:{Write_Photo(LD_X,LD_Y,32,33,ZF_la);}break;
- }
- if(N_month==11)LD_X+=4;
- Write_Photo(LD_X+4,LD_Y,32,33,ZF_Month);
- LD_X+=4;
- switch(N_day)
- {
- case 1:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_1);}break;
- case 2:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_2);}break;
- case 3:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_3);}break;
- case 4:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_4);}break;
- case 5:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_5);}break;
- case 6:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_6);}break;
- case 7:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_7);}break;
- case 8:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_8);}break;
- case 9:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_9);}break;
- case 10:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_chu);Write_Photo(LD_X+8,LD_Y,32,33,ZF_shi);}break;
- case 11:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+8,LD_Y,32,33,ZF_1);}break;
- case 12:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+8,LD_Y,32,33,ZF_2);}break;
- case 13:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+8,LD_Y,32,33,ZF_3);}break;
- case 14:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+8,LD_Y,32,33,ZF_4);}break;
- case 15:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+8,LD_Y,32,33,ZF_5);}break;
- case 16:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+8,LD_Y,32,33,ZF_6);}break;
- case 17:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+8,LD_Y,32,33,ZF_7);}break;
- case 18:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+8,LD_Y,32,33,ZF_8);}break;
- case 19:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+8,LD_Y,32,33,ZF_9);}break;
- case 20:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_2);Write_Photo(LD_X+8,LD_Y,32,33,ZF_shi);}break;
- case 21:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_er);Write_Photo(LD_X+8,LD_Y,32,33,ZF_1);}break;
- case 22:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_er);Write_Photo(LD_X+8,LD_Y,32,33,ZF_2);}break;
- case 23:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_er);Write_Photo(LD_X+8,LD_Y,32,33,ZF_3);}break;
- case 24:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_er);Write_Photo(LD_X+8,LD_Y,32,33,ZF_4);}break;
- case 25:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_er);Write_Photo(LD_X+8,LD_Y,32,33,ZF_5);}break;
- case 26:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_er);Write_Photo(LD_X+8,LD_Y,32,33,ZF_6);}break;
- case 27:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_er);Write_Photo(LD_X+8,LD_Y,32,33,ZF_7);}break;
- case 28:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_er);Write_Photo(LD_X+8,LD_Y,32,33,ZF_8);}break;
- case 29:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_er);Write_Photo(LD_X+8,LD_Y,32,33,ZF_9);}break;
- case 30:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_3);Write_Photo(LD_X+8,LD_Y,32,33,ZF_shi);}break;
- case 31:{Write_Photo(LD_X+4,LD_Y,32,33,ZF_3);Write_Photo(LD_X+8,LD_Y,32,33,ZF_1);}break;
- }
- Com_Dat(0x10,0x10);//粗体
- year_shi=year/10;
- year_ge=year%10;
- LD_X=12;
- LD_Y=5;
- Write_Photo(LD_X,LD_Y,16,33,Num_2);
- Write_Photo(LD_X+4,LD_Y,16,33,Num_0);
- switch(year_shi)
- {
- case 0: Write_Photo(LD_X+8,LD_Y,16,33,Num_0); break;
- case 1: Write_Photo(LD_X+8,LD_Y,16,33,Num_1); break;
- case 2: Write_Photo(LD_X+8,LD_Y,16,33,Num_2); break;
- case 3: Write_Photo(LD_X+8,LD_Y,16,33,Num_3); break;
- case 4: Write_Photo(LD_X+8,LD_Y,16,33,Num_4); break;
- case 5: Write_Photo(LD_X+8,LD_Y,16,33,Num_5); break;
- case 6: Write_Photo(LD_X+8,LD_Y,16,33,Num_6); break;
- case 7: Write_Photo(LD_X+8,LD_Y,16,33,Num_7); break;
- case 8: Write_Photo(LD_X+8,LD_Y,16,33,Num_8); break;
- case 9: Write_Photo(LD_X+8,LD_Y,16,33,Num_9); break;
- }
- switch(year_ge)
- {
- case 0: Write_Photo(LD_X+12,LD_Y,16,33,Num_0); break;
- case 1: Write_Photo(LD_X+12,LD_Y,16,33,Num_1); break;
- case 2: Write_Photo(LD_X+12,LD_Y,16,33,Num_2); break;
- case 3: Write_Photo(LD_X+12,LD_Y,16,33,Num_3); break;
- case 4: Write_Photo(LD_X+12,LD_Y,16,33,Num_4); break;
- case 5: Write_Photo(LD_X+12,LD_Y,16,33,Num_5); break;
- case 6: Write_Photo(LD_X+12,LD_Y,16,33,Num_6); break;
- case 7: Write_Photo(LD_X+12,LD_Y,16,33,Num_7); break;
- case 8: Write_Photo(LD_X+12,LD_Y,16,33,Num_8); break;
- case 9: Write_Photo(LD_X+12,LD_Y,16,33,Num_9); break;
- }
- LD_X=10;
- LD_Y=45;
- if(hour==23||hour==0)SendStr(LD_X+21,LD_Y+25,0,"子时");
- if(hour==1||hour==2)SendStr(LD_X+21,LD_Y+25,0,"丑时");
- if(hour==3||hour==4)SendStr(LD_X+21,LD_Y+25,0,"寅时");
- if(hour==5||hour==6)SendStr(LD_X+21,LD_Y+25,0,"卯时");
- if(hour==7||hour==8)SendStr(LD_X+21,LD_Y+25,0,"辰时");
- if(hour==9||hour==10)SendStr(LD_X+21,LD_Y+25,0,"巳时");
- if(hour==11||hour==12)SendStr(LD_X+21,LD_Y+25,0,"午时");
- if(hour==13||hour==14)SendStr(LD_X+21,LD_Y+25,0,"未时");
- if(hour==15||hour==16)SendStr(LD_X+21,LD_Y+25,0,"申时");
- if(hour==17||hour==18)SendStr(LD_X+21,LD_Y+25,0,"酉时");
- if(hour==19||hour==20)SendStr(LD_X+21,LD_Y+25,0,"戌时");
- if(hour==21||hour==22)SendStr(LD_X+21,LD_Y+25,0,"亥时");
- if(hour<12)SendStr(LD_X-6,LD_Y+25,0,"上午");
- if(hour>=12)SendStr(LD_X-6,LD_Y+25,0,"下午");
- if(hour>=13)
- {
- if(Time_inf==1)hour-=12;
- }
- hour_shi=hour/10;
- hour_ge=hour%10;
- if((min==0)&&(sec==0))
- {
- Write_Photo(LD_X-1,LD_Y,32,48,num_3248_);
- Write_Photo(LD_X+3,LD_Y,32,48,num_3248_);
- Write_Photo(LD_X+7,LD_Y,32,48,num_3248_);
- Write_Photo(LD_X+8,LD_Y,32,48,num_3248_);
- Write_Photo(LD_X+12,LD_Y,32,48,num_3248_);
- Write_Photo(LD_X+16,LD_Y,32,48,num_3248_);
- }
- if(hour_shi!=0)
- {
- switch(hour_shi)
- {
- case 0: Write_Photo(LD_X-1,LD_Y,32,48,num3248_0); break;
- case 1: Write_Photo(LD_X-1,LD_Y,32,48,num3248_1); break;
- case 2: Write_Photo(LD_X-1,LD_Y,32,48,num3248_2); break;
- }
- }
- else
- {
- switch(hour_shi)
- {
- case 1: Write_Photo(LD_X-1,LD_Y,32,48,num3248_1); break;
- }
- LD_X-=2;
-
- }
- switch(hour_ge)
- {
- case 0: Write_Photo(LD_X+3,LD_Y,32,48,num3248_0); break;
- case 1: Write_Photo(LD_X+3,LD_Y,32,48,num3248_1); break;
- case 2: Write_Photo(LD_X+3,LD_Y,32,48,num3248_2); break;
- case 3: Write_Photo(LD_X+3,LD_Y,32,48,num3248_3); break;
- case 4: Write_Photo(LD_X+3,LD_Y,32,48,num3248_4); break;
- case 5: Write_Photo(LD_X+3,LD_Y,32,48,num3248_5); break;
- case 6: Write_Photo(LD_X+3,LD_Y,32,48,num3248_6); break;
- case 7: Write_Photo(LD_X+3,LD_Y,32,48,num3248_7); break;
- case 8: Write_Photo(LD_X+3,LD_Y,32,48,num3248_8); break;
- case 9: Write_Photo(LD_X+3,LD_Y,32,48,num3248_9); break;
- }
- Write_Photo(LD_X+8,LD_Y,24,48,Photo_Time);//:
- min_shi=min/10;
- min_ge=min%10;
- switch(min_shi)
- {
- case 0: Write_Photo(LD_X+12,LD_Y,32,48,num3248_0); break;
- case 1: Write_Photo(LD_X+12,LD_Y,32,48,num3248_1); break;
- case 2: Write_Photo(LD_X+12,LD_Y,32,48,num3248_2); break;
- case 3: Write_Photo(LD_X+12,LD_Y,32,48,num3248_3); break;
- case 4: Write_Photo(LD_X+12,LD_Y,32,48,num3248_4); break;
- case 5: Write_Photo(LD_X+12,LD_Y,32,48,num3248_5); break;
- case 6: Write_Photo(LD_X+12,LD_Y,32,48,num3248_6); break;
- case 7: Write_Photo(LD_X+12,LD_Y,32,48,num3248_7); break;
- case 8: Write_Photo(LD_X+12,LD_Y,32,48,num3248_8); break;
- case 9: Write_Photo(LD_X+12,LD_Y,32,48,num3248_9); break;
- }
- switch(min_ge)
- {
- case 0: Write_Photo(LD_X+16,LD_Y,32,48,num3248_0); break;
- case 1: Write_Photo(LD_X+16,LD_Y,32,48,num3248_1); break;
- case 2: Write_Photo(LD_X+16,LD_Y,32,48,num3248_2); break;
- case 3: Write_Photo(LD_X+16,LD_Y,32,48,num3248_3); break;
- case 4: Write_Photo(LD_X+16,LD_Y,32,48,num3248_4); break;
- case 5: Write_Photo(LD_X+16,LD_Y,32,48,num3248_5); break;
- case 6: Write_Photo(LD_X+16,LD_Y,32,48,num3248_6); break;
- case 7: Write_Photo(LD_X+16,LD_Y,32,48,num3248_7); break;
- case 8: Write_Photo(LD_X+16,LD_Y,32,48,num3248_8); break;
- case 9: Write_Photo(LD_X+16,LD_Y,32,48,num3248_9); break;
- }
- LD_X=5;
- LD_Y=100;
- month_shi=month/10;
- month_ge=month%10;
- switch(month_shi)
- {
- case 0: Write_Photo(LD_X,LD_Y,16,32,Num_0); break;
- case 1: Write_Photo(LD_X,LD_Y,16,32,Num_1); break;
- case 2: Write_Photo(LD_X,LD_Y,16,32,Num_2); break;
- case 3: Write_Photo(LD_X,LD_Y,16,32,Num_3); break;
- case 4: Write_Photo(LD_X,LD_Y,16,32,Num_4); break;
- case 5: Write_Photo(LD_X,LD_Y,16,32,Num_5); break;
- case 6: Write_Photo(LD_X,LD_Y,16,32,Num_6); break;
- case 7: Write_Photo(LD_X,LD_Y,16,32,Num_7); break;
- case 8: Write_Photo(LD_X,LD_Y,16,32,Num_8); break;
- case 9: Write_Photo(LD_X,LD_Y,16,32,Num_9); break;
- }
- switch(month_ge)
- {
- case 0: Write_Photo(LD_X+2,LD_Y,16,32,Num_0); break;
- case 1: Write_Photo(LD_X+2,LD_Y,16,32,Num_1); break;
- case 2: Write_Photo(LD_X+2,LD_Y,16,32,Num_2); break;
- case 3: Write_Photo(LD_X+2,LD_Y,16,32,Num_3); break;
- case 4: Write_Photo(LD_X+2,LD_Y,16,32,Num_4); break;
- case 5: Write_Photo(LD_X+2,LD_Y,16,32,Num_5); break;
- case 6: Write_Photo(LD_X+2,LD_Y,16,32,Num_6); break;
- case 7: Write_Photo(LD_X+2,LD_Y,16,32,Num_7); break;
- case 8: Write_Photo(LD_X+2,LD_Y,16,32,Num_8); break;
- case 9: Write_Photo(LD_X+2,LD_Y,16,32,Num_9); break;
- }
- Write_Photo(LD_X+4,LD_Y,32,32,ZF_Month);
- day_shi=day/10;
- day_ge=day%10;
- switch(day_shi)
- {
- case 0: Write_Photo(LD_X+8,LD_Y,16,32,Num_0); break;
- case 1: Write_Photo(LD_X+8,LD_Y,16,32,Num_1); break;
- case 2: Write_Photo(LD_X+8,LD_Y,16,32,Num_2); break;
- case 3: Write_Photo(LD_X+8,LD_Y,16,32,Num_3); break;
- case 4: Write_Photo(LD_X+8,LD_Y,16,32,Num_4); break;
- case 5: Write_Photo(LD_X+8,LD_Y,16,32,Num_5); break;
- case 6: Write_Photo(LD_X+8,LD_Y,16,32,Num_6); break;
- case 7: Write_Photo(LD_X+8,LD_Y,16,32,Num_7); break;
- case 8: Write_Photo(LD_X+8,LD_Y,16,32,Num_8); break;
- case 9: Write_Photo(LD_X+8,LD_Y,16,32,Num_9); break;
- }
- switch(day_ge)
- {
- case 0: Write_Photo(LD_X+10,LD_Y,16,32,Num_0); break;
- case 1: Write_Photo(LD_X+10,LD_Y,16,32,Num_1); break;
- case 2: Write_Photo(LD_X+10,LD_Y,16,32,Num_2); break;
- case 3: Write_Photo(LD_X+10,LD_Y,16,32,Num_3); break;
- case 4: Write_Photo(LD_X+10,LD_Y,16,32,Num_4); break;
- case 5: Write_Photo(LD_X+10,LD_Y,16,32,Num_5); break;
- case 6: Write_Photo(LD_X+10,LD_Y,16,32,Num_6); break;
- case 7: Write_Photo(LD_X+10,LD_Y,16,32,Num_7); break;
- case 8: Write_Photo(LD_X+10,LD_Y,16,32,Num_8); break;
- case 9: Write_Photo(LD_X+10,LD_Y,16,32,Num_9); break;
- }
- Write_Photo(LD_X+12,LD_Y,32,32,ZF_Day);
-
- Write_Photo(LD_X+17,LD_Y,32,32,ZF_Xing);
- Write_Photo(LD_X+21,LD_Y,32,32,ZF_Qi);
- switch(week)
- {
- case 0: Write_Photo(LD_X+25,LD_Y,32,32,ZF_Day); break;
- case 1: Write_Photo(LD_X+25,LD_Y,32,32,ZF_1); break;
- case 2: Write_Photo(LD_X+25,LD_Y,32,32,ZF_2); break;
- case 3: Write_Photo(LD_X+25,LD_Y,32,32,ZF_3); break;
- case 4: Write_Photo(LD_X+25,LD_Y,32,32,ZF_4); break;
- case 5: Write_Photo(LD_X+25,LD_Y,32,32,ZF_5); break;
- case 6: Write_Photo(LD_X+25,LD_Y,32,32,ZF_6); break;
- }
- Com_Dat(0x10,0x00);
- }
- void Festival()//节日
- {
- unsigned char y,DATE;
- unsigned char LDX=22,LDY=185;
- y=0;
- DATE=0;
- Com_Dat(0x10,0x10);
- Conversion(year,month,day);
- if(DISP_SW==1)SendStr(LDX-5,LDY,0,"今天:");
- while(1)
- {
- if((month==2)&&((day>=2)&&(day<=5)))//立春
- {
- y=year;
- DATE=(((y*0.2422)+3.87)-((y-1)/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[2]);else break;
- }
- if((month==2)&&((day>=18)&&(day<=20)))//雨水
- {
- y=year;
- DATE=(((y*0.2422)+18.73)-(y/4));
- if(y==26)DATE=DATE-1; //2026年例外
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[2]);else break;
- }
- if((month==3)&&((day>=5)&&(day<=7)))//惊蛰
- {
- y=year;
- DATE=((y*0.2422+5.63)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[3]);else break;
- }
- if((month==3)&&((day>=20)&&(day<=22)))//春分
- {
- y=year;
- DATE=((y*0.2422+20.646)-(y/4));
- if(y==84)DATE=DATE+1; //2084年例外
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[3]);else break;
- }
- if((month==4)&&((day>=4)&&(day<=6)))//清明
- {
- y=year;
- DATE=((y*0.2422+4.81)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[4]);else break;
- }
- if((month==4)&&((day>=19)&&(day<=21)))//谷雨
- {
- y=year;
- DATE=((y*0.2422+20.1)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[4]);else break;
- }
- if((month==5)&&((day>=5)&&(day<=7)))//立夏
- {
- y=year;
- DATE=((y*0.2422+5.52)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[5]);else break;
- }
- if((month==5)&&((day>=20)&&(day<=22)))//小满
- {
- y=year;
- DATE=((y*0.2422+21.04)-(y/4));
- if(y==8)DATE=DATE+1; //2008年例外
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[5]);else break;
- }
- if((month==6)&&((day>=5)&&(day<=7)))//芒种
- {
- y=year;
- DATE=((y*0.2422+5.678)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[6]);else break;
- }
- if((month==6)&&((day>=21)&&(day<=22)))//夏至
- {
- y=year;
- DATE=((y*0.2422+21.37)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[6]);else break;
- }
- if((month==7)&&((day>=6)&&(day<=8)))//小暑
- {
- y=year;
- DATE=((y*0.2422+7.108)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[7]);else break;
- }
- if((month==7)&&((day>=22)&&(day<=24)))//大暑
- {
- y=year;
- DATE=((y*0.2422+22.83)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[7]);else break;
- }
- if((month==8)&&((day>=7)&&(day<=9)))//立秋
- {
- y=year;
- DATE=((y*0.2422+7.5)-(y/4));
- if(y==2)DATE=DATE+1; //2002年例外
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[8]);else break;
- }
- if((month==8)&&((day>=22)&&(day<=24)))//处暑
- {
- y=year;
- DATE=((y*0.2422+23.13)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[8]);else break;
- }
- if((month==9)&&((day>=7)&&(day<=9)))//白露
- {
- y=year;
- DATE=((y*0.2422+7.646)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[9]);else break;
- }
- if((month==9)&&((day>=21)&&(day<=24)))//秋分
- {
- y=year;
- DATE=((y*0.2422+23.042)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[9]);else break;
- }
- if((month==10)&&((day>=8)&&(day<=9)))//寒露
- {
- y=year;
- DATE=((y*0.2422+8.318)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[10]);else break;
- }
- if((month==10)&&((day>=23)&&(day<=24)))//霜降
- {
- y=year;
- DATE=((y*0.2422+23.438)-(y/4));
- if(y==89)DATE=DATE+1; //2089年例外
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[10]);else break;
- }
- if((month==11)&&((day>=7)&&(day<=8)))//立冬
- {
- y=year;
- DATE=((y*0.2422+7.438)-(y/4));
- if(y==89)DATE=DATE+1; //2089年例外
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[11]);else break;
- }
- if((month==11)&&((day>=22)&&(day<=23)))//小雪
- {
- y=year;
- DATE=((y*0.2422+22.36)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[11]);else break;
- }
- if((month==12)&&((day>=6)&&(day<=8)))//大雪
- {
- y=year;
- DATE=((y*0.2422+7.18)-(y/4));
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[12]);else break;
- }
- if((month==12)&&((day>=21)&&(day<=23)))//冬至
- {
- y=year;
- DATE=((y*0.2422+21.94)-(y/4));
- if(y==21)DATE=DATE+1; //2021年例外
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[12]);else break;
- }
- if((month==1)&&((day>=5)&&(day<=7)))//小寒
- {
- y=year;
- DATE=((y*0.2422+5.4055)-(y/4));
- if(y==19)DATE=DATE-1; //2019年例外
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[1]);else break;
- }
- if((month==1)&&((day>=20)&&(day<=21)))//大寒
- {
- y=year;
- DATE=((y*0.2422+20.12)-(y/4));
- if(y==82)DATE=DATE+1; //2082年例外
- if(day==DATE)DATE_TEMP=DATE;
- if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[1]);else break;
- }
- if((month==M_temp)&&(day+1==D_temp))SendStr(LDX,LDY,0,"除夕");else break;
- break;
- Com_Dat(0x10,0x00);
- }
- }
- void Forecast()//节日预报
- {
- float y_Temp;
- unsigned char Temp_A,y,S,DATE;
- unsigned char LDX=15,LDY=185;
- Com_Dat(0x10,0x10);
- if(day<15)
- {
- switch(month)//上半月
- {
- case 1: y_Temp=5.4055;break;//小寒
- case 2: y_Temp=3.87;break;//立春
- case 3: y_Temp=5.63;break;//惊蛰
- case 4: y_Temp=4.81;break;//清明
- case 5: y_Temp=5.52;break;//立夏
- case 6: y_Temp=5.678;break;//芒种
- case 7: y_Temp=7.108;break;//小暑
- case 8: y_Temp=7.5;break;//立秋
- case 9: y_Temp=7.646;break;//白露
- case 10: y_Temp=8.318;break;//寒露
- case 11: y_Temp=7.438;break;//立冬
- case 12: y_Temp=7.18;break;//小寒
- default:break;
- }
- y=year;
- DATE=((y*0.2422+y_Temp)-(y/4));
- for(S=0;S<30;S++){if(DATE==S){Temp_A=S;break;}}//计算当前月节日在哪一日(上半月)
- if((day+1)==Temp_A){SendStr(LDX,LDY,0," 明天:");SendStr(LDX+7,LDY,0,Festival_A[month]);}
- if((day+2)==Temp_A){SendStr(LDX,LDY,0," 后天:");SendStr(LDX+7,LDY,0,Festival_A[month]);}
- }
- else
- {
- switch(month)//下半月
- {
- case 1: y_Temp=20.12;break;//大寒
- case 2: y_Temp=18.73;break;//雨水
- case 3: y_Temp=20.646;break;//春分
- case 4: y_Temp=20.1;break;//谷雨
- case 5: y_Temp=21.04;break;//小满
- case 6: y_Temp=21.37;break;//夏至
- case 7: y_Temp=22.83;break;//大暑
- case 8: y_Temp=23.13;break;//处暑
- case 9: y_Temp=23.042;break;//秋分
- case 10: y_Temp=23.438;break;//霜降
- case 11: y_Temp=22.36;break;//小雪
- case 12: y_Temp=21.94;break;//大寒
- default:break;
- }
- y=year;
- DATE=(((y*0.2422)+y_Temp)-(y/4));//计算出当月节日在第几日
- for(S=0;S<30;S++){if(DATE==S){Temp_A=S;break;}}//计算当前月节日在哪一日(下半月)
- if((day+1)==Temp_A){SendStr(LDX,LDY,0," 明天:");SendStr(LDX+7,LDY,0,Festival_B[month]);}
- if((day+2)==Temp_A){SendStr(LDX,LDY,0," 后天:");SendStr(LDX+7,LDY,0,Festival_B[month]);}
- }
- if(month==M_temp)//当前月是否接近春节
- {
- if(day==Temp_A){DISP_SW=1;}else DISP_SW=0;
- if((day!=Temp_A)&&((day+1)!=Temp_A)&&((day+2)!=Temp_A)&&(day+3!=D_temp)&&(day+2!=D_temp)&&(day+1!=D_temp)&&(day!=D_temp))SendStr(LDX,LDY,0,"今天无节日!");
- if(day+3==D_temp){SendStr(LDX,LDY,0," 后天:除夕");}
- if(day+2==D_temp){SendStr(LDX,LDY,0," 明天:除夕");}
- if((day+1==D_temp)||(day==D_temp)){DISP_SW=1;}else DISP_SW=0;
- if((N_month==1)&&(N_day==1))SendStr(29,LDY,0,"春节");
- }
- else
- {
- if(day==Temp_A){DISP_SW=1;}else DISP_SW=0;
- if((day!=Temp_A)&&((day+1)!=Temp_A)&&((day+2)!=Temp_A))SendStr(LDX,LDY,0,"今天无节日!");
- }
- Com_Dat(0x10,0x00);
- }
- void mi_Time()//小时间窗口
- {
- hour=DS_Read(4);
- min=DS_Read(2);
- Write_D(34,220,0,0,hour);
- SendStr(36,220,0,":");
- Write_D(37,220,0,0,min);
- }
- void MODE()
- {
- unsigned char GB_A,GB_B;
- unsigned char Date_Count;//设置日期计数器
- unsigned char D_T_OK;//设置日期/时间是否正确
- unsigned char YH,YL,MH,ML,DH,DL;//设置日期元素
- unsigned char HH,HL,SH,SL;//设置日期元素
- Com_Dat(0xf0,0x08);//清屏
- LCD_DrawRectangle(0,0,319,239,1);////画外框
- LCD_Graphic();
- Dis_Linexy(1,25,319,25,1);
- Dis_Linexy(1,215,319,215,1);
- Dis_Linexy(150,25,150,215,1);
- LCD_Text();
- Com_Dat(0x10,0x10);//粗体
- SendStr(14,5,0,"设 置 页 面");
- Com_Dat(0x10,0x00);
- IR_DATA=0;
- GB_B=0;
- while(1)
- {
- mi_Time();//小时间窗口
- GB_A++;
- if(GB_A==15)SendStr(23,220,0,"_");
- if(GB_A>=30){SendStr(23,220,0," ");GB_A=0;}
- SendStr(1,50,0,"◇ 1:日期调整 ");
- SendStr(1,80,0,"◇ 2:时间调整");
- SendStr(1,110,0,"◇ 3:背光调整");
- SendStr(1,140,0,"◇ 4:高级设定");
- SendStr(1,220,0,"请选择您要设置的项目:");
- SendStr(20,50,0,"请按对应数字键选择");
- SendStr(20,70,0,"一个要设置的项目");
- SendStr(22,120,0,"按 键返回主页");
- Write_Photo(24,120,16,16,Photo_ENTER);
- ms(100);
- if((IR_DATA==21)||(IR_DATA==23)||(IR_DATA==24)||(IR_DATA==25)||
- (IR_DATA==26)||(IR_DATA==27)||(IR_DATA==28)||(IR_DATA==29))
- {
- SendStr(25,160,0,"无效按键!");
- GB_B++;
- if(GB_B>=60){SendStr(25,160,0," ");GB_B=0;IR_DATA=0;}
- }
- if(IR_DATA==30)//返回主页
- {
- Com_Dat(0xf0,0x08);//清屏
- Write_Photo(0,0,48,64,Photo_L);
- Write_Photo(34,0,48,72,Photo_R);
- Write_Photo(0,160,320,79,Photo_main);
- LCD_DrawRectangle(0,0,319,239,1);////画外框
- break;
- }
- if(IR_DATA==1)//日期调整
- {
- CLS();
- GB_A=0;
- SendStr(23,220,0,"1");
- SendStr(1,50,0,"◆");
- Com_Dat(0x10,0x10);//粗体
- SendStr(23,30,0,"日 期 调 整");
- Com_Dat(0x10,0x00);
- SendStr(20,190,0,"EQ保存 返回");
- Write_Photo(28,190,16,16,Photo_ENTER);
- SendStr(20,60,0,"当前日期:");
- SendStr(20,115,0,"调整为:");
- SendStr(25,140,0,"20 - - ");
- IR_DATA=0;
- Date_Count=0;
- D_T_OK=0;
- while(1)
- {
- year=DS_Read(9);
- month=DS_Read(8);
- day=DS_Read(7);
- mi_Time();
- Com_Dat(0x10,0x10);//粗体
- SendStr(25,85,0,"20 - - ");
- Write_D(27,85,0,0,year);
- Write_D(30,85,0,0,month);
- Write_D(33,85,0,0,day);
- Com_Dat(0x10,0x00);//粗体
- if(Date_Count<6)
- {
- if(IR_DATA>0&&IR_DATA<=10)
- {
- if(IR_DATA==10)IR_DATA=0;
- DATE_TIME[Date_Count]=IR_DATA;
- switch(Date_Count)
- {
- case 0:Write_B(27,140,0,IR_DATA);break;
- case 1:Write_B(28,140,0,IR_DATA);break;
- case 2:Write_B(30,140,0,IR_DATA);break;
- case 3:Write_B(31,140,0,IR_DATA);break;
- case 4:Write_B(33,140,0,IR_DATA);break;
- case 5:Write_B(34,140,0,IR_DATA);break;
- }
- Date_Count++;
- IR_DATA=0;
- }
- }
- if(Date_Count>=6)
- {
- YH=DATE_TIME[0];
- YL=DATE_TIME[1];
- MH=DATE_TIME[2];
- ML=DATE_TIME[3];
- DH=DATE_TIME[4];
- DL=DATE_TIME[5];
- if(((MH*10+ML)>12)||((MH*10+ML)<1)||((DH*10+DL)>31)||((DH*10+DL)<1))
- {
- SendStr(25,165,0,"输入错误!");
- Date_Count=0;
- D_T_OK=0;
- }else {SendStr(25,165,0,"输入正确!");D_T_OK=1;}
- }
- GB_A++;
- if(GB_A==30)
- switch(Date_Count)
- {
- case 0:SendStr(27,140,0,"_");break;
- case 1:SendStr(28,140,0,"_");break;
- case 2:SendStr(30,140,0,"_");break;
- case 3:SendStr(31,140,0,"_");break;
- case 4:SendStr(33,140,0,"_");break;
- case 5:SendStr(34,140,0,"_");break;
- }
- if(GB_A>=60)
- {
- switch(Date_Count)
- {
- case 0:SendStr(27,140,0," ");break;
- case 1:SendStr(28,140,0," ");break;
- case 2:SendStr(30,140,0," ");break;
- case 3:SendStr(31,140,0," ");break;
- case 4:SendStr(33,140,0," ");break;
- case 5:SendStr(34,140,0," ");break;
- }
- GB_A=0;
- }
- if(IR_DATA==28)//保存
- {
- if(D_T_OK==1)
- {
- year=YH*10+YL;
- month=MH*10+ML;
- day=DH*10+DL;
- DS_Write(9,year);
- DS_Write(8,month);
- DS_Write(7,day);
- SendStr(25,165,0," 已储存!");
- }
- else SendStr(25,165,0," 未储存!");
- Date_Count=0;
- IR_DATA=0;
- D_T_OK=0;
- }
- if(IR_DATA==30){CLS();IR_DATA=0;break;}//退出
- }
- IR_DATA=0;
- }
- if(IR_DATA==2)//时间调整
- {
- GB_A=0;
- CLS();
- SendStr(23,220,0,"2");
- SendStr(1,80,0,"◆");
- Com_Dat(0x10,0x10);//粗体
- SendStr(23,30,0,"时 间 调 整");
- Com_Dat(0x10,0x00);
- SendStr(20,190,0,"EQ保存 返回");
- Write_Photo(28,190,16,16,Photo_ENTER);
- SendStr(20,60,0,"当前时间:");
- SendStr(26,85,0, " : : ");
- SendStr(20,115,0,"调整为:");
- SendStr(26,140,0," : : ");
- IR_DATA=0;
- Date_Count=0;
- D_T_OK=0;
- while(1)
- {
- hour=DS_Read(4);
- min=DS_Read(2);
- sec=DS_Read(0);
- mi_Time();
- Com_Dat(0x10,0x10);//粗体
- Write_D(26,85,0,0,hour);
- Write_D(29,85,0,0,min);
- Write_D(32,85,0,0,sec);
- Com_Dat(0x10,0x00);//粗体
- if(Date_Count<6)
- {
- if(IR_DATA>0&&IR_DATA<=10)
- {
- if(IR_DATA==10)IR_DATA=0;
- DATE_TIME[Date_Count]=IR_DATA;
- switch(Date_Count)
- {
- case 0:Write_B(26,140,0,IR_DATA);break;
- case 1:Write_B(27,140,0,IR_DATA);break;
- case 2:Write_B(29,140,0,IR_DATA);break;
- case 3:Write_B(30,140,0,IR_DATA);break;
- case 4:Write_B(32,140,0,IR_DATA);break;
- case 5:Write_B(33,140,0,IR_DATA);break;
- }
- Date_Count++;
- IR_DATA=0;
- }
- }
- if(Date_Count>=6)
- {
- HH=DATE_TIME[0];
- HL=DATE_TIME[1];
- MH=DATE_TIME[2];
- ML=DATE_TIME[3];
- SH=DATE_TIME[4];
- SL=DATE_TIME[5];
- if(((HH*10+HL)>23)||((MH*10+ML)>59)||((SH*10+SL)>59))
- {
- SendStr(25,165,0,"输入错误!");
- Date_Count=0;
- D_T_OK=0;
- }else {SendStr(25,165,0,"输入正确!");D_T_OK=1;}
- }
- GB_A++;
- if(GB_A==30)
- switch(Date_Count)
- {
- case 0:SendStr(26,140,0,"_");break;
- case 1:SendStr(27,140,0,"_");break;
- case 2:SendStr(29,140,0,"_");break;
- case 3:SendStr(30,140,0,"_");break;
- case 4:SendStr(32,140,0,"_");break;
- case 5:SendStr(33,140,0,"_");break;
- }
- if(GB_A>=60)
- {
- switch(Date_Count)
- {
- case 0:SendStr(26,140,0," ");break;
- case 1:SendStr(27,140,0," ");break;
- case 2:SendStr(29,140,0," ");break;
- case 3:SendStr(30,140,0," ");break;
- case 4:SendStr(32,140,0," ");break;
- case 5:SendStr(33,140,0," ");break;
- }
- GB_A=0;
- }
- if(IR_DATA==28)//保存
- {
- if(D_T_OK==1)
- {
- hour=HH*10+HL;
- min=MH*10+ML;
- sec=SH*10+SL;
- DS_Write(4,hour);
- DS_Write(2,min);
- DS_Write(0,sec);
- SendStr(25,165,0," 已储存!");
- }
- else SendStr(25,165,0," 未储存!");
- Date_Count=0;
- IR_DATA=0;
- D_T_OK=0;
- }
- if(IR_DATA==30){CLS();IR_DATA=0;break;}//退出
- }
- IR_DATA=0;
- }
- if(IR_DATA==3)//背光设定
- {
- GB_A=0;
- CLS();
- SendStr(23,220,0,"3");
- SendStr(1,110,0,"◆");
- KE=EEPROM_Read(2);
- Com_Dat(0x10,0x10);//粗体
- SendStr(23,30,0,"背 光 设 定");
- Com_Dat(0x10,0x00);
- SendStr(22,110,0,"背光级别:");
- SendStr(20,190,0,"EQ保存 返回");
- Write_Photo(28,190,16,16,Photo_ENTER);
- while(1)
- {
- ms(200);
- mi_Time();//小时间窗口
- if(KE==0)SendStr(20,135,0,"- □□□□□□□ +");
- if(KE==1)SendStr(20,135,0,"- ■□□□□□□ +");
- if(KE==2)SendStr(20,135,0,"- ■■□□□□□ +");
- if(KE==3)SendStr(20,135,0,"- ■■■□□□□ +");
- if(KE==4)SendStr(20,135,0,"- ■■■■□□□ +");
- if(KE==5)SendStr(20,135,0,"- ■■■■■□□ +");
- if(KE==6)SendStr(20,135,0,"- ■■■■■■□ +");
- if(KE==7)SendStr(20,135,0,"- ■■■■■■■ +");
- Com_Dat(0x10,0x10);//粗体
- if(KE==0){BG_DATA=0;SendStr(32,110,0,"关闭");}
- if(KE==7){BG_DATA=200;SendStr(32,110,0,"最亮");}
- if(KE<7&&KE>0){BG_DATA=(KE*10)+30;Write_D(32,110,0,1,KE);SendStr(34,110,0," ");}
- Com_Dat(0x10,0x00);
- PCF8591_Write_Data(BG_DATA);
- if(IR_DATA==27){if(KE<7)KE++;IR_DATA=0;}
- if(IR_DATA==26){if(KE>0)KE--;IR_DATA=0;}
- if(IR_DATA==28){EEPROM_Write(2,KE);SendStr(26,165,0,"已储存!");}//保存
- if(IR_DATA==30)
- {
- KE=EEPROM_Read(2);
- if(KE==0)BG_DATA=0;
- if(KE==7)BG_DATA=200;
- if(KE<7&&KE>0){BG_DATA=(KE*10)+30;}
- PCF8591_Write_Data(BG_DATA);
- CLS();
- IR_DATA=0;
- break;
- }//退出
- }
- IR_DATA=0;
- }
- if(IR_DATA==4)//高级设定
- {
- CLS();
- GB_A=0;
- SendStr(23,220,0,"4");
- SendStr(1,140,0,"◆");
- Com_Dat(0x10,0x10);//粗体
- SendStr(23,30,0,"高 级 设 定");
- Com_Dat(0x10,0x00);
- SendStr(20,60,0,"时间格式:(+ -)");
- SendStr(21,90,0,"12小时制 □");
- SendStr(21,120,0,"24小时制 □");
- Time_inf=EEPROM_Read(3);
- IR_DATA=0;
- while(1)
- {
- mi_Time();//小时间窗口
- if(Time_inf==0){SendStr(32,90,0,"□");SendStr(32,120,0,"■");}
- if(Time_inf==1){SendStr(32,90,0,"■");SendStr(32,120,0,"□");}
- ms(100);
- if(IR_DATA==27)//+
- {
- Time_inf=1;
- IR_DATA=0;
- }
- if(IR_DATA==26)//-
- {
- Time_inf=0;
- IR_DATA=0;
- }
- if(IR_DATA==28)//确定
- {
- EEPROM_Write(3,Time_inf);
- SendStr(26,165,0,"已储存!");
- IR_DATA=0;
- }
- if(IR_DATA==30){CLS();IR_DATA=0;break;}//返回
- }
- IR_DATA=0;
- }
- }
- }
- void IR_KEY()
- {
- while(IR_DATA==20)//电源键
- {
- PCF8591_Write_Data(0);
- wr_cmd(0x00);
- wr_data(0x80);
- Sound_SW=0;
- IR_DATA=0;
- TR1=0;//关串口中断
- Power_SW=0;
- while(1)
- {
- ms(10000);
- Error=0;
- ms(20);
- Error=1;
- ms(10000);
- }
- }
- while(IR_DATA==22)//静音
- {
- if(Sound_SW==0){EEPROM_Write(1,1);Sound_SW=1;}//保存声音开关状态
- else {EEPROM_Write(1,0);Sound_SW=0;}
- IR_DATA=0;
- }
- if(IR_DATA==21)MODE();//设置页面
- }
- void main()
- {
- AUXR = AUXR|0x40; // T0, 1T Mode
- ms(1000);//等待电源稳定
- Power_SW=1;
- IT0=1; //INT0为负边沿触发, (1:负边沿触发,0:低电平触发)
- EX0=1; //外部中断INT0开, (1:开, 0:关 )
- InitUART();//串口初始化
- INIT();
- ms(10000);//等待电源稳定
- Power_ON();
- EA=1; //开总中断
- if(P0==0x1234)TEST_();//此句无实际意义
- ms(20);
- /* 背光重设 */
- KE=EEPROM_Read(2);
- if(KE==0)BG_DATA=0;
- if(KE==7)BG_DATA=200;
- if(KE<7&&KE>0){BG_DATA=(KE*10)+30;}
- PCF8591_Write_Data(BG_DATA);
- Write_Photo(0,0,48,64,Photo_L);
- Write_Photo(34,0,48,72,Photo_R);
- Write_Photo(0,160,320,79,Photo_main);
- LCD_DrawRectangle(0,0,319,239,1);////画外框
- while(1)
- {
- ms(100);
- IR_KEY();//扫描按键
- main_Disp();//显示主界面
- Festival();//当前节日
- Forecast();//节日预报
- }
- }
- void int0() interrupt 0 using 2//红外和按键处理程序
- {
- unsigned char IRD,IR_Time,i,j,k; //延时用的循环变量
- unsigned char data IRcode[4]; //定义一个4字节的数组用来存储代码
- unsigned char IRD1,IRD2,IRD3,IRD4;
- unsigned char CodeTemp; //编码字节缓存变量
- unsigned char shi_1,ge_1,shi_2,ge_2,shi_3,ge_3,shi_4,ge_4;
- EA=0;//临时关中断,以免红外处理出错
- CodeTemp=0; //初始化红外编码字节缓存变量
- for(k=0;k<10;k++)
- {
- Delay0_9ms();
- if(IRsignal==1) //如果0.9ms后IRsignal=1,说明不是引导码
- {
- k=10;
- break;
- }
- else if(k==9) //如果持续了10×0.9ms=9ms的低电平,说明是引导码
- {
- while(IRsignal==0);
- Delay4_5ms(); //跳过持续4.5ms的高电平
- for(i=0;i<4;i++) //分别读取4个字节
- {
- for(j=1;j<=8;j++) //每个字节8个bit的判断
- {
- while(IRsignal==0); //等待上升沿
- Delay0_9ms(); //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
- if(IRsignal==1) //如果IRsignal是"1",则向右移入一位"1"
- {
- Delay1ms();
- CodeTemp=CodeTemp|0x80;
- if(j<8) CodeTemp=CodeTemp>>1;
- }
- else
- if(j<8)CodeTemp=CodeTemp>>1;//如果IRsignal是"0",则向右移一位,自动补"0"
- }
- IRcode[i]=CodeTemp;
- CodeTemp=0;
- }
- IR_Time=100;
- for(IRD=0;IRD<1;IRD++)
- {
- IRD1=(IRcode[0]%100);
- shi_1=(IRD1%100)/10;
- ge_1=IRD1%10;
- IRD1=(shi_1+ge_1);
- IRD2=(IRcode[1]%100);
- shi_2=(IRD2%100)/10;
- ge_2=IRD2%10;
- IRD2=(shi_2+ge_2);
- IRD3=(IRcode[2]%100);
- shi_3=(IRD3%100)/10;
- ge_3=IRD3%10;
- IRD3=(shi_3+ge_3);
- IRD4=(IRcode[3]%100);
- shi_4=(IRD4%100)/10;
- ge_4=IRD4%10;
- IRD4=(shi_4+ge_4);
- if((IRD1==5)&&(IRD2==7)&&(IRD3==12)&&(IRD4==10)){IR_DATA=1;KEY_BEP();}//1
- if((IRD1==5)&&(IRD2==7)&&(IRD3==4)&&(IRD4==9)){IR_DATA=2;KEY_BEP();}//2
- if((IRD1==5)&&(IRD2==12)&&(IRD3==3)&&(IRD4==5)){IR_DATA=3;KEY_BEP();}//3
- if((IRD1==5)&&(IRD2==7)&&(IRD3==3)&&(IRD4==10)){IR_DATA=4;KEY_BEP();}//4
- if((IRD1==5)&&(IRD2==7)&&(IRD3==13)&&(IRD4==9)){IR_DATA=5;KEY_BEP();}//5
- if((IRD1==5)&&(IRD2==12)&&(IRD3==13)&&(IRD4==5)){IR_DATA=6;KEY_BEP();}//6
- if((IRD1==5)&&(IRD2==11)&&(IRD3==3)&&(IRD4==6)){IR_DATA=7;KEY_BEP();}//7
- if((IRD1==5)&&(IRD2==11)&&(IRD3==4)&&(IRD4==5)){IR_DATA=8;KEY_BEP();}//8
- if((IRD1==5)&&(IRD2==12)&&(IRD3==12)&&(IRD4==6)){IR_DATA=9;KEY_BEP();}//9
- if((IRD1==5)&&(IRD2==2)&&(IRD3==9)&&(IRD4==9)){IR_DATA=10;KEY_BEP();}//0
- if((IRD1==5)&&(IRD2==14)&&(IRD3==10)&&(IRD4==6)){IR_DATA=20;KEY_BEP();}//POWER
- if((IRD1==5)&&(IRD2==2)&&(IRD3==12)&&(IRD4==6)){IR_DATA=21;KEY_BEP();}//MODE
- if((IRD1==5)&&(IRD2==9)&&(IRD3==5)&&(IRD4==6)){IR_DATA=22;KEY_BEP();}//静音
- if((IRD1==5)&&(IRD2==16)&&(IRD3==8)&&(IRD4==6)){IR_DATA=23;KEY_BEP();}//上一个
- if((IRD1==5)&&(IRD2==6)&&(IRD3==8)&&(IRD4==6)){IR_DATA=24;KEY_BEP();}//下一个
- if((IRD1==5)&&(IRD2==9)&&(IRD3==15)&&(IRD4==6)){IR_DATA=25;KEY_BEP();}//暂停
- if((IRD1==5)&&(IRD2==9)&&(IRD3==10)&&(IRD4==10)){IR_DATA=26;KEY_BEP();}//DEC
- if((IRD1==5)&&(IRD2==14)&&(IRD3==7)&&(IRD4==9)){IR_DATA=27;KEY_BEP();}//ADD
- if((IRD1==5)&&(IRD2==14)&&(IRD3==15)&&(IRD4==10)){IR_DATA=28;KEY_BEP();}//EQ
- if((IRD1==5)&&(IRD2==14)&&(IRD3==16)&&(IRD4==9)){IR_DATA=29;KEY_BEP();}//100+
- if((IRD1==5)&&(IRD2==5)&&(IRD3==5)&&(IRD4==10)){IR_DATA=30;KEY_BEP();}//Enter
- }
- while(IR_Time==1)//等待松开
- {
- if(!IRsignal){IR_Time=100;}
- else {IR_Time--;ms(10);}
- }
- }
- }
- EA=1;//开中断
- }
- void UARTInterrupt(void) interrupt 4
- {
- if(RI)
- {
- RI = 0;
- IAP_CONTR=0x60;
- }
- else
- TI = 0;
- }
复制代码
|