代碼如下:- #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;
- }
復制代碼
|