找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3780|回复: 14
打印 上一主题 下一主题
收起左侧

单片机+12864显示乱码,求大神帮助!

[复制链接]
跳转到指定楼层
楼主
求助:最近在论坛下载了一份关于万年历的资料,下载编译没有错误,但是12864显示屏乱码,百度说是因为代码逻辑错误,但我查了好久的代码都不知道是哪里错了(编程渣渣)。搞了两天了,都搞不定,内心崩溃。。。。
希望有大神可以帮帮我

以下是代码:
  1. /****************************文件包含*************************************/
  2. #include < reg52.h >
  3. #include < character.h >
  4. #include < lcd.h >
  5. #include < clock.h >
  6. #include < sensor.h>
  7. #include < calendar.h >
  8. #include < key.h >

  9. /*****************************预定义**************************************/
  10. #define uchar unsigned char
  11. #define uint unsigned int
  12. /****************************************************************************/
  13. sbit bell = P2 ^ 0; //定义蜂鸣器端口
  14. /*****************************************************************************
  15. * 名称: Timer0_Service() inturrupt 1
  16. * 功能: 中断服务程序 整点报时 3声嘟嘟的声音
  17. * 入口参数:
  18. * 出口参数:
  19. *****************************************************************************/
  20. void Timer0_Service() interrupt 1
  21. {
  22.    static uchar count = 0;
  23.    static uchar flag = 0; //记录鸣叫的次数
  24.    count = 0;
  25.    TR0 = 0;      //关闭Timer0
  26.    TH0 = 0x3c;
  27.    TL0 = 0XB0;   //延时 50 ms
  28.    TR0 = 1 ;     //启动Timer0
  29.    count ++;
  30.    if( count == 20 ) //鸣叫 1 秒
  31.    {
  32.       bell = ~ bell;
  33.       count = 0;
  34.       flag ++;
  35.    }
  36.    if( flag == 6 )
  37.    {
  38.       flag = 0;
  39.       TR0 = 0;   //关闭Timer0
  40.    }

  41. }
  42. /*****************************************************************************
  43. * 名称: Timer2_Servie() interrupt 5
  44. * 功能: 中断服务程序  整点报时 一分钟
  45. * 入口参数:
  46. * 出口参数:
  47. *****************************************************************************/
  48. uchar HexNum_Convert(uchar HexNum)/*时间存储个位和十位的方式与我们用的十进制不一样,你懂的,呵呵--BB车*/
  49. {
  50. uchar Numtemp;
  51. Numtemp=(HexNum>>4)*10+(HexNum&0X0F);
  52. return Numtemp;
  53. }
  54. /******************************************************************************
  55. * 函数名称:main()
  56. * 功    能:
  57. * 入口参数:
  58. * 出口参数:
  59. ********************************************************************************/
  60. void main( void )
  61. {         
  62.     uchar clock_time[6] = {0X00,0X59,0X23,0X09,0X04,0X11};        //定义时间变量 秒  分 时 日 月 年
  63.         uchar alarm_time[2] = { 10, 06}; //闹钟设置  alarm_time[0]: 分钟  alarm_time[1] :小时
  64.         uchar temperature[2];  //定义温度变量   temperature[0]  低8位   temperature[1]  高8位
  65.     Lcd_Initial();     //LCD初始化
  66.         Clock_Fresh( clock_time ); //我把时间刷新放在这里,proteus会调用当前系统时间,别问为什么,经验,呵呵
  67.         Clock_Initial( clock_time ); //时钟初试化
  68.    
  69.         /***********************中断初始化***************************/
  70.     EA = 1; //开总中断
  71.     ET0 = 1;  //Timer0 开中断
  72.         ET2 = 1; //Timer2 开中断
  73.     TMOD = 0x01 ; //Timer0 工作方式 1
  74.         RCAP2H = 0x3c;
  75.     RCAP2L = 0xb0; //Timer2 延时 50 ms

  76.     while( 1 )
  77.         {
  78.            switch( Key_Scan() )
  79.        {
  80.           case up_array:  
  81.                                {
  82.                           Key_Idle();
  83.                        }
  84.                                break;     
  85.           case down_array:   
  86.                                  {
  87.                                                     Key_Idle();
  88.                                                  }
  89.                                  break;                  
  90.                   case clear_array:   
  91.                                   {   
  92.                                                      Key_Idle();
  93.                                               }
  94.                                                   break;
  95.                   case function_array:{
  96.                                  Key_Function( clock_time, alarm_time );
  97.                                       }
  98.                   case null:      
  99.                            {
  100.                                       Clock_Fresh( clock_time ); //时间刷新
  101.                               Lcd_Clock( clock_time );   //时间显示
  102.                      
  103.                       Sensor_Fresh( temperature ); //温度更新
  104.                                           Lcd_Temperture( temperature ); //温度显示

  105.                       Calendar_Convert( 0 , clock_time );
  106.                                           Week_Convert( 0, clock_time );

  107.                                           //整点报时
  108.                                           if( ( * clock_time == 0x59 ) && ( * ( clock_time + 1 ) == 0x59 ) )
  109.                                           {
  110.                                              bell = 0;
  111.                                                  TR2 = 1; //启动Timer2
  112.                                           }
  113.                       //闹钟报警
  114.                       if( * alarm_time == HexNum_Convert(* ( clock_time + 1 ) )) //分钟相吻合
  115.                                              if( * ( alarm_time + 1 ) == HexNum_Convert(*( clock_time + 2 )) ) //小时相吻合
  116.                                                  {
  117.                                                     bell = 0;
  118.                                                         TR2 = 1; //启动Timer2
  119.                                                  }
  120.                    }
  121.                                     break;
  122.          }
  123.         }
  124. }
复制代码
仿真出来的结果是这样的:

求求各位大佬帮我解答解答。。。


捕获abc.PNG (77.6 KB, 下载次数: 85)

捕获abc.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:706042 发表于 2020-4-9 19:08 | 只看该作者
以下附上各个头文件:

//calendar.h

#ifndef _SUN_MOON
#define _SUN_MOON
/*************************************************************************/
#define uchar unsigned char
#define uint unsigned int

/********************************************************************************
* 名称: get_moon_day(uchar month_p,uint table_addr)
* 功能: 读取数据表中农历的大月或小月 ,如果大月返回1, 小月返回0
* 入口参数:
* 出口参数:
*********************************************************************************/
bit get_moon_day( uchar month_p,uint calendar_address )
{
    uchar temp,temp1;

        temp1=(month_p+3)/8;
        temp=0x80>>((month_p+3)%8);
        temp=year_code[calendar_address+temp1]&temp;
        if(temp==0){return(0);}else{return(1);}

/*   switch(month_p)
        {
        case 1: { temp = year_code[calendar_address] & 0x08; if(temp==0) return(0); else return(1); }
        case 2: { temp = year_code[calendar_address] & 0x04; if(temp==0) return(0); else return(1); }
        case 3: { temp = year_code[calendar_address] & 0x02; if(temp==0) return(0); else return(1); }
        case 4: { temp = year_code[calendar_address] & 0x01; if(temp==0) return(0); else return(1); }
        case 5: { temp = year_code[calendar_address + 1] & 0x80; if(temp==0) return(0); else return(1); }
        case 6: { temp = year_code[calendar_address + 1] & 0x40; if(temp==0) return(0); else return(1); }
        case 7: { temp = year_code[calendar_address + 1] & 0x20; if(temp==0) return(0); else return(1); }
        case 8: { temp = year_code[calendar_address + 1] & 0x10; if(temp==0) return(0); else return(1); }
        case 9: { temp = year_code[calendar_address + 1] & 0x08; if(temp==0) return(0); else return(1); }
        case 10: { temp = year_code[calendar_address + 1] & 0x04; if(temp==0) return(0); else return(1); }
        case 11: { temp = year_code[calendar_address + 1] & 0x02; if(temp==0) return(0); else return(1); }
        case 12: { temp = year_code[calendar_address + 1] & 0x01; if(temp==0) return(0); else return(1); }
        case 13: { temp = year_code[calendar_address + 2] & 0x80; if(temp==0) return(0); else return(1); }
    }
        以上的程序与上面的程序等价,上面的程序更精简一些!!!
        */



}
/**************************************************************************
* 名称: void Calendar_Convert( uchar * clock_time )
* 功能: 输入BCD的阳历数据, 输出BCD阴历数据( 1901 - 2099 )
* 入口参数: c_flag:阳历的世纪标志  clock_time: 时钟地址
* 出口参数: 无
* 说明: c_flag = 0 :21世纪 c_flag = 1 :19世纪
*****************************************************************************/
void Calendar_Convert( uchar c_flag, uchar * clock_time )
{
   bit flag_month, flag_year;
   uchar year, month, day, month_point; //定义 年 月 天
   uchar temp1, temp2, temp3;
   uint calendar_address; //定义农历地址
   uint day_number;
   uchar clock_moon[3]; //定义阴历


   clock_time += 3; //指向日
   day = ( * clock_time >> 4 ) * 10 + ( *clock_time & 0x0f ); //BCD转换十进制
   clock_time ++; //指向月
   month = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f ); //BCD转换十进制
   clock_time ++; //指向年
   year = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f ); //BCD转换十进制
  
   //定位日历地址
   if( c_flag == 0 )
      calendar_address = ( year + 99 ) * 3;  
   else
      calendar_address = ( year - 1 ) * 3;

   //春节(正月初一)所在的阳历月份
   temp1 = year_code[ calendar_address + 2 ] & 0x60; //Bit6~~Bit5:春节所在的阳历月份
   temp1 >>= 5 ;
   //春节(正月初一)所在的阳历日期
   temp2 = year_code[ calendar_address + 2 ] & 0x1f; //Bit4~~Bit0:春节所在的阳历日期
  
   //计算春节(正月初一)离当年元旦{ 1月1日(阳历) }的天数;春节只会在阳历的1月 或 2月
   /*if( temp1 == 1 )
      temp3 = temp2 - 1;
   else
      temp3 = temp2 + 31 - 1;
            */

        temp3=temp2-1;
        if(temp1!=1) temp3+=0x1f;
   

   //计算阳历月离当年元旦{ 1月1日(阳历) }的天数
   if( month < 10 )
      {day_number = day_code1[ month - 1 ] + day  ;}
   else
      {day_number = day_code2[ month - 10 ] + day ;}

   //如果阳历的月大于2 且该年的2月为闰月,天数加1
   //闰年指的就是阳历有闰日或阴历有闰月的一年;
   //阳历四年一闰,在二月加一天,这一天叫做闰日:
   //农历三年一闰,五年两闰,十九年七闰,每逢闰年所加的一个月叫做闰月。
   if( ( month <= 2 ) || ( year % 0x04!= 0) ) day_number-=1;
   //   day_number ++;

  //   if ((month<2)||(year%0x04!=0))
  //   day_number-=1;

   //判断阳历日 在春节(正月初一) 之前 还是 之后
   if( day_number >= temp3 ) //阳历在春节之后 或者 春节当日
   {
      day_number -= temp3;
      month = 1;
      month_point = 1; // month_point 为月份指向,阳历日在春季前就是春季
          flag_month = get_moon_day( month_point, calendar_address ); //检查该阴历月的大小  大月返回1  小月返回0
          flag_year = 0;
         /* if( flag_month )
             temp1 = 30; //大月30天
          else
             temp1 = 29; //小月29天
      */
      if (flag_month==0) {temp1=29;} else{temp1=30;}

          //闰月所在的月分
          temp2 = year_code[ calendar_address ] & 0xf0;
          temp2 >>= 4; //提取高四位  假如是0 表示没有闰月

          while( day_number >= temp1 )
          {
             day_number -= temp1;
         month_point ++;
         if( month == temp2 )
         {
            flag_year = ~ flag_year;
            if( flag_year == 0 )
               month +=1;
         }
         else
            month ++ ;
         flag_month = get_moon_day( month_point, calendar_address );
         if( flag_month )
            temp1 = 30;
         else
            temp1 = 29;
       }
       day = day_number + 1;
   }
   else //阳历在春节之前使用以下代码进行运算
   {
      temp3 -= day_number;
      if( year == 0 )
         { year = 0xe3; c_flag = 1; }
      else
         year -= 1;
      calendar_address -= 3;
      month = 0xc;
      temp2 = year_code[ calendar_address ] & 0xf0;
      temp2 >>= 4; //提取高4位
      flag_year=0;
          if( temp2 == 0 )
         month_point = 12;
      else
         month_point = 13;
      //flag_year = 0;
      flag_month = get_moon_day( month_point, calendar_address );
      if( flag_month )
         temp1 = 30;
      else
         temp1 = 29;
      while( temp3 > temp1 )
      {
         temp3 -= temp1;
         month_point --;
         if( flag_year == 0 )
         month -=1;
         if( month == temp2 )
         flag_year = ~ flag_year;
         flag_month = get_moon_day( month_point, calendar_address );
         if( flag_month )
            temp1 = 0x1e;
         else
            temp1 = 0x1d;
         
      }
      day = temp1 - temp3 + 1;
   }
   //HEX->BCD ,运算结束后,把数据转换为BCD数据
   temp1 = year / 10;
   temp1 <<= 4;
   clock_moon[2] = temp1 | ( year % 10 );

   temp1 = month / 10;
   temp1 <<= 4;
   clock_moon[1] = temp1 | ( month % 10 );

   temp1 = day / 10;
   temp1 <<= 4;
   clock_moon[0] = temp1 | ( day % 10 );
   Lcd_Lunar_Calendar( clock_moon );
}

/********************************************************************************
* 名称: void Week_convert( uchar * clock_time )
* 功能: 输入BCD阳历数据;输出BCD星期
* 入口参数:
* 出口参数:
* 说明: 算法: ( 日期 + 年份 + 所过闰年 + 月校正 ) / 7 的余数就是星期 如果是闰年又不到 3 月份上述之和 要减一天 再
********************************************************************************/
void Week_Convert( bit c, uchar * clock_time )
{
   uchar year, month, day; //定义 年 月 天
   uchar temp;

   clock_time += 3; //指向日
   day = ( * clock_time >> 4 ) * 10 + ( *clock_time & 0x0f ); //BCD转换十进制
   clock_time ++; //指向月
   month = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f );
   clock_time ++; //指向年
   year = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f );

   if( c == 0 ) //如果为21世纪,年份数加100
      year += 100;
   temp = year / 4; //所过闰年数只算1900年之后的
   temp = year + temp;
   temp = temp % 0x07; //为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据
   temp = temp + day + table_week[ month - 1 ];
   if( ( year % 4  == 0 ) && ( month <3  ) )
      temp -=1;
   Lcd_Week( temp % 7 );
}
/********************************************************************************/
#endif[/code]
回复

使用道具 举报

板凳
ID:706042 发表于 2020-4-9 19:09 | 只看该作者
  1. //character

  2. #ifndef _CHARACTER
  3. #define _CHARACTER
  4. /*****************************预定义**************************************/
  5. #define uchar unsigned char
  6. #define uint  unsigned int
  7. /********************************************************************************************
  8. *内容:   0 1 2 3 4 5 6 7 8 9 空白 -         T :
  9. *大小:   8X16字符  
  10. *********************************************************************************************/
  11. uchar code letter_logo[16][16]={
  12. /*--  文字:  0  --*/
  13. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  14. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

  15. /*--  文字:  1  --*/
  16. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  17. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

  18. /*--  文字:  2  --*/
  19. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  20. 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

  21. /*--  文字:  3  --*/
  22. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  23. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

  24. /*--  文字:  4  --*/
  25. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  26. 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,

  27. /*--  文字:  5  --*/
  28. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  29. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,

  30. /*--  文字:  6  --*/
  31. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  32. 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,

  33. /*--  文字:  7  --*/
  34. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  35. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

  36. /*--  文字:  8  --*/
  37. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  38. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,

  39. /*--  文字:  9  --*/
  40. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  41. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,

  42. /*--  文字:  :  --*/
  43. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  44. 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,

  45. /*--  文字:  -  --*/
  46. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  47. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,

  48. /*--  文字:  T  --*/
  49. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/

  50. 0x00,0x1C,0x0C,0xFC,0xFC,0x0C,0x1C,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,

  51. /*--  文字: 空白  --*/
  52. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  53. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


  54. /*--  文字: (  --*/
  55. 0x00,0x00,0xF0,0xF8,0x0C,0x04,0x00,0x00,0x00,0x00,0x03,0x07,0x0C,0x08,0x00,0x00,

  56. /*--  文字: )  --*/

  57. 0x00,0x00,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x00,0x08,0x0C,0x07,0x03,0x00,0x00,


  58. };

  59. /*******************************************************************************
  60. * 内容 年月日
  61. * 大小 16X16
  62. *********************************************************************************/
  63. uchar code data_logo[3][32] = {
  64. /*--  文字:  年  --*/
  65. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  66. 0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,
  67. 0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,

  68. /*--  文字:  月  --*/
  69. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  70. 0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,
  71. 0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00,

  72. /*--  文字:  日  --*/
  73. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  74. 0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,
  75. 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,
  76. };


  77. /*******************************************************************************
  78. * 内容 时分秒
  79. * 大小 16X16
  80. *********************************************************************************/
  81. uchar code time_logo[3][32] = {
  82. /*--  文字:  时  --*/
  83. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  84. 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
  85. 0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,

  86. /*--  文字:  分  --*/
  87. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  88. 0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00,
  89. 0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,

  90. /*--  文字:  秒  --*/
  91. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  92. 0x12,0x12,0xD2,0xFE,0x91,0x11,0xC0,0x38,0x10,0x00,0xFF,0x00,0x08,0x10,0x60,0x00,
  93. 0x04,0x03,0x00,0xFF,0x00,0x83,0x80,0x40,0x40,0x20,0x23,0x10,0x08,0x04,0x03,0x00,
  94. };

  95. /*********************************************************************************
  96. * 内容: 日一二三四五六星期
  97. * 大小: 16X16
  98. /********************************************************************************/
  99. uchar code week_logo[9][32] = {
  100. /*--  文字:  日  --*/
  101. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  102. 0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,
  103. 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,

  104. /*--  文字:  一  --*/
  105. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  106. 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,
  107. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  108. /*--  文字:  二  --*/
  109. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  110. 0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,
  111. 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,

  112. /*--  文字:  三  --*/
  113. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  114. 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
  115. 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,

  116. /*--  文字:  四  --*/
  117. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  118. 0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
  119. 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,

  120. /*--  文字:  五  --*/
  121. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  122. 0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,
  123. 0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00,

  124. /*--  文字:  六  --*/
  125. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  126. 0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
  127. 0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00,

  128. /*--  文字:  星  --*/
  129. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  130. 0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,
  131. 0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00,

  132. /*--  文字:  期  --*/
  133. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  134. 0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
  135. 0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,
  136. };
  137. /*******************************************************************************************
  138. * 内容: 农历
  139. * 大小: 16X16
  140. ********************************************************************************************/
  141. uchar code lunar_calendar_logo[2][32] = {
  142. /*--  文字:  农  --*/
  143. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  144. 0x00,0x20,0x18,0x08,0x88,0xE8,0x1F,0x6A,0x88,0x08,0x88,0xC8,0xA8,0x1C,0x08,0x00,
  145. 0x08,0x04,0x02,0x41,0xFF,0x40,0x20,0x10,0x01,0x02,0x0D,0x18,0x70,0x20,0x20,0x00,

  146. /*--  文字:  历  --*/
  147. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  148. 0x00,0x00,0xFE,0x02,0x22,0x22,0x22,0x22,0xFA,0x22,0x22,0x22,0xE2,0x02,0x02,0x00,
  149. 0x40,0x30,0x0F,0x00,0x40,0x20,0x18,0x06,0x01,0x00,0x20,0x60,0x3F,0x00,0x00,0x00,
  150. };
  151. /********************************************************************************************
  152. *内容: .  ° C
  153. *大小:   8X16字符
  154. *********************************************************************************************/
  155. uchar code temperture_logo[3][16]={
  156. /*--  文字:  .  --*/
  157. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  158. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,

  159. /*--  文字:  °  --*
  160. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  161. 0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  162. /*--  文字:  C  --*/
  163. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  164. 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,
  165. };

  166. /********************************************************************************************
  167. *内容:   显示温度等级   第一个等级大于30度    第二个等级大于20度小于30毒   第三个等级小于20d度
  168. *大小:   8X16字符
  169. *********************************************************************************************/
  170. uchar code sensor_inducator_logo[3][32] =
  171. {
  172. /*--  调入了一幅图像:这是您新建的图像  --*/
  173. /*--  宽度x高度=16x16  --*/
  174. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x70,0x78,0x00,0x00,0x00,
  175. 0x00,0x00,0x00,0x40,0x60,0x70,0x74,0x76,0x77,0x77,0x77,0x77,0x77,0x00,0x00,0x00,
  176. /*--  调入了一幅图像:这是您新建的图像  --*/
  177. /*--  宽度x高度=16x16  --*/
  178. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  179. 0x00,0x00,0x00,0x40,0x60,0x70,0x74,0x76,0x77,0x77,0x77,0x77,0x77,0x00,0x00,0x00,
  180. /*--  调入了一幅图像:这是您新建的图像  --*/
  181. /*--  宽度x高度=16x16  --*/
  182. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  183. 0x00,0x00,0x00,0x40,0x60,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x00,0x00,0x00,
  184. };

  185. /***************************************************************************************
  186. *内容: 时间设置 功能设置
  187. *大小: 16X16
  188. ****************************************************************************************/
  189. uchar code function_logo[8][32] = {
  190. /*--  文字:  时  --*/
  191. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  192. 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x00,
  193. 0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,

  194. /*--  文字:  间  --*/
  195. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  196. 0x00,0xF8,0x02,0x02,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00,
  197. 0x00,0x7F,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x20,0x40,0x3F,0x00,0x00,

  198. /*--  文字:  设  --*/
  199. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  200. 0x40,0x40,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00,
  201. 0x00,0x00,0x7F,0x20,0x10,0x00,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0x40,0x00,0x00,

  202. /*--  文字:  置  --*/
  203. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  204. 0x00,0x20,0x2E,0xAA,0xAA,0xAE,0xEA,0xBA,0xAA,0xAE,0xAA,0xAA,0x2E,0x20,0x00,0x00,
  205. 0x40,0x40,0x40,0x7F,0x6A,0x6A,0x6A,0x6A,0x6A,0x6A,0x6A,0x7F,0x40,0x40,0x40,0x00,

  206. /*--  文字:  闹  --*/
  207. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  208. 0x00,0x00,0xF8,0x12,0x90,0x92,0x96,0xFA,0x92,0x92,0x92,0x12,0x02,0xFE,0x00,0x00,
  209. 0x00,0x00,0x7F,0x00,0x1F,0x00,0x00,0x3F,0x00,0x08,0x0F,0x20,0x40,0x7F,0x00,0x00,

  210. /*--  文字:  钟  --*/
  211. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  212. 0x40,0x30,0x2C,0xEA,0x28,0x28,0x00,0xF8,0x08,0x08,0xFE,0x08,0x08,0xF8,0x00,0x00,
  213. 0x01,0x01,0x01,0x7F,0x41,0x21,0x00,0x01,0x01,0x01,0x7F,0x01,0x01,0x01,0x00,0x00,

  214. /*--  文字:  设  --*/
  215. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  216. 0x40,0x40,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00,
  217. 0x00,0x00,0x7F,0x20,0x10,0x00,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0x40,0x00,0x00,

  218. /*--  文字:  置  --*/
  219. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  220. 0x00,0x00,0x2E,0xAA,0xAA,0xAE,0xEA,0xBA,0xAA,0xAE,0xAA,0xAA,0x2E,0x00,0x00,0x00,
  221. 0x40,0x40,0x40,0x7F,0x6A,0x6A,0x6A,0x6A,0x6A,0x6A,0x6A,0x7F,0x40,0x40,0x40,0x00,

  222. };

  223. /********************************************************************************************
  224. *内容:日期 时间
  225. *大小:16x16
  226. **************************************************************************************8******/
  227. uchar code data_time_logo[4][32] = {
  228. /*--  文字:  日  --*/
  229. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  230. 0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,
  231. 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,

  232. /*--  文字:  期  --*/
  233. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  234. 0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
  235. 0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,

  236. /*--  文字:  时  --*/
  237. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  238. 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
  239. 0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,

  240. /*--  文字:  间  --*/
  241. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  242. 0x00,0xF8,0x01,0x06,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00,
  243. 0x00,0xFF,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x40,0x80,0x7F,0x00,0x00,
  244. };

  245. /********************************************************************************
  246. *
  247. *
  248. *********************************************************************************/
  249. code uchar year_code[597]={
  250.                     0x04,0xAe,0x53,  
  251.     //1901 0
  252.                     0x0A,0x57,0x48,     
  253.    //1902 3
  254.                     0x55,0x26,0xBd,
  255.     //1903 6
  256.                     0x0d,0x26,0x50,   
  257.     //1904 9
  258.                     0x0d,0x95,0x44,   
  259.     //1905 12
  260.                     0x46,0xAA,0xB9,   
  261.     //1906 15
  262.                     0x05,0x6A,0x4d,   
  263.     //1907 18
  264.                     0x09,0xAd,0x42,   
  265.     //1908 21
  266.                     0x24,0xAe,0xB6,   
  267.     //1909
  268.                     0x04,0xAe,0x4A,   
  269.     //1910
  270.                     0x6A,0x4d,0xBe,   
  271.     //1911
  272.                     0x0A,0x4d,0x52,   
  273.     //1912
  274.                     0x0d,0x25,0x46,   
  275.     //1913
  276.                     0x5d,0x52,0xBA,   
  277.     //1914
  278.                     0x0B,0x54,0x4e,   
  279.     //1915
  280.                     0x0d,0x6A,0x43,   
  281.     //1916
  282.                     0x29,0x6d,0x37,   
  283.     //1917
  284.                     0x09,0x5B,0x4B,   
  285.     //1918
  286.                     0x74,0x9B,0xC1,   
  287.     //1919
  288.                     0x04,0x97,0x54,   
  289.     //1920
  290.                     0x0A,0x4B,0x48,   
  291.     //1921
  292.                     0x5B,0x25,0xBC,   
  293.     //1922
  294.                     0x06,0xA5,0x50,   
  295.     //1923
  296.                     0x06,0xd4,0x45,   
  297.     //1924
  298.                     0x4A,0xdA,0xB8,   
  299.     //1925
  300.                     0x02,0xB6,0x4d,   
  301.     //1926
  302.                     0x09,0x57,0x42,   
  303.     //1927
  304.                     0x24,0x97,0xB7,   
  305.     //1928
  306.                     0x04,0x97,0x4A,   
  307.     //1929
  308.                     0x66,0x4B,0x3e,   
  309.     //1930
  310.                     0x0d,0x4A,0x51,   
  311.     //1931
  312.                     0x0e,0xA5,0x46,   
  313.     //1932
  314.                     0x56,0xd4,0xBA,   
  315.     //1933
  316.                     0x05,0xAd,0x4e,   
  317.     //1934
  318.                     0x02,0xB6,0x44,   
  319.     //1935
  320.                     0x39,0x37,0x38,   
  321.     //1936
  322.                     0x09,0x2e,0x4B,   
  323.     //1937
  324.                     0x7C,0x96,0xBf,   
  325.     //1938
  326.                     0x0C,0x95,0x53,   
  327.     //1939
  328.                     0x0d,0x4A,0x48,   
  329.     //1940
  330.                     0x6d,0xA5,0x3B,   
  331.     //1941
  332.                     0x0B,0x55,0x4f,   
  333.     //1942
  334.                     0x05,0x6A,0x45,   
  335.     //1943
  336.                     0x4A,0xAd,0xB9,   
  337.     //1944
  338.                     0x02,0x5d,0x4d,   
  339.     //1945
  340.                     0x09,0x2d,0x42,   
  341.     //1946
  342.                     0x2C,0x95,0xB6,   
  343.     //1947
  344.                     0x0A,0x95,0x4A,   
  345.     //1948
  346.                     0x7B,0x4A,0xBd,   
  347.     //1949
  348.                     0x06,0xCA,0x51,   
  349.     //1950
  350.                     0x0B,0x55,0x46,   
  351.     //1951
  352.                     0x55,0x5A,0xBB,   
  353.     //1952
  354.                     0x04,0xdA,0x4e,   
  355.     //1953
  356.                     0x0A,0x5B,0x43,   
  357.     //1954
  358.                     0x35,0x2B,0xB8,   
  359.     //1955
  360.                     0x05,0x2B,0x4C,   
  361.     //1956
  362.                     0x8A,0x95,0x3f,   
  363.     //1957
  364.                     0x0e,0x95,0x52,   
  365.     //1958
  366.                     0x06,0xAA,0x48,   
  367.     //1959
  368.                     0x7A,0xd5,0x3C,   
  369.     //1960
  370.                     0x0A,0xB5,0x4f,   
  371.     //1961
  372.                     0x04,0xB6,0x45,   
  373.     //1962
  374.                     0x4A,0x57,0x39,   
  375.     //1963
  376.                     0x0A,0x57,0x4d,   
  377.     //1964
  378.                     0x05,0x26,0x42,   
  379.     //1965
  380.                     0x3e,0x93,0x35,   
  381.     //1966
  382.                     0x0d,0x95,0x49,   
  383.     //1967
  384.                     0x75,0xAA,0xBe,   
  385.     //1968
  386.                     0x05,0x6A,0x51,   
  387.     //1969
  388.                     0x09,0x6d,0x46,   
  389.     //1970
  390.                     0x54,0xAe,0xBB,   
  391.     //1971
  392.                     0x04,0xAd,0x4f,   
  393.     //1972
  394.                     0x0A,0x4d,0x43,   
  395.     //1973
  396.                     0x4d,0x26,0xB7,   
  397.     //1974
  398.                     0x0d,0x25,0x4B,   
  399.     //1975
  400.                     0x8d,0x52,0xBf,   
  401.     //1976
  402.                     0x0B,0x54,0x52,   
  403.     //1977
  404.                     0x0B,0x6A,0x47,   
  405.     //1978
  406.                     0x69,0x6d,0x3C,   
  407.     //1979
  408.                     0x09,0x5B,0x50,   
  409.     //1980
  410.                     0x04,0x9B,0x45,   
  411.     //1981
  412.                     0x4A,0x4B,0xB9,   
  413.     //1982
  414.                     0x0A,0x4B,0x4d,   
  415.     //1983
  416.                     0xAB,0x25,0xC2,   
  417.     //1984
  418.                     0x06,0xA5,0x54,   
  419.     //1985
  420.                     0x06,0xd4,0x49,   
  421.     //1986
  422.                     0x6A,0xdA,0x3d,   
  423.     //1987
  424.                     0x0A,0xB6,0x51,   
  425.     //1988
  426.                     0x09,0x37,0x46,   
  427.     //1989
  428.                     0x54,0x97,0xBB,   
  429.     //1990
  430.                     0x04,0x97,0x4f,   
  431.     //1991
  432.                     0x06,0x4B,0x44,   
  433.     //1992
  434.                     0x36,0xA5,0x37,   
  435.     //1993
  436.                     0x0e,0xA5,0x4A,   
  437.     //1994
  438.                     0x86,0xB2,0xBf,   
  439.     //1995
  440.                     0x05,0xAC,0x53,   
  441.     //1996
  442.                     0x0A,0xB6,0x47,   
  443.     //1997
  444.                     0x59,0x36,0xBC,   
  445.     //1998
  446.                     0x09,0x2e,0x50,   
  447.     //1999 294
  448.                     0x0C,0x96,0x45,   
  449.     //2000 297
  450.                     0x4d,0x4A,0xB8,   
  451.     //2001
  452.                     0x0d,0x4A,0x4C,   
  453.     //2002
  454.                     0x0d,0xA5,0x41,   
  455.     //2003
  456.                     0x25,0xAA,0xB6,   
  457.     //2004
  458.                     0x05,0x6A,0x49,   
  459.     //2005
  460.                     0x7A,0xAd,0xBd,   
  461.     //2006
  462.                     0x02,0x5d,0x52,   
  463.     //2007
  464.                     0x09,0x2d,0x47,   
  465.     //2008
  466.                     0x5C,0x95,0xBA,   
  467.     //2009
  468.                     0x0A,0x95,0x4e,   
  469.     //2010
  470.                     0x0B,0x4A,0x43,   
  471.     //2011
  472.                     0x4B,0x55,0x37,   
  473.     //2012
  474.                     0x0A,0xd5,0x4A,   
  475.     //2013
  476.                     0x95,0x5A,0xBf,   
  477.     //2014
  478.                     0x04,0xBA,0x53,   
  479.     //2015
  480.                     0x0A,0x5B,0x48,   
  481.     //2016
  482.                     0x65,0x2B,0xBC,   
  483.     //2017
  484.                     0x05,0x2B,0x50,   
  485.     //2018
  486.                     0x0A,0x93,0x45,   
  487.     //2019
  488.                     0x47,0x4A,0xB9,   
  489.     //2020
  490.                     0x06,0xAA,0x4C,   
  491.     //2021
  492.                     0x0A,0xd5,0x41,   
  493.     //2022
  494.                     0x24,0xdA,0xB6,   
  495.     //2023
  496.                     0x04,0xB6,0x4A,   
  497.     //2024
  498.                     0x69,0x57,0x3d,   
  499.     //2025
  500.                     0x0A,0x4e,0x51,   
  501.     //2026
  502.                     0x0d,0x26,0x46,   
  503.     //2027
  504.                     0x5e,0x93,0x3A,   
  505.     //2028
  506.                     0x0d,0x53,0x4d,   
  507.     //2029
  508.                     0x05,0xAA,0x43,   
  509.     //2030
  510.                     0x36,0xB5,0x37,   
  511.     //2031
  512.                     0x09,0x6d,0x4B,   
  513.     //2032
  514.                     0xB4,0xAe,0xBf,   
  515.     //2033
  516.                     0x04,0xAd,0x53,   
  517.     //2034
  518.                     0x0A,0x4d,0x48,   
  519.     //2035
  520.                     0x6d,0x25,0xBC,   
  521.     //2036
  522.                     0x0d,0x25,0x4f,   
  523.     //2037
  524.                     0x0d,0x52,0x44,   
  525.     //2038
  526.                     0x5d,0xAA,0x38,   
  527.     //2039
  528.                     0x0B,0x5A,0x4C,   
  529.     //2040
  530.                     0x05,0x6d,0x41,   
  531.     //2041
  532.                     0x24,0xAd,0xB6,   
  533.     //2042
  534.                     0x04,0x9B,0x4A,   
  535.     //2043
  536.                     0x7A,0x4B,0xBe,   
  537.     //2044
  538.                     0x0A,0x4B,0x51,   
  539.     //2045
  540.                     0x0A,0xA5,0x46,   
  541.     //2046
  542.                     0x5B,0x52,0xBA,   
  543.     //2047
  544.                     0x06,0xd2,0x4e,   
  545.     //2048
  546.                     0x0A,0xdA,0x42,   
  547.     //2049
  548.                     0x35,0x5B,0x37,   
  549.     //2050
  550.                     0x09,0x37,0x4B,   
  551.     //2051
  552.                     0x84,0x97,0xC1,   
  553.     //2052
  554.                     0x04,0x97,0x53,   
  555.     //2053
  556.                     0x06,0x4B,0x48,   
  557.     //2054
  558.                     0x66,0xA5,0x3C,   
  559.     //2055
  560.                     0x0e,0xA5,0x4f,   
  561.     //2056
  562.                     0x06,0xB2,0x44,   
  563.     //2057
  564.                     0x4A,0xB6,0x38,   
  565.     //2058
  566.                     0x0A,0xAe,0x4C,   
  567.     //2059
  568.                     0x09,0x2e,0x42,   
  569.     //2060
  570.                     0x3C,0x97,0x35,   
  571.     //2061
  572.                     0x0C,0x96,0x49,   
  573.     //2062
  574.                     0x7d,0x4A,0xBd,   
  575.     //2063
  576.                     0x0d,0x4A,0x51,   
  577.     //2064
  578.                     0x0d,0xA5,0x45,   
  579.     //2065
  580.                     0x55,0xAA,0xBA,   
  581.     //2066
  582.                     0x05,0x6A,0x4e,   
  583.     //2067
  584.                     0x0A,0x6d,0x43,   
  585.     //2068
  586.                     0x45,0x2e,0xB7,   
  587.     //2069
  588.                     0x05,0x2d,0x4B,   
  589.     //2070
  590.                     0x8A,0x95,0xBf,   
  591.     //2071
  592.                     0x0A,0x95,0x53,   
  593.     //2072
  594.                     0x0B,0x4A,0x47,   
  595.     //2073
  596.                     0x6B,0x55,0x3B,   
  597.     //2074
  598.                     0x0A,0xd5,0x4f,   
  599.     //2075
  600.                     0x05,0x5A,0x45,   
  601.     //2076
  602.                     0x4A,0x5d,0x38,   
  603.     //2077
  604.                     0x0A,0x5B,0x4C,   
  605.     //2078
  606.                     0x05,0x2B,0x42,   
  607.     //2079
  608.                     0x3A,0x93,0xB6,   
  609.     //2080
  610.                     0x06,0x93,0x49,   
  611.     //2081
  612.                     0x77,0x29,0xBd,   
  613.     //2082
  614.                     0x06,0xAA,0x51,   
  615.     //2083
  616.                     0x0A,0xd5,0x46,   
  617.     //2084
  618.                     0x54,0xdA,0xBA,   
  619.     //2085
  620.                     0x04,0xB6,0x4e,   
  621.     //2086
  622.                     0x0A,0x57,0x43,   
  623.     //2087
  624.                     0x45,0x27,0x38,   
  625.     //2088
  626.                     0x0d,0x26,0x4A,   
  627.     //2089
  628.                     0x8e,0x93,0x3e,   
  629.     //2090
  630.                     0x0d,0x52,0x52,   
  631.     //2091
  632.                     0x0d,0xAA,0x47,   
  633.     //2092
  634.                     0x66,0xB5,0x3B,   
  635.     //2093
  636.                     0x05,0x6d,0x4f,   
  637.     //2094
  638.                     0x04,0xAe,0x45,   
  639.     //2095
  640.                     0x4A,0x4e,0xB9,   
  641.     //2096
  642.                     0x0A,0x4d,0x4C,   
  643.     //2097
  644.                     0x0d,0x15,0x41,   
  645.     //2098
  646.                     0x2d,0x92,0xB5,   
  647.     //2099
  648. };
  649. /********************************************************************************
  650. * 月份数据表
  651. *
  652. ********************************************************************************/
  653. uchar code day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
  654. uint  code day_code2[3]={0x111,0x130,0x14e};
  655. /********************************************************************************
  656. * 星期数据表
  657. *
  658. ********************************************************************************/
  659. uchar code  table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5};
  660. /********************************************************************************
  661. * 内容: //闹钟的图标
  662. * 大小: 16 X 16
  663. ********************************************************************************/
  664. uchar code alarm_logo[5][32] = {
  665. 0x00,0x00,0x00,0x00,0xE0,0xF8,0xFC,0xFC,0xFC,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,
  666. 0x00,0x10,0x18,0x3E,0x3F,0x7F,0x5F,0x9F,0x9F,0x5F,0x7F,0x3F,0x3E,0x18,0x10,0x00,

  667. /*--  文字:  小  --*/
  668. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  669. 0x00,0x00,0x00,0xC0,0x70,0x20,0x00,0xFF,0x00,0x10,0x20,0xC0,0x80,0x00,0x00,0x00,
  670. 0x04,0x02,0x01,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x01,0x07,0x02,0x00,

  671. /*--  文字:  时  --*/
  672. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  673. 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
  674. 0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,

  675. /*--  文字:  分  --*/
  676. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  677. 0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00,
  678. 0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,

  679. /*--  文字:  钟  --*/
  680. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  681. 0x40,0x30,0x2C,0xEB,0x28,0x28,0x00,0xF8,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,
  682. 0x01,0x01,0x01,0xFF,0x41,0x21,0x00,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x00,0x00,
  683. };

  684. unsigned char code ucLunar[][32]=
  685. {
  686. //"初"
  687. 0x10,0x10,0x91,0xD6,0x30,0x98,0x00,0x08, 0x08,0xF8,0x08,0x08,0x08,0xFC,0x08,0x00,
  688. 0x02,0x01,0x00,0xFF,0x01,0x82,0x40,0x20,0x18,0x07,0x40,0x80,0x40,0x3F,0x00,0x00,

  689. /*--  文字:  一  --*/
  690. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  691. 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,
  692. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  693. /*--  文字:  二  --*/
  694. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  695. 0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,
  696. 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,

  697. /*--  文字:  三  --*/
  698. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  699. 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
  700. 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,

  701. /*--  文字:  四  --*/
  702. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  703. 0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
  704. 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,

  705. /*--  文字:  五  --*/
  706. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  707. 0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,
  708. 0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00,

  709. /*--  文字:  六  --*/
  710. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  711. 0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
  712. 0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00,

  713. /*--  文字:  七  --*/
  714. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  715. 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0xFE,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
  716. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x38,0x00,0x00,

  717. /*--  文字:  八  --*/
  718. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  719. 0x00,0x00,0x00,0x00,0x80,0x7C,0x08,0x00,0x00,0x7E,0x84,0x00,0x00,0x00,0x00,0x00,
  720. 0x20,0x10,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x18,0x30,0x10,0x00,

  721. /*--  文字:  九  --*/
  722. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  723. 0x00,0x10,0x10,0x10,0x10,0x90,0x7F,0x10,0x10,0x10,0xF8,0x10,0x00,0x00,0x00,0x00,
  724. 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x78,0x20,0x00,

  725. /*--  文字:  十  --*/
  726. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  727. 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
  728. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  729. /*--  文字:  农  --*/         
  730. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  731. 0x00,0x20,0x18,0x08,0x88,0xE8,0x1F,0x6A,0x88,0x08,0x88,0xC8,0xA8,0x1C,0x08,0x00,
  732. 0x08,0x04,0x02,0x41,0xFF,0x40,0x20,0x10,0x01,0x02,0x0D,0x18,0x70,0x20,0x20,0x00,

  733. /*--  文字:  历  --*/
  734. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  735. 0x00,0x00,0xFE,0x02,0x22,0x22,0x22,0x22,0xFA,0x22,0x22,0x22,0xE2,0x02,0x02,0x00,
  736. 0x40,0x30,0x0F,0x00,0x40,0x20,0x18,0x06,0x01,0x00,0x20,0x60,0x3F,0x00,0x00,0x00,

  737. /*--  文字:  星  --*/
  738. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  739. 0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,
  740. 0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00,

  741. /*--  文字:  期  --*/
  742. /*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/
  743. 0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
  744. 0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,

  745. //"正"            15
  746. 0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00,
  747. 0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00,

  748. //"冬",           16
  749. 0x00,0x00,0x20,0x10,0x08,0x17,0xA4,0x44,0xA4,0x94,0x0C,0x04,0x00,0x00,0x00,0x00,
  750. 0x04,0x04,0x02,0x02,0x01,0x25,0x24,0x48,0x48,0x80,0x01,0x01,0x02,0x06,0x02,0x00,

  751. //"腊",           17
  752. 0x00,0xFE,0x22,0x22,0xFF,0x42,0x48,0x48,0x7F,0x48,0x48,0x7F,0xC8,0x68,0x40,0x00,
  753. 0x40,0x3F,0x02,0x82,0xFF,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0xFF,0x01,0x00,0x00,

  754. //"℃",           18
  755. 0x00,0x06,0x09,0x09,0xE6,0xF0,0x18,0x08,0x08,0x08,0x18,0x30,0x78,0x00,0x00,0x00,
  756. 0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x30,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00,

  757. //"廿",    19
  758. 0x20,0x20,0x20,0x20,0xFE,0x20,0x20,0x20,0x20,0x20,0xFE,0x20,0x20,0x30,0x20,0x00,
  759. 0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,0x00
  760. };

  761. unsigned char code SX[][32] =          // 数据表
  762. {

  763. //"猴",
  764.           0x22,0x14,0x08,0xF4,0x42,0x21,0xF8,0x17,
  765.       0xD2,0x92,0x92,0x92,0xDF,0x92,0x10,0x00,
  766.       0x04,0x42,0x81,0x7F,0x00,0x00,0xFF,0x85,
  767.       0x44,0x24,0x1F,0x24,0x44,0xC6,0x44,0x00,

  768. //"鸡",
  769.           0x08,0x28,0x48,0x88,0x68,0x18,0x00,0xFC,
  770.       0x06,0x15,0x44,0x84,0x7E,0x04,0x00,0x00,
  771.       0x10,0x08,0x06,0x01,0x02,0x14,0x10,0x13,
  772.       0x12,0x12,0x1A,0x52,0x82,0x7F,0x02,0x00,

  773. //"狗",
  774.           0x00,0x22,0x14,0x08,0xF4,0x03,0x20,0x98,
  775.       0x8F,0x88,0xC8,0x88,0x08,0xFC,0x08,0x00,
  776.       0x08,0x44,0x82,0x41,0x3F,0x00,0x00,0x1F,
  777.       0x08,0x08,0x4F,0x80,0x40,0x3F,0x00,0x00,

  778. //"猪",
  779.       0x40,0x22,0x14,0x08,0xF4,0x02,0x25,0xA4,
  780.       0x64,0x3F,0x34,0x2C,0xA4,0x32,0x20,0x00,
  781.       0x08,0x04,0x42,0x81,0x7F,0x02,0x01,0xFF,
  782.       0x49,0x49,0x49,0x49,0xFF,0x01,0x00,0x00,

  783. //"鼠",
  784.       0x00,0xBE,0x2A,0xAA,0x29,0x29,0xE0,0x22,
  785.       0xAA,0x2A,0x2A,0xAA,0x3F,0x02,0x00,0x00,
  786.       0x40,0x7F,0x20,0x24,0x09,0x40,0x7F,0x20,
  787.       0x24,0x09,0x00,0x1F,0x60,0x80,0xE0,0x00,

  788. //"牛",
  789.       0x00,0x40,0x30,0x0E,0x08,0x08,0x08,0xFF,
  790.       0x08,0x08,0x08,0x0C,0x08,0x80,0x00,0x00,
  791.       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
  792.       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,

  793. //"虎",
  794.       0x00,0x00,0xF8,0x48,0x48,0x48,0xF8,0x4F,
  795.       0x4A,0x2A,0x2B,0x0A,0xA8,0x18,0x00,0x00,
  796.       0x80,0x40,0x3F,0x80,0x40,0x3C,0x04,0x05,
  797.       0x05,0x7F,0x85,0x81,0x81,0xE0,0x00,0x00,

  798. //"兔",
  799.       0x20,0x10,0xF8,0x14,0x13,0x12,0x12,0xF2,
  800.       0x1A,0x16,0x12,0x10,0xF8,0x10,0x00,0x00,
  801.       0x00,0x80,0x83,0x41,0x21,0x19,0x07,0x01,
  802.       0x3F,0x41,0x45,0x59,0x43,0x40,0x70,0x00,

  803. //"龙",
  804.       0x10,0x10,0x10,0x10,0x10,0x90,0x7F,0x10,
  805.       0xF0,0x12,0x14,0x10,0xD0,0x18,0x10,0x00,
  806.       0x00,0x80,0x40,0x30,0x0C,0x23,0x20,0x10,
  807.       0x3F,0x44,0x42,0x41,0x40,0x40,0x78,0x00,

  808. //"蛇",
  809.       0x00,0xF0,0x10,0xFF,0x10,0xF0,0x20,0x18,
  810.       0xC8,0x09,0x0E,0x08,0x88,0x28,0x18,0x00,
  811.       0x20,0x67,0x22,0x1F,0x12,0x3B,0x00,0x00,
  812.       0x3F,0x44,0x42,0x41,0x41,0x40,0x70,0x00,

  813. //"马",
  814.       0x00,0x00,0x02,0x02,0xFA,0x02,0x02,0x02,
  815.       0x02,0x02,0xFF,0x02,0x00,0x80,0x00,0x00,
  816.       0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,
  817.       0x09,0x09,0x4D,0x89,0x41,0x3F,0x01,0x00,

  818. //"羊",
  819.       0x00,0x08,0x88,0x88,0x89,0x8A,0x8C,0xF8,
  820.       0x8C,0x8A,0x89,0xC8,0x8C,0x08,0x00,0x00,
  821.       0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xFF,
  822.       0x08,0x08,0x08,0x08,0x08,0x0C,0x08,0x00
  823. };

  824. unsigned char code TianGan[][32] =          // 数据表
  825. {
  826. //"庚",
  827.           0x00,0x00,0xFC,0x84,0xA4,0xA4,0xA4,0xA5,
  828.       0xFE,0xA4,0xA4,0xA4,0xF4,0xA6,0x84,0x00,
  829.       0x40,0x30,0x0F,0x80,0x82,0x42,0x22,0x1A,
  830.       0x07,0x1A,0x22,0x22,0x47,0xC0,0x40,0x00,

  831. //"辛",
  832.       0x40,0x40,0x44,0x44,0x4C,0x74,0x45,0xC6,
  833.       0x44,0x64,0x5C,0x46,0x44,0x60,0x40,0x00,
  834.       0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,
  835.       0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,

  836. //"壬",
  837.       0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFC,
  838.       0x04,0x02,0x02,0x03,0x02,0x80,0x00,0x00,
  839.       0x01,0x01,0x41,0x41,0x41,0x41,0x41,0x7F,
  840.       0x41,0x41,0x41,0x61,0x41,0x01,0x01,0x00,

  841. //"癸",
  842.       0x00,0x80,0x4A,0x32,0x92,0x8A,0x86,0x80,
  843.       0x87,0x98,0xA4,0x52,0x88,0x80,0x80,0x00,
  844.       0x01,0x80,0x84,0x44,0x44,0x24,0x14,0x0F,
  845.       0x14,0x14,0x24,0x66,0xC4,0x01,0x00,0x00,

  846. //"甲",
  847.       0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,
  848.       0x22,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,
  849.       0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,
  850.       0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,

  851. //"乙",
  852.       0x00,0x04,0x04,0x04,0x04,0x84,0x44,0x24,
  853.       0x14,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,
  854.       0x00,0x00,0x38,0x46,0x41,0x40,0x40,0x40,
  855.       0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,

  856. //"丙",
  857.       0x04,0x04,0xC4,0x44,0x44,0x44,0x44,0xFC,
  858.       0x44,0x44,0x44,0x44,0xE4,0x46,0x04,0x00,
  859.       0x00,0x00,0xFF,0x00,0x10,0x08,0x04,0x03,
  860.       0x02,0x04,0x58,0x80,0x7F,0x00,0x00,0x00,

  861. //"丁",
  862.       0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,
  863.       0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,
  864.       0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,
  865.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  866. //"戊",
  867.       0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x08,
  868.       0x7F,0x88,0x0A,0x0C,0x08,0xC8,0x00,0x00,
  869.       0x40,0x30,0x0F,0x00,0x00,0x00,0x40,0x40,
  870.       0x20,0x13,0x1C,0x24,0x43,0x80,0xE0,0x00,

  871. //"已",
  872.       0x00,0x02,0xF2,0x42,0x42,0x42,0x42,0x42,
  873.       0x42,0x42,0x42,0xFF,0x02,0x00,0x00,0x00,
  874.       0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,
  875.       0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00
  876. };

  877. unsigned char code DiZhi[][32] =          // 数据表
  878. {
  879. //"申",
  880.       0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,
  881.       0x88,0x88,0x88,0x88,0xFC,0x08,0x00,0x00,
  882.       0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0xFF,
  883.       0x08,0x08,0x08,0x08,0x1F,0x00,0x00,0x00,

  884. //"酉",
  885.       0x02,0x02,0xF2,0x12,0x12,0xFE,0x12,0x12,
  886.       0x12,0xFE,0x12,0x12,0xFA,0x13,0x02,0x00,
  887.       0x00,0x00,0xFF,0x44,0x4A,0x49,0x48,0x48,
  888.       0x48,0x4D,0x49,0x41,0xFF,0x00,0x00,0x00,

  889. //"戌",
  890.       0x00,0x00,0xF8,0x08,0x08,0x88,0x08,0x08,
  891.       0x7F,0x88,0x0A,0x0C,0x08,0xC8,0x00,0x00,
  892.       0x40,0x30,0x0F,0x01,0x01,0x01,0x41,0x40,
  893.       0x20,0x13,0x1C,0x24,0x43,0x80,0xE0,0x00,

  894. //"亥",
  895.       0x08,0x08,0x08,0x08,0x88,0x48,0x29,0x1E,
  896.       0x88,0x48,0x68,0x08,0x08,0x0C,0x08,0x00,
  897.       0x00,0x80,0x90,0x51,0x49,0x25,0x23,0x11,
  898.       0x08,0x0C,0x12,0x23,0x40,0xC0,0x00,0x00,

  899. //"子",
  900.       0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2,
  901.       0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00,
  902.       0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,
  903.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  904. //"丑",
  905.       0x00,0x00,0x02,0x82,0x82,0x82,0xFE,0x82,
  906.       0x82,0x82,0x82,0xFF,0x02,0x00,0x00,0x00,
  907.       0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,
  908.       0x40,0x40,0x40,0x7F,0x40,0x60,0x40,0x00,

  909. //"寅",  
  910.       0x10,0x0C,0xA4,0xA4,0xA4,0xA4,0xA5,0xE6,
  911.       0xA4,0xA4,0xA4,0xB4,0xA4,0x14,0x0C,0x00,
  912.       0x00,0x80,0x4F,0x4A,0x2A,0x2A,0x0A,0x0F,
  913.       0x0A,0x2A,0x2A,0x4A,0x4F,0x80,0x00,0x00,

  914. //"卯",
  915.           0x00,0x00,0xFC,0x04,0x02,0x03,0xFA,0x00,
  916.       0x00,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,
  917.       0x00,0x40,0x47,0x24,0x22,0x12,0x0F,0x00,
  918.       0x00,0xFF,0x02,0x04,0x08,0x07,0x00,0x00,

  919. //"辰",
  920.       0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,
  921.       0x92,0x92,0x9A,0x93,0xC2,0x80,0x00,0x00,
  922.       0x40,0x30,0x0F,0x00,0x00,0xFF,0x40,0x23,
  923.       0x04,0x08,0x14,0x12,0x20,0x60,0x20,0x00,

  924. //"巳",
  925.       0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,
  926.       0x42,0x42,0x42,0x42,0xFF,0x02,0x00,0x00,
  927.       0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,
  928.       0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00,

  929. //"午",
  930.       0x00,0x40,0x20,0x18,0x07,0x04,0x04,0xFC,
  931.       0x04,0x04,0x04,0x06,0x04,0x80,0x00,0x00,
  932.       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
  933.       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,

  934. //"未",
  935.       0x80,0x88,0x88,0x88,0x88,0x88,0x88,0xFF,
  936.       0x88,0x88,0x88,0x88,0x8C,0xC8,0x80,0x00,
  937.       0x00,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,
  938.       0x01,0x02,0x04,0x08,0x10,0x30,0x10,0x00
  939. };



  940. /********************************************************************************/
  941. #endif
复制代码
回复

使用道具 举报

地板
ID:706042 发表于 2020-4-9 19:10 | 只看该作者
  1. //clock.h

  2. #ifndef _REAL_TIMER_DS1302
  3. #define _REAL_TIMER_DS1302
  4. /*****************************预定义**************************************/
  5. #define uchar unsigned char
  6. #define uint unsigned int/***************************DS1302管脚配置****************************/
  7. sbit clock_rst = P2^4;
  8. sbit clock_io  = P2^3;      
  9. sbit clock_sclk= P2^2;
  10. /*********************为了编程方便定义的位变量**********************/
  11. sbit ACC0 = ACC ^ 0;
  12. sbit ACC7 = ACC ^ 7;
  13. #define second_address        0x80
  14. #define minute_address        0x82
  15. #define hour_address        0x84
  16. #define day_address            0x86
  17. #define month_address        0x88
  18. #define year_address        0x8C
  19. /********************************************************************************************
  20. * 函数名称:Clock_Write_Byte()
  21. * 功    能:向时钟DS1302写入一个字节
  22. * 入口参数:temp
  23. * 出口参数:无
  24. *********************************************************************************************/
  25. void Clock_Write_Byte(uchar temp)
  26. {
  27.     uchar i;
  28.     ACC=temp;
  29.     for(i=8; i>0; i--)
  30.     {
  31.         clock_io = ACC0;                   //相当于汇编中的 RRC
  32.         clock_sclk = 1;
  33.         clock_sclk = 0;
  34.         ACC = ACC >> 1;
  35.     }
  36. }
  37. /********************************************************************************************
  38. * 函数名称:Clock_Read_Byte()
  39. * 功    能:从时钟DS1302读取一个字节
  40. * 入口参数:无
  41. * 出口参数:ACC
  42. *********************************************************************************************/
  43. uchar Clock_Read_Byte(void)
  44. {
  45.         uchar i;
  46.     for(i=8; i>0; i--)
  47.     {
  48.         ACC = ACC >>1;                                 //相当于汇编中的 RRC
  49.         ACC7= clock_io;
  50.                 clock_sclk = 1;
  51.         clock_sclk = 0;
  52.         }
  53.     return(ACC);
  54. }
  55. /********************************************************************************************
  56. * 函数名称:Clock_Write_Time()
  57. * 功    能:向时钟DS1302写入一个时间
  58. * 入口参数:时间地址  
  59. * 出口参数:无
  60. *********************************************************************************************/
  61. void Clock_Write_Time(uchar address, uchar temp)
  62. {
  63.         clock_sclk=0;
  64.         clock_rst=0;
  65.         clock_rst=1;
  66.         Clock_Write_Byte(address);
  67.         Clock_Write_Byte(temp);
  68.         clock_rst=0;
  69.         clock_sclk=1;
  70. }
  71. /********************************************************************************************
  72. * 函数名称:Clock_Read_Time()
  73. * 功    能:从时钟DS1302读出一个时间
  74. * 入口参数:时间地址  
  75. * 出口参数:时间数据
  76. *********************************************************************************************/
  77. uchar Clock_Read_Time(uchar address)
  78. {
  79.         uchar temp=0;
  80.         clock_sclk=0;
  81.         clock_rst=0;
  82.         clock_rst=1;
  83.         Clock_Write_Byte( address|0x01 );
  84.         temp=Clock_Read_Byte();
  85.         clock_rst=0;
  86.         clock_sclk=1;
  87.         return(temp);
  88. }

  89. /********************************************************************************************
  90. * 函数名称:Clock_Initial()
  91. * 功    能:时钟初始化
  92. * 入口参数:时间地址   时间数据
  93. * 出口参数:
  94. *********************************************************************************************/
  95. void Clock_Initial(uchar *clock_time )
  96. {
  97.     Clock_Write_Time(0x8e,0x00);                //WP=0 写操作
  98.     *clock_time &= 0x7f;                             //最高位为 0 时钟芯片工作
  99.         Clock_Write_Time( second_address, * clock_time );   //秒
  100.     clock_time ++;
  101.     Clock_Write_Time( minute_address, * clock_time );    //分
  102.     clock_time ++;
  103.     Clock_Write_Time( hour_address, * clock_time );     //时
  104.     clock_time ++;
  105.     Clock_Write_Time( day_address, * clock_time );      //日
  106.     clock_time ++;
  107.     Clock_Write_Time( month_address, * clock_time);   //月
  108.         clock_time ++;
  109.     Clock_Write_Time( year_address, * clock_time );    //年
  110.     Clock_Write_Time( 0x8e,0x80);              //WP=1 写保护       
  111. }

  112. /********************************************************************************************
  113. * 函数名称:Clock_Fresh( uchar * clock_time )
  114. * 功    能:从时钟DS1302读出时间
  115. * 入口参数:时间地址  
  116. * 出口参数:时间数据
  117. *********************************************************************************************/
  118. void Clock_Fresh(uchar * clock_time )
  119. {
  120.         * clock_time = Clock_Read_Time( second_address );  //读秒
  121.         clock_time ++;
  122.         * clock_time = Clock_Read_Time( minute_address ); //读分
  123.         clock_time ++;
  124.         * clock_time = Clock_Read_Time( hour_address ); //读时
  125.     clock_time ++;
  126.     * clock_time = Clock_Read_Time( day_address ); //读日       
  127.         clock_time ++;
  128.     * clock_time = Clock_Read_Time( month_address ); //读月
  129.         clock_time ++;
  130.         *clock_time  = Clock_Read_Time( year_address ); //读年       
  131. }
  132. /********************************************************************************/
  133. #endif
复制代码
回复

使用道具 举报

5#
ID:706042 发表于 2020-4-9 19:10 | 只看该作者
  1. //key.h

  2. #ifndef _KEY
  3. #define _KEY
  4. /***********************键盘预定义******************************************/
  5. #define up_array          0x01
  6. #define down_array        0x02
  7. #define clear_array       0x03
  8. #define function_array    0x04
  9. #define null              0

  10. /********************************************************************************************
  11. * 函数名称:Key_Idle()
  12. * 功    能:键盘松开
  13. * 入口参数:无
  14. * 出口参数:无
  15. *********************************************************************************************/
  16. void Key_Idle()
  17. {
  18.    while( ( P0 & 0x0f ) != 0x0f );
  19. }

  20. /********************************************************************************************
  21. * 函数名称:Key_Scan()
  22. * 功    能:键盘扫描
  23. * 入口参数:无
  24. * 出口参数:键值
  25. *********************************************************************************************/
  26. uchar Key_Scan()
  27. {
  28.    if( ( P0 & 0x0f ) != 0x0f )         //判断按键
  29.    {
  30.        Delay(4);                  //消除抖动
  31.        if( ( P0 & 0x0f ) != 0x0f )
  32.            {
  33.          
  34.           switch ( P0 & 0x0f )              //将按键码转换成键值
  35.           {  
  36.              case  0x0e: return  up_array;  
  37.              case  0x0d: return  down_array;
  38.              case  0x0b: return  clear_array;
  39.              case  0x07: return  function_array;
  40.              default :   return  null;
  41.           }
  42.            }
  43.           
  44.    }
  45.    return null;
  46. }


  47. /********************************************************************************************
  48. * 函数名称:Key_Set_Clock( uchar * clock_time )
  49. * 功    能:键盘设定时间
  50. * 入口参数:clock_time[6]指针
  51. * 出口参数:无
  52. *********************************************************************************************/
  53. void Key_Set_Clock( uchar * clock_time )
  54. {
  55.    uchar *i;
  56.    i = clock_time ;
  57.    clock_time ++ ;   //指向分
  58.    Lcd_Set_Clock( 2, i );  //屏幕显示更该时间
  59.    Key_Idle();
  60.    while(1)
  61.    {
  62.       uchar minute;
  63.       minute = ( ( * clock_time >>4 ) * 10 ) + ( ( * clock_time ) & 0x0f );                                //BCD 转 HEX
  64.       switch( Key_Scan() )   //调整分  
  65.       {                                        
  66.          case    up_array:   
  67.                                      {
  68.                                                            minute ++  ;      if( minute == 60 ) minute=0;
  69.                                ( * clock_time ) =  minute/10 <<4 ; ( * clock_time ) = ( * clock_time ) | ( minute%10);                         //HEX 转 BCD
  70.                                                            Lcd_Set_Clock( 2, i );  //屏幕显示更该时间
  71.                                                            Key_Idle();
  72.                              }
  73.                               break;
  74.          case    down_array:
  75.                                      {
  76.                                                            if( minute == 0 )  minute = 60;   minute --;
  77.                                ( *clock_time ) =  minute/10 <<4 ;  ( * clock_time ) = ( * clock_time ) | ( minute%10);                         //HEX 转 BCD  
  78.                                Lcd_Set_Clock( 2, i );  //屏幕显示更该时间
  79.                                Key_Idle();
  80.                              }
  81.                              break;
  82. //******************************************************************************************************************************************************   
  83.          case   function_array:    //调整时
  84.                            {
  85.                                                       clock_time ++;   //指向时
  86.                               Lcd_Set_Clock( 3, i );   //屏幕显示更该时间
  87.                                                           Key_Idle();
  88.                               while(1)
  89.                               {
  90.                                                              uchar hour;
  91.                                  hour = ( ( * clock_time >>4 ) * 10 ) + ( ( * clock_time ) & 0x0f );                                //BCD 转 HEX
  92.                                  switch( Key_Scan())
  93.                                  {
  94.                                     case    up_array:  
  95.                                                                                     {
  96.                                                                                                        hour ++; if(hour == 24) hour = 0;
  97.                                                                                                            ( * clock_time ) = hour/10 <<4 ;  ( * clock_time ) = ( * clock_time ) | (hour%10);                         //HEX 转 BCD
  98.                                                        Lcd_Set_Clock( 3, i );   //屏幕显示更该时间
  99.                                                                                    Key_Idle();
  100.                                                                                                         }
  101.                                                                                                         break;

  102.                                     case  down_array:  
  103.                                                                                     {
  104.                                                                                                        if(hour == 0) hour = 24; hour --; if( hour == 0) hour =23;
  105.                                                                                                        ( * clock_time ) = hour/10 <<4 ; ( * clock_time ) = ( * clock_time ) | (hour%10);                         //HEX 转 BCD
  106.                                                                                                            Lcd_Set_Clock( 3, i );   //屏幕显示更该时间
  107.                                                                                    Key_Idle();
  108.                                                                                                         }
  109.                                                                                                     break;
  110.        //******************************************************************************************************************************************************   
  111.                                     case function_array:    //调整日
  112.                                                                                         {
  113.                                                          clock_time ++;   //指向日
  114.                                                          Lcd_Set_Clock( 4, i );   //屏幕显示更该时间
  115.                                                                                      Key_Idle();
  116.                                                                                                                  while(1)
  117.                                                                                                                  {
  118.                                                                                                                     uchar day;
  119.                                                                                                                         day = ( (*clock_time >>4)*10 ) + ( (*clock_time)&0x0f );                                //BCD 转 HEX
  120.                                                                                                                         switch(Key_Scan())
  121.                                                                                                                         {
  122.                                                                                                                            case up_array:
  123.                                                                                                                                            {
  124.                                                                                                                                                        day ++; if(day == 32) day = 1;
  125.                                                                                                                                                            ( * clock_time ) = day/10 <<4 ;  ( * clock_time ) = ( * clock_time) | (day%10);                         //HEX 转 BCD
  126.                                                                                                                                                            Lcd_Set_Clock( 4, i );   //屏幕显示更该时间
  127.                                                                                                            Key_Idle();
  128.                                                                                                                                                         }
  129.                                                                                                                                                     break;
  130.                                                                case down_array:
  131.                                                                                                                                           {
  132.                                                                                                                                                              if(day == 0) day= 31;  day --; if(day == 0) day=31;
  133.                                                                                                                                                                  (*clock_time) = day/10 <<4 ;     (*clock_time) = (*clock_time) | (day%10);                         //HEX 转 BCD ;
  134.                                                                                                                                                              Lcd_Set_Clock( 4, i );   //屏幕显示更该时间
  135.                                                                                                              Key_Idle();
  136.                                                                                                                                                           }
  137.                                                                                                                                                           break;
  138.             //******************************************************************************************************************************************************   
  139.                                                                        case function_array:    //调整月
  140.                                                                                                                                              {
  141.                                                                                     clock_time ++;   //指向月
  142.                                                                                                                                                                         Lcd_Set_Clock( 5, i );   //屏幕显示更该时间
  143.                                                                                                                 Key_Idle();
  144.                                                                                                                                                                         while(1)
  145.                                                                                                                                                                         {
  146.                                                                                                                                                                            uchar month;
  147.                                                                                                                                                                            month = ( ( * clock_time >>4)*10 ) + ( ( * clock_time ) & 0x0f );                                //BCD 转 HEX
  148.                                                                                        switch(Key_Scan())
  149.                                                                                                                                                                            {
  150.                                                                                           case up_array:
  151.                                                                                                                                                                                                {  
  152.                                                                                                                                                                                                               month ++; if(month == 13) month= 1;
  153.                                                                                                                                                                                                                   ( * clock_time ) = month/10 <<4 ;  ( * clock_time ) = ( * clock_time ) | (month%10);                         //HEX 转 BCD
  154.                                                                                                                                                                                                                   Lcd_Set_Clock( 5, i );   //屏幕显示更该时间
  155.                                                                                                                                       Key_Idle();
  156.                                                                                                                                                                                                            }
  157.                                                                                                                                                                                                            break;
  158.                                                                                           case down_array:
  159.                                                                                                                                                                                                  {  
  160.                                                                                                                                                                                                                     if(month==0) month = 12; month --; if(month==0) month = 12;
  161.                                                                                                                                                                                                                         ( * clock_time ) = month/10 <<4 ; ( * clock_time ) = ( * clock_time ) | (month%10);                         //HEX 转 BCD
  162.                                                                                                                                                                                                                     Lcd_Set_Clock( 5, i );   //屏幕显示更该时间
  163.                                                                                                                                         Key_Idle();
  164.                                                                                                                                                                                                                  }
  165.                                                                                                             break;
  166.             //******************************************************************************************************************************************************   
  167.                                                                                                                                                                                   case function_array:    //调整年
  168.                                                                                                                                                                                                     {
  169.                                                                                                                                                                                                                            clock_time ++;   //指向年
  170.                                                                                                                                                                                                                            Lcd_Set_Clock( 6, i );   //屏幕显示更该时间
  171.                                                                                                                                            Key_Idle();
  172.                                                                                                                                                                                                                            while(1)
  173.                                                                                                                                                                                                                            {
  174.                                                                                                                                                                                                                                uchar year;
  175.                                                                                                                                                                                                                                year = ( ( * clock_time >>4 ) * 10 ) + ( ( * clock_time ) & 0x0f );                                //BCD 转 HEX
  176.                                                                                                                    switch( Key_Scan() )
  177.                                                                                                                                                                                                                                    {
  178.                                                                                                                                                                                                                                       case up_array:
  179.                                                                                                                                                                                                                                                        {   
  180.                                                                                                                                                                                                                                                                       year ++; if(year == 100) year= 0;
  181.                                                                                                                                                                                                                                                                           ( * clock_time ) = year / 10 << 4 ;  ( * clock_time ) = ( * clock_time ) | (year%10);                         //HEX 转 BCD
  182.                                                                                                                                                                                                                                                                           Lcd_Set_Clock( 6, i );   //屏幕显示更该时间
  183.                                                                                                                                                                   Key_Idle();
  184.                                                                                                                                                                                                                    }
  185.                                                                                                                                                                                                                                                                    break;
  186.                                                                                                                       case down_array:
  187.                                                                                                                                                                                                                                                          {  
  188.                                                                                                                                                                                                                                                                         if(year==0) year=100 ; year--; if(year==0) year=100;
  189.                                                                                                                                                                                                                                                                             ( * clock_time ) = year/10 <<4 ; ( * clock_time ) = ( * clock_time ) | (year%10);                         //HEX 转 BCD
  190.                                                                                                                                                                                                                                                                                 Lcd_Set_Clock( 6, i );   //屏幕显示更该时间
  191.                                                                                                                                                                     Key_Idle();
  192.                                                                                                                                                                                                                                                                          }
  193.                                                                                                                                                                                                                                                                          break;
  194.           //******************************************************************************************************************************************************
  195.                                                                                                                                                                                                                                           case function_array:
  196.                                                                                                                                                                                                                                                              {   
  197.                                                                                                                                                                                                                                                                                     goto loop;
  198.                                                                                                                                                                                                                                                                                  }
  199.                                                                                                                                                                                                                                                              break;


  200.                                                                                                                                                                                                                                    }
  201.                                                                                                                                                                                                                                   
  202.                                                                                                                                                                                                                            }
  203.                                                                                                                                                                                                                         }

  204.                                                                                                                                                                            }
  205.   
  206.                                                                                                                                                                         }

  207.                                                                                                                                                                  }
  208.                                                                                             
  209.                                                                                                                         }

  210.                                                                                                                  }

  211.                                                                                                           }
  212.                                  }
  213.                              }         
  214.                            }
  215.       }
  216.    }
  217.    loop:  Key_Idle();
  218. }
  219. /***************************************************************************************
  220. * 名称: Key_Set_Alarm( uchar *  alarm_time )
  221. * 功能: 闹钟调整
  222. * 入口参数: 闹钟地址
  223. * 出口参数:
  224. ****************************************************************************************/
  225. void Key_Set_Alarm( uchar * alarm_time )
  226. {
  227.    Lcd_Alarm( 1, alarm_time );
  228.    Key_Idle();
  229.    while( 1 )
  230.    {
  231.       switch( Key_Scan() )
  232.           {
  233.              case up_array:
  234.                               {   
  235.                                              ( *alarm_time ) ++; if( *alarm_time == 60 ) *alarm_time = 0;
  236.                                                  Lcd_Alarm( 1, alarm_time );
  237.                                                  Key_Idle();
  238.                                           }
  239.                                           break;
  240.                  case down_array:
  241.                                 {
  242.                                                    if( * alarm_time == 0 ) *alarm_time = 60; ( * alarm_time )--;
  243.                                                    Lcd_Alarm( 1, alarm_time );
  244.                                                    Key_Idle();
  245.                                                 }
  246.                                                 break;
  247.                 case clear_array:
  248.                                 {
  249.                                                    Lcd_Clear();
  250.                                                    goto loop;
  251.                                                 }
  252.                                                 break;
  253.                 case function_array:
  254.                                    {
  255.                                                       alarm_time ++;
  256.                                                           Lcd_Alarm( 2, alarm_time - 1 );
  257.                                                           Key_Idle();
  258.                                                       while( 1 )
  259.                                                           {
  260.                                                              switch( Key_Scan() )
  261.                                                                  {
  262.                                                                 case up_array:
  263.                                                                                  {
  264.                                                                                                 ( *alarm_time ) ++; if( *alarm_time == 24 ) * alarm_time = 0;
  265.                                                                                                     Lcd_Alarm( 2, alarm_time - 1 );
  266.                                                                                                     Key_Idle();
  267.                                                                                              }
  268.                                                                                               break;
  269.                                                                     case down_array:
  270.                                                                                     {
  271.                                                                                                        if( * alarm_time == 0 ) *alarm_time = 24; ( *alarm_time ) --;
  272.                                                                                                        Lcd_Alarm( 2, alarm_time - 1 );
  273.                                                                                                        Key_Idle();
  274.                                                                                                      }
  275.                                                      break;
  276.                                                                         case clear_array:
  277.                                                                                          {
  278.                                                                                                             Lcd_Clear();
  279.                                                                                                                 goto loop;
  280.                                                                                                          }
  281.                                                                                                          break;
  282.                                                                     case function_array:
  283.                                                                                        {
  284.                                                                                                               Lcd_Clear();
  285.                                                                                                               goto loop;
  286.                                                                                                            }
  287.                                                        break;

  288.                                                                }
  289.                                                             }
  290.                                                    }
  291.                                                    break;
  292.           }

  293.    }
  294.    loop: Key_Idle();
  295. }
  296. /****************************************************************************************
  297. * 名称: Key_Function( uchar * clock_time )
  298. * 功能: 系统功能调试
  299. * 入口参数: 时钟程序
  300. * 出口参数: 无
  301. *****************************************************************************************/
  302. void Key_Function( uchar * clock_time, uchar * alarm_time )
  303. {
  304.    uchar temp = 2;
  305.    Lcd_Clear();
  306.    Lcd_Function( temp );
  307.    Key_Idle();
  308.    while( 1 )
  309.    {
  310.       switch( Key_Scan() )
  311.       {
  312.          case up_array:
  313.                        {
  314.                           temp ++;
  315.                           if( temp > 2 )
  316.                              temp = 2;
  317.                           Lcd_Function( temp );
  318.                           Key_Idle();
  319.                        }
  320.                        break;
  321.          case down_array:
  322.                         {
  323.                            temp --;
  324.                            if( temp == 0 )
  325.                               temp = 1;
  326.                            Lcd_Function( temp );
  327.                            Key_Idle();
  328.                         }
  329.                          break;
  330.          case clear_array:
  331.                          {
  332.                                                     Lcd_Clear();
  333.                             goto loop;
  334.                          }
  335.                          break;
  336.          case function_array:
  337.                             {
  338.                                if( temp == 2 )
  339.                                {
  340.                                   Lcd_Clear();
  341.                                   Key_Set_Clock( clock_time );
  342.                                   Clock_Initial( clock_time );
  343.                                   Lcd_Clear();
  344.                                   goto loop;
  345.                                }
  346.                                if( temp == 1 )
  347.                                {
  348.                                   Lcd_Clear();
  349.                                   Key_Set_Alarm( alarm_time );
  350.                                                                   Lcd_Clear();
  351.                                                                   goto loop;
  352.                                }
  353.                             }
  354.                             break;
  355.       }
  356.    }
  357.    loop: Key_Idle();
  358. }
  359. /********************************************************************************/
  360. #endif
复制代码
回复

使用道具 举报

6#
ID:706042 发表于 2020-4-9 19:10 | 只看该作者
  1. //lcd.h

  2. #ifndef _LCD_12864
  3. #define _LCD_12864
  4. /*****************************预定义**************************************/
  5. #define uchar unsigned char
  6. #define uint unsigned int/***************************12864管脚配置****************************/
  7. #define port P1
  8. sbit  rs=P3^0;
  9. sbit  rw=P3^1;
  10. sbit   e=P3^2;
  11. sbit cs1=P3^6;
  12. sbit cs2=P3^7;
  13. /********************************************************************************************
  14. * 函数名称:Delay()
  15. * 功    能:延迟时间=a*1ms
  16. * 入口参数:
  17. * 出口参数:无
  18. *********************************************************************************************/
  19. void Delay(uint a)
  20. {
  21.    uchar  i;
  22.    while(a--)
  23.    for(i=0;i<125;i++);
  24. }
  25. /********************************************************************************************
  26. * 函数名称:Lcd_Display_On()
  27. * 功    能:LCD显示开
  28. * 入口参数:无
  29. * 出口参数:无
  30. *********************************************************************************************/
  31. void Lcd_Display_On()
  32. {  
  33.    port=0x3f;
  34.    rs=0;
  35.    rw=0;
  36.    e=1;
  37.    e=0;  
  38. }
  39. /********************************************************************************************
  40. * 函数名称:Lcd_Display_Off()
  41. * 功    能:LCD显示关
  42. * 入口参数:无
  43. * 出口参数:无
  44. *********************************************************************************************/
  45. void Lcd_Display_Off()
  46. {  
  47.    port=0x3e;
  48.    rs=0;
  49.    rw=0;
  50.    e=1;
  51.    e=0;  
  52. }
  53. /********************************************************************************************
  54. * 函数名称:Lcd_Set_X(uchar x)
  55. * 功    能:LCD设置X坐标
  56. * 入口参数:x
  57. * 出口参数:无
  58. *********************************************************************************************/
  59. void Lcd_Set_X(uchar x)
  60. {  
  61.    port=0xb8|x;
  62.    rs=0;
  63.    rw=0;
  64.    e=1;
  65.    e=0;  
  66. }
  67. /********************************************************************************************
  68. * 函数名称:Lcd_Set_Y(uchar y)
  69. * 功    能:LCD设置Y坐标
  70. * 入口参数:y
  71. * 出口参数:无
  72. *********************************************************************************************/
  73. void Lcd_Set_Y(uchar y)
  74. {  
  75.    port=0x40|y;
  76.    rs=0;
  77.    rw=0;
  78.    e=1;
  79.    e=0;  
  80. }
  81. /********************************************************************************************
  82. * 函数名称:Lcd_Set_X_Y(uchar x, uchar y )
  83. * 功    能:LCD设置x y坐标
  84. * 入口参数:x y
  85. * 出口参数:无
  86. *********************************************************************************************/
  87. void Lcd_Set_X_Y(uchar x, uchar y)
  88. {  
  89.    
  90.    if( y<64 )
  91.       { cs1=1; cs2=0; Lcd_Set_Y( y ); }
  92.    else
  93.       { cs1=0; cs2=1; Lcd_Set_Y( y-64 );  }
  94.     Lcd_Set_X( x);
  95. }
  96. /********************************************************************************************
  97. * 函数名称:Lcd_Write_Command()
  98. * 功    能:写指令代码
  99. * 入口参数:无
  100. * 出口参数:无
  101. *********************************************************************************************/
  102. void Lcd_Write_Command(uchar temp)
  103. {  
  104.    port=temp;
  105.    rs=0;
  106.    rw=0;
  107.    e=1;
  108.    e=0;  
  109. }
  110. /********************************************************************************************
  111. * 函数名称:Lcd_Write_Byte()
  112. * 功    能:写数据
  113. * 入口参数:无
  114. * 出口参数:无
  115. *********************************************************************************************/
  116. void Lcd_Write_Byte(uchar temp)
  117. {  
  118.    port=temp;
  119.    rs=1;
  120.    rw=0;
  121.    e=1;
  122.    e=0;  
  123. }
  124. /****************************************************************************
  125. *名称:Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point )
  126. *功能:显示16X8字符(字母)         
  127. *入口参数:
  128. *出口参数:
  129. *说明:bit_flag = 1 正常显示  bit_flag = 0 黑白反相显示
  130. ****************************************************************************/
  131. void Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point )
  132. {
  133.    uchar i , j,temp;
  134.    temp=y;
  135.    if( bit_flag )
  136.    {   
  137.       for( i=0; i<2; i++ )
  138.       {
  139.          x+=i;
  140.              y=temp;
  141.          for( j=0;j<8;j++ )
  142.          {
  143.             Lcd_Set_X_Y( x, y ); y++;
  144.             Lcd_Write_Byte( point[ i*8 + j] );  
  145.          }
  146.       }
  147.    }
  148.    else
  149.    {
  150.       for( i = 0; i < 2; i++ )
  151.       {
  152.          x += i;
  153.          y = temp;
  154.          for( j = 0; j < 8; j++ )
  155.          {
  156.             Lcd_Set_X_Y( x, y ); y++;
  157.             Lcd_Write_Byte( ~point[ i * 8 + j ] );
  158.          }
  159.       }
  160.    }
  161. }
  162. /****************************************************************************
  163. * 名称:Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
  164. * 功能:显示16*16字符(汉字)      
  165. * 入口参数:x y data
  166. * 出口参数:无
  167. *说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示
  168. ****************************************************************************/
  169. void Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
  170. {
  171.    uchar i,j,temp ;
  172.    temp=y;
  173.    if( bit_flag )
  174.    {
  175.       for( i=0; i<2; i++ )
  176.       {
  177.          x+=i;
  178.              y=temp;
  179.          for( j=0;j<16;j++ )
  180.          {
  181.             Lcd_Set_X_Y( x, y ); y++;
  182.             Lcd_Write_Byte( point[ i*16 + j] );  
  183.          }
  184.       }
  185.    }
  186.    else
  187.    {
  188.       for( i = 0; i<2; i++ )
  189.       {
  190.          x += i;
  191.          y = temp;
  192.          for( j = 0; j < 16; j++ )
  193.          {
  194.             Lcd_Set_X_Y( x, y ); y++;
  195.             Lcd_Write_Byte( ~ point[ i * 16 + j ] );
  196.          }
  197.       }
  198.    }
  199. }
  200. /****************************************************************************
  201. * 名称:Lcd_Clear(void)
  202. * 功能:清屏        
  203. * 入口参数:无
  204. * 出口参数:无
  205. ****************************************************************************/
  206. void Lcd_Clear()
  207. {
  208.    uchar i,j;
  209.    cs1=1;cs2=1;
  210.    for(i=0;i<8;i++)
  211.    {
  212.       Lcd_Set_X( i );
  213.       Lcd_Set_Y( 0 );
  214.       for(j=0;j<64;j++)
  215.          Lcd_Write_Byte(0x00);
  216.    }
  217. }
  218. /*******************************************************************************************
  219. * 函数名称:Lcd_Initial()
  220. * 功    能:初始化LCD
  221. * 入口参数:无
  222. * 出口参数:无
  223. *********************************************************************************************/
  224. void Lcd_Initial()
  225. {  
  226.    Lcd_Display_Off();
  227.    Lcd_Write_Command(0xb8);     //Page_Add
  228.    Lcd_Write_Command(0x40);     //Col_Add
  229.    Lcd_Write_Command(0xc0);     //Start_Line
  230.    Lcd_Display_On();
  231.    Lcd_Clear();
  232. }

  233. /****************************************************************************
  234. * 名称:Lcd_Time(uchar * clock_time )
  235. * 功能:显示时间      
  236. * 入口参数:无
  237. * 出口参数:无                 
  238. * 说明    : 时间数组 BCD 码形式
  239. ****************************************************************************/
  240. void Lcd_Time(uchar * clock_time )
  241. {
  242.    uchar i=0;
  243.    //显示   "hour时min分sec秒"                                            
  244.    i= * clock_time >> 4;
  245.    Lcd_Character_16X8( 1, 2, 80, letter_logo[i]);    //显示   sec的高位
  246.    i= * clock_time & 0x0f;
  247.    Lcd_Character_16X8( 1, 2, 88, letter_logo[i]);    //显示   sec的低位
  248.    Lcd_Character_16X16( 1, 2, 96 , time_logo[2]);  //显示   秒

  249.    clock_time ++;
  250.    i= *  clock_time >> 4;
  251.    Lcd_Character_16X8( 1, 2, 48, letter_logo[i]);    //显示   min的高位
  252.    i= * clock_time & 0x0f;
  253.    Lcd_Character_16X8( 1, 2, 56, letter_logo[i]);   //显示   min的低位
  254.    Lcd_Character_16X16( 1, 2, 64 , time_logo[1]);  //显示   分

  255.    clock_time ++;
  256.    i= * clock_time >> 4;
  257.    Lcd_Character_16X8( 1, 2, 16 , letter_logo[i]);    //显示   hour的高位
  258.    i= * clock_time & 0x0f;
  259.    Lcd_Character_16X8( 1, 2, 24 , letter_logo[i]);    //显示   hour的低位
  260.    Lcd_Character_16X16( 1, 2, 32 , time_logo[0]);  //显示   分         
  261. }
  262. /****************************************************************************
  263. * 名称:Lcd_Data(uchar * clock_time )
  264. * 功能:显示日期      
  265. * 入口参数:无
  266. * 出口参数:无                 
  267. * 说明    : 时间数组 BCD 码形式
  268. ****************************************************************************/
  269. void Lcd_Data(uchar * clock_time )
  270. {
  271.    uchar i=0;
  272.    clock_time += 3;

  273.    //显示   "year 年 month 月 day 日"                                                  
  274.    i= * clock_time >> 4;
  275.    Lcd_Character_16X8( 1, 0, 88, letter_logo[i]);  //显示   day的高位
  276.    i= * clock_time & 0x0f;
  277.    Lcd_Character_16X8( 1, 0, 96, letter_logo[i]);  //显示   day的低位  
  278.    Lcd_Character_16X16( 1, 0, 104, data_logo[2]); //显示   日
  279.    
  280.    clock_time ++;
  281.    i= * clock_time >> 4 ;
  282.    Lcd_Character_16X8( 1, 0, 56, letter_logo[i]);  //显示   month的高位
  283.    i= * clock_time & 0x0f;
  284.    Lcd_Character_16X8( 1, 0, 64, letter_logo[i]); //显示   month的低位
  285.    Lcd_Character_16X16( 1, 0, 72, data_logo[1]);   //显示   月
  286.    
  287.    clock_time ++ ;   
  288.    i= * clock_time >>  4;
  289.    Lcd_Character_16X8( 1, 0, 24 , letter_logo[i]); //显示   year的高位
  290.    i= * clock_time & 0x0f;
  291.    Lcd_Character_16X8( 1, 0, 32 , letter_logo[i]); //显示   year的低位
  292.    Lcd_Character_16X16( 1, 0, 40, data_logo[0]);   //显示   年
  293.    Lcd_Character_16X8(1,0,8,letter_logo[2]);
  294.    Lcd_Character_16X8(1,0,16,letter_logo[0]);
  295. }
  296. /****************************************************************************
  297. * 名称:Lcd_Data(uchar * clock_time )
  298. * 功能:显示日期      
  299. * 入口参数:无
  300. * 出口参数:无                 
  301. * 说明    : 时间数组 BCD 码形式
  302. ****************************************************************************/
  303. void Lcd_Week( uchar week )
  304. {  
  305.    Lcd_Character_16X16( 1, 6, 0,  week_logo[7] ); //星
  306.    Lcd_Character_16X16( 1, 6, 16, week_logo[8] ); //期
  307.    Lcd_Character_16X16( 1, 6, 32, week_logo[  week & 0x0f ] );
  308. }
  309. /******************************************************************************
  310. * 函数名称: Lcd_Clock( uchar *clock_time )
  311. * 功能: 显示时钟
  312. * 入口参数: 时钟地址
  313. * 出口参数: 无
  314. ********************************************************************************/
  315. void Lcd_Clock( uchar * clock_time )
  316. {
  317.    Lcd_Data( clock_time ); //显示日期
  318.    Lcd_Time( clock_time ); //显示时间
  319. }
  320. /******************************************************************************
  321. * 名称: void Lcd_Lunar_Calendar( uchar * lunch_calendar )
  322. * 功能: 显示农历
  323. * 入口参数: 农历指针
  324. * 出口参数: 无
  325. *******************************************************************************/
  326. void Lcd_Lunar_Calendar( uchar * lunar_canlendar )
  327. {
  328.    uint i,j,k;
  329.   //农历
  330.   // Lcd_Character_16X8(1,4,0,letter_logo[11]);
  331.   // Lcd_Character_16X8(1,4,24,letter_logo[11]);  

  332.    i= * lunar_canlendar >>  4;
  333.    j= * lunar_canlendar & 0x0f;
  334.    k=i*10+j;
  335.    if(k/10==01 && k%10>0)
  336.    Lcd_Character_16X16(1,4,96,ucLunar[10]);
  337.    else if(k/10==02 && k%10>0)
  338.    Lcd_Character_16X16(1,4,96,ucLunar[19]);
  339.    else
  340.    Lcd_Character_16X16(1,4,96,ucLunar[k/10]);

  341.    if(!(k%10))
  342.    Lcd_Character_16X16(1,4,112,ucLunar[10]);
  343.    else
  344.    Lcd_Character_16X16(1,4,112,ucLunar[k%10]);


  345. //   Lcd_Character_16X16( 1, 4, 96, ucLunar[i] ); //农历天的高位
  346. //   i= * lunar_canlendar & 0x0f;
  347. //   Lcd_Character_16X16( 1, 4, 112, ucLunar[i] ); //农历天的低位
  348. // Lcd_Character_16X8( 1, 4, 88, letter_logo[11] ); //-

  349.    lunar_canlendar ++;
  350.    i= * lunar_canlendar >>  4;
  351.    j= * lunar_canlendar & 0x0f;
  352.    k=i*10+j;
  353.    Lcd_Character_16X16( 1, 4, 80, data_logo[1] );// 显示‘月’
  354.    if(k==1)
  355.    Lcd_Character_16X16( 1, 4, 64, ucLunar[15] );
  356.    else if(k==11)
  357.    Lcd_Character_16X16( 1, 4, 64, ucLunar[16] );
  358.    else if(k==12)
  359.    Lcd_Character_16X16( 1, 4, 64, ucLunar[17] );
  360.    else
  361.    Lcd_Character_16X16( 1, 4, 64, ucLunar[k] );

  362.    
  363.   
  364.    lunar_canlendar ++;

  365.    i= * lunar_canlendar >>  4;
  366.    j= * lunar_canlendar & 0x0f;
  367.    k=i*10+j;
  368.    Lcd_Character_16X16( 1, 4, 0, TianGan[(uint)(2000+k)%10] ); //农历年的天干
  369.       i= * lunar_canlendar & 0x0f;
  370.    Lcd_Character_16X16( 1, 4, 16, DiZhi[(uint)(2000+k)%12] ); //农历年的地支

  371.    Lcd_Character_16X16( 1, 4, 32, SX[(uint)(2000+k)%12] );         //生肖年
  372.    Lcd_Character_16X16( 1, 4, 48, data_logo[0] );// 显示‘年’
  373. }
  374. /*******************************************************************************
  375. * 名称: Lcd_Temperature( uchar * temperture )
  376. * 功能: 显示温度
  377. * 入口参数: 温度
  378. * 出口参数: 无
  379. *********************************************************************************/
  380. void Lcd_Temperture( uchar * temperature )
  381. {
  382.   uchar temp;

  383.   uchar sign=0;    //定义符号标志位,revised by iam3i

  384.   if(temperature[1]>127)
  385.   {
  386.   sign=1;
  387.   temperature[0]=(~temperature[0]+1);
  388.   if((temperature[0])>=0xff)
  389.   temperature[1]=(~temperature[1])+1;
  390.   else
  391.   temperature[1]=~temperature[1];
  392.   }
  393.   else
  394.   sign=0;
  395.   switch( * temperature & 0x0f )                    //查表 精确到 0.1  °C
  396.    {
  397.       case 0x00: temp = 0; break;
  398.       case 0x01: temp = 1; break;
  399.       case 0x02: temp = 1; break;
  400.       case 0x03: temp = 2; break;
  401.       case 0x04: temp = 2; break;
  402.       case 0x05: temp = 3; break;
  403.       case 0x06: temp = 4; break;
  404.       case 0x07: temp = 4; break;
  405.       case 0x08: temp = 5; break;
  406.       case 0x09: temp = 6; break;
  407.       case 0x0a: temp = 6; break;
  408.       case 0x0b: temp = 7; break;
  409.       case 0x0c: temp = 8; break;
  410.       case 0x0d: temp = 8; break;
  411.       case 0x0e: temp = 9; break;
  412.       case 0x0f: temp = 9; break;
  413.       default:  break;
  414.    }

  415.    Lcd_Character_16X8( 1, 6, 56, letter_logo[12] );
  416.    Lcd_Character_16X8( 1, 6, 64, letter_logo[10] );
  417.    Lcd_Character_16X8( 1, 6, 120, temperture_logo[2] );    //   C
  418.    Lcd_Character_16X8( 1, 6, 112, temperture_logo[1] );    //   °
  419.    Lcd_Character_16X8( 1, 6, 104, letter_logo[temp] );  //  小数位
  420.    Lcd_Character_16X8( 1, 6, 96,  temperture_logo[0] );     //  .
  421.    temp = ( * temperature ) >> 4;
  422.    temperature++;
  423.    temp |= ( * temperature ) << 4;
  424.    Lcd_Character_16X8( 1, 6, 88, letter_logo[temp% 10 ] ); //个位
  425.    if (temp/10==0 )
  426.    Lcd_Character_16X8(1,6,80,letter_logo[13]);        //十位为0,不显示
  427.    else
  428.    Lcd_Character_16X8( 1, 6, 80, letter_logo[temp/10 ] );  //十位,该程序不能正确显示大于99.9度的温度
  429.   
  430.    if(sign==1)
  431.    Lcd_Character_16X8(1,6,72,letter_logo[11]);
  432.    else
  433.    Lcd_Character_16X8(1,6,72,letter_logo[13]);
  434.    
  435. /*   if( temp >= 30 )
  436.       Lcd_Character_16X16( 1, 6, 112, sensor_inducator_logo[0] );  //大于30度显示图形
  437.    else
  438.    {
  439.       if( temp < 20 )
  440.              Lcd_Character_16X16( 1, 6, 112, sensor_inducator_logo[2] );  //小于20度显示图形
  441.           else
  442.              Lcd_Character_16X16( 1, 6, 112, sensor_inducator_logo[1] );  //大于20度小于30度显示图形
  443.    }
  444. */
  445. }

  446. /***************************************************************************
  447. *名称    :Lcd_Set_Clock( uchar bit_flag, uchar *point )
  448. *功能    :显示调整的时间
  449. *入口参数:指针
  450. *出口参数:无
  451. *说明    :
  452. ****************************************************************************/
  453. void Lcd_Set_Clock( uchar temp, uchar *point )
  454. {
  455.    bit year_flag = 1;
  456.    bit month_flag = 1;
  457.    bit day_flag = 1;
  458.    bit hour_flag =1;
  459.    bit minute_flag = 1;
  460.    bit second_flag = 1;
  461.    uchar i;
  462.    if( temp == 1 ) //滚动到 second
  463.      second_flag = 0;
  464.    if( temp == 2 ) //滚动到 minute
  465.       minute_flag = 0;
  466.    if( temp == 3 ) //滚动到 hour
  467.       hour_flag = 0;
  468.    if( temp == 4 ) //滚动到 day
  469.       day_flag = 0;
  470.    if( temp == 5 ) //滚动到 month
  471.       month_flag = 0;
  472.    if( temp == 6 ) //滚动到 year
  473.       year_flag = 0;
  474.    //日期
  475.    Lcd_Character_16X16( 1, 2, 0 , data_time_logo[0] );
  476.    Lcd_Character_16X16( 1, 2, 16, data_time_logo[1] );
  477.    point += 5;    //指向年
  478.    //year
  479.    i = *point >> 4;  
  480.    Lcd_Character_16X8( year_flag, 2, 40, letter_logo[i] );
  481.    i = *point & 0x0f;
  482.    Lcd_Character_16X8( year_flag, 2, 48, letter_logo[i] );
  483.    //-
  484.    Lcd_Character_16X8( 1, 2, 56, letter_logo[11] );
  485.    point --;   //指向月
  486.    //month
  487.    i = *point >>4;
  488.    Lcd_Character_16X8( month_flag, 2, 64, letter_logo[i] );
  489.    i = *point & 0x0f;
  490.    Lcd_Character_16X8( month_flag, 2, 72, letter_logo[i] );      
  491.    //-
  492.    Lcd_Character_16X8( 1, 2, 80, letter_logo[11] );
  493.    point --;   //指向日
  494.    //day   
  495.    i = *point >>4;
  496.    Lcd_Character_16X8( day_flag, 2, 88, letter_logo[i] );
  497.    i = *point & 0x0f;
  498.    Lcd_Character_16X8( day_flag, 2, 96, letter_logo[i] );
  499.    //时间
  500.    Lcd_Character_16X16( 1, 4, 0, data_time_logo[2] );
  501.    Lcd_Character_16X16( 1, 4, 16, data_time_logo[3] );
  502.    point -- ; //指向时
  503.    //hour
  504.    i = *point >>4;
  505.    Lcd_Character_16X8( hour_flag, 4, 40, letter_logo[i] );
  506.    i = *point & 0x0f;
  507.    Lcd_Character_16X8( hour_flag, 4, 48, letter_logo[i] );   
  508.    //:
  509.    Lcd_Character_16X8( 1, 4, 56, letter_logo[10] );
  510.    point -- ;  //指向分
  511.    //minnute
  512.    i = *point >>4;
  513.    Lcd_Character_16X8( minute_flag, 4, 64, letter_logo[i] );
  514.    i = *point & 0xff;
  515.    Lcd_Character_16X8( minute_flag, 4, 72, letter_logo[i] );
  516.    //:
  517.    Lcd_Character_16X8( 1, 4, 80, letter_logo[10] );
  518.    point --;   //指向秒
  519.    //second
  520.    i = *point >> 4;
  521.    Lcd_Character_16X8( second_flag, 4, 88, letter_logo[i] );
  522.    i = * point & 0x0f;
  523.    Lcd_Character_16X8( second_flag, 4, 96, letter_logo[i] );
  524. }
  525. /**************************************************************************************
  526. * 名称: Lcd_Function( uchar temp )
  527. * 功能: 滚动显示 时间设置 闹钟设置
  528. * 入口参数: 滚动位置
  529. * 出口参数: 无
  530. **************************************************************************************/
  531. void Lcd_Function( uchar temp )
  532. {
  533.    bit time_flag = 1;
  534.    bit alarm_flag = 1;
  535.    if( temp == 2 ) //滚动到 时间设置
  536.       time_flag = 0;
  537.    if( temp == 1 ) //滚动到 闹钟设置
  538.       alarm_flag = 0;
  539.    //时间设置
  540.    Lcd_Character_16X16( time_flag, 0, 0, function_logo[0] );
  541.    Lcd_Character_16X16( time_flag, 0, 16, function_logo[1] );
  542.    Lcd_Character_16X16( time_flag, 0, 32, function_logo[2] );
  543.    Lcd_Character_16X16( time_flag, 0, 48, function_logo[3] );
  544.    //闹钟设置
  545.    Lcd_Character_16X16( alarm_flag, 2, 0, function_logo[4] );
  546.    Lcd_Character_16X16( alarm_flag, 2, 16, function_logo[5] );
  547.    Lcd_Character_16X16( alarm_flag, 2, 32, function_logo[6] );
  548.    Lcd_Character_16X16( alarm_flag, 2, 48, function_logo[7] );
  549. }
  550. /************************************************************************************
  551. * 名称: Lcd_Alarm( uchar * alarm_time )
  552. * 功能: 闹钟调整画面显示
  553. * 入口参数: 闹钟地址
  554. * 出口参数: 无
  555. ************************************************************************************/
  556. void Lcd_Alarm( uchar temp, uchar * alarm_time )
  557. {
  558.    uchar i;
  559.    bit hour_flag = 1;
  560.    bit minute_flag = 1;
  561.    if( temp == 1 )
  562.       minute_flag = 0;
  563.    if( temp == 2 )
  564.       hour_flag = 0;
  565.    Lcd_Character_16X16( 1, 0, 0, alarm_logo[0] ); //显示闹钟标志
  566.    // 小时:分钟
  567.    Lcd_Character_16X16( 1, 0, 16, alarm_logo[1] );
  568.    Lcd_Character_16X16( 1, 0, 32, alarm_logo[2] );
  569.    Lcd_Character_16X8( 1, 0, 48, letter_logo[10] );
  570.    Lcd_Character_16X16( 1, 0, 56, alarm_logo[3] );
  571.    Lcd_Character_16X16( 1, 0, 72, alarm_logo[4] );


  572.    i = ( *  ( alarm_time + 1 ) ) / 10;
  573.    Lcd_Character_16X8( hour_flag, 2, 32, letter_logo[i] ); //显示时的高位
  574.    i = ( * ( alarm_time + 1 )  ) % 10;
  575.    Lcd_Character_16X8( hour_flag, 2, 40, letter_logo[i] ); //显示时的低位
  576.    Lcd_Character_16X8( 1, 2, 48, letter_logo[10] ); //:

  577.    i = ( *  ( alarm_time ) ) / 10;
  578.    Lcd_Character_16X8( minute_flag, 2, 56, letter_logo[i] ); //显示分的高位
  579.    i = ( * ( alarm_time  ) ) % 10;
  580.    Lcd_Character_16X8( minute_flag, 2, 64, letter_logo[i] ); //显示分的低位
  581. }
  582. /********************************************************************************/
  583. #endif
复制代码
回复

使用道具 举报

7#
ID:706042 发表于 2020-4-9 19:11 | 只看该作者
  1. //sensor.h

  2. #ifndef _SENSOR
  3. #define _SENSOR
  4. /*************************************************************************/
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. /***************************DS18B20管脚配置*******************************/
  8. sbit dq = P2 ^ 1;
  9. /********************************************************************************************
  10. * 函数名称:Sensor_Delay(uint16 count)//延时函数
  11. * 功    能:DS18B20软件延时专用
  12. * 入口参数:count    延时参数,值越大,延时越长
  13. * 出口参数:无
  14. *********************************************************************************************/
  15. void Sensor_Delay(uchar count)//延时函数
  16. {
  17.   while(count--);
  18. }
  19. /********************************************************************************************
  20. * 函数名称:Sensor_Read_Byte()
  21. * 功    能:从DS18B20读一个字节
  22. * 入口参数:无
  23. * 出口参数:从DS18B20读出的一个字节
  24. *********************************************************************************************/
  25. uchar Sensor_Read_Byte(void)
  26. {
  27.   uchar i = 0;
  28.   uchar temp = 0;
  29.   for(i=8;i>0;i--)
  30.   {
  31.      dq = 0; // 给脉冲信号
  32.      temp >>= 1;
  33.      dq = 1; // 给脉冲信号
  34.      if(dq)
  35.         temp |= 0x80;
  36.      Sensor_Delay(20);
  37.   }
  38.   return (temp);
  39. }
  40. /********************************************************************************************
  41. * 函数名称:Sensor_Write_Byte()
  42. * 功    能:向DS18B20写一个字节
  43. * 入口参数:temp  要写入DS18B20的一字节数据
  44. * 出口参数:无
  45. *********************************************************************************************/
  46. void Sensor_Write_Byte(uchar temp)
  47. {
  48.   uchar i = 0;
  49.   for(i=8;i>0;i--)
  50.   {
  51.      dq = 0;
  52.      dq = temp&0x01;
  53.      Sensor_Delay(20);
  54.      dq = 1;
  55.      temp>>=1;
  56.    }
  57. }
  58. /********************************************************************************************
  59. * 函数名称:DS18B20_Init()
  60. * 功    能:DS18B20初始化
  61. * 入口参数:无
  62. * 出口参数:返回值为1则初始化成功
  63. *           返回值为0则初始化失败
  64. *********************************************************************************************/
  65. uchar Sensor_Initial(void)
  66. {
  67.     uchar i = 0;
  68.     dq = 1;                                     // DQ复位
  69.     Sensor_Delay(1);                            // 稍做延时
  70.     dq = 0;                                     // 单片机将DQ拉低
  71.     Sensor_Delay(100);                           // 精确延时,大于480us
  72.     dq = 1;                                     // 拉高总线
  73.     Sensor_Delay(6);                           // 稍做延时后
  74.     i = dq;                                     // 若x=0则初始化成功,若x=1则初始化失败
  75.     Sensor_Delay(130);
  76.     return (~i);
  77. }

  78. /********************************************************************************************
  79. * 函数名称:Sensor_Fresh( temperature  )
  80. * 功    能:读取并显示温度
  81. * 入口参数:无
  82. * 出口参数:无
  83. *********************************************************************************************/
  84. void Sensor_Fresh(uchar * temperature )
  85. {
  86.    Sensor_Initial();
  87.    Sensor_Write_Byte( 0xCC );                      // 跳过读序号列号的操作
  88.    Sensor_Write_Byte( 0x44 );                      // 启动温度转换
  89.    Sensor_Initial();
  90.    Sensor_Write_Byte( 0xCC );                      // 跳过读序号列号的操作
  91.    Sensor_Write_Byte( 0xBE );                      // 读取温度寄存器
  92.    temperature [0] = Sensor_Read_Byte();                        //低位
  93.    temperature [1] = Sensor_Read_Byte();                   //高位
  94. }/********************************************************************************/
  95. #endif
复制代码
回复

使用道具 举报

8#
ID:706042 发表于 2020-4-9 19:11 | 只看该作者
  1. //reg52.h

  2. /*--------------------------------------------------------------------------

  3. REG52.H



  4. Header file for generic 80C52 and 80C32 microcontroller.

  5. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.

  6. All rights reserved.

  7. --------------------------------------------------------------------------*/



  8. #ifndef __REG52_H__

  9. #define __REG52_H__



  10. /* BYTE Registers */

  11. sfr P0    = 0x80;

  12. sfr P1    = 0x90;

  13. sfr P2    = 0xA0;

  14. sfr P3    = 0xB0;

  15. sfr PSW   = 0xD0;

  16. sfr ACC   = 0xE0;

  17. sfr B     = 0xF0;

  18. sfr SP    = 0x81;

  19. sfr DPL   = 0x82;

  20. sfr DPH    = 0x83;

  21. sfr PCON = 0x87;

  22. sfr TCON = 0x88;

  23. sfr TMOD = 0x89;

  24. sfr TL0   = 0x8A;

  25. sfr TL1   = 0x8B;

  26. sfr TH0   = 0x8C;

  27. sfr TH1   = 0x8D;

  28. sfr IE    = 0xA8;

  29. sfr IP    = 0xB8;

  30. sfr SCON = 0x98;

  31. sfr SBUF = 0x99;



  32. /* 8052 Extensions */

  33. sfr T2CON = 0xC8;

  34. sfr RCAP2L = 0xCA;

  35. sfr RCAP2H = 0xCB;

  36. sfr TL2    = 0xCC;

  37. sfr TH2    = 0xCD;





  38. /* BIT Registers */

  39. /* PSW */

  40. sbit CY    = PSW^7;

  41. sbit AC    = PSW^6;

  42. sbit F0    = PSW^5;

  43. sbit RS1   = PSW^4;

  44. sbit RS0   = PSW^3;

  45. sbit OV    = PSW^2;

  46. sbit P     = PSW^0; //8052 only



  47. /* TCON */

  48. sbit TF1   = TCON^7;

  49. sbit TR1   = TCON^6;

  50. sbit TF0   = TCON^5;

  51. sbit TR0   = TCON^4;

  52. sbit IE1   = TCON^3;

  53. sbit IT1   = TCON^2;

  54. sbit IE0   = TCON^1;

  55. sbit IT0   = TCON^0;



  56. /* IE */

  57. sbit EA    = IE^7;

  58. sbit ET2   = IE^5; //8052 only

  59. sbit ES    = IE^4;

  60. sbit ET1   = IE^3;

  61. sbit EX1   = IE^2;

  62. sbit ET0   = IE^1;

  63. sbit EX0   = IE^0;



  64. /* IP */

  65. sbit PT2   = IP^5;

  66. sbit PS    = IP^4;

  67. sbit PT1   = IP^3;

  68. sbit PX1   = IP^2;

  69. sbit PT0   = IP^1;

  70. sbit PX0   = IP^0;



  71. /* P3 */

  72. sbit RD    = P3^7;

  73. sbit WR    = P3^6;

  74. sbit T1    = P3^5;

  75. sbit T0    = P3^4;

  76. sbit INT1 = P3^3;

  77. sbit INT0 = P3^2;

  78. sbit TXD   = P3^1;

  79. sbit RXD   = P3^0;



  80. /* SCON */

  81. sbit SM0   = SCON^7;

  82. sbit SM1   = SCON^6;

  83. sbit SM2   = SCON^5;

  84. sbit REN   = SCON^4;

  85. sbit TB8    = SCON^3;

  86. sbit RB8   = SCON^2;

  87. sbit TI    = SCON^1;

  88. sbit RI    = SCON^0;



  89. /* P1 */

  90. sbit T2EX = P1^1; // 8052 only

  91. sbit T2    = P1^0; // 8052 only

  92.             

  93. /* T2CON */

  94. sbit TF2    = T2CON^7;

  95. sbit EXF2   = T2CON^6;

  96. sbit RCLK   = T2CON^5;

  97. sbit TCLK   = T2CON^4;

  98. sbit EXEN2 = T2CON^3;

  99. sbit TR2    = T2CON^2;

  100. sbit C_T2   = T2CON^1;

  101. sbit CP_RL2 = T2CON^0;



  102. #endif
复制代码
回复

使用道具 举报

9#
ID:706042 发表于 2020-4-9 20:29 | 只看该作者
救救孩子吧
回复

使用道具 举报

10#
ID:648281 发表于 2020-4-9 20:56 | 只看该作者
你好!
检测一下时钟芯片端口定义的对吗
回复

使用道具 举报

11#
ID:706042 发表于 2020-4-9 22:16 | 只看该作者
51hei**1140 发表于 2020-4-9 20:56
你好!
检测一下时钟芯片端口定义的对吗

你好你好,我检查了一下,端口的定义没啥问题啊
回复

使用道具 举报

12#
ID:706042 发表于 2020-4-10 11:35 | 只看该作者
运行debug的时候发现我的keil存在2K限制,但是我把这个问题解决以后发现还是搞不定这个乱码,看来两者没有啥必要的关联。。。。
回复

使用道具 举报

13#
ID:155507 发表于 2020-4-10 14:30 | 只看该作者
如果我没有猜错你是用keil编译的吧

你这种情况很有可能是,没有打汉字内码0xfd问题的补丁,导致只要包含有包含0xFD内码的汉字均不能正常显示,这是keil的一个臭名昭著的Bug, keil是德国的,对汉字的兼容不太好需要打这个补丁才能正常显示.

文件下载:http://www.51hei.com/ziliao/file/0xfd.rar

文件说明:keil c51在编译的时候会将0xfd的字符(有些汉字含该字符的内码)过滤, 而导致程序出错.特别是在做液晶汉字显示时. 针对这个bug.编写了这个补丁. 请下载之后放到你的keil\c51\bin 目录里,运行这个程序点击start.就可以了.


http://www.51hei.com/bbs/dpj-5399-1.html
回复

使用道具 举报

14#
ID:584814 发表于 2020-4-10 22:03 | 只看该作者
个别乱码是这补丁问题,全屏乱码就是程序问题了。]程序问题未必是逻辑问题,可能是时序的问题,这个把程序读一万遍也没可能找出来的,要看器件说明书。
回复

使用道具 举报

15#
ID:584814 发表于 2020-4-10 22:06 | 只看该作者
目测仿真图是程序不能正确读出时钟造成的,建议先初化时钟或先自己定主时钟参数调试。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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