找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2|回复: 0
收起左侧

5.7寸的RA8806,LCD320240怎么接线?

[复制链接]
ID:932645 发表于 2026-1-28 01:50 | 显示全部楼层 |阅读模式
代码如下:
  1. #include <STC12C5A.H>
  2. #include <i2c.H>
  3. #include <intrins.h>
  4. #include <LCD320240.H>
  5. #include <DS12C887.H>
  6. #include <NongLi.H>
  7. #include <ZiKu.H>
  8. /*
  9. AT24C08 地址分配
  10. 0   电源开关
  11. 1   声音开关
  12. 2   背光设置
  13. 3    时间制式
  14. */
  15. sbit Beep=P3^3;
  16. sbit IRsignal=P3^2;//红外接收输入
  17. sbit Error=P3^0;
  18. unsigned char IR_DATA; //全局红外键值

  19. bit Power_SW;
  20. bit Sound_SW;//声音开关状态
  21. unsigned char BG_DATA;//背光设置数据
  22. unsigned char KE;//背光比例

  23. /*全局日期变量*/
  24. unsigned char year,month,day;//年,月,日,星期(公历)
  25. unsigned char N_year,N_month,N_day;//年,月,日(农历)
  26. unsigned char Time_inf;//时间制式
  27. unsigned char hour,min,sec;
  28. unsigned char week;
  29. unsigned char M_temp,D_temp;//当年春节所在的公历月,日

  30. /*全局节日变量*/
  31. unsigned char DATE_TEMP;
  32. bit DISP_SW;

  33. /*用户密码*/
  34. unsigned char USER_PassWord[6];

  35. /*设置日期/时间临时数组*/
  36. unsigned char DATE_TIME[6];

  37. void ms(ms)//通用延时函数
  38. {
  39.     unsigned int x,y;
  40.     for(x=ms;x>0;x--)
  41.         for(y=220;y>0;y--)if((Power_SW==0)&&(IR_DATA==20))if(IR_DATA==20){IAP_CONTR=0x60;};
  42. }
  43.       
  44. void KEY_BEP()//按键声
  45. {
  46.     if(Sound_SW==1)
  47.     {
  48.         Beep=0;
  49.         ms(80);
  50.         Beep=1;
  51.     }
  52. }

  53. void InitUART()
  54. {
  55.     TMOD = 0x20;
  56.     SCON = 0x50;
  57.     TH1 = 0xB0;
  58.     TL1 = TH1;
  59.     PCON = 0x00;
  60.     ES = 1;
  61.     TR1 = 1;
  62. }

  63. void TEST_()//功能测试,此函数程序中不直接应用
  64. {
  65.     unsigned char DATA,AD;
  66.     EEPROM_Write(1,2);//写数据到24C08
  67.     DATA=EEPROM_Read(1);//读24C08数据
  68.     LCD_GotoXY(1,2,0);//设置工作窗口
  69.     AD=PCF8591_Read_Data(1);//读取AD值      
  70.     Write_B(3,0,0,1);//一位数字显示
  71.     Write_D(1,100,0,0,IR_DATA);
  72.     Write_Photo(5,130,32,32,ZF_Year);
  73.     Write_Photo(15,130,32,32,ZF_Month);
  74.     Write_Photo(20,130,32,32,ZF_Day);
  75.     Conversion(12,2,3);//农历转换
  76.     Write_Photo(0,130,16,32,Num_0);
  77.     Write_Photo(5,130,16,32,Num_1);
  78.     Write_Photo(10,130,16,32,Num_2);
  79.     Write_Photo(15,130,16,32,Num_3);
  80.     Write_Photo(20,130,16,32,Num_4);
  81.     Write_Photo(25,130,16,32,Num_5);
  82.     Write_Photo(30,130,16,32,Num_6);
  83.     Write_Photo(35,130,16,32,Num_7);
  84.     Write_Photo(0,180,16,32,Num_8);
  85.     Write_Photo(5,180,16,32,Num_9);
  86. }

  87. /**************************延时0.9ms子程序**********************/
  88. void Delay0_9ms(void)
  89. {
  90.     unsigned char a,b,c;
  91.     for(c=8;c>0;c--)
  92.         for(b=190;b>0;b--)
  93.             for(a=2;a>0;a--);
  94. }
  95. /***************************延时1ms子程序**********************/
  96. void Delay1ms(void)
  97. {
  98.     unsigned char a,b;
  99.     for(b=195;b>0;b--)
  100.         for(a=30;a>0;a--);
  101. }
  102. /***************************延时4.5ms子程序**********************/
  103. void Delay4_5ms(void)
  104. {
  105.     unsigned char a,b,c;
  106.     for(c=7;c>0;c--)
  107.         for(b=168;b>0;b--)
  108.             for(a=300;a>0;a--);
  109. }

  110. void INIT()
  111. {
  112.     Sound_SW=EEPROM_Read(1);//读取声音开关状态
  113.     ms(10);
  114.     BG_DATA=EEPROM_Read(2);//读取背光设置值
  115.     ms(10);

  116.     if(Sound_SW==1)
  117.     {
  118.         Beep=0;
  119.         ms(1000);
  120.         Beep=1;
  121.     }
  122.     init_lcd();//LCD初始化
  123.     DS_INIT();//时钟初始化
  124. }

  125. void Power_ON()//开机画面
  126. {
  127.     PCF8591_Write_Data(200);//背光全开
  128.     ms(5000);
  129.     LCD_Graphic();
  130.     LCD_DrawRectangle(0,0,319,239,1);////画外框
  131.     Write_Photo(12,50,128,64,Photo1);//标志
  132.     Write_Photo(10,130,32,32,ZF_Meng);
  133.     Write_Photo(15,130,32,32,ZF_Yan);
  134.     Write_Photo(20,130,32,32,ZF_Ke);
  135.     Write_Photo(25,130,32,32,ZF_Ji);
  136.     ms(20000);
  137.     Com_Dat(0xf0,0x08);//清屏

  138.     KE=EEPROM_Read(2);
  139.     if(KE==0)BG_DATA=0;
  140.     if(KE==7)BG_DATA=200;
  141.     if(KE<7&&KE>0){BG_DATA=(KE*10)+30;}
  142.     PCF8591_Write_Data(BG_DATA);
  143.     Write_Photo(0,0,48,64,Photo_L);
  144.     Write_Photo(34,0,48,72,Photo_R);
  145.     Write_Photo(0,160,320,79,Photo_main);
  146.     LCD_DrawRectangle(0,0,319,239,1);////画外框
  147. }

  148. void main_Disp()
  149. {
  150.     unsigned char year_shi,year_ge;
  151.     unsigned char month_shi,month_ge;
  152.     unsigned char day_shi,day_ge;
  153.     unsigned char hour_shi,hour_ge;
  154.     unsigned char min_shi,min_ge;
  155.     unsigned int LD_X,LD_Y;
  156.     unsigned int Celestial_stem,shengxiao;//干支,生肖

  157.     LCD_DrawRectangle(0,0,319,239,1);////画外框
  158.     Com_Dat(0x10,0x10);//粗体
  159.     year=DS_Read(9);      
  160.     month=DS_Read(8);      
  161.     day=DS_Read(7);         
  162.     hour=DS_Read(4);
  163.     min=DS_Read(2);
  164.     sec=DS_Read(0);
  165.     Time_inf=EEPROM_Read(3);            
  166.     Conversion(year,month,day);//农历转换
  167.     Celestial_stem=((2000+N_year)-3)%60;//计算干支
  168.     shengxiao=((2000+N_year)-1900)%12;//计算生肖年
  169.     SendStr(5,140,0,"农");
  170.     SendStr(5,165,0,"历");
  171.     SendStr(8,150,0,DD[Celestial_stem]);
  172.     SendStr(12,150,0,Sheng[shengxiao]);
  173.     SendStr(14,150,0,"年");
  174.     Com_Dat(0x10,0x00);//粗体

  175.     LD_X=17;
  176.     LD_Y=140;
  177.     if((hour==0)&&(min==0)&&(sec==0))
  178.     {
  179.         while(1)
  180.         {
  181.             SendStr(LD_X,LD_Y,1," ");
  182.             SendStr(LD_X+18,LD_Y,1," ");
  183.             break;
  184.         }
  185.     }
  186.     if(N_month!=11)LD_X+=2;
  187.     switch(N_month)
  188.     {
  189.         case 1:{Write_Photo(LD_X,LD_Y,32,33,ZF_zheng);}break;
  190.         case 2:{Write_Photo(LD_X,LD_Y,32,33,ZF_2);}break;
  191.         case 3:{Write_Photo(LD_X,LD_Y,32,33,ZF_3);}break;
  192.         case 4:{Write_Photo(LD_X,LD_Y,32,33,ZF_4);}break;
  193.         case 5:{Write_Photo(LD_X,LD_Y,32,33,ZF_5);}break;
  194.         case 6:{Write_Photo(LD_X,LD_Y,32,33,ZF_6);}break;
  195.         case 7:{Write_Photo(LD_X,LD_Y,32,33,ZF_7);}break;
  196.         case 8:{Write_Photo(LD_X,LD_Y,32,33,ZF_8);}break;
  197.         case 9:{Write_Photo(LD_X,LD_Y,32,33,ZF_9);}break;
  198.         case 10:{Write_Photo(LD_X,LD_Y,32,33,ZF_shi);}break;
  199.         case 11:{Write_Photo(LD_X,LD_Y,32,33,ZF_shi);Write_Photo(LD_X+4,LD_Y,32,33,ZF_1);}break;
  200.         case 12:{Write_Photo(LD_X,LD_Y,32,33,ZF_la);}break;
  201.     }
  202.     if(N_month==11)LD_X+=4;
  203.     Write_Photo(LD_X+4,LD_Y,32,33,ZF_Month);
  204.     LD_X+=4;
  205.     switch(N_day)
  206.     {
  207.         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;
  208.         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;
  209.         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;
  210.         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;
  211.         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;
  212.         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;
  213.         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;
  214.         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;
  215.         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;
  216.         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;

  217.         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;
  218.         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;
  219.         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;
  220.         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;
  221.         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;
  222.         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;
  223.         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;
  224.         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;
  225.         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;
  226.         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;

  227.         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;
  228.         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;
  229.         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;
  230.         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;
  231.         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;
  232.         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;
  233.         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;
  234.         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;
  235.         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;
  236.         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;
  237.         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;
  238.     }

  239.     Com_Dat(0x10,0x10);//粗体
  240.     year_shi=year/10;
  241.     year_ge=year%10;
  242.     LD_X=12;
  243.     LD_Y=5;
  244.     Write_Photo(LD_X,LD_Y,16,33,Num_2);
  245.     Write_Photo(LD_X+4,LD_Y,16,33,Num_0);
  246.     switch(year_shi)
  247.     {
  248.         case 0: Write_Photo(LD_X+8,LD_Y,16,33,Num_0); break;
  249.         case 1: Write_Photo(LD_X+8,LD_Y,16,33,Num_1); break;
  250.         case 2: Write_Photo(LD_X+8,LD_Y,16,33,Num_2); break;
  251.         case 3: Write_Photo(LD_X+8,LD_Y,16,33,Num_3); break;
  252.         case 4: Write_Photo(LD_X+8,LD_Y,16,33,Num_4); break;
  253.         case 5: Write_Photo(LD_X+8,LD_Y,16,33,Num_5); break;
  254.         case 6: Write_Photo(LD_X+8,LD_Y,16,33,Num_6); break;
  255.         case 7: Write_Photo(LD_X+8,LD_Y,16,33,Num_7); break;
  256.         case 8: Write_Photo(LD_X+8,LD_Y,16,33,Num_8); break;
  257.         case 9: Write_Photo(LD_X+8,LD_Y,16,33,Num_9); break;
  258.     }
  259.     switch(year_ge)
  260.     {
  261.         case 0: Write_Photo(LD_X+12,LD_Y,16,33,Num_0); break;
  262.         case 1: Write_Photo(LD_X+12,LD_Y,16,33,Num_1); break;
  263.         case 2: Write_Photo(LD_X+12,LD_Y,16,33,Num_2); break;
  264.         case 3: Write_Photo(LD_X+12,LD_Y,16,33,Num_3); break;
  265.         case 4: Write_Photo(LD_X+12,LD_Y,16,33,Num_4); break;
  266.         case 5: Write_Photo(LD_X+12,LD_Y,16,33,Num_5); break;
  267.         case 6: Write_Photo(LD_X+12,LD_Y,16,33,Num_6); break;
  268.         case 7: Write_Photo(LD_X+12,LD_Y,16,33,Num_7); break;
  269.         case 8: Write_Photo(LD_X+12,LD_Y,16,33,Num_8); break;
  270.         case 9: Write_Photo(LD_X+12,LD_Y,16,33,Num_9); break;
  271.     }

  272.     LD_X=10;
  273.     LD_Y=45;
  274.     if(hour==23||hour==0)SendStr(LD_X+21,LD_Y+25,0,"子时");
  275.     if(hour==1||hour==2)SendStr(LD_X+21,LD_Y+25,0,"丑时");
  276.     if(hour==3||hour==4)SendStr(LD_X+21,LD_Y+25,0,"寅时");
  277.     if(hour==5||hour==6)SendStr(LD_X+21,LD_Y+25,0,"卯时");
  278.     if(hour==7||hour==8)SendStr(LD_X+21,LD_Y+25,0,"辰时");
  279.     if(hour==9||hour==10)SendStr(LD_X+21,LD_Y+25,0,"巳时");
  280.     if(hour==11||hour==12)SendStr(LD_X+21,LD_Y+25,0,"午时");
  281.     if(hour==13||hour==14)SendStr(LD_X+21,LD_Y+25,0,"未时");
  282.     if(hour==15||hour==16)SendStr(LD_X+21,LD_Y+25,0,"申时");
  283.     if(hour==17||hour==18)SendStr(LD_X+21,LD_Y+25,0,"酉时");
  284.     if(hour==19||hour==20)SendStr(LD_X+21,LD_Y+25,0,"戌时");
  285.     if(hour==21||hour==22)SendStr(LD_X+21,LD_Y+25,0,"亥时");
  286.     if(hour<12)SendStr(LD_X-6,LD_Y+25,0,"上午");
  287.     if(hour>=12)SendStr(LD_X-6,LD_Y+25,0,"下午");
  288.     if(hour>=13)
  289.     {
  290.         if(Time_inf==1)hour-=12;
  291.     }
  292.     hour_shi=hour/10;
  293.     hour_ge=hour%10;
  294.     if((min==0)&&(sec==0))
  295.     {
  296.         Write_Photo(LD_X-1,LD_Y,32,48,num_3248_);
  297.         Write_Photo(LD_X+3,LD_Y,32,48,num_3248_);
  298.         Write_Photo(LD_X+7,LD_Y,32,48,num_3248_);
  299.         Write_Photo(LD_X+8,LD_Y,32,48,num_3248_);
  300.         Write_Photo(LD_X+12,LD_Y,32,48,num_3248_);
  301.         Write_Photo(LD_X+16,LD_Y,32,48,num_3248_);
  302.     }
  303.     if(hour_shi!=0)
  304.     {
  305.         switch(hour_shi)
  306.         {
  307.             case 0: Write_Photo(LD_X-1,LD_Y,32,48,num3248_0); break;
  308.             case 1: Write_Photo(LD_X-1,LD_Y,32,48,num3248_1); break;
  309.             case 2: Write_Photo(LD_X-1,LD_Y,32,48,num3248_2); break;
  310.         }
  311.     }
  312.     else
  313.     {
  314.         switch(hour_shi)
  315.         {
  316.             case 1: Write_Photo(LD_X-1,LD_Y,32,48,num3248_1); break;
  317.         }
  318.             LD_X-=2;

  319.     }
  320.     switch(hour_ge)
  321.     {
  322.         case 0: Write_Photo(LD_X+3,LD_Y,32,48,num3248_0); break;
  323.         case 1: Write_Photo(LD_X+3,LD_Y,32,48,num3248_1); break;
  324.         case 2: Write_Photo(LD_X+3,LD_Y,32,48,num3248_2); break;
  325.         case 3: Write_Photo(LD_X+3,LD_Y,32,48,num3248_3); break;
  326.         case 4: Write_Photo(LD_X+3,LD_Y,32,48,num3248_4); break;
  327.         case 5: Write_Photo(LD_X+3,LD_Y,32,48,num3248_5); break;
  328.         case 6: Write_Photo(LD_X+3,LD_Y,32,48,num3248_6); break;
  329.         case 7: Write_Photo(LD_X+3,LD_Y,32,48,num3248_7); break;
  330.         case 8: Write_Photo(LD_X+3,LD_Y,32,48,num3248_8); break;
  331.         case 9: Write_Photo(LD_X+3,LD_Y,32,48,num3248_9); break;
  332.     }  
  333.     Write_Photo(LD_X+8,LD_Y,24,48,Photo_Time);//:
  334.     min_shi=min/10;
  335.     min_ge=min%10;
  336.     switch(min_shi)
  337.     {
  338.         case 0: Write_Photo(LD_X+12,LD_Y,32,48,num3248_0); break;
  339.         case 1: Write_Photo(LD_X+12,LD_Y,32,48,num3248_1); break;
  340.         case 2: Write_Photo(LD_X+12,LD_Y,32,48,num3248_2); break;
  341.         case 3: Write_Photo(LD_X+12,LD_Y,32,48,num3248_3); break;
  342.         case 4: Write_Photo(LD_X+12,LD_Y,32,48,num3248_4); break;
  343.         case 5: Write_Photo(LD_X+12,LD_Y,32,48,num3248_5); break;
  344.         case 6: Write_Photo(LD_X+12,LD_Y,32,48,num3248_6); break;
  345.         case 7: Write_Photo(LD_X+12,LD_Y,32,48,num3248_7); break;
  346.         case 8: Write_Photo(LD_X+12,LD_Y,32,48,num3248_8); break;
  347.         case 9: Write_Photo(LD_X+12,LD_Y,32,48,num3248_9); break;
  348.     }
  349.     switch(min_ge)
  350.     {
  351.         case 0: Write_Photo(LD_X+16,LD_Y,32,48,num3248_0); break;
  352.         case 1: Write_Photo(LD_X+16,LD_Y,32,48,num3248_1); break;
  353.         case 2: Write_Photo(LD_X+16,LD_Y,32,48,num3248_2); break;
  354.         case 3: Write_Photo(LD_X+16,LD_Y,32,48,num3248_3); break;
  355.         case 4: Write_Photo(LD_X+16,LD_Y,32,48,num3248_4); break;
  356.         case 5: Write_Photo(LD_X+16,LD_Y,32,48,num3248_5); break;
  357.         case 6: Write_Photo(LD_X+16,LD_Y,32,48,num3248_6); break;
  358.         case 7: Write_Photo(LD_X+16,LD_Y,32,48,num3248_7); break;
  359.         case 8: Write_Photo(LD_X+16,LD_Y,32,48,num3248_8); break;
  360.         case 9: Write_Photo(LD_X+16,LD_Y,32,48,num3248_9); break;
  361.     }  

  362.     LD_X=5;
  363.     LD_Y=100;
  364.     month_shi=month/10;
  365.     month_ge=month%10;
  366.     switch(month_shi)
  367.     {
  368.         case 0: Write_Photo(LD_X,LD_Y,16,32,Num_0); break;
  369.         case 1: Write_Photo(LD_X,LD_Y,16,32,Num_1); break;
  370.         case 2: Write_Photo(LD_X,LD_Y,16,32,Num_2); break;
  371.         case 3: Write_Photo(LD_X,LD_Y,16,32,Num_3); break;
  372.         case 4: Write_Photo(LD_X,LD_Y,16,32,Num_4); break;
  373.         case 5: Write_Photo(LD_X,LD_Y,16,32,Num_5); break;
  374.         case 6: Write_Photo(LD_X,LD_Y,16,32,Num_6); break;
  375.         case 7: Write_Photo(LD_X,LD_Y,16,32,Num_7); break;
  376.         case 8: Write_Photo(LD_X,LD_Y,16,32,Num_8); break;
  377.         case 9: Write_Photo(LD_X,LD_Y,16,32,Num_9); break;
  378.     }
  379.     switch(month_ge)
  380.     {
  381.         case 0: Write_Photo(LD_X+2,LD_Y,16,32,Num_0); break;
  382.         case 1: Write_Photo(LD_X+2,LD_Y,16,32,Num_1); break;
  383.         case 2: Write_Photo(LD_X+2,LD_Y,16,32,Num_2); break;
  384.         case 3: Write_Photo(LD_X+2,LD_Y,16,32,Num_3); break;
  385.         case 4: Write_Photo(LD_X+2,LD_Y,16,32,Num_4); break;
  386.         case 5: Write_Photo(LD_X+2,LD_Y,16,32,Num_5); break;
  387.         case 6: Write_Photo(LD_X+2,LD_Y,16,32,Num_6); break;
  388.         case 7: Write_Photo(LD_X+2,LD_Y,16,32,Num_7); break;
  389.         case 8: Write_Photo(LD_X+2,LD_Y,16,32,Num_8); break;
  390.         case 9: Write_Photo(LD_X+2,LD_Y,16,32,Num_9); break;
  391.     }  
  392.     Write_Photo(LD_X+4,LD_Y,32,32,ZF_Month);

  393.     day_shi=day/10;
  394.     day_ge=day%10;
  395.     switch(day_shi)
  396.     {
  397.         case 0: Write_Photo(LD_X+8,LD_Y,16,32,Num_0); break;
  398.         case 1: Write_Photo(LD_X+8,LD_Y,16,32,Num_1); break;
  399.         case 2: Write_Photo(LD_X+8,LD_Y,16,32,Num_2); break;
  400.         case 3: Write_Photo(LD_X+8,LD_Y,16,32,Num_3); break;
  401.         case 4: Write_Photo(LD_X+8,LD_Y,16,32,Num_4); break;
  402.         case 5: Write_Photo(LD_X+8,LD_Y,16,32,Num_5); break;
  403.         case 6: Write_Photo(LD_X+8,LD_Y,16,32,Num_6); break;
  404.         case 7: Write_Photo(LD_X+8,LD_Y,16,32,Num_7); break;
  405.         case 8: Write_Photo(LD_X+8,LD_Y,16,32,Num_8); break;
  406.         case 9: Write_Photo(LD_X+8,LD_Y,16,32,Num_9); break;
  407.     }
  408.     switch(day_ge)
  409.     {
  410.         case 0: Write_Photo(LD_X+10,LD_Y,16,32,Num_0); break;
  411.         case 1: Write_Photo(LD_X+10,LD_Y,16,32,Num_1); break;
  412.         case 2: Write_Photo(LD_X+10,LD_Y,16,32,Num_2); break;
  413.         case 3: Write_Photo(LD_X+10,LD_Y,16,32,Num_3); break;
  414.         case 4: Write_Photo(LD_X+10,LD_Y,16,32,Num_4); break;
  415.         case 5: Write_Photo(LD_X+10,LD_Y,16,32,Num_5); break;
  416.         case 6: Write_Photo(LD_X+10,LD_Y,16,32,Num_6); break;
  417.         case 7: Write_Photo(LD_X+10,LD_Y,16,32,Num_7); break;
  418.         case 8: Write_Photo(LD_X+10,LD_Y,16,32,Num_8); break;
  419.         case 9: Write_Photo(LD_X+10,LD_Y,16,32,Num_9); break;
  420.     }  
  421.     Write_Photo(LD_X+12,LD_Y,32,32,ZF_Day);

  422.     Write_Photo(LD_X+17,LD_Y,32,32,ZF_Xing);
  423.     Write_Photo(LD_X+21,LD_Y,32,32,ZF_Qi);
  424.     switch(week)
  425.     {
  426.         case 0: Write_Photo(LD_X+25,LD_Y,32,32,ZF_Day); break;
  427.         case 1: Write_Photo(LD_X+25,LD_Y,32,32,ZF_1); break;
  428.         case 2: Write_Photo(LD_X+25,LD_Y,32,32,ZF_2); break;
  429.         case 3: Write_Photo(LD_X+25,LD_Y,32,32,ZF_3); break;
  430.         case 4: Write_Photo(LD_X+25,LD_Y,32,32,ZF_4); break;
  431.         case 5: Write_Photo(LD_X+25,LD_Y,32,32,ZF_5); break;
  432.         case 6: Write_Photo(LD_X+25,LD_Y,32,32,ZF_6); break;
  433.     }
  434.     Com_Dat(0x10,0x00);
  435. }

  436. void Festival()//节日
  437. {
  438.     unsigned char y,DATE;
  439.     unsigned char LDX=22,LDY=185;
  440.     y=0;
  441.     DATE=0;
  442.     Com_Dat(0x10,0x10);
  443.     Conversion(year,month,day);
  444.     if(DISP_SW==1)SendStr(LDX-5,LDY,0,"今天:");
  445.     while(1)
  446.     {
  447.         if((month==2)&&((day>=2)&&(day<=5)))//立春
  448.         {
  449.             y=year;
  450.             DATE=(((y*0.2422)+3.87)-((y-1)/4));
  451.             if(day==DATE)DATE_TEMP=DATE;
  452.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[2]);else break;
  453.         }
  454.         if((month==2)&&((day>=18)&&(day<=20)))//雨水
  455.         {
  456.             y=year;
  457.             DATE=(((y*0.2422)+18.73)-(y/4));
  458.             if(y==26)DATE=DATE-1; //2026年例外
  459.             if(day==DATE)DATE_TEMP=DATE;
  460.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[2]);else break;
  461.         }
  462.         if((month==3)&&((day>=5)&&(day<=7)))//惊蛰
  463.         {
  464.             y=year;
  465.             DATE=((y*0.2422+5.63)-(y/4));
  466.             if(day==DATE)DATE_TEMP=DATE;
  467.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[3]);else break;
  468.         }
  469.         if((month==3)&&((day>=20)&&(day<=22)))//春分
  470.         {
  471.             y=year;
  472.             DATE=((y*0.2422+20.646)-(y/4));
  473.             if(y==84)DATE=DATE+1; //2084年例外
  474.             if(day==DATE)DATE_TEMP=DATE;
  475.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[3]);else break;
  476.         }
  477.         if((month==4)&&((day>=4)&&(day<=6)))//清明
  478.         {
  479.             y=year;
  480.             DATE=((y*0.2422+4.81)-(y/4));
  481.             if(day==DATE)DATE_TEMP=DATE;
  482.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[4]);else break;
  483.         }
  484.         if((month==4)&&((day>=19)&&(day<=21)))//谷雨
  485.         {
  486.             y=year;
  487.             DATE=((y*0.2422+20.1)-(y/4));
  488.             if(day==DATE)DATE_TEMP=DATE;
  489.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[4]);else break;
  490.         }
  491.         if((month==5)&&((day>=5)&&(day<=7)))//立夏
  492.         {
  493.             y=year;
  494.             DATE=((y*0.2422+5.52)-(y/4));
  495.             if(day==DATE)DATE_TEMP=DATE;
  496.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[5]);else break;
  497.         }
  498.         if((month==5)&&((day>=20)&&(day<=22)))//小满
  499.         {
  500.             y=year;
  501.             DATE=((y*0.2422+21.04)-(y/4));
  502.             if(y==8)DATE=DATE+1; //2008年例外
  503.             if(day==DATE)DATE_TEMP=DATE;
  504.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[5]);else break;
  505.         }
  506.         if((month==6)&&((day>=5)&&(day<=7)))//芒种
  507.         {
  508.             y=year;
  509.             DATE=((y*0.2422+5.678)-(y/4));
  510.             if(day==DATE)DATE_TEMP=DATE;
  511.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[6]);else break;
  512.         }
  513.         if((month==6)&&((day>=21)&&(day<=22)))//夏至
  514.         {
  515.             y=year;
  516.             DATE=((y*0.2422+21.37)-(y/4));
  517.             if(day==DATE)DATE_TEMP=DATE;
  518.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[6]);else break;
  519.         }
  520.         if((month==7)&&((day>=6)&&(day<=8)))//小暑
  521.         {
  522.             y=year;
  523.             DATE=((y*0.2422+7.108)-(y/4));
  524.             if(day==DATE)DATE_TEMP=DATE;
  525.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[7]);else break;
  526.         }
  527.         if((month==7)&&((day>=22)&&(day<=24)))//大暑
  528.         {
  529.             y=year;
  530.             DATE=((y*0.2422+22.83)-(y/4));
  531.             if(day==DATE)DATE_TEMP=DATE;
  532.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[7]);else break;
  533.         }
  534.         if((month==8)&&((day>=7)&&(day<=9)))//立秋
  535.         {
  536.             y=year;
  537.             DATE=((y*0.2422+7.5)-(y/4));
  538.             if(y==2)DATE=DATE+1; //2002年例外
  539.             if(day==DATE)DATE_TEMP=DATE;
  540.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[8]);else break;
  541.         }
  542.         if((month==8)&&((day>=22)&&(day<=24)))//处暑
  543.         {
  544.             y=year;
  545.             DATE=((y*0.2422+23.13)-(y/4));
  546.             if(day==DATE)DATE_TEMP=DATE;
  547.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[8]);else break;
  548.         }
  549.         if((month==9)&&((day>=7)&&(day<=9)))//白露
  550.         {
  551.             y=year;
  552.             DATE=((y*0.2422+7.646)-(y/4));
  553.             if(day==DATE)DATE_TEMP=DATE;
  554.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[9]);else break;
  555.         }
  556.         if((month==9)&&((day>=21)&&(day<=24)))//秋分
  557.         {
  558.             y=year;
  559.             DATE=((y*0.2422+23.042)-(y/4));
  560.             if(day==DATE)DATE_TEMP=DATE;
  561.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[9]);else break;
  562.         }
  563.         if((month==10)&&((day>=8)&&(day<=9)))//寒露
  564.         {
  565.             y=year;
  566.             DATE=((y*0.2422+8.318)-(y/4));
  567.             if(day==DATE)DATE_TEMP=DATE;
  568.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[10]);else break;
  569.         }
  570.         if((month==10)&&((day>=23)&&(day<=24)))//霜降
  571.         {
  572.             y=year;
  573.             DATE=((y*0.2422+23.438)-(y/4));
  574.             if(y==89)DATE=DATE+1; //2089年例外
  575.             if(day==DATE)DATE_TEMP=DATE;
  576.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[10]);else break;
  577.         }
  578.         if((month==11)&&((day>=7)&&(day<=8)))//立冬
  579.         {
  580.             y=year;
  581.             DATE=((y*0.2422+7.438)-(y/4));
  582.             if(y==89)DATE=DATE+1; //2089年例外
  583.             if(day==DATE)DATE_TEMP=DATE;
  584.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[11]);else break;
  585.         }
  586.         if((month==11)&&((day>=22)&&(day<=23)))//小雪
  587.         {
  588.             y=year;
  589.             DATE=((y*0.2422+22.36)-(y/4));
  590.             if(day==DATE)DATE_TEMP=DATE;
  591.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[11]);else break;
  592.         }
  593.         if((month==12)&&((day>=6)&&(day<=8)))//大雪
  594.         {
  595.             y=year;
  596.             DATE=((y*0.2422+7.18)-(y/4));
  597.             if(day==DATE)DATE_TEMP=DATE;
  598.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[12]);else break;
  599.         }
  600.         if((month==12)&&((day>=21)&&(day<=23)))//冬至
  601.         {
  602.             y=year;
  603.             DATE=((y*0.2422+21.94)-(y/4));
  604.             if(y==21)DATE=DATE+1; //2021年例外
  605.             if(day==DATE)DATE_TEMP=DATE;
  606.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[12]);else break;
  607.         }
  608.         if((month==1)&&((day>=5)&&(day<=7)))//小寒
  609.         {
  610.             y=year;
  611.             DATE=((y*0.2422+5.4055)-(y/4));
  612.             if(y==19)DATE=DATE-1; //2019年例外
  613.             if(day==DATE)DATE_TEMP=DATE;
  614.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_A[1]);else break;
  615.         }
  616.         if((month==1)&&((day>=20)&&(day<=21)))//大寒
  617.         {
  618.             y=year;
  619.             DATE=((y*0.2422+20.12)-(y/4));
  620.             if(y==82)DATE=DATE+1; //2082年例外
  621.             if(day==DATE)DATE_TEMP=DATE;
  622.             if((day==DATE)&&(DISP_SW==1))SendStr(LDX,LDY,0,Festival_B[1]);else break;
  623.         }
  624.         if((month==M_temp)&&(day+1==D_temp))SendStr(LDX,LDY,0,"除夕");else break;

  625.         break;
  626.         Com_Dat(0x10,0x00);
  627.     }
  628. }

  629. void Forecast()//节日预报
  630. {
  631.     float y_Temp;
  632.     unsigned char Temp_A,y,S,DATE;
  633.     unsigned char LDX=15,LDY=185;
  634.     Com_Dat(0x10,0x10);
  635.     if(day<15)
  636.     {
  637.         switch(month)//上半月
  638.         {
  639.             case 1: y_Temp=5.4055;break;//小寒
  640.             case 2: y_Temp=3.87;break;//立春
  641.             case 3: y_Temp=5.63;break;//惊蛰
  642.             case 4: y_Temp=4.81;break;//清明
  643.             case 5: y_Temp=5.52;break;//立夏
  644.             case 6: y_Temp=5.678;break;//芒种
  645.             case 7: y_Temp=7.108;break;//小暑
  646.             case 8: y_Temp=7.5;break;//立秋
  647.             case 9: y_Temp=7.646;break;//白露
  648.             case 10: y_Temp=8.318;break;//寒露
  649.             case 11: y_Temp=7.438;break;//立冬
  650.             case 12: y_Temp=7.18;break;//小寒
  651.             default:break;
  652.         }
  653.         y=year;
  654.         DATE=((y*0.2422+y_Temp)-(y/4));
  655.         for(S=0;S<30;S++){if(DATE==S){Temp_A=S;break;}}//计算当前月节日在哪一日(上半月)
  656.         if((day+1)==Temp_A){SendStr(LDX,LDY,0,"  明天:");SendStr(LDX+7,LDY,0,Festival_A[month]);}
  657.         if((day+2)==Temp_A){SendStr(LDX,LDY,0,"  后天:");SendStr(LDX+7,LDY,0,Festival_A[month]);}
  658.     }                                          
  659.     else
  660.     {
  661.         switch(month)//下半月
  662.         {
  663.             case 1: y_Temp=20.12;break;//大寒
  664.             case 2: y_Temp=18.73;break;//雨水
  665.             case 3: y_Temp=20.646;break;//春分
  666.             case 4: y_Temp=20.1;break;//谷雨
  667.             case 5: y_Temp=21.04;break;//小满
  668.             case 6: y_Temp=21.37;break;//夏至
  669.             case 7: y_Temp=22.83;break;//大暑
  670.             case 8: y_Temp=23.13;break;//处暑
  671.             case 9: y_Temp=23.042;break;//秋分
  672.             case 10: y_Temp=23.438;break;//霜降
  673.             case 11: y_Temp=22.36;break;//小雪
  674.             case 12: y_Temp=21.94;break;//大寒
  675.             default:break;
  676.         }
  677.         y=year;
  678.         DATE=(((y*0.2422)+y_Temp)-(y/4));//计算出当月节日在第几日
  679.         for(S=0;S<30;S++){if(DATE==S){Temp_A=S;break;}}//计算当前月节日在哪一日(下半月)
  680.         if((day+1)==Temp_A){SendStr(LDX,LDY,0,"  明天:");SendStr(LDX+7,LDY,0,Festival_B[month]);}
  681.         if((day+2)==Temp_A){SendStr(LDX,LDY,0,"  后天:");SendStr(LDX+7,LDY,0,Festival_B[month]);}
  682.     }
  683.     if(month==M_temp)//当前月是否接近春节
  684.     {
  685.         if(day==Temp_A){DISP_SW=1;}else DISP_SW=0;
  686.         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,"今天无节日!");
  687.         if(day+3==D_temp){SendStr(LDX,LDY,0,"  后天:除夕");}
  688.         if(day+2==D_temp){SendStr(LDX,LDY,0,"  明天:除夕");}
  689.         if((day+1==D_temp)||(day==D_temp)){DISP_SW=1;}else DISP_SW=0;
  690.         if((N_month==1)&&(N_day==1))SendStr(29,LDY,0,"春节");
  691.     }
  692.     else
  693.     {
  694.         if(day==Temp_A){DISP_SW=1;}else DISP_SW=0;
  695.         if((day!=Temp_A)&&((day+1)!=Temp_A)&&((day+2)!=Temp_A))SendStr(LDX,LDY,0,"今天无节日!");
  696.     }
  697.     Com_Dat(0x10,0x00);

  698. }

  699. void mi_Time()//小时间窗口
  700. {
  701.     hour=DS_Read(4);
  702.     min=DS_Read(2);
  703.     Write_D(34,220,0,0,hour);
  704.     SendStr(36,220,0,":");
  705.     Write_D(37,220,0,0,min);
  706. }

  707. void MODE()
  708. {
  709.     unsigned char GB_A,GB_B;
  710.     unsigned char Date_Count;//设置日期计数器
  711.     unsigned char D_T_OK;//设置日期/时间是否正确
  712.     unsigned char YH,YL,MH,ML,DH,DL;//设置日期元素
  713.     unsigned char HH,HL,SH,SL;//设置日期元素
  714.     Com_Dat(0xf0,0x08);//清屏
  715.     LCD_DrawRectangle(0,0,319,239,1);////画外框
  716.     LCD_Graphic();
  717.     Dis_Linexy(1,25,319,25,1);
  718.     Dis_Linexy(1,215,319,215,1);
  719.     Dis_Linexy(150,25,150,215,1);
  720.     LCD_Text();
  721.     Com_Dat(0x10,0x10);//粗体
  722.     SendStr(14,5,0,"设 置 页 面");
  723.     Com_Dat(0x10,0x00);
  724.     IR_DATA=0;
  725.     GB_B=0;
  726.     while(1)
  727.     {
  728.         mi_Time();//小时间窗口
  729.         GB_A++;
  730.         if(GB_A==15)SendStr(23,220,0,"_");
  731.         if(GB_A>=30){SendStr(23,220,0," ");GB_A=0;}
  732.         SendStr(1,50,0,"◇ 1:日期调整 ");
  733.         SendStr(1,80,0,"◇ 2:时间调整");
  734.         SendStr(1,110,0,"◇ 3:背光调整");
  735.         SendStr(1,140,0,"◇ 4:高级设定");
  736.         SendStr(1,220,0,"请选择您要设置的项目:");
  737.         SendStr(20,50,0,"请按对应数字键选择");
  738.         SendStr(20,70,0,"一个要设置的项目");
  739.         SendStr(22,120,0,"按  键返回主页");
  740.         Write_Photo(24,120,16,16,Photo_ENTER);
  741.         ms(100);

  742.         if((IR_DATA==21)||(IR_DATA==23)||(IR_DATA==24)||(IR_DATA==25)||
  743.         (IR_DATA==26)||(IR_DATA==27)||(IR_DATA==28)||(IR_DATA==29))
  744.         {
  745.             SendStr(25,160,0,"无效按键!");
  746.             GB_B++;
  747.             if(GB_B>=60){SendStr(25,160,0,"          ");GB_B=0;IR_DATA=0;}
  748.         }
  749.         if(IR_DATA==30)//返回主页
  750.         {
  751.             Com_Dat(0xf0,0x08);//清屏
  752.             Write_Photo(0,0,48,64,Photo_L);
  753.             Write_Photo(34,0,48,72,Photo_R);
  754.             Write_Photo(0,160,320,79,Photo_main);

  755.             LCD_DrawRectangle(0,0,319,239,1);////画外框
  756.             break;
  757.         }
  758.         if(IR_DATA==1)//日期调整
  759.         {
  760.             CLS();
  761.             GB_A=0;
  762.             SendStr(23,220,0,"1");
  763.             SendStr(1,50,0,"◆");
  764.             Com_Dat(0x10,0x10);//粗体
  765.             SendStr(23,30,0,"日 期 调 整");
  766.             Com_Dat(0x10,0x00);
  767.             SendStr(20,190,0,"EQ保存    返回");
  768.             Write_Photo(28,190,16,16,Photo_ENTER);
  769.             SendStr(20,60,0,"当前日期:");
  770.             SendStr(20,115,0,"调整为:");
  771.             SendStr(25,140,0,"20  -  -  ");
  772.             IR_DATA=0;
  773.             Date_Count=0;
  774.             D_T_OK=0;
  775.             while(1)
  776.             {
  777.                 year=DS_Read(9);
  778.                 month=DS_Read(8);
  779.                 day=DS_Read(7);
  780.                 mi_Time();
  781.                 Com_Dat(0x10,0x10);//粗体
  782.                 SendStr(25,85,0,"20  -  -  ");
  783.                 Write_D(27,85,0,0,year);
  784.                 Write_D(30,85,0,0,month);
  785.                 Write_D(33,85,0,0,day);
  786.                 Com_Dat(0x10,0x00);//粗体
  787.                 if(Date_Count<6)
  788.                 {
  789.                     if(IR_DATA>0&&IR_DATA<=10)
  790.                     {
  791.                         if(IR_DATA==10)IR_DATA=0;
  792.                         DATE_TIME[Date_Count]=IR_DATA;
  793.                         switch(Date_Count)
  794.                         {
  795.                             case 0:Write_B(27,140,0,IR_DATA);break;
  796.                             case 1:Write_B(28,140,0,IR_DATA);break;
  797.                             case 2:Write_B(30,140,0,IR_DATA);break;
  798.                             case 3:Write_B(31,140,0,IR_DATA);break;
  799.                             case 4:Write_B(33,140,0,IR_DATA);break;
  800.                             case 5:Write_B(34,140,0,IR_DATA);break;
  801.                         }
  802.                         Date_Count++;
  803.                         IR_DATA=0;
  804.                     }
  805.                 }
  806.                 if(Date_Count>=6)
  807.                 {
  808.                     YH=DATE_TIME[0];   
  809.                     YL=DATE_TIME[1];   
  810.                     MH=DATE_TIME[2];   
  811.                     ML=DATE_TIME[3];   
  812.                     DH=DATE_TIME[4];   
  813.                     DL=DATE_TIME[5];
  814.                     if(((MH*10+ML)>12)||((MH*10+ML)<1)||((DH*10+DL)>31)||((DH*10+DL)<1))
  815.                     {
  816.                         SendStr(25,165,0,"输入错误!");
  817.                         Date_Count=0;
  818.                         D_T_OK=0;
  819.                     }else {SendStr(25,165,0,"输入正确!");D_T_OK=1;}
  820.                 }

  821.                 GB_A++;
  822.                 if(GB_A==30)
  823.                 switch(Date_Count)
  824.                 {
  825.                     case 0:SendStr(27,140,0,"_");break;
  826.                     case 1:SendStr(28,140,0,"_");break;
  827.                     case 2:SendStr(30,140,0,"_");break;
  828.                     case 3:SendStr(31,140,0,"_");break;
  829.                     case 4:SendStr(33,140,0,"_");break;
  830.                     case 5:SendStr(34,140,0,"_");break;
  831.                 }
  832.                 if(GB_A>=60)
  833.                 {
  834.                     switch(Date_Count)
  835.                     {
  836.                         case 0:SendStr(27,140,0," ");break;
  837.                         case 1:SendStr(28,140,0," ");break;
  838.                         case 2:SendStr(30,140,0," ");break;
  839.                         case 3:SendStr(31,140,0," ");break;
  840.                         case 4:SendStr(33,140,0," ");break;
  841.                         case 5:SendStr(34,140,0," ");break;
  842.                     }
  843.                     GB_A=0;
  844.                 }

  845.                 if(IR_DATA==28)//保存
  846.                 {
  847.                     if(D_T_OK==1)
  848.                     {
  849.                         year=YH*10+YL;
  850.                         month=MH*10+ML;
  851.                         day=DH*10+DL;
  852.                         DS_Write(9,year);
  853.                         DS_Write(8,month);
  854.                         DS_Write(7,day);
  855.                         SendStr(25,165,0," 已储存!");
  856.                     }
  857.                     else SendStr(25,165,0," 未储存!");
  858.                     Date_Count=0;
  859.                     IR_DATA=0;
  860.                     D_T_OK=0;
  861.                 }
  862.                 if(IR_DATA==30){CLS();IR_DATA=0;break;}//退出
  863.             }
  864.             IR_DATA=0;
  865.         }
  866.         if(IR_DATA==2)//时间调整
  867.         {
  868.             GB_A=0;
  869.             CLS();
  870.             SendStr(23,220,0,"2");
  871.             SendStr(1,80,0,"◆");
  872.             Com_Dat(0x10,0x10);//粗体
  873.             SendStr(23,30,0,"时 间 调 整");
  874.             Com_Dat(0x10,0x00);
  875.             SendStr(20,190,0,"EQ保存    返回");
  876.             Write_Photo(28,190,16,16,Photo_ENTER);
  877.             SendStr(20,60,0,"当前时间:");
  878.             SendStr(26,85,0, "  :  :  ");
  879.             SendStr(20,115,0,"调整为:");
  880.             SendStr(26,140,0,"  :  :  ");
  881.             IR_DATA=0;
  882.             Date_Count=0;
  883.             D_T_OK=0;
  884.             while(1)
  885.             {
  886.                 hour=DS_Read(4);
  887.                 min=DS_Read(2);
  888.                 sec=DS_Read(0);
  889.                 mi_Time();
  890.                 Com_Dat(0x10,0x10);//粗体
  891.                 Write_D(26,85,0,0,hour);
  892.                 Write_D(29,85,0,0,min);
  893.                 Write_D(32,85,0,0,sec);
  894.                 Com_Dat(0x10,0x00);//粗体
  895.                 if(Date_Count<6)
  896.                 {
  897.                     if(IR_DATA>0&&IR_DATA<=10)
  898.                     {
  899.                         if(IR_DATA==10)IR_DATA=0;
  900.                         DATE_TIME[Date_Count]=IR_DATA;
  901.                         switch(Date_Count)
  902.                         {
  903.                             case 0:Write_B(26,140,0,IR_DATA);break;
  904.                             case 1:Write_B(27,140,0,IR_DATA);break;
  905.                             case 2:Write_B(29,140,0,IR_DATA);break;
  906.                             case 3:Write_B(30,140,0,IR_DATA);break;
  907.                             case 4:Write_B(32,140,0,IR_DATA);break;
  908.                             case 5:Write_B(33,140,0,IR_DATA);break;
  909.                         }
  910.                         Date_Count++;
  911.                         IR_DATA=0;
  912.                     }
  913.                 }
  914.                 if(Date_Count>=6)
  915.                 {
  916.                     HH=DATE_TIME[0];   
  917.                     HL=DATE_TIME[1];   
  918.                     MH=DATE_TIME[2];   
  919.                     ML=DATE_TIME[3];   
  920.                     SH=DATE_TIME[4];   
  921.                     SL=DATE_TIME[5];
  922.                     if(((HH*10+HL)>23)||((MH*10+ML)>59)||((SH*10+SL)>59))
  923.                     {
  924.                         SendStr(25,165,0,"输入错误!");
  925.                         Date_Count=0;
  926.                         D_T_OK=0;
  927.                     }else {SendStr(25,165,0,"输入正确!");D_T_OK=1;}
  928.                 }

  929.                 GB_A++;
  930.                 if(GB_A==30)
  931.                 switch(Date_Count)
  932.                 {
  933.                     case 0:SendStr(26,140,0,"_");break;
  934.                     case 1:SendStr(27,140,0,"_");break;
  935.                     case 2:SendStr(29,140,0,"_");break;
  936.                     case 3:SendStr(30,140,0,"_");break;
  937.                     case 4:SendStr(32,140,0,"_");break;
  938.                     case 5:SendStr(33,140,0,"_");break;
  939.                 }
  940.                 if(GB_A>=60)
  941.                 {
  942.                     switch(Date_Count)
  943.                     {
  944.                         case 0:SendStr(26,140,0," ");break;
  945.                         case 1:SendStr(27,140,0," ");break;
  946.                         case 2:SendStr(29,140,0," ");break;
  947.                         case 3:SendStr(30,140,0," ");break;
  948.                         case 4:SendStr(32,140,0," ");break;
  949.                         case 5:SendStr(33,140,0," ");break;
  950.                     }
  951.                     GB_A=0;
  952.                 }

  953.                 if(IR_DATA==28)//保存
  954.                 {
  955.                     if(D_T_OK==1)
  956.                     {
  957.                         hour=HH*10+HL;
  958.                         min=MH*10+ML;
  959.                         sec=SH*10+SL;
  960.                         DS_Write(4,hour);
  961.                         DS_Write(2,min);
  962.                         DS_Write(0,sec);
  963.                         SendStr(25,165,0," 已储存!");
  964.                     }
  965.                     else SendStr(25,165,0," 未储存!");
  966.                     Date_Count=0;
  967.                     IR_DATA=0;
  968.                     D_T_OK=0;
  969.                 }
  970.                 if(IR_DATA==30){CLS();IR_DATA=0;break;}//退出
  971.             }
  972.             IR_DATA=0;
  973.         }
  974.         if(IR_DATA==3)//背光设定
  975.         {
  976.             GB_A=0;
  977.             CLS();
  978.             SendStr(23,220,0,"3");
  979.             SendStr(1,110,0,"◆");
  980.             KE=EEPROM_Read(2);
  981.             Com_Dat(0x10,0x10);//粗体
  982.             SendStr(23,30,0,"背 光 设 定");
  983.             Com_Dat(0x10,0x00);
  984.             SendStr(22,110,0,"背光级别:");
  985.             SendStr(20,190,0,"EQ保存    返回");
  986.             Write_Photo(28,190,16,16,Photo_ENTER);

  987.             while(1)
  988.             {
  989.                 ms(200);
  990.                 mi_Time();//小时间窗口
  991.                 if(KE==0)SendStr(20,135,0,"- □□□□□□□ +");
  992.                 if(KE==1)SendStr(20,135,0,"- ■□□□□□□ +");
  993.                 if(KE==2)SendStr(20,135,0,"- ■■□□□□□ +");
  994.                 if(KE==3)SendStr(20,135,0,"- ■■■□□□□ +");
  995.                 if(KE==4)SendStr(20,135,0,"- ■■■■□□□ +");
  996.                 if(KE==5)SendStr(20,135,0,"- ■■■■■□□ +");
  997.                 if(KE==6)SendStr(20,135,0,"- ■■■■■■□ +");
  998.                 if(KE==7)SendStr(20,135,0,"- ■■■■■■■ +");
  999.                 Com_Dat(0x10,0x10);//粗体
  1000.                 if(KE==0){BG_DATA=0;SendStr(32,110,0,"关闭");}
  1001.                 if(KE==7){BG_DATA=200;SendStr(32,110,0,"最亮");}
  1002.                 if(KE<7&&KE>0){BG_DATA=(KE*10)+30;Write_D(32,110,0,1,KE);SendStr(34,110,0,"  ");}
  1003.                 Com_Dat(0x10,0x00);
  1004.                 PCF8591_Write_Data(BG_DATA);
  1005.                 if(IR_DATA==27){if(KE<7)KE++;IR_DATA=0;}
  1006.                 if(IR_DATA==26){if(KE>0)KE--;IR_DATA=0;}
  1007.                 if(IR_DATA==28){EEPROM_Write(2,KE);SendStr(26,165,0,"已储存!");}//保存
  1008.                 if(IR_DATA==30)
  1009.                 {
  1010.                     KE=EEPROM_Read(2);
  1011.                     if(KE==0)BG_DATA=0;
  1012.                     if(KE==7)BG_DATA=200;
  1013.                     if(KE<7&&KE>0){BG_DATA=(KE*10)+30;}
  1014.                     PCF8591_Write_Data(BG_DATA);
  1015.                     CLS();
  1016.                     IR_DATA=0;
  1017.                     break;
  1018.                 }//退出
  1019.             }
  1020.             IR_DATA=0;
  1021.         }
  1022.         if(IR_DATA==4)//高级设定
  1023.         {
  1024.             CLS();
  1025.             GB_A=0;
  1026.             SendStr(23,220,0,"4");
  1027.             SendStr(1,140,0,"◆");
  1028.             Com_Dat(0x10,0x10);//粗体
  1029.             SendStr(23,30,0,"高 级 设 定");
  1030.             Com_Dat(0x10,0x00);
  1031.             SendStr(20,60,0,"时间格式:(+ -)");
  1032.             SendStr(21,90,0,"12小时制   □");
  1033.             SendStr(21,120,0,"24小时制   □");
  1034.             Time_inf=EEPROM_Read(3);
  1035.             IR_DATA=0;
  1036.             while(1)
  1037.             {
  1038.                 mi_Time();//小时间窗口
  1039.                 if(Time_inf==0){SendStr(32,90,0,"□");SendStr(32,120,0,"■");}
  1040.                 if(Time_inf==1){SendStr(32,90,0,"■");SendStr(32,120,0,"□");}

  1041.                 ms(100);
  1042.                 if(IR_DATA==27)//+
  1043.                 {
  1044.                     Time_inf=1;
  1045.                     IR_DATA=0;
  1046.                 }

  1047.                 if(IR_DATA==26)//-
  1048.                 {
  1049.                     Time_inf=0;
  1050.                     IR_DATA=0;
  1051.                 }

  1052.                 if(IR_DATA==28)//确定
  1053.                 {
  1054.                     EEPROM_Write(3,Time_inf);
  1055.                     SendStr(26,165,0,"已储存!");
  1056.                     IR_DATA=0;
  1057.                 }
  1058.                 if(IR_DATA==30){CLS();IR_DATA=0;break;}//返回
  1059.             }
  1060.             IR_DATA=0;
  1061.         }
  1062.     }        
  1063. }

  1064. void IR_KEY()
  1065. {
  1066.     while(IR_DATA==20)//电源键
  1067.     {
  1068.         PCF8591_Write_Data(0);
  1069.          wr_cmd(0x00);
  1070.         wr_data(0x80);
  1071.         Sound_SW=0;
  1072.         IR_DATA=0;
  1073.         TR1=0;//关串口中断
  1074.         Power_SW=0;
  1075.         while(1)
  1076.         {
  1077.             ms(10000);
  1078.             Error=0;
  1079.             ms(20);
  1080.             Error=1;
  1081.             ms(10000);
  1082.         }
  1083.     }

  1084.     while(IR_DATA==22)//静音
  1085.     {
  1086.         if(Sound_SW==0){EEPROM_Write(1,1);Sound_SW=1;}//保存声音开关状态
  1087.         else {EEPROM_Write(1,0);Sound_SW=0;}
  1088.         IR_DATA=0;
  1089.     }

  1090.     if(IR_DATA==21)MODE();//设置页面
  1091. }

  1092. void main()
  1093. {
  1094.     AUXR = AUXR|0x40;  // T0, 1T Mode
  1095.     ms(1000);//等待电源稳定
  1096.     Power_SW=1;
  1097.     IT0=1;    //INT0为负边沿触发, (1:负边沿触发,0:低电平触发)
  1098.     EX0=1;    //外部中断INT0开, (1:开,      0:关    )
  1099.     InitUART();//串口初始化
  1100.     INIT();
  1101.     ms(10000);//等待电源稳定
  1102.     Power_ON();
  1103.     EA=1;     //开总中断
  1104.     if(P0==0x1234)TEST_();//此句无实际意义
  1105.     ms(20);
  1106.    /* 背光重设 */
  1107.     KE=EEPROM_Read(2);
  1108.     if(KE==0)BG_DATA=0;
  1109.     if(KE==7)BG_DATA=200;
  1110.     if(KE<7&&KE>0){BG_DATA=(KE*10)+30;}
  1111.     PCF8591_Write_Data(BG_DATA);
  1112.     Write_Photo(0,0,48,64,Photo_L);
  1113.     Write_Photo(34,0,48,72,Photo_R);
  1114.     Write_Photo(0,160,320,79,Photo_main);
  1115.     LCD_DrawRectangle(0,0,319,239,1);////画外框
  1116.     while(1)
  1117.     {
  1118.         ms(100);
  1119.         IR_KEY();//扫描按键
  1120.         main_Disp();//显示主界面
  1121.         Festival();//当前节日
  1122.         Forecast();//节日预报
  1123.     }   
  1124. }

  1125. void int0() interrupt 0 using 2//红外和按键处理程序      
  1126. {
  1127.     unsigned char IRD,IR_Time,i,j,k;  //延时用的循环变量
  1128.     unsigned char data IRcode[4];   //定义一个4字节的数组用来存储代码
  1129.     unsigned char IRD1,IRD2,IRD3,IRD4;
  1130.     unsigned char CodeTemp;   //编码字节缓存变量
  1131.     unsigned char shi_1,ge_1,shi_2,ge_2,shi_3,ge_3,shi_4,ge_4;
  1132.     EA=0;//临时关中断,以免红外处理出错
  1133.     CodeTemp=0;    //初始化红外编码字节缓存变量
  1134.     for(k=0;k<10;k++)
  1135.     {
  1136.         Delay0_9ms();
  1137.         if(IRsignal==1)         //如果0.9ms后IRsignal=1,说明不是引导码
  1138.         {
  1139.             k=10;
  1140.             break;
  1141.         }
  1142.         else if(k==9)           //如果持续了10×0.9ms=9ms的低电平,说明是引导码
  1143.         {
  1144.             while(IRsignal==0);
  1145.             Delay4_5ms();        //跳过持续4.5ms的高电平
  1146.             for(i=0;i<4;i++)       //分别读取4个字节
  1147.             {
  1148.                 for(j=1;j<=8;j++)      //每个字节8个bit的判断
  1149.                 {
  1150.                     while(IRsignal==0);       //等待上升沿
  1151.                     Delay0_9ms();      //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
  1152.                     if(IRsignal==1)     //如果IRsignal是"1",则向右移入一位"1"
  1153.                     {
  1154.                         Delay1ms();
  1155.                         CodeTemp=CodeTemp|0x80;
  1156.                         if(j<8) CodeTemp=CodeTemp>>1;
  1157.                     }
  1158.                     else
  1159.                     if(j<8)CodeTemp=CodeTemp>>1;//如果IRsignal是"0",则向右移一位,自动补"0"
  1160.                 }
  1161.                 IRcode[i]=CodeTemp;
  1162.                 CodeTemp=0;
  1163.             }
  1164.             IR_Time=100;
  1165.             for(IRD=0;IRD<1;IRD++)
  1166.             {
  1167.                 IRD1=(IRcode[0]%100);
  1168.                 shi_1=(IRD1%100)/10;
  1169.                 ge_1=IRD1%10;
  1170.                 IRD1=(shi_1+ge_1);
  1171.                 IRD2=(IRcode[1]%100);
  1172.                 shi_2=(IRD2%100)/10;
  1173.                 ge_2=IRD2%10;
  1174.                 IRD2=(shi_2+ge_2);
  1175.                 IRD3=(IRcode[2]%100);
  1176.                 shi_3=(IRD3%100)/10;
  1177.                 ge_3=IRD3%10;
  1178.                 IRD3=(shi_3+ge_3);
  1179.                 IRD4=(IRcode[3]%100);
  1180.                 shi_4=(IRD4%100)/10;
  1181.                 ge_4=IRD4%10;
  1182.                 IRD4=(shi_4+ge_4);
  1183.                 if((IRD1==5)&&(IRD2==7)&&(IRD3==12)&&(IRD4==10)){IR_DATA=1;KEY_BEP();}//1
  1184.                 if((IRD1==5)&&(IRD2==7)&&(IRD3==4)&&(IRD4==9)){IR_DATA=2;KEY_BEP();}//2
  1185.                 if((IRD1==5)&&(IRD2==12)&&(IRD3==3)&&(IRD4==5)){IR_DATA=3;KEY_BEP();}//3
  1186.                 if((IRD1==5)&&(IRD2==7)&&(IRD3==3)&&(IRD4==10)){IR_DATA=4;KEY_BEP();}//4
  1187.                 if((IRD1==5)&&(IRD2==7)&&(IRD3==13)&&(IRD4==9)){IR_DATA=5;KEY_BEP();}//5
  1188.                 if((IRD1==5)&&(IRD2==12)&&(IRD3==13)&&(IRD4==5)){IR_DATA=6;KEY_BEP();}//6
  1189.                 if((IRD1==5)&&(IRD2==11)&&(IRD3==3)&&(IRD4==6)){IR_DATA=7;KEY_BEP();}//7
  1190.                 if((IRD1==5)&&(IRD2==11)&&(IRD3==4)&&(IRD4==5)){IR_DATA=8;KEY_BEP();}//8
  1191.                 if((IRD1==5)&&(IRD2==12)&&(IRD3==12)&&(IRD4==6)){IR_DATA=9;KEY_BEP();}//9
  1192.                 if((IRD1==5)&&(IRD2==2)&&(IRD3==9)&&(IRD4==9)){IR_DATA=10;KEY_BEP();}//0
  1193.                 if((IRD1==5)&&(IRD2==14)&&(IRD3==10)&&(IRD4==6)){IR_DATA=20;KEY_BEP();}//POWER
  1194.                 if((IRD1==5)&&(IRD2==2)&&(IRD3==12)&&(IRD4==6)){IR_DATA=21;KEY_BEP();}//MODE
  1195.                 if((IRD1==5)&&(IRD2==9)&&(IRD3==5)&&(IRD4==6)){IR_DATA=22;KEY_BEP();}//静音
  1196.                 if((IRD1==5)&&(IRD2==16)&&(IRD3==8)&&(IRD4==6)){IR_DATA=23;KEY_BEP();}//上一个
  1197.                 if((IRD1==5)&&(IRD2==6)&&(IRD3==8)&&(IRD4==6)){IR_DATA=24;KEY_BEP();}//下一个
  1198.                 if((IRD1==5)&&(IRD2==9)&&(IRD3==15)&&(IRD4==6)){IR_DATA=25;KEY_BEP();}//暂停
  1199.                 if((IRD1==5)&&(IRD2==9)&&(IRD3==10)&&(IRD4==10)){IR_DATA=26;KEY_BEP();}//DEC
  1200.                 if((IRD1==5)&&(IRD2==14)&&(IRD3==7)&&(IRD4==9)){IR_DATA=27;KEY_BEP();}//ADD
  1201.                 if((IRD1==5)&&(IRD2==14)&&(IRD3==15)&&(IRD4==10)){IR_DATA=28;KEY_BEP();}//EQ
  1202.                 if((IRD1==5)&&(IRD2==14)&&(IRD3==16)&&(IRD4==9)){IR_DATA=29;KEY_BEP();}//100+
  1203.                 if((IRD1==5)&&(IRD2==5)&&(IRD3==5)&&(IRD4==10)){IR_DATA=30;KEY_BEP();}//Enter
  1204.             }
  1205.             while(IR_Time==1)//等待松开
  1206.             {
  1207.                 if(!IRsignal){IR_Time=100;}
  1208.                 else {IR_Time--;ms(10);}
  1209.             }
  1210.         }
  1211.     }
  1212.     EA=1;//开中断
  1213. }
  1214. void UARTInterrupt(void) interrupt 4
  1215. {
  1216.     if(RI)
  1217.     {
  1218.         RI = 0;
  1219.         IAP_CONTR=0x60;
  1220.     }
  1221.     else
  1222.         TI = 0;
  1223. }
复制代码


基于STC12C5A60S2的5.7寸(A8806)LCD电子万年历.7z

382.11 KB, 下载次数: 0

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表