利用单片机实现一个电子万年历:
★基本功能:
(1)当前的年、月、日、时、分、秒显示
(2)设置年、月、日、时、分、秒
(3)AM、PM设置与显示
(4)农历年月日、二十四节气显示
(5)闹钟时间设置,闹钟时间到进行声光报警提示
(6)温湿度检测与显示
★高级功能:
(1)闹钟音乐选择(采用TF卡或录音芯片存储音乐数据)
(2)手机通过蓝牙或WiFi网络连接该万年历,通过手机APP可以完成基本功能中的所有设置功能
(3)通过编写Android手机程序获得网上天气预报数据,并将该数据通过蓝牙或WiFi网络传递给音乐万年历,万年历可以完成天气信息显示
(4)火灾检测与报警,报警形势可以是短信。
仿真部分
proteus仿真电路图:
仿真全部代码:
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define ushort unsigned short
#define LCD_data P0
#define DS1302_SECOND 0x80 //用于计算ds1302RAM地址
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_WEEK 0x8A
#define DS1302_DAY 0x86
#define DS1302_MONTH 0x88
#define DS1302_YEAR 0x8C
sbit LCD_EN=P3^3; //定义LCD12864引脚位
sbit LCD_RW=P3^4;
sbit LCD_RS=P3^5;
sbit CS1=P3^6;
sbit CS2=P3^7;
sbit DS1302_CLK = P1^1; //实时时钟时钟线引脚
sbit DS1302_IO = P1^2; //实时时钟数据线引脚
sbit DS1302_RST = P1^0; //实时时钟复位线引脚
sbit BUZZER_LED=P1^3;
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
sbit DHT11_IO=P1^4; //定义DHT11数据线
sbit Beep=P1^5;
//闹钟音谱
uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0};
uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};
//按键键值表
uchar code KEY_TABLE[]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,0x14,
0x24,0x44,0x84,0x18,0x28,0x48,0x88};
//按键值表中前四位与按键所在列有关,后四位与按键所在行有关
//四位二进制数中为1的那一位所在的位置就是按键所在的行或列的位置
//比如按键0x24即0010 0100表示在第二行第一列;
//而0x82即1000 0010表示在第一行第三列
uchar code Chinese[]={
/*-- 文字: 公 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,0x00,
0x01,0x00,0x20,0x70,0x28,0x26,0x21,0x20,0x20,0x24,0x38,0x60,0x00,0x01,0x01,0x00,
/*-- 文字: 历 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x42,0xC2,0x02,0x00,
0x80,0x60,0x1F,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,
/*-- 文字: 星 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,0x00,
0x00,0x44,0x42,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x41,0x40,0x00,0x00,
/*-- 文字: 期 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
0x88,0x48,0x2F,0x09,0x09,0x19,0xAF,0x48,0x30,0x0F,0x02,0x42,0x82,0x7F,0x00,0x00,
/*-- 文字: 一 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 二 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
/*-- 文字: 三 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
/*-- 文字: 四 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,
/*-- 文字: 五 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,
0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,
/*-- 文字: 六 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00,
/*-- 文字: 日 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,
/*-- 天干 --*/
/*-- 文字: 甲 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,
0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,
/*-- 文字: 乙 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x02,0x02,0x02,0x82,0x42,0x22,0x12,0x0A,0x06,0x02,0x00,0x00,0x00,0x00,
0x00,0x00,0x38,0x46,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
/*-- 文字: 丙 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xE2,0x22,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,
0x00,0xFF,0x00,0x00,0x08,0x04,0x03,0x00,0x01,0x02,0x0C,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 丁 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 戊 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x7F,0x88,0x08,0x09,0x0A,0xC8,0x08,0x00,
0x80,0x60,0x1F,0x00,0x80,0x80,0x40,0x40,0x20,0x13,0x0C,0x14,0x23,0x40,0xF8,0x00,
/*-- 文字: 己 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
/*-- 文字: 庚 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFC,0x04,0x24,0x24,0x24,0x25,0xF6,0x24,0x24,0x24,0xE4,0x04,0x04,0x00,
0x40,0x30,0x8F,0x81,0x49,0x49,0x29,0x19,0x0F,0x19,0x29,0x49,0x4F,0x81,0x81,0x00,
/*-- 文字: 辛 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x40,0x44,0x44,0x54,0x64,0x45,0xC6,0x44,0x64,0x54,0x44,0x44,0x40,0x40,0x00,
0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,
/*-- 文字: 壬 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x80,0x84,0x84,0x84,0x84,0x84,0xFC,0x82,0x82,0x82,0x83,0x82,0x80,0x80,0x00,
0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
/*-- 文字: 癸 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x8A,0x52,0x22,0x92,0x8A,0x86,0x80,0x83,0x8C,0x92,0x31,0x48,0x84,0x80,0x00,
0x00,0x84,0x84,0x44,0x44,0x24,0x14,0x0F,0x14,0x14,0x24,0x44,0x84,0x04,0x00,0x00,
/*-- 地支 --*/
/*-- 文字: 子 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 丑 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,
/*-- 文字: 寅 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x04,0xD4,0x54,0x54,0x55,0xF6,0x54,0x54,0x54,0xD4,0x04,0x14,0x0C,0x00,
0x00,0x00,0x00,0x9F,0x52,0x32,0x12,0x1F,0x12,0x32,0x52,0x9F,0x00,0x00,0x00,0x00,
/*-- 文字: 卯 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x02,0x02,0x01,0xFD,0x00,0x00,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0x07,0x84,0x44,0x32,0x0F,0x00,0x00,0xFF,0x00,0x04,0x08,0x04,0x03,0x00,0x00,
/*-- 文字: 辰 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x82,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x82,0x00,0x00,
0x40,0x30,0x0F,0x00,0x00,0xFF,0x40,0x20,0x03,0x04,0x08,0x14,0x22,0x40,0x40,0x00,
/*-- 文字: 巳 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
/*-- 文字: 午 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x40,0x20,0x18,0x0F,0x08,0x08,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
/*-- 文字: 未 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x80,0x88,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0x88,0x80,0x80,0x00,
0x20,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x01,0x02,0x04,0x08,0x10,0x20,0x20,0x00,
/*-- 文字: 申 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,
0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x1F,0x00,0x00,0x00,
/*-- 文字: 酉 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xF2,0x12,0x12,0x92,0x7E,0x12,0x12,0x12,0xFE,0x12,0x12,0x12,0xF2,0x02,0x00,
0x00,0xFF,0x4A,0x49,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0xFF,0x00,0x00,
/*-- 文字: 戌 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x08,0x00,
0x80,0x60,0x1F,0x01,0x01,0x01,0x01,0x80,0x40,0x21,0x16,0x18,0x26,0x41,0xF8,0x00,
/*-- 文字: 亥 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x08,0x08,0x88,0x48,0x28,0x19,0x0A,0x08,0x88,0x48,0x08,0x08,0x08,0x00,0x00,
0x00,0x90,0x91,0x89,0x49,0x45,0x25,0x23,0x11,0x08,0x14,0x22,0x41,0x80,0x00,0x00,
/*-- 文字: 年 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x18,0xC7,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0x04,0x00,0x00,
0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
/*-- 文字: 月 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,
0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,
/*-- 文字: 闰 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xF8,0x01,0x26,0x20,0x20,0x22,0xE2,0x22,0x22,0x22,0x22,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x10,0x11,0x11,0x11,0x1F,0x11,0x11,0x11,0x50,0x80,0x7F,0x00,0x00,
/*-- 文字: 正 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,
0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
/*-- 文字: 初 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x08,0x89,0xEA,0x18,0x88,0x00,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x02,0x01,0x00,0xFF,0x01,0x86,0x40,0x20,0x18,0x07,0x40,0x80,0x40,0x3F,0x00,0x00,
/*-- 文字: 廿 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x00,
0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,
/*-- 文字: 一 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 二 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
/*-- 文字: 三 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
/*-- 文字: 四 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,
/*-- 文字: 五 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,
0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,
/*-- 文字: 六 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00,
/*-- 文字: 七 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x80,0x80,0x80,0x80,0x40,0xFF,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
/*-- 文字: 八 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7E,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x00,
/*-- 文字: 九 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x78,0x00,
/*-- 文字: 十 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 冬 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x10,0x08,0x94,0xA7,0x44,0x44,0x44,0xA4,0x94,0x0C,0x00,0x00,0x00,0x00,
0x02,0x02,0x01,0x01,0x20,0x24,0x24,0x44,0x48,0x88,0x10,0x01,0x01,0x02,0x02,0x00,
/*-- 文字: 腊 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x22,0x22,0xFE,0x40,0x48,0x48,0x7F,0x48,0x48,0x48,0x7F,0x48,0x48,0x00,
0x80,0x7F,0x02,0x82,0xFF,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,
/*-- 文字: 输 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x88,0x68,0x1F,0xC8,0x08,0x10,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,
0x09,0x19,0x09,0xFF,0x05,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00,
/*-- 文字: 入 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x80,0x00,
/*-- 文字: 日 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,
/*-- 文字: 期 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
0x88,0x48,0x2F,0x09,0x09,0x19,0xAF,0x48,0x30,0x0F,0x02,0x42,0x82,0x7F,0x00,0x00,
/*-- 文字: 时 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFC,0x84,0x84,0x84,0xFC,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,
0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x01,0x06,0x40,0x80,0x7F,0x00,0x00,0x00,
/*-- 文字: 间 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xF8,0x01,0x06,0x00,0xF0,0x12,0x12,0x12,0xF2,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x1F,0x11,0x11,0x11,0x1F,0x00,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 设 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E,0x82,0x82,0x82,0x9E,0xA0,0x20,0x20,0x00,
0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43,0x2C,0x10,0x28,0x46,0x41,0x80,0x80,0x00,
/*-- 文字: 置 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x17,0x15,0xD5,0x55,0x57,0x55,0x7D,0x55,0x57,0x55,0xD5,0x15,0x17,0x00,0x00,
0x40,0x40,0x40,0x7F,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7F,0x40,0x40,0x40,0x00,
/*-- 文字: 闹 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xF8,0x01,0x22,0x20,0x22,0x2A,0xF2,0x22,0x22,0x22,0x22,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x1F,0x01,0x01,0x7F,0x09,0x11,0x0F,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 钟 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x10,0x2C,0xE7,0x24,0x24,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,
0x01,0x01,0x01,0x7F,0x21,0x11,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00,
};
uchar code SolarTerms[]={
/*-- 文字: 小 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,
0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00,
/*-- 文字: 寒 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x44,0x54,0x54,0xFC,0x55,0x56,0x54,0xFC,0x54,0x54,0x44,0x14,0x0C,0x00,
0x11,0x11,0x09,0x05,0x03,0x21,0x25,0x45,0x49,0x91,0x03,0x05,0x09,0x11,0x11,0x00,
/*-- 文字: 大 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,
/*-- 文字: 寒 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x44,0x54,0x54,0xFC,0x55,0x56,0x54,0xFC,0x54,0x54,0x44,0x14,0x0C,0x00,
0x11,0x11,0x09,0x05,0x03,0x21,0x25,0x45,0x49,0x91,0x03,0x05,0x09,0x11,0x11,0x00,
/*-- 文字: 立 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x10,0x90,0x10,0x10,0x11,0x16,0x10,0x10,0x10,0xD0,0x10,0x10,0x00,0x00,
0x40,0x40,0x40,0x40,0x43,0x5C,0x40,0x40,0x50,0x4C,0x43,0x40,0x40,0x40,0x40,0x00,
/*-- 文字: 春 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x44,0x54,0x54,0xD4,0x54,0x74,0x5F,0x54,0x54,0xD4,0x54,0x54,0x44,0x40,0x00,
0x04,0x04,0x02,0x01,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x01,0x02,0x04,0x04,0x00,
/*-- 文字: 雨 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xE2,0x22,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,
0x00,0xFF,0x00,0x00,0x09,0x12,0x00,0x7F,0x00,0x09,0x12,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 水 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x20,0x20,0xA0,0x60,0x00,0xFF,0x60,0x80,0x40,0x20,0x18,0x00,0x00,0x00,
0x20,0x10,0x08,0x06,0x01,0x40,0x80,0x7F,0x00,0x01,0x02,0x04,0x08,0x10,0x10,0x00,
/*-- 文字: 惊 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xE0,0x00,0xFF,0x10,0x20,0x04,0xE4,0x24,0x25,0x26,0x24,0x24,0xE4,0x04,0x00,
0x01,0x00,0x00,0xFF,0x00,0x20,0x10,0x0D,0x41,0x81,0x7F,0x01,0x05,0x09,0x30,0x00,
/*-- 文字: 蛰 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x24,0xA4,0x24,0xFF,0x14,0x00,0x84,0x54,0x3F,0x44,0x04,0x7C,0x80,0xE0,0x00,0x00,
0x00,0x40,0xC1,0x5E,0x52,0x53,0x52,0x7F,0x52,0x52,0x52,0x5E,0x60,0xC1,0x00,0x00,
/*-- 文字: 春 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x44,0x54,0x54,0xD4,0x54,0x74,0x5F,0x54,0x54,0xD4,0x54,0x54,0x44,0x40,0x00,
0x04,0x04,0x02,0x01,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x01,0x02,0x04,0x04,0x00,
/*-- 文字: 分 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x40,0x20,0x90,0x88,0x86,0x80,0x80,0x80,0x83,0x8C,0x10,0x20,0x40,0x80,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 清 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0x44,0x54,0x54,0x54,0x7F,0x54,0x54,0x54,0x44,0x40,0x00,
0x04,0x04,0x7E,0x01,0x00,0x00,0xFF,0x15,0x15,0x15,0x55,0x95,0x7F,0x00,0x00,0x00,
/*-- 文字: 明 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFC,0x44,0x44,0x44,0xFC,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x00,0x0F,0x04,0x04,0x04,0x8F,0x40,0x30,0x0F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,
/*-- 文字: 谷 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x88,0x84,0x43,0x20,0x10,0x0C,0x10,0x20,0x41,0x82,0x84,0x08,0x00,0x00,
0x01,0x01,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x01,0x01,0x00,
/*-- 文字: 雨 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xE2,0x22,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,
0x00,0xFF,0x00,0x00,0x09,0x12,0x00,0x7F,0x00,0x09,0x12,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 立 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x10,0x90,0x10,0x10,0x11,0x16,0x10,0x10,0x10,0xD0,0x10,0x10,0x00,0x00,
0x40,0x40,0x40,0x40,0x43,0x5C,0x40,0x40,0x50,0x4C,0x43,0x40,0x40,0x40,0x40,0x00,
/*-- 文字: 夏 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00,
0x80,0x90,0x88,0x45,0x4F,0x55,0x25,0x25,0x25,0x55,0x4D,0x45,0x80,0x80,0x80,0x00,
/*-- 文字: 小 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,
0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00,
/*-- 文字: 满 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x60,0x02,0x8C,0x00,0x24,0x24,0x2F,0xE4,0x24,0x24,0xE4,0x2F,0x24,0x24,0x00,
0x04,0x04,0x7E,0x01,0x00,0xFF,0x11,0x09,0x07,0x19,0x09,0x07,0x49,0x91,0x7F,0x00,
/*-- 文字: 芒 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x84,0x84,0x84,0x84,0x9F,0x84,0xA4,0xC4,0x84,0x84,0x9F,0x84,0x84,0x84,0x84,0x00,
0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
/*-- 文字: 种 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,
0x08,0x06,0x01,0xFF,0x01,0x06,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00,
/*-- 文字: 夏 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x01,0x01,0xFD,0x55,0x55,0x57,0x55,0x55,0x55,0x55,0xFD,0x01,0x01,0x00,0x00,
0x80,0x90,0x88,0x45,0x4F,0x55,0x25,0x25,0x25,0x55,0x4D,0x45,0x80,0x80,0x80,0x00,
/*-- 文字: 至 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x42,0x62,0x52,0x4A,0x46,0x42,0x42,0x42,0x52,0x62,0xC2,0x02,0x00,0x00,
0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00,
/*-- 文字: 小 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,
0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00,
/*-- 文字: 暑 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x5F,0x55,0x55,0xF5,0x55,0x55,0x55,0x95,0x5F,0x00,0x00,0x00,0x00,
0x11,0x11,0x09,0x09,0xFD,0x55,0x57,0x57,0x55,0x55,0x55,0xFD,0x01,0x01,0x01,0x00,
/*-- 文字: 大 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,
/*-- 文字: 暑 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x5F,0x55,0x55,0xF5,0x55,0x55,0x55,0x95,0x5F,0x00,0x00,0x00,0x00,
0x11,0x11,0x09,0x09,0xFD,0x55,0x57,0x57,0x55,0x55,0x55,0xFD,0x01,0x01,0x01,0x00,
/*-- 文字: 立 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x10,0x90,0x10,0x10,0x11,0x16,0x10,0x10,0x10,0xD0,0x10,0x10,0x00,0x00,
0x40,0x40,0x40,0x40,0x43,0x5C,0x40,0x40,0x50,0x4C,0x43,0x40,0x40,0x40,0x40,0x00,
/*-- 文字: 秋 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x24,0x24,0xA4,0xFE,0x23,0x22,0x80,0x70,0x00,0xFF,0x00,0x80,0x40,0x30,0x00,0x00,
0x08,0x06,0x01,0xFF,0x01,0x86,0x40,0x30,0x0E,0x01,0x06,0x18,0x20,0x40,0x80,0x00,
/*-- 文字: 处 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x60,0x9F,0x08,0x08,0xF8,0x00,0x00,0xFF,0x10,0x20,0x40,0x80,0x00,0x00,
0x81,0x40,0x20,0x13,0x0C,0x13,0x20,0x20,0x40,0x5F,0x40,0x40,0x40,0x41,0x40,0x00,
/*-- 文字: 暑 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x5F,0x55,0x55,0xF5,0x55,0x55,0x55,0x95,0x5F,0x00,0x00,0x00,0x00,
0x11,0x11,0x09,0x09,0xFD,0x55,0x57,0x57,0x55,0x55,0x55,0xFD,0x01,0x01,0x01,0x00,
/*-- 文字: 白 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x08,0x08,0x0C,0x0A,0x09,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
0x00,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00,0x00,
/*-- 文字: 露 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0xD5,0x55,0x55,0x05,0x14,0x0C,0x00,
0x80,0xF7,0x85,0x7D,0x55,0x57,0x00,0x0A,0xE9,0xAB,0xA5,0xA5,0xEB,0x08,0x08,0x00,
/*-- 文字: 秋 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x24,0x24,0xA4,0xFE,0x23,0x22,0x80,0x70,0x00,0xFF,0x00,0x80,0x40,0x30,0x00,0x00,
0x08,0x06,0x01,0xFF,0x01,0x86,0x40,0x30,0x0E,0x01,0x06,0x18,0x20,0x40,0x80,0x00,
/*-- 文字: 分 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x80,0x40,0x20,0x90,0x88,0x86,0x80,0x80,0x80,0x83,0x8C,0x10,0x20,0x40,0x80,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 寒 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x44,0x54,0x54,0xFC,0x55,0x56,0x54,0xFC,0x54,0x54,0x44,0x14,0x0C,0x00,
0x11,0x11,0x09,0x05,0x03,0x21,0x25,0x45,0x49,0x91,0x03,0x05,0x09,0x11,0x11,0x00,
/*-- 文字: 露 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0xD5,0x55,0x55,0x05,0x14,0x0C,0x00,
0x80,0xF7,0x85,0x7D,0x55,0x57,0x00,0x0A,0xE9,0xAB,0xA5,0xA5,0xEB,0x08,0x08,0x00,
/*-- 文字: 霜 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x20,0x12,0x0A,0x06,0xFF,0x0A,0x12,0x00,0xFF,0x55,0x55,0x55,0x55,0xFF,0x00,0x00,
/*-- 文字: 降 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x02,0x22,0xDA,0x86,0x90,0x48,0x57,0x24,0xA4,0x54,0x4C,0x84,0x80,0x00,
0x00,0xFF,0x08,0x10,0x08,0x07,0x18,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x10,0x00,
/*-- 文字: 立 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x10,0x90,0x10,0x10,0x11,0x16,0x10,0x10,0x10,0xD0,0x10,0x10,0x00,0x00,
0x40,0x40,0x40,0x40,0x43,0x5C,0x40,0x40,0x50,0x4C,0x43,0x40,0x40,0x40,0x40,0x00,
/*-- 文字: 冬 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x10,0x08,0x94,0xA7,0x44,0x44,0x44,0xA4,0x94,0x0C,0x00,0x00,0x00,0x00,
0x02,0x02,0x01,0x01,0x20,0x24,0x24,0x44,0x48,0x88,0x10,0x01,0x01,0x02,0x02,0x00,
/*-- 文字: 小 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,
0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00,
/*-- 文字: 雪 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,
/*-- 文字: 大 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,
/*-- 文字: 雪 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,
/*-- 文字: 冬 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x10,0x08,0x94,0xA7,0x44,0x44,0x44,0xA4,0x94,0x0C,0x00,0x00,0x00,0x00,
0x02,0x02,0x01,0x01,0x20,0x24,0x24,0x44,0x48,0x88,0x10,0x01,0x01,0x02,0x02,0x00,
/*-- 文字: 至 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x42,0x62,0x52,0x4A,0x46,0x42,0x42,0x42,0x52,0x62,0xC2,0x02,0x00,0x00,
0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00,
};
uchar code Symbol[]={
/*-- 数字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-- 数字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,
/*-- 数字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-- 数字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,
/*-- 数字: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,
/*-- 数字: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 数字: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,
/*-- 数字: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,
/*-- 数字: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-- 数字: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,
/*-- 冒号: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
/*-- 杠号: - --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
/*-- 空格: --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: A --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,
/*-- 文字: P --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,
/*-- 文字: M --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x01,0x3E,0x01,0x3F,0x20,0x00,
/*-- 文字: R --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,
/*-- 文字: H --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,
/*-- 文字: C --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,
/*-- 文字: % --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00,
};
//天气预报表
uchar code TianQi[]={
/*-- 文字: 晴 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFC,0x84,0x84,0xFC,0x00,0x44,0x54,0x54,0x54,0x7F,0x54,0x54,0x54,0x44,0x00,
0x00,0x3F,0x10,0x10,0x3F,0x00,0x00,0xFF,0x15,0x15,0x15,0x55,0x95,0x7F,0x00,0x00,
/*-- 文字: 多 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x10,0x10,0x98,0xA4,0x47,0x44,0xA4,0x54,0x0C,0x04,0x00,0x00,0x00,0x00,
0x00,0x81,0x89,0x89,0x44,0x44,0x4A,0x31,0x21,0x11,0x09,0x05,0x03,0x00,0x00,0x00,
/*-- 文字: 云 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x40,0x42,0x42,0x42,0x42,0xC2,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00,
0x00,0x20,0x70,0x28,0x24,0x23,0x20,0x20,0x20,0x24,0x28,0x30,0xE0,0x00,0x00,0x00,
/*-- 文字: 阴 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x00,0xFF,0x08,0x10,0x88,0x47,0x30,0x0F,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,
/*-- 文字: 雾 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0xD5,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x10,0x10,0x10,0x8A,0xA9,0x6B,0x35,0x25,0x25,0xAB,0xE9,0x08,0x10,0x10,0x10,0x00,
/*-- 文字: 小 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,
0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00,
/*-- 文字: 雨 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xE2,0x22,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,
0x00,0xFF,0x00,0x00,0x09,0x12,0x00,0x7F,0x00,0x09,0x12,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 大 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,
/*-- 文字: 雨 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xE2,0x22,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,
0x00,0xFF,0x00,0x00,0x09,0x12,0x00,0x7F,0x00,0x09,0x12,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 雷 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x18,0x0A,0xAA,0xAA,0xAA,0x0A,0xFE,0x0A,0xAA,0xAA,0xAA,0x0A,0x28,0x18,0x00,
0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
/*-- 文字: 阵 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xFE,0x02,0x22,0xDA,0x06,0x08,0xC8,0xB8,0x8F,0xE8,0x88,0x88,0x88,0x08,0x00,
0x00,0xFF,0x08,0x10,0x08,0x07,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x00,
/*-- 文字: 雨 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xE2,0x22,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,
0x00,0xFF,0x00,0x00,0x09,0x12,0x00,0x7F,0x00,0x09,0x12,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 冰 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x0C,0xC0,0x00,0x20,0x20,0xE0,0x00,0xFF,0x70,0xA0,0x10,0x08,0x00,0x00,
0x02,0x02,0x7F,0x00,0x10,0x08,0x06,0x41,0x80,0x7F,0x00,0x01,0x06,0x08,0x10,0x00,
/*-- 文字: 雹 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0xD5,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x00,0x04,0x02,0x7D,0x95,0x95,0x95,0x95,0x9D,0x91,0xA1,0x9F,0x80,0xC0,0x00,0x00,
/*-- 文字: 冻 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x0C,0x80,0x60,0x08,0x88,0x68,0x18,0x0F,0xE8,0x08,0x08,0x08,0x08,0x00,
0x02,0x02,0x7E,0x01,0x00,0x20,0x11,0x0D,0x41,0x81,0x7F,0x01,0x05,0x09,0x30,0x00,
/*-- 文字: 雨 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xE2,0x22,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,
0x00,0xFF,0x00,0x00,0x09,0x12,0x00,0x7F,0x00,0x09,0x12,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 雨 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0xE2,0x22,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00,
0x00,0xFF,0x00,0x00,0x09,0x12,0x00,0x7F,0x00,0x09,0x12,0x40,0x80,0x7F,0x00,0x00,
/*-- 文字: 夹 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x08,0x08,0x28,0x48,0x08,0x08,0xFF,0x08,0x08,0x48,0x28,0x08,0x08,0x00,0x00,
0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x41,0x41,0x81,0x81,0x00,
/*-- 文字: 雪 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,
/*-- 文字: 小 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x20,0x40,0x80,0x00,0x00,
0x08,0x04,0x03,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x01,0x0E,0x00,
/*-- 文字: 雪 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,
/*-- 文字: 中 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00,
/*-- 文字: 雪 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,
/*-- 文字: 大 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,
/*-- 文字: 雪 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,
/*-- 文字: 霜 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
0x20,0x12,0x0A,0x06,0xFF,0x0A,0x12,0x00,0xFF,0x55,0x55,0x55,0x55,0xFF,0x00,0x00,
/*-- 文字: 冻 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x02,0x0C,0x80,0x60,0x08,0x88,0x68,0x18,0x0F,0xE8,0x08,0x08,0x08,0x08,0x00,
0x02,0x02,0x7E,0x01,0x00,0x20,0x11,0x0D,0x41,0x81,0x7F,0x01,0x05,0x09,0x30,0x00,
};
/***************************************************
* 标题:公历与农历转换
//公历年对应的农历数据,每年三字节,
//格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小
//第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小
//月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天).
//第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期
***************************************************/
uchar code year_code[] =
{
0x04, 0xAe, 0x53, /* 1901 */
0x0A, 0x57, 0x48, /* 1902 */
0x55, 0x26, 0xBd, /* 1903 */
0x0d, 0x26, 0x50, /* 1904 */
0x0d, 0x95, 0x44, /* 1905 */
0x46, 0xAA, 0xB9, /* 1906 */
0x05, 0x6A, 0x4d, /* 1907 */
0x09, 0xAd, 0x42, /* 1908 */
0x24, 0xAe, 0xB6, /* 1909 */
0x04, 0xAe, 0x4A, /* 1910 */
0x6A, 0x4d, 0xBe, /* 1911 */
0x0A, 0x4d, 0x52, /* 1912 */
0x0d, 0x25, 0x46, /* 1913 */
0x5d, 0x52, 0xBA, /* 1914 */
0x0B, 0x54, 0x4e, /* 1915 */
0x0d, 0x6A, 0x43, /* 1916 */
0x29, 0x6d, 0x37, /* 1917 */
0x09, 0x5B, 0x4B, /* 1918 */
0x74, 0x9B, 0xC1, /* 1919 */
0x04, 0x97, 0x54, /* 1920 */
0x0A, 0x4B, 0x48, /* 1921 */
0x5B, 0x25, 0xBC, /* 1922 */
0x06, 0xA5, 0x50, /* 1923 */
0x06, 0xd4, 0x45, /* 1924 */
0x4A, 0xdA, 0xB8, /* 1925 */
0x02, 0xB6, 0x4d, /* 1926 */
0x09, 0x57, 0x42, /* 1927 */
0x24, 0x97, 0xB7, /* 1928 */
0x04, 0x97, 0x4A, /* 1929 */
0x66, 0x4B, 0x3e, /* 1930 */
0x0d, 0x4A, 0x51, /* 1931 */
0x0e, 0xA5, 0x46, /* 1932 */
0x56, 0xd4, 0xBA, /* 1933 */
0x05, 0xAd, 0x4e, /* 1934 */
0x02, 0xB6, 0x44, /* 1935 */
0x39, 0x37, 0x38, /* 1936 */
0x09, 0x2e, 0x4B, /* 1937 */
0x7C, 0x96, 0xBf, /* 1938 */
0x0C, 0x95, 0x53, /* 1939 */
0x0d, 0x4A, 0x48, /* 1940 */
0x6d, 0xA5, 0x3B, /* 1941 */
0x0B, 0x55, 0x4f, /* 1942 */
0x05, 0x6A, 0x45, /* 1943 */
0x4A, 0xAd, 0xB9, /* 1944 */
0x02, 0x5d, 0x4d, /* 1945 */
0x09, 0x2d, 0x42, /* 1946 */
0x2C, 0x95, 0xB6, /* 1947 */
0x0A, 0x95, 0x4A, /* 1948 */
0x7B, 0x4A, 0xBd, /* 1949 */
0x06, 0xCA, 0x51, /* 1950 */
0x0B, 0x55, 0x46, /* 1951 */
0x55, 0x5A, 0xBB, /* 1952 */
0x04, 0xdA, 0x4e, /* 1953 */
0x0A, 0x5B, 0x43, /* 1954 */
0x35, 0x2B, 0xB8, /* 1955 */
0x05, 0x2B, 0x4C, /* 1956 */
0x8A, 0x95, 0x3f, /* 1957 */
0x0e, 0x95, 0x52, /* 1958 */
0x06, 0xAA, 0x48, /* 1959 */
0x7A, 0xd5, 0x3C, /* 1960 */
0x0A, 0xB5, 0x4f, /* 1961 */
0x04, 0xB6, 0x45, /* 1962 */
0x4A, 0x57, 0x39, /* 1963 */
0x0A, 0x57, 0x4d, /* 1964 */
0x05, 0x26, 0x42, /* 1965 */
0x3e, 0x93, 0x35, /* 1966 */
0x0d, 0x95, 0x49, /* 1967 */
0x75, 0xAA, 0xBe, /* 1968 */
0x05, 0x6A, 0x51, /* 1969 */
0x09, 0x6d, 0x46, /* 1970 */
0x54, 0xAe, 0xBB, /* 1971 */
0x04, 0xAd, 0x4f, /* 1972 */
0x0A, 0x4d, 0x43, /* 1973 */
0x4d, 0x26, 0xB7, /* 1974 */
0x0d, 0x25, 0x4B, /* 1975 */
0x8d, 0x52, 0xBf, /* 1976 */
0x0B, 0x54, 0x52, /* 1977 */
0x0B, 0x6A, 0x47, /* 1978 */
0x69, 0x6d, 0x3C, /* 1979 */
0x09, 0x5B, 0x50, /* 1980 */
0x04, 0x9B, 0x45, /* 1981 */
0x4A, 0x4B, 0xB9, /* 1982 */
0x0A, 0x4B, 0x4d, /* 1983 */
0xAB, 0x25, 0xC2, /* 1984 */
0x06, 0xA5, 0x54, /* 1985 */
0x06, 0xd4, 0x49, /* 1986 */
0x6A, 0xdA, 0x3d, /* 1987 */
0x0A, 0xB6, 0x51, /* 1988 */
0x09, 0x37, 0x46, /* 1989 */
0x54, 0x97, 0xBB, /* 1990 */
0x04, 0x97, 0x4f, /* 1991 */
0x06, 0x4B, 0x44, /* 1992 */
0x36, 0xA5, 0x37, /* 1993 */
0x0e, 0xA5, 0x4A, /* 1994 */
0x86, 0xB2, 0xBf, /* 1995 */
0x05, 0xAC, 0x53, /* 1996 */
0x0A, 0xB6, 0x47, /* 1997 */
0x59, 0x36, 0xBC, /* 1998 */
0x09, 0x2e, 0x50, /* 1999 294 */
0x0C, 0x96, 0x45, /* 2000 297 */
0x4d, 0x4A, 0xB8, /* 2001 */
0x0d, 0x4A, 0x4C, /* 2002 */
0x0d, 0xA5, 0x41, /* 2003 */
0x25, 0xAA, 0xB6, /* 2004 */
0x05, 0x6A, 0x49, /* 2005 */
0x7A, 0xAd, 0xBd, /* 2006 */
0x02, 0x5d, 0x52, /* 2007 */
0x09, 0x2d, 0x47, /* 2008 */
0x5C, 0x95, 0xBA, /* 2009 */
0x0A, 0x95, 0x4e, /* 2010 */
0x0B, 0x4A, 0x43, /* 2011 */
0x4B, 0x55, 0x37, /* 2012 */
0x0A, 0xd5, 0x4A, /* 2013 */
0x95, 0x5A, 0xBf, /* 2014 */
0x04, 0xBA, 0x53, /* 2015 */
0x0A, 0x5B, 0x48, /* 2016 */
0x65, 0x2B, 0xBC, /* 2017 */
0x05, 0x2B, 0x50, /* 2018 */
0x0A, 0x93, 0x45, /* 2019 */
0x47, 0x4A, 0xB9, /* 2020 */
0x06, 0xAA, 0x4C, /* 2021 */
0x0A, 0xd5, 0x41, /* 2022 */
0x24, 0xdA, 0xB6, /* 2023 */
0x04, 0xB6, 0x4A, /* 2024 */
0x69, 0x57, 0x3d, /* 2025 */
0x0A, 0x4e, 0x51, /* 2026 */
0x0d, 0x26, 0x46, /* 2027 */
0x5e, 0x93, 0x3A, /* 2028 */
0x0d, 0x53, 0x4d, /* 2029 */
0x05, 0xAA, 0x43, /* 2030 */
0x36, 0xB5, 0x37, /* 2031 */
0x09, 0x6d, 0x4B, /* 2032 */
0xB4, 0xAe, 0xBf, /* 2033 */
0x04, 0xAd, 0x53, /* 2034 */
0x0A, 0x4d, 0x48, /* 2035 */
0x6d, 0x25, 0xBC, /* 2036 */
0x0d, 0x25, 0x4f, /* 2037 */
0x0d, 0x52, 0x44, /* 2038 */
0x5d, 0xAA, 0x38, /* 2039 */
0x0B, 0x5A, 0x4C, /* 2040 */
0x05, 0x6d, 0x41, /* 2041 */
0x24, 0xAd, 0xB6, /* 2042 */
0x04, 0x9B, 0x4A, /* 2043 */
0x7A, 0x4B, 0xBe, /* 2044 */
0x0A, 0x4B, 0x51, /* 2045 */
0x0A, 0xA5, 0x46, /* 2046 */
0x5B, 0x52, 0xBA, /* 2047 */
0x06, 0xd2, 0x4e, /* 2048 */
0x0A, 0xdA, 0x42, /* 2049 */
0x35, 0x5B, 0x37, /* 2050 */
0x09, 0x37, 0x4B, /* 2051 */
0x84, 0x97, 0xC1, /* 2052 */
0x04, 0x97, 0x53, /* 2053 */
0x06, 0x4B, 0x48, /* 2054 */
0x66, 0xA5, 0x3C, /* 2055 */
0x0e, 0xA5, 0x4f, /* 2056 */
0x06, 0xB2, 0x44, /* 2057 */
0x4A, 0xB6, 0x38, /* 2058 */
0x0A, 0xAe, 0x4C, /* 2059 */
0x09, 0x2e, 0x42, /* 2060 */
0x3C, 0x97, 0x35, /* 2061 */
0x0C, 0x96, 0x49, /* 2062 */
0x7d, 0x4A, 0xBd, /* 2063 */
0x0d, 0x4A, 0x51, /* 2064 */
0x0d, 0xA5, 0x45, /* 2065 */
0x55, 0xAA, 0xBA, /* 2066 */
0x05, 0x6A, 0x4e, /* 2067 */
0x0A, 0x6d, 0x43, /* 2068 */
0x45, 0x2e, 0xB7, /* 2069 */
0x05, 0x2d, 0x4B, /* 2070 */
0x8A, 0x95, 0xBf, /* 2071 */
0x0A, 0x95, 0x53, /* 2072 */
0x0B, 0x4A, 0x47, /* 2073 */
0x6B, 0x55, 0x3B, /* 2074 */
0x0A, 0xd5, 0x4f, /* 2075 */
0x05, 0x5A, 0x45, /* 2076 */
0x4A, 0x5d, 0x38, /* 2077 */
0x0A, 0x5B, 0x4C, /* 2078 */
0x05, 0x2B, 0x42, /* 2079 */
0x3A, 0x93, 0xB6, /* 2080 */
0x06, 0x93, 0x49, /* 2081 */
0x77, 0x29, 0xBd, /* 2082 */
0x06, 0xAA, 0x51, /* 2083 */
0x0A, 0xd5, 0x46, /* 2084 */
0x54, 0xdA, 0xBA, /* 2085 */
0x04, 0xB6, 0x4e, /* 2086 */
0x0A, 0x57, 0x43, /* 2087 */
0x45, 0x27, 0x38, /* 2088 */
0x0d, 0x26, 0x4A, /* 2089 */
0x8e, 0x93, 0x3e, /* 2090 */
0x0d, 0x52, 0x52, /* 2091 */
0x0d, 0xAA, 0x47, /* 2092 */
0x66, 0xB5, 0x3B, /* 2093 */
0x05, 0x6d, 0x4f, /* 2094 */
0x04, 0xAe, 0x45, /* 2095 */
0x4A, 0x4e, 0xB9, /* 2096 */
0x0A, 0x4d, 0x4C, /* 2097 */
0x0d, 0x15, 0x41, /* 2098 */
0x2d, 0x92, 0xB5, /* 2099 */
};
uchar code day_code1[9] = { 0x0, 0x1f, 0x3b, 0x5a, 0x78, 0x97, 0xb5, 0xd4, 0xf3 };
uint code day_code2[3] = { 0x111, 0x130, 0x14e };
uchar code table_week[12] = { 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; /* 月修正数据表 */
//二十四节气对应年的日期表
//依次从1月开始,每月用一个字节存放,用15减去高四位数据即得到第一个节气对应日期
//低四位数据加上15即得到第二个节气对应日期
uchar code ChinaSolarTerms[]={
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1901
0x96,0xa4,0x96,0x96,0x97,0x87,0x79,0x79,0x79,0x69,0x78,0x78, //1902
0x96,0xa5,0x87,0x96,0x87,0x87,0x79,0x69,0x69,0x69,0x78,0x78, //1903
0x86,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x78, //1904
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1905
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1906
0x96,0xa5,0x87,0x96,0x87,0x87,0x79,0x69,0x69,0x69,0x78,0x78, //1907
0x86,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1908
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1909
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x79,0x78,0x78, //1910
0x96,0xa5,0x87,0x96,0x87,0x87,0x79,0x69,0x69,0x69,0x78,0x78, //1911
0x86,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x77,0x87, //1912
0x95,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1913
0x96,0xb4,0x96,0xa6,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1914
0x96,0xa5,0x97,0x96,0x97,0x87,0x79,0x79,0x69,0x69,0x78,0x78, //1915
0x96,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1916
0x95,0xb4,0x96,0xa6,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1917
0x96,0xb4,0x96,0xa6,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x77, //1918
0x96,0xa5,0x97,0x96,0x97,0x87,0x79,0x79,0x69,0x69,0x78,0x78, //1919
0x96,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1920
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x87, //1921
0x96,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x87, //1922
0x96,0xa4,0x96,0x96,0x97,0x87,0x79,0x79,0x69,0x69,0x78,0x78, //1923
0x96,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1924
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x87, //1925
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1926
0x96,0xa4,0x96,0x96,0x97,0x87,0x79,0x79,0x69,0x69,0x78,0x78, //1927
0x96,0xa5,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x78,0x87,0x87, //1928
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1929
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1930
0x96,0xa4,0x96,0x96,0x97,0x87,0x79,0x79,0x79,0x69,0x78,0x78, //1931
0x96,0xa5,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1932
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1933
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1934
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x79,0x78,0x78, //1935
0x96,0xa5,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1936
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1937
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1938
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1939
0x96,0xa5,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1940
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1941
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1942
0x96,0xa4,0x96,0x96,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1943
0x96,0xa5,0x96,0xa5,0xa6,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1944
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1945
0x95,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1946
0x96,0xb4,0x96,0xa6,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1947
0x96,0xa5,0xa6,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1948
0xa5,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1949
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1950
0x96,0xb4,0x96,0xa6,0x97,0x97,0x79,0x79,0x79,0x69,0x78,0x78, //1951
0x96,0xa5,0xa6,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1952
0xa5,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1953
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x87, //1954
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1955
0x96,0xa5,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1956
0xa5,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1957
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1958
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1959
0x96,0xa4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1960
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1961
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1962
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1963
0x96,0xb4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1964
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1965
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1966
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1967
0x96,0xb4,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //1968
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1969
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1970
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x79,0x69,0x78,0x77, //1971
0x96,0xa4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1972
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1973
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1974
0x96,0xb4,0x96,0xa6,0x97,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1975
0x96,0xa4,0xa5,0xb5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //1976
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1977
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x78,0x87, //1978
0x95,0xb4,0x96,0xa6,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1979
0x96,0xa4,0xa5,0xb5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //1980
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1981
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1982
0x95,0xb4,0x96,0xa5,0x96,0x97,0x78,0x79,0x78,0x69,0x78,0x77, //1983
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //1984
0xa5,0xb4,0xa6,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //1985
0xa5,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //1986
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x79,0x78,0x69,0x78,0x87, //1987
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //1988
0xa5,0xb4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1989
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x79,0x77,0x87, //1990
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1991
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //1992
0xa5,0xb3,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //1993
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1994
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1995
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //1996
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //1997
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //1998
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //1999
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2000
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2001
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2002
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //2003
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2004
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2005
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2006
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x69,0x78,0x87, //2007
0x96,0xb4,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2008
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2009
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2010
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x78,0x87, //2011
0x96,0xb4,0xa5,0xb5,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2012
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2013
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2014
0x95,0xb4,0x96,0xa5,0x96,0x97,0x88,0x78,0x78,0x79,0x77,0x87, //2015
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2016
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2017
0xa5,0xb4,0xa6,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2018
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x79,0x77,0x87, //2019
0X95,0XB4,0XA5,0XB4,0XA5,0XA6,0x97,0x87,0x87,0x78,0x87,0x86, //2020
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2021
0xa5,0xb4,0xa5,0xb5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //2022
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x79,0x77,0x87, //2023
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2024
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2025
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2026
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //2027
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2028
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2029
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2030
0xa5,0xb4,0x96,0xa5,0x96,0x96,0x88,0x78,0x78,0x78,0x87,0x87, //2031
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2032
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2033
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2034
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2035
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2036
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2037
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2038
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2039
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2040
0xa5,0xc3,0xa5,0xb5,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2041
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2042
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2043
0x95,0xb4,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x88,0x87,0x96, //2044
0xa5,0xc3,0xa5,0xb4,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2045
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2046
0xa5,0xb4,0x96,0xa5,0xa6,0x96,0x88,0x88,0x78,0x78,0x87,0x87, //2047
0x95,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2048
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x86, //2049
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2050
0xa5,0xb4,0xa5,0xa5,0xa6,0x96,0x88,0x88,0x88,0x78,0x87,0x87, //2051
0xa5,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x97,0x88,0x86,0x96, //2052
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x86, //2053
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2054
0xa5,0xb4,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2055
0xa5,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2056
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2057
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2058
0xa5,0xb4,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2059
0xa5,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x87,0x96,0x96, //2060
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2061
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2062
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2063
0xa5,0xb4,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x87,0x96,0x96, //2064
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2065
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2066
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2067
0xa5,0xb4,0xa5,0xb4,0xb5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2068
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2069
0xa5,0xc3,0xa5,0xb5,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2070
0xa5,0xb3,0xa5,0xa5,0xa6,0xa6,0x88,0x88,0x88,0x78,0x87,0x87, //2071
0xa5,0xb4,0xa5,0xb4,0xb5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2072
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x88,0x87,0x96, //2073
0xa5,0xc3,0xa5,0xb5,0xa5,0xa6,0x87,0x88,0x87,0x78,0x87,0x86, //2074
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2075
0xa5,0xb4,0xa5,0xb4,0xb5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2076
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x88,0x87,0x96, //2077
0xa5,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x88,0x87,0x78,0x87,0x86, //2078
0xa5,0xb3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2079
0xa5,0xb4,0xa5,0xb4,0xb5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2080
0xa4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2081
0xa5,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x86, //2082
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2083
0xa5,0xb4,0xb4,0xb4,0xb5,0xa5,0x97,0x97,0x97,0x87,0x96,0x96, //2084
0xb4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2085
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x86, //2086
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x87, //2087
0xa5,0xb4,0xb4,0xb4,0xb5,0xb5,0x97,0x97,0x97,0x87,0x96,0x96, //2088
0xb4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x88,0x86,0x96, //2089
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2090
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2091
0xa5,0xb4,0xb4,0xb4,0xb5,0xb5,0x97,0x97,0x97,0x87,0x96,0x96, //2092
0xb4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x87,0x87,0x87,0x96,0x96, //2093
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2094
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2095
0xa5,0xb3,0xb4,0xb4,0xb5,0xb5,0x97,0x97,0x97,0x87,0x96,0x96, //2096
0xb4,0xc3,0xa5,0xb4,0xa5,0xa5,0x97,0x97,0x87,0x87,0x96,0x96, //2097
0xa4,0xc3,0xa5,0xb4,0xa5,0xa6,0x97,0x87,0x87,0x78,0x87,0x96, //2098
0xa5,0xc3,0xa5,0xb5,0xa6,0xa6,0x87,0x88,0x88,0x78,0x87,0x86, //2099
};
//延时子程序
void delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
{
for(j=110;j>0;j--);
}
}
//LCD忙检查子程序
void lcd_busy()
{
uchar result;
LCD_RS=0;
LCD_RW=1;
do
{
LCD_data=0x00;
LCD_EN=1;
_nop_();
result=LCD_data;
LCD_EN=0;
result=0x80&result; //检查忙信号
}while(!(result==0x00)); //当忙信号为0时才可继续操作
}
//LCD写命令子程序
void lcd_wcmd(uchar cmd)
{
lcd_busy();
LCD_RS=0; //写命令
LCD_RW=0;
LCD_data=cmd;
LCD_EN=1; //利用EN 下降沿完成命令写操作
_nop_();
_nop_();
LCD_EN=0;
}
void SetPage(uchar page) //设置页码,页码为0~7
{
page=0xb8|page;
lcd_wcmd(page);
}
void SetStartLine(uchar startline) //设置起始行,行号为0~63
{
startline=0xc0|startline;
lcd_wcmd(startline);
}
void SetColumn(uchar column) //设置列,列号为0~63
{
column=column&0x3f;
column=0x40|column;
lcd_wcmd(column);
}
void SetOnOff(uchar onoff) //开关显示屏
{
onoff=0x3e|onoff;
lcd_wcmd(onoff);
}
//LCD写数据子程序
void lcd_wdat(uchar dat)
{
lcd_busy();
LCD_RS=1;
LCD_RW=0;
LCD_data=dat;
LCD_EN=1;
_nop_();
_nop_();
LCD_EN=0;
}
void SelectScreen(uchar screen) //选屏,screen=0,1,2
{
switch(screen)
{
case 0: CS1=0; //全屏显示
_nop_();
_nop_();
_nop_();
CS2=0;
_nop_();
_nop_();
_nop_();
break;
case 1: CS1=0; //左屏显示
_nop_();
_nop_();
_nop_();
CS2=1;
_nop_();
_nop_();
_nop_();
break;
case 2: CS1=1; //右屏显示
_nop_();
_nop_();
_nop_();
CS2=0;
_nop_();
_nop_();
_nop_();
break;
}
}
void ClearScreen(uchar screen) //清屏,screen=0,1,2
{
uchar i,j;
SelectScreen(screen);
for(i=0;i<8;i++)
{
SetPage(i);
SetColumn(0);
for(j=0;j<64;j++)
{
lcd_wdat(0x00);
}
}
}
void lcd_init()
{
lcd_busy(); //读忙信号,不忙则向下执行
SelectScreen(0);
SetOnOff(0); //关屏
SelectScreen(0);
SetOnOff(1); //开屏
SelectScreen(0);
ClearScreen(0); //清屏
SetStartLine(0); //开始行为0
}
void ChineseDisplay(uchar screen,uchar page,uchar column,uchar number)
{
int i;
SelectScreen(screen); //screen为显示的屏号
column=column&0x3f; //column为列号
SetPage(page); //page为页号,显示第number个汉字的上半部分,可理解为要显示的汉字位于屏幕的第page行
SetColumn(column);
for(i=0;i<16;i++)
{
lcd_wdat(Chinese[i+32*number]);//number为字号,取第number个汉字的第i列数据编码值
}
SetPage(page+1); //显示第number个汉字的下半部分
SetColumn(column);
for(i=0;i<16;i++)
{
lcd_wdat(Chinese[i+32*number+16]);//取第number个汉字的第i列数据编码值
}
}
void ChinaSolarDisplay(uchar screen,uchar page,uchar column,uchar number)
{
int i;
SelectScreen(screen); //screen为显示的屏号
column=column&0x3f; //column为列号
SetPage(page); //page为页号,显示第number个汉字的上半部分,可理解为要显示的汉字位于屏幕的第page行
SetColumn(column);
for(i=0;i<16;i++)
{
lcd_wdat(SolarTerms[i+32*number]);//number为字号,取第number个汉字的第i列数据编码值
}
SetPage(page+1); //显示第number个汉字的下半部分
SetColumn(column);
for(i=0;i<16;i++)
{
lcd_wdat(SolarTerms[i+32*number+16]);//取第number个汉字的第i列数据编码值
}
}
void SymbolDisplay(uchar screen,uchar page,uchar column,uchar number)
{
int i;
SelectScreen(screen); //screen为显示的屏号
column=column&0x3f; //column为列号
SetPage(page); //page为页号,显示第number个数字
SetColumn(column);
for(i=0;i<8;i++)
{
lcd_wdat(Symbol[i+16*number]);//number为字号,取第number个数字的第i列数据编码值
}
SetPage(page+1); //显示第number个汉字的下半部分
SetColumn(column);
for(i=0;i<8;i++)
{
lcd_wdat(Symbol[i+16*number+8]);//取第number个数字的第i列数据编码值
}
}
typedef struct __SYSTEMTIME__
{
uint Second;
uchar Minute;
uchar Hour;
uchar Week;
uchar Day;
uchar Month;
uchar Year;
uchar DateBit[6];
uchar TimeBit[6];
}SYSTEMTIME; //定义的时间类
SYSTEMTIME datetime;
SYSTEMTIME xdata CurrentTime;
uchar year0;
/***************************************************************************
函数名称:DS1302InputByte(uchar d)
函数功能:实时时钟写入一个字节(内部函数)
输入参数:d 要写入的数据
返回值:无
***************************************************************************/
void DS1302InputByte(uchar d)
{
uchar i;
ACC = d;
for(i=8; i>0; i--)
{
DS1302_IO = ACC0; //相当于汇编中的 RRC,实现一位一位写入
DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1;
}
}
/***************************************************************************
函数名称:DS1302OutputByte(void)
函数功能:实时时钟读取一个字节(内部函数)
输入参数:无
返回值:ACC 读到的数据
***************************************************************************/
uchar DS1302OutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; //相当于汇编中的 RRC,实现一位一位读取
ACC7 = DS1302_IO;
DS1302_CLK = 1;
DS1302_CLK = 0;
}
return(ACC);
}
/***************************************************************************
函数名称:Write1302(uchar ucAddr, uchar ucDa)
函数功能:往实时时钟指定地址写数据
输入参数:ucAddr 要写数据的地址
ucDa 要写入的数据
返回值:无
***************************************************************************/
void Write1302(uchar ucAddr, uchar ucDa)
{
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr); // 往实时时钟写入地址,命令
DS1302InputByte(ucDa); // 往实时时钟写1Byte数据
DS1302_CLK = 1; //注意是否需要注释掉这句
DS1302_RST = 0;
}
/***************************************************************************
函数名称:Read1302(uchar ucAddr)
函数功能:读取ds1302某地址的数据
输入参数:ucAddr 要读数据的地址
返回值: ucData 读出的数据
***************************************************************************/
uchar Read1302(uchar ucAddr) //读取ds1302某地址的数据
{
uchar ucData;
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr|0x01); //BIT0位为0进行写操作,为1表示读操作
ucData = DS1302OutputByte(); // 读1Byte数据
DS1302_CLK = 1;
DS1302_RST = 0;
return(ucData);
}
/***************************************************************************
函数名称:DS1302_SetProtect(bit flag)
函数功能:是否写保护 ??????有什么用
输入参数:flag
返回值: 无
其他:flag为1时,0x8E对应的control register最高位为1,写保护开启
***************************************************************************/
void DS1302_SetProtect(bit flag) //是否写保护
{
if(flag)
Write1302(0x8E,0x80);
else
Write1302(0x8E,0x00);
}
/***************************************************************************
函数名称:DS1302_SetTime(uchar Address, uchar Value)
函数功能:向指定寄存器写时间
输入参数:Address 寄存器地址
Value 要写入的时间(hex码)
返回值: 无
其他:可以先用宏定义定义好year,month,hour等的地址
***************************************************************************/
void DS1302_SetTime(uchar Address, uchar Value) // 设置时间函数
{
DS1302_SetProtect(0);
Write1302(Address, ((Value/10)<<4 | (Value%10))); //将hex码转化为BCD码
}
/***************************************************************************
函数名称:DS1302_GetTime(SYSTEMTIME *Time)
函数功能:读出日期和时间,将它们存入Time这个结构体中
输入参数:*Time 要存日期和时间的结构体的地址
返回值: 无
***************************************************************************/
void DS1302_GetTime(SYSTEMTIME *Time)
{
uchar ReadValue;
ReadValue = Read1302(DS1302_SECOND); //为什么是和0x70与,而不是0xf0
Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //八进制转为十进制
ReadValue = Read1302(DS1302_MINUTE);
Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_HOUR);
Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_DAY);
Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_WEEK);
Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_MONTH);
Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_YEAR);
Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
}
/***************************************************************************
函数名称:DateToBit(SYSTEMTIME *Time)
函数功能:将读出的日期分别得到各个位上的数字
输入参数:*Time 要存数字的结构体
返回值:无
***************************************************************************/
void DateToBit(SYSTEMTIME *Time)
{
Time->DateBit[0] = Time->Year/10 ; //分别得到各个位上的数字
Time->DateBit[1] = Time->Year%10 ;
Time->DateBit[2] = Time->Month/10 ;
Time->DateBit[3] = Time->Month%10 ;
Time->DateBit[4] = Time->Day/10 ;
Time->DateBit[5] = Time->Day%10 ;
}
/***************************************************************************
函数名称:TimeToBit(SYSTEMTIME *Time)
函数功能:将读出的时间分别得到各个位上的数字
输入参数:*Time 要存字符的结构体
返回值:无
***************************************************************************/
void TimeToBit(SYSTEMTIME *Time)
{
Time->TimeBit[0] = Time->Hour/10 ;
Time->TimeBit[1] = Time->Hour%10 ;
Time->TimeBit[2] = Time->Minute/10 ;
Time->TimeBit[3] = Time->Minute%10 ;
Time->TimeBit[4] = Time->Second/10 ;
Time->TimeBit[5] = Time->Second%10 ;
}
/***************************************************************************
函数名称:Initial_DS1302(void)
函数功能:初始化ds1302
输入参数:无
返回值:无
***************************************************************************/
void Initial_DS1302(void)
{
uchar Second=Read1302(DS1302_SECOND);
if(Second&0x80)
DS1302_SetTime(DS1302_SECOND,0);
}
// 星期判定,1901.1.1(星期二)为基准,对以后200年内即(1901~2099),星期有效
uchar SetWeek(uchar year1,uchar month,uchar day)
{
uchar code Month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
uchar j=0, wk=0; // j 用于记录从1901年到你设定的那一年(不包括你设定的年)之间有几个闰年,wk 用于存放你求出的星期几
uint sum=0, i, allyear; // sum 用于存放从1901年到你设定的那一年一共有多少天,sum最大到65535
allyear = year0*100 + year1; // 这里的year0是你设定年的前两位,TIME6是后两位
sum = day;
for(i=0;i<month;i++)
{
sum += Month[i];
}
if((allyear%4==0)&&(allyear%100!=0)||(allyear%400==0))
{
if(month > 2)sum++;
}
for(i=1901;i<allyear;i++)
{
if((i%4==0)&&(i%100!=0)||(i%400==0))j++; //闰年比平年多一天
}
if(allyear >1900 && allyear < 2100) // 确保不超出设定的范围2000~2100
{
sum = sum + (allyear-1901)*365 + j + 1; // 5是由基准星期6->1得到
wk = sum%7;
}
if(wk==0)wk = 7;
return wk;
}
/****************************************************************************
* 用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0
****************************************************************************/
uchar GetMoonDay( uchar month_p, ushort table_addr )
{
switch ( month_p )
{
case 1:
if ( (year_code[table_addr] & 0x08) == 0 )
return(0);
else return(1);
case 2:
if ( (year_code[table_addr] & 0x04) == 0 )
return(0);
else return(1);
case 3:
if ( (year_code[table_addr] & 0x02) == 0 )
return(0);
else return(1);
case 4:
if ( (year_code[table_addr] & 0x01) == 0 )
return(0);
else return(1);
case 5:
if ( (year_code[table_addr + 1] & 0x80) == 0 )
return(0);
else return(1);
case 6:
if ( (year_code[table_addr + 1] & 0x40) == 0 )
return(0);
else return(1);
case 7:
if ( (year_code[table_addr + 1] & 0x20) == 0 )
return(0);
else return(1);
case 8:
if ( (year_code[table_addr + 1] & 0x10) == 0 )
return(0);
else return(1);
case 9:
if ( (year_code[table_addr + 1] & 0x08) == 0 )
return(0);
else return(1);
case 10:
if ( (year_code[table_addr + 1] & 0x04) == 0 )
return(0);
else return(1);
case 11:
if ( (year_code[table_addr + 1] & 0x02) == 0 )
return(0);
else return(1);
case 12:
if ( (year_code[table_addr + 1] & 0x01) == 0 )
return(0);
else return(1);
case 13:
if ( (year_code[table_addr + 2] & 0x80) == 0 )
return(0);
else return(1);
}
return(0);
}
/*********************************************************************************************************
** 函数名称:GetChinaCalendar
** 功能描述:公农历转换(只允许1901-2099年)
** 输 入: year 公历年
** month 公历月
** day 公历日
** 输 出: 1 成功
** 0 失败
********************************************************************************************************/
uchar NLmonth; //农历月
uchar NLday; //农历日
uchar IsRunYue; //存放当前农历月是否为闰月,是则为1,否则为0
uchar GetChinaCalendar(uint year,uchar month,uchar day)
{
uchar temp1, temp2, temp3, month_p, yearH, yearL,runyue;
uchar flag_y;
ushort temp4, table_addr;
yearH = year / 100; yearL = year % 100;
if ( (yearH != 19) && (yearH != 20) )
return(0);
/* 定位数据表地址 */
if ( yearH == 20 )
table_addr = (yearL + 100 - 1) * 3;
else table_addr = (yearL - 1) * 3;
/* 取当年春节所在的公历月份 */
temp1 = year_code[table_addr + 2] & 0x60;
temp1 >>= 5;
/* 取当年春节所在的公历日 */
temp2 = year_code[table_addr + 2] & 31;
/* 计算当年春年离当年元旦的天数,春节只会在公历1月或2月 */
if ( temp1 == 1 )
temp3 = temp2 - 1;
else temp3 = temp2 + 31 - 1;
/* 计算公历日离当年元旦的天数 */
if ( month < 10 )
temp4 = day_code1[month - 1] + day - 1;
else temp4 = day_code2[month - 10] + day - 1;
/* 如果公历月大于2月并且该年的2月为闰月,天数加1 */
if ( (month > 2) && (yearL % 4 == 0) )
temp4++;
/* 判断公历日在春节前还是春节后 */
if ( temp4 >= temp3 )
{ //当前公历日在春节后
temp4 -= temp3; //现在temp4存放当前公历日距离当前春节公历日天数
month = 1;
month_p = 1;
flag_y = 0;
if ( GetMoonDay( month_p, table_addr ) == 0 )
temp1 = 29; /* 小月29天 */
else temp1 = 30; /* 大月30天 */
/* 从数据表中取该年的闰月月份,如为0则该年无闰月 */
temp2 = year_code[table_addr] / 16;
if(temp2!=0)runyue=temp2;
while ( temp4 >= temp1 )
{
temp4 -= temp1;
month_p++;
if ( month == temp2 )
{
flag_y = ~flag_y;
if ( flag_y == 0 )
month++;
}else month++;
if ( GetMoonDay( month_p, table_addr ) == 0 )
temp1 = 29;
else temp1 = 30;
}
day = temp4 + 1;
}
/* 公历日在春节前使用下面代码进行运算 */
else{
temp3 -= temp4;
if ( yearL == 0 )
{
yearL = 100 - 1;
yearH = 19;
}else yearL--;
table_addr -= 3;
month = 12;
temp2 = year_code[table_addr] / 16;
if ( temp2 == 0 )
month_p = 12;
else month_p = 13;
flag_y = 0;
if ( GetMoonDay( month_p, table_addr ) == 0 )
temp1 = 29;
else temp1 = 30;
while ( temp3 > temp1 )
{
temp3 -= temp1;
month_p--;
if ( flag_y == 0 )
month--;
if ( month == temp2 )
flag_y = ~flag_y;
if ( GetMoonDay( month_p, table_addr ) == 0 )
temp1 = 29;
else temp1 = 30;
}
day = temp1 - temp3 + 1;
}
NLmonth = month;
NLday = day;
if(runyue==NLmonth)IsRunYue=1;
else IsRunYue=0;
return(1);
}
//判断当前日期是否为二十四节气,是则返回1,否则返回0
uchar SetSolarTerms(uint year,uchar month,uchar day)
{
uchar result; //返回值变量
uchar day1; //读出当前年月对应的节气日期
if(day>15)
{
day-=15;
day1=ChinaSolarTerms[(year-1901)*12+month-1]&0x0f;
if(day==day1)result=1; //若当前日期和节气日期相同则说明该天是二十四节气之一
else result=0;
}
else
{
day=15-day;
day1=ChinaSolarTerms[(year-1901)*12+month-1]&0x0f0;
day1>>=4;
if(day==day1)result=1;
else result=0;
}
return result;
}
void DateTimeDisplay(SYSTEMTIME showtime)
{
uchar week,year1,month,day; //week存储星期几,year1为当前年份后两位,month为当前月份,day为当前日子
uchar TianGan,DiZhi; //TianGan为天干序号,DiZhi为地支序号
uint allyear; //allyear为当前年份
uchar result,result0; //result存放公历转换农历是否成功,result0存放当前日期是否是二十四节气之一
SetStartLine(0);
ChineseDisplay(1,0,0,0);
ChineseDisplay(1,0,16,1); //显示 公历 二字
SymbolDisplay(1,0,32,10);
SymbolDisplay(1,0,40,year0/10);
SymbolDisplay(1,0,48,year0%10);
SymbolDisplay(1,0,48+8,showtime.DateBit[0]); //显示日期 格式 年-月-日
SymbolDisplay(2,0,48+8*2,showtime.DateBit[1]);
SymbolDisplay(2,0,48+8*3,11);
SymbolDisplay(2,0,48+8*4,showtime.DateBit[2]);
SymbolDisplay(2,0,48+8*5,showtime.DateBit[3]);
SymbolDisplay(2,0,48+8*6,11);
SymbolDisplay(2,0,48+8*7,showtime.DateBit[4]);
SymbolDisplay(2,0,48+8*8,showtime.DateBit[5]);
year1=showtime.DateBit[0]*10+showtime.DateBit[1];
month=showtime.DateBit[2]*10+showtime.DateBit[3];
day=showtime.DateBit[4]*10+showtime.DateBit[5];
week=SetWeek(year1,month,day); //获得星期几
ChineseDisplay(1,2,0,2); //显示星期,格式 星期几
ChineseDisplay(1,2,16,3);
ChineseDisplay(1,2,32,week+3);
SymbolDisplay(2,2,64,showtime.TimeBit[0]); //显示时间,格式 时:分:秒
SymbolDisplay(2,2,64+8,showtime.TimeBit[1]);
SymbolDisplay(2,2,64+8*2,10);
SymbolDisplay(2,2,64+8*3,showtime.TimeBit[2]);
SymbolDisplay(2,2,64+8*4,showtime.TimeBit[3]);
SymbolDisplay(2,2,64+8*5,10);
SymbolDisplay(2,2,64+8*6,datetime.TimeBit[4]);
SymbolDisplay(2,2,64+8*7,datetime.TimeBit[5]);
allyear=year0*100+year1; //公历年转换为农历天干地支年
TianGan=(allyear-3)%10;
DiZhi=(allyear-3)%12;
if(TianGan==0)TianGan=10;
if(DiZhi==0)DiZhi=12;
ChineseDisplay(1,4,0,10+TianGan);
ChineseDisplay(1,4,16,20+DiZhi);
ChineseDisplay(1,4,32,33);
result=GetChinaCalendar(allyear,month,day); //公历日期转换为农历日期
if(result==1)
{
if(IsRunYue==1) //判断当前月是否为农历闰月,是则显示 闰
{
ChineseDisplay(1,4,48,35);
}
if(NLmonth==1)ChineseDisplay(2,4,64,36); //判断当前月是否为农历正月,是则显示 正
else
{
ChineseDisplay(2,4,64,NLmonth+38); //不是则显示 二或者三直到冬、腊
}
ChineseDisplay(2,4,80,34); //显示 月
if(NLday/10==0) //判断是否为 初一到初九,是则显示 初几
{
ChineseDisplay(2,4,96,37);
ChineseDisplay(2,4,112,NLday+38);
}
else if(NLday/10==1)
{
if(NLday%10==0) //判断是否为初十,是则显示 初十
{
ChineseDisplay(2,4,96,37);
ChineseDisplay(2,4,112,38+10);
}
else
{
ChineseDisplay(2,4,96,38+10); //不是则显示 十几
ChineseDisplay(2,4,112,NLday%10+38);
}
}
else if(NLday/10==2) //判断是否为二十到廿九
{
if(NLday%10==0) //判断是否为二十,是则显示 二十
{
ChineseDisplay(2,4,96,40);
ChineseDisplay(2,4,96,38+10);
}
else //不是则显示 廿几
{
ChineseDisplay(2,4,96,38);
ChineseDisplay(2,4,112,NLday%10+38);
}
}
else //判断是否为三十时 是则显示 三十
{
ChineseDisplay(2,4,96,NLday/10+38);
ChineseDisplay(2,4,112,38+10);
}
}
result0=SetSolarTerms(allyear,month,day);
if(result0==1) //判断当前日期是否为二十四节气之一,是则显示对应节气,否则不显示
{
if(day>15)
{
ChinaSolarDisplay(1,6,0,(month-1)*4+2);
ChinaSolarDisplay(1,6,16,(month-1)*4+3);
}
else
{
ChinaSolarDisplay(1,6,0,(month-1)*4);
ChinaSolarDisplay(1,6,16,(month-1)*4+1);
}
}
//delay_ms(50);
}
uchar flag,temp,i=0,keycount=0;
uchar keynums[14];
uchar j,keynum,hour,minute,second,Clockyear,Clockmonth,Clockday;
void keyscanProcess()
{
uchar ;
P2=0xfe; //第0行置0,其余行置1,列全置1
if(P2!=0xfe) //扫描第0行
{
delay_ms(20); //延时20ms去抖动
if(P2!=0xfe)
{
temp=P2&0xf0; //保留有效位
keycount++;
switch(temp)
{
case 0xe0:keynum=0; break; //说明按下的按键在第0行第0列,键号为0
case 0xd0:keynum=1; break; //说明按下的按键在第0行第1列,键号为1
case 0xb0:keynum=2; break; //说明按下的按键在第0行第2列,键号为2
case 0x70:keynum=3; break; //说明按下的按键在第0行第3列,键号为3
}
}
while(P2!=0xfe); //等待按键释放
if(keynum==0||keynum==1||keynum==2||keynum==3)
{
keynums[i]=keynum;
i++;
}
}
P2=0xfd; //第1行置0,其余行置1,列全置1,
if(P2!=0xfd) //扫描第1行
{
delay_ms(20); //延时20ms去抖动
if(P2!=0xfd)
{
temp=P2&0xf0;
keycount++;
switch(temp)
{
case 0xe0:keynum=4; break; //按下的按键在第1行第0列,键号为4
case 0xd0:keynum=5; break; //按下的按键在第1行第1列,键号为5
case 0xb0:keynum=6; break; //按下的按键在第1行第2列,键号为6
case 0x70:keynum=7; break; //按下的按键在第1行第3列,键号为7
}
}
while(P2!=0xfd); //等待按键释放
if(keynum==4||keynum==5||keynum==6||keynum==7)
{
keynums[i]=keynum;
i++;
}
}
P2=0xfb; //第2行置0,其余行置1,列全置1
if(P2!=0xfb) //扫描第2行
{
delay_ms(20); //延时20ms去抖动
if(P2!=0xfb)
{
temp=P2&0xf0;
switch(temp)
{
case 0xe0:keynum=8; break; //按下的按键在第2行第0列,键号为8
case 0xd0:keynum=9; break; //按下的按键在第2行第1列,键号为9
case 0xb0:keynum=10; break; //按下的按键在第2行第2列,键号为10
case 0x70:keynum=11; break; //按下的按键在第2行第3列,键号为11
}
}
while(P2!=0xfb); //等待按键释放
if(keynum==8||keynum==9) //键号为8或者9
{
keycount++;
keynums[i]=keynum;
i++;
}
/*if(keynum==10) //键号为10表示
{
if(i==0)i++;
i--;
} */
if(keynum==11) //键号为11
{
if(keycount<=8)SymbolDisplay(2,2,64+(keycount-1)*8,12); //清除输错位置
else SymbolDisplay(2,4,64+(keycount-9)*8,12);
keycount--;
i--;
}
}
P2=0xf7; //第3行置0,其余行置1,列全置1
if(P2!=0xf7) //扫描第三行
{
delay_ms(20); //延时20ms去抖动
if(P2!=0xf7)
{
temp=P2&0xf0;
switch(temp)
{
case 0xe0:keynum=12; break; //按下的按键在第3行第0列,键号为12
case 0xd0:keynum=13; break; //按下的按键在第3行第1列,键号为13
case 0xb0:keynum=14; break; //按下的按键在第3行第2列,键号为14
case 0x70:keynum=15; break; //按下的按键在第3行第3列,键号为15
}
}
while(P2!=0xf7); //等待按键释放
switch(keynum)
{
case 12: //键号为12
ClearScreen(0);
ChineseDisplay(1,0,32,55); //显示 时间设置
ChineseDisplay(1,0,48,56);
ChineseDisplay(2,0,64,57);
ChineseDisplay(2,0,80,58);
ChineseDisplay(1,2,0,51); //显示 输入日期
ChineseDisplay(1,2,16,52);
ChineseDisplay(1,2,32,53);
ChineseDisplay(1,2,48,54);
ChineseDisplay(1,4,0,51); //显示 输入时间
ChineseDisplay(1,4,16,52);
ChineseDisplay(1,4,32,55);
ChineseDisplay(1,4,48,56);
break;
case 13:
ClearScreen(0);
ChineseDisplay(1,0,32,59); //显示 闹钟设置
ChineseDisplay(1,0,48,60);
ChineseDisplay(2,0,64,57);
ChineseDisplay(2,0,80,58);
ChineseDisplay(1,2,0,51); //显示 输入日期
ChineseDisplay(1,2,16,52);
ChineseDisplay(1,2,32,53);
ChineseDisplay(1,2,48,54);
ChineseDisplay(1,4,0,51); //显示 输入时间
ChineseDisplay(1,4,16,52);
ChineseDisplay(1,4,32,55);
ChineseDisplay(1,4,48,56);
break;
case 15: //键号为15表示设置完成
if(keycount==14)
{
ClearScreen(0);
year0=keynums[0]*10+keynums[1];
Clockyear=keynums[2]*10+keynums[3];
Clockmonth=keynums[4]*10+keynums[5];
Clockday=keynums[6]*10+keynums[7];
hour=keynums[8]*10+keynums[9];
minute=keynums[10]*10+keynums[11];
second=keynums[12]*10+keynums[13];
flag=1;
for(i=0;i<14;i++)keynums[i]=0;
i=0;
keycount=0;
}
break;
}
}
if(keycount<=8)
{
for(j=0;j<keycount;j++)
SymbolDisplay(2,2,64+j*8,keynums[j]);
}
else
{
for(j=0;j<keycount-8;j++)
SymbolDisplay(2,4,64+j*8,keynums[j+8]);
}
}
//扫描按键子程序
uchar keyscan()
{
uchar keytemp,key,num,k;//定义无符号字符型变量
//行值后四位显示,列值前四位显示,根据线反转法得到按键所在行和列
P2=0xf0; //P3.0-P3.3置0,P3.4-P3.7置1,即行置为0,列置为1,确定按键所在列
if(P2!=0XF0)
{
delay_ms(10); //调用短延时子程序去抖动
P2=0xf0; //重新行置0,列置1
if(P2!=0XF0)
{
keytemp=P2;
P2=0x0f; //P3.0-P3.3置1,P3.4-P3.7置0,即行置为1,列置为0,确定按键所在行
key=keytemp|P2; //按键所在行和列的位置为0,其余位置为1
key=0xff-key; //按位取反,则按键所在行和列的位置为1,其余位置为0
for(k=0;k<16;k++)
{
if(key==KEY_TABLE[k])//查按键所在行、列
{
num=k; //保存按键键号
break; //跳出循环
}
}
return num;
}
}
return -1;
}
//闹钟音乐播放子程序
void MusicPlay()
{
uint i=0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
{
for(j=0;j<SONG_LONG[i]*20;j++)
{
Beep=~Beep;
for(k=0;k<SONG_TONE[i]/3;k++);
}
DS1302_GetTime(&datetime); //获得当前日期和时间
DateToBit(&datetime); //获得当前年月日各个位上的数字
TimeToBit(&datetime); //获得当前时分秒各个位上的数字
DateTimeDisplay(datetime);
delay_ms(10);
i++;
}
}
void DHT11_Delay1() //DHT11 10us延时子程序
{
uchar i,j;
for(j=6;i>0;j--)
i--;
}
void DHT11_Delay2(uchar ms) //DHT11 ms延时子程序
{
uchar i;
while(ms--)
for(i=0;i<250;i++);
}
void DHT11_start() //
{
DHT11_IO=1;
DHT11_Delay1();
DHT11_IO=0;
DHT11_Delay2(20); //延时18ms以上
DHT11_IO=1;
DHT11_Delay1();
DHT11_Delay1();
DHT11_Delay1();
DHT11_Delay1();
DHT11_Delay1();
}
uchar DHT11_rec_byte() //接收一个字节子程序
{
uchar i,temp,dat;
for(i=0;i<8;i++) //从高到低依次接收8位数据
{
while(!DHT11_IO); 等待50us低电平过去
temp=0;
DHT11_Delay1(); //延时40us,如果还为高则数据为1,否则为0
DHT11_Delay1();
DHT11_Delay1();
DHT11_Delay1();
if(DHT11_IO==1)temp=1; //数据为1时,使dat加1来接收数据1
while(DHT11_IO); //等待数据线拉低
dat<<=1; //移位使正确接收8位数据,数据为0时直接移位
dat|=temp;
}
return dat;
}
void DHT11_ReceiveDisplay() //接收40位的数据
{
uchar i,R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
DHT11_start();
if(DHT11_IO==0)
{
while(!DHT11_IO); //等待拉高
for(i=0;i<8;i++)
DHT11_Delay1();
R_H=DHT11_rec_byte(); //接收湿度高八位
R_L=DHT11_rec_byte(); //接收湿度低八位
T_H=DHT11_rec_byte(); //接收温度高八位
T_L=DHT11_rec_byte(); //接收温度低八位
revise=DHT11_rec_byte(); //接收校正位
DHT11_IO=0;
DHT11_Delay1(); //结束
DHT11_IO=1;
if((R_H+R_L+T_H+T_L)==revise) //校正
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
}
//数据处理并显示
SymbolDisplay(2,6,64,RH/10);
SymbolDisplay(2,6,64+8,RH%10);
SymbolDisplay(2,6,64+8*2,19);
SymbolDisplay(2,6,64+8*3,16);
SymbolDisplay(2,6,64+8*4,17);
SymbolDisplay(2,6,64+8*5,TH/10);
SymbolDisplay(2,6,64+8*6,TH%10);
SymbolDisplay(2,6,64+8*7,18);
}
//主程序
void main()
{
uchar breakflag,num,hour1,hour2;
Initial_DS1302(); //ds1302初始化
lcd_init(); //lcd12864初始化
BUZZER_LED=1; //蜂鸣器和LED报警电路初始化
Beep=0; //闹钟播放器初始化
//InitUART();
ClearScreen(0);
year0=20;
while(1)
{
while(1)
{
DS1302_GetTime(&datetime);
DateToBit(&datetime); //获得当前年月日各个位上的数字
TimeToBit(&datetime); //获得当前时分秒各个位上的数字
DateTimeDisplay(datetime);
DHT11_ReceiveDisplay();
num=keyscan();
if(num!=-1)break;
}
if(num==12) //当按下时间设置时
{
while(1)
{
keyscanProcess();
if(flag==1)
{
DS1302_SetTime(DS1302_SECOND,second);
DS1302_SetTime(DS1302_MINUTE,minute);
DS1302_SetTime(DS1302_HOUR,hour);
DS1302_SetTime(DS1302_DAY,Clockday);
DS1302_SetTime(DS1302_MONTH,Clockmonth);
DS1302_SetTime(DS1302_YEAR,Clockyear);
while(1)
{
DS1302_GetTime(&datetime); //获得当前日期和时间
DateToBit(&datetime); //获得当前年月日各个位上的数字
TimeToBit(&datetime); //获得当前时分秒各个位上的数字
DateTimeDisplay(datetime);
if(keyscan()==10)
{
breakflag=1;
break;
} //退出当前模式
}
flag=0;
}
if(breakflag==1)
{
breakflag=0;
break;
} //退出当前模式
}
}
else if(num==14) //AM,PM设置
{
if(datetime.TimeBit[0]*10+datetime.TimeBit[1]>=13)
{
hour1=datetime.TimeBit[0];
hour2=datetime.TimeBit[1];
datetime.TimeBit[0]-=1;
datetime.TimeBit[1]-=2;
SymbolDisplay(1,2,48,14);
SymbolDisplay(1,2,56,15);
}
else
{
hour1=datetime.TimeBit[0];
hour2=datetime.TimeBit[1];
SymbolDisplay(1,2,48,13);
SymbolDisplay(1,2,56,15);
}
hour=datetime.TimeBit[0]*10+datetime.TimeBit[1];
DS1302_SetTime(DS1302_HOUR,hour);
while(1)
{
DateTimeDisplay(datetime);
if(keyscan()==10)
{
DS1302_SetTime(DS1302_HOUR,hour1*10+hour2);
SymbolDisplay(1,2,48,12);
SymbolDisplay(1,2,56,12);
break;
} //退出当前模式
}
}
else if(num==13) //闹钟设置
{
while(1)
{
keyscanProcess();
if(flag==1)
{
while(1)
{
DS1302_GetTime(&datetime); //获得当前日期和时间
DateToBit(&datetime); //获得当前年月日各个位上的数字
TimeToBit(&datetime); //获得当前时分秒各个位上的数字
DateTimeDisplay(datetime);
SymbolDisplay(2,6,64,hour/10);
SymbolDisplay(2,6,72,hour%10);
SymbolDisplay(2,6,80,10);
SymbolDisplay(2,6,88,minute/10);
SymbolDisplay(2,6,96,minute%10);
SymbolDisplay(2,6,104,10);
SymbolDisplay(2,6,112,second/10);
SymbolDisplay(2,6,120,second%10);
if(Clockyear==datetime.Year&&Clockmonth==datetime.Month
&&Clockday==datetime.Day&&hour==datetime.Hour
&&minute==datetime.Minute&&second==datetime.Second)
{
breakflag=1;
break;
} //退出当前模式
breakflag=0;
}
flag=0;
}
if(breakflag==1)
{
BUZZER_LED=0;
MusicPlay();
delay_ms(500);
BUZZER_LED=1;
for(breakflag=0;breakflag<8;breakflag++)
SymbolDisplay(2,6,64+breakflag*8,12);
breakflag=0;
break;
} //退出当前模式
}
}
}
}
基本功能:
首先是主界面的显示,然后是时间设置界面,闹钟设置界面。
- 主界面显示的话包括当前公历年月日,星期,时分秒,以及农历年月日的显示。至于二十四节气的话如果当天为二十四节气则显示否则不显示。最后就是温湿度的显示。仿真的话这个温湿度数据可能有问题。
- 在完成这些部分显示算法的时候公历年月日、时分秒显示都可以直接读DS1302中的数据,星期的话就以1901年1月1日星期二为基准来计算得到。然后主要是农历和二十四节气显示的话,农历年份倒是可以根据公历年份来推算天干地支,但是月份和是否是闰月以及二十四节气没有固定的算法,只能先将农历月份、闰年月份和二十四节气的日期存放在数组中,之后根据公历年份去对比。所以目前支持的时间范围是1901年-2099年。
- PM/AM显示的话按下AM/PM显示按键则将时间转换为12小时制,按下返回键则恢复24小时制显示。
- 时间设置的话按下时间设置按键,就可以显示时间设置界面,然后依次输入公历年月日时分秒,输错可以点击清除按键清除,设置完成后点击设置完成按键即可,之后跳转到主界面按照设置时间显示,注意再进入其他模式时需要先点击返回按键。
- 闹钟设置的话也是点击闹钟设置按键,进入闹钟设置界面,同理输入定时的日期时间即可,点击设置完成后回到主界面,这时主界面下方会显示闹钟时间,当闹钟时间到之后LED灯点亮,蜂鸣器会响动,响铃为生日快乐歌,这是通过音乐节拍实现的。实际上也可以外接一个音乐播放器实现音乐播放。
- 放两张仿真和实物效果图
原理图
初版的原理图如上,主要是分为了单片机模块、lcd12864显示模块、时钟模块、音频播放模块、烟雾检测模块、DHT11温湿度检测模块、蓝牙模块、矩阵按键等。
在之后的实际测试和焊接过程中,我发现有很多电路是多余的,因为买的元器件上有的已经集成好了一些基础的电阻电容之类的电路。因此为了方便起见,我后来又简化了自己的原理图。
高级功能
先推荐一个易安卓入门教程:https://www.bilibili.com/video/BV1Ft411J7D2?p=32&t=25
在做app的时候首先考虑进行安卓原生的开发,之后又转向react native框架下的移动开发,发现对于socket多线程没太理解,不太明白怎么处理蓝牙收发数据时候的转换问题。最后在同学的建议下选择用易安卓进行app开发,这种操作起来比较方便。在蓝牙模块串口调试的时候多次出现收发数据不一致的问题,原因主要是因为蓝牙模块和单片机程序以及串口调试助手这三者的波特率出现了不一致的问题,另外如果从手机蓝牙发送过来的数据实际上是ASCII码值,最后在程序中需要进行一下格式的转换,这个也比较好操作。下面是用react native做的APP界面和用易安卓做的APP。
易安卓蓝牙APP程序
变量 字节数组 为 字节型()
变量 设置功能数组 为 字节型()
变量 烟雾警报字节 为 字节型
事件 主窗口.创建完毕()
保存窗口("主窗口",主窗口)
结束 事件
事件 按钮1.被单击()'时间设置
设置功能数组=文本到字节("1","UTF-8")
编辑框1.显示光标()
蓝牙1.发送数据(设置功能数组)
结束 事件
事件 按钮2.被单击()'闹钟设置
设置功能数组=文本到字节("2","UTF-8")
编辑框1.显示光标()
蓝牙1.发送数据(设置功能数组)
结束 事件
事件 按钮3.被单击()'AM/PM显示
设置功能数组=文本到字节("3","UTF-8")
蓝牙1.发送数据(设置功能数组)
结束 事件
事件 按钮4.被单击()
设置功能数组=文本到字节("4","UTF-8")
蓝牙1.发送数据(设置功能数组)
结束 事件
事件 按钮6.被单击()'蓝牙发送数据
字节数组=文本到字节(编辑框1.内容,"UTF-8")
蓝牙1.发送数据(字节数组)
'编辑框1.删除文本(0,14)
结束 事件
事件 按钮5.被单击()'蓝牙设备搜索
高级列表框1.清空项目()
蓝牙1.搜索设备()
结束 事件
事件 蓝牙1.发现设备(设备名称 为 文本型,设备地址 为 文本型,是否已配对 为 逻辑型)
高级列表框1.添加项目("InnovationCollege.JPG",设备名称,设备地址,"lianjie.jpg","连接")
结束 事件
事件 高级列表框1.按钮被单击(项目索引 为 整数型)
蓝牙1.连接设备(高级列表框1.取项目信息(项目索引))
结束 事件
事件 蓝牙1.连接完毕(连接结果 为 逻辑型,设备名称 为 文本型,设备地址 为 文本型,连接模式 为 整数型)
判断 连接结果
分支 真
编辑框2.内容=设备名称 & "已连接"
弹出提示("设备名称" & 设备名称 & "连接成功")
分支 假
编辑框2.内容="蓝牙未连接"
弹出提示("设备名称" & 设备名称 & "连接失败")
结束 判断
结束 事件
事件 开关1.状态被改变(状态 为 逻辑型)
判断 状态
分支 真
判断 蓝牙1.是否存在()
分支 真
蓝牙1.开启蓝牙()
蓝牙1.置可被发现()
分支 假
弹出提示("手机不存在蓝牙")
结束 判断
分支 假
蓝牙1.关闭蓝牙()
编辑框2.内容="蓝牙未连接"
高级列表框1.清空项目()
结束 判断
结束 事件
事件 蓝牙1.收到数据(数据 为 字节型(),设备名称 为 文本型,设备地址 为 文本型)
烟雾警报字节=数据(0)
如果 字节到整数2(烟雾警报字节)=0 则
编辑框3.内容="警报!当前环境异常"
否则
编辑框3.内容="当前环境正常"
结束 如果
结束 事件
单片机蓝牙通信代码
/*******************************************************************************
* 函数名 :UsartInit()
* 函数功能 :设置串口
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
/*******************************************************************************
* 函数名 : Usart() interrupt 4
* 函数功能 : 串口通信中断函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
上面是串口初始化和中断服务函数,具体接收数据后操作代码大家可以自己尝试着去写。