万年历单片机课程设计百度文库_单片机课设带农历的万年历

#include

#define uchar unsigned char

#define uint unsigned int

#define NoUpLine         1

#define UpLine           0

#define NoUnderLine 1

#define UnderLine        0

#define FALSE        0

#define TRUE    1

/*--------------------------------------------------------------------------

REG51.H

Header file for generic 80C51 and 80C31 microcontroller.

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

All rights reserved.

--------------------------------------------------------------------------*/

#ifndef __REG51_H__

#define __REG51_H__

/*  BYTE Register  */

sfr P0   = 0x80;

sfr P1   = 0x90;

sfr P2   = 0xA0;

sfr P3   = 0xB0;

sfr PSW  = 0xD0;

sfr ACC  = 0xE0;

sfr B    = 0xF0;

sfr SP   = 0x81;

sfr DPL  = 0x82;

sfr DPH  = 0x83;

sfr PCON = 0x87;

sfr TCON = 0x88;

sfr TMOD = 0x89;

sfr TL0  = 0x8A;

sfr TL1  = 0x8B;

sfr TH0  = 0x8C;

sfr TH1  = 0x8D;

sfr IE   = 0xA8;

sfr IP   = 0xB8;

sfr SCON = 0x98;

sfr SBUF = 0x99;

/*  BIT Register  */

/*  PSW   */

sbit CY   = 0xD7;

sbit AC   = 0xD6;

sbit F0   = 0xD5;

sbit RS1  = 0xD4;

sbit RS0  = 0xD3;

sbit OV   = 0xD2;

sbit P    = 0xD0;

/*  TCON  */

sbit TF1  = 0x8F;

sbit TR1  = 0x8E;

sbit TF0  = 0x8D;

sbit TR0  = 0x8C;

sbit IE1  = 0x8B;

sbit IT1  = 0x8A;

sbit IE0  = 0x89;

sbit IT0  = 0x88;

/*  IE   */

sbit EA   = 0xAF;

sbit ES   = 0xAC;

sbit ET1  = 0xAB;

sbit EX1  = 0xAA;

sbit ET0  = 0xA9;

sbit EX0  = 0xA8;

/*  IP   */

sbit PS   = 0xBC;

sbit PT1  = 0xBB;

sbit PX1  = 0xBA;

sbit PT0  = 0xB9;

sbit PX0  = 0xB8;

/*  P3  */

sbit RD   = 0xB7;

sbit WR   = 0xB6;

sbit T1   = 0xB5;

sbit T0   = 0xB4;

sbit INT1 = 0xB3;

sbit INT0 = 0xB2;

sbit TXD  = 0xB1;

sbit RXD  = 0xB0;

/*  SCON  */

sbit SM0  = 0x9F;

sbit SM1  = 0x9E;

sbit SM2  = 0x9D;

sbit REN  = 0x9C;

sbit TB8  = 0x9B;

sbit RB8  = 0x9A;

sbit TI   = 0x99;

sbit RI   = 0x98;

#endif

/*-----------------------------------------------------------*/

#define LCD_OFF 0x3E

#define LCD_ON  0x3F

#define Add_X 0xB8     //the start address of the page 0 ;(0~7)

#define Add_Y 0x40     //the start address of the Y counter ; (0~64)

#define Add_Z 0xC0     //the start address of the DDRAM ; (0~64)

#define UPLINE      0x01

#define UNDERLINE        0x80

/*-----------------------------------------------------------*/

#define  LCD12864_DATA_PORT  P0

sbit  LCD12864_EN         =P2^4;

sbit  LCD12864_RW         =P2^3;       //0:write ; 1:read

sbit  LCD12864_RS         =P2^2;           //0:the command .1:the data

sbit  LCD12864_CS_L       =P2^0;       //select the left of the lcd when 1

sbit  LCD12864_CS_R       =P2^1;

sbit  LCD12864_RST                      =P2^5;

/*------------------------------------------------------------*/

void delayus(unsigned int us){

while(us--);

}

/*--------------------------select the LCD--------------------*/

void LCDSel(unsigned char sel){

switch(sel)        {

case 0: LCD12864_CS_L=0;LCD12864_CS_R=0;break;

case 1: LCD12864_CS_L=1;LCD12864_CS_R=0;break;       //left

case 2: LCD12864_CS_L=0;LCD12864_CS_R=1;break;                //right

default:;

};

}

/*------------------------------------------------------------*/

void WaitLCD(){

unsigned char flag;

LCD12864_DATA_PORT=0xFF;

LCD12864_RW=1;

LCD12864_RS=0;

LCD12864_EN=1;

LCD12864_EN=1;

LCD12864_EN=0;

LCD12864_DATA_PORT=0xFF;                //读有效数据

LCD12864_RW=1;

LCD12864_RS=0;

LCD12864_EN=1;

do{

flag=LCD12864_DATA_PORT;

LCD12864_DATA_PORT=0xFF;

}while(!((flag&0x80)==0x80));

LCD12864_EN=0;

}

/*-------------------------------------------------------------*/

void WriteDatToLCD12864(unsigned char dat){

//   WaitLCD();

LCD12864_RS=1;   //the data

LCD12864_RW=0;   //write

LCD12864_DATA_PORT=dat;

LCD12864_EN=1;

LCD12864_EN=0;

}

/*-------------------------------------------------------------*/

void WriteCmdToLCD12864(unsigned char cmd){

//   WaitLCD();

LCD12864_RS=0;   //the command

LCD12864_RW=0;        //write

LCD12864_DATA_PORT=cmd;

LCD12864_EN=1;

LCD12864_EN=0;

}

/*-------------------------------------------------------------*/

unsigned char ReadDatFromLCD12864(void){

unsigned char dat;

WaitLCD();

LCD12864_DATA_PORT=0xFF;                      //读空操作

LCD12864_RS=1;    //the data

LCD12864_RW=1;     //read

LCD12864_EN=1;

LCD12864_EN=1;

LCD12864_EN=0;

LCD12864_DATA_PORT=0xFF;                          //读有效数据

LCD12864_RS=1;

LCD12864_RW=1;

LCD12864_EN=1;

dat=LCD12864_DATA_PORT;

LCD12864_EN=0;

return dat;

}

/*--------------------------------------------------------------*/

//from the chip manual

void LCD12864_init(void){

LCD12864_RST=0;

delayus(50);

LCD12864_RST=1;

LCDSel(0);       //left and right

WriteCmdToLCD12864(LCD_OFF);

WriteCmdToLCD12864(LCD_ON);

}

/*------------------------------------------------------------*/

//x:0~7

void SetX(unsigned char x){

WriteCmdToLCD12864(Add_X+x);

}

/*------------------------------------------------------------*/

//y:0~127

void SetY(unsigned char y){

WriteCmdToLCD12864(Add_Y+y);

}

/*------------------------------------------------------------*/

//z:0~63

void SetZ(unsigned char z){

WriteCmdToLCD12864(Add_Z+z);

}

/*------------------------------------------------------------*/

void ClearLCD(){

int i,j;

LCDSel(0);

for(j=0;j<8;j++)        {

WriteCmdToLCD12864(LCD_ON);

SetX(j);

WriteCmdToLCD12864(Add_Y);  //diffrent from SetY(0),SetY(64);

SetZ(0);

for (i=0;i<64;i++)           {

WriteDatToLCD12864(0x00);

}

}

}

/*------------------------------------------------------------*/

//左上角第一个点为原点,向下Y为轴,向右为X轴

//x:0~63~127    y:0~63

//flag :  0:擦除某个点

//        1:显示某个点

unsigned char code Tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void Dot(char x,char y,bit flag){

unsigned char dat;

if(x<64){

LCDSel(1);

SetX(y/8);   //set the page address

SetY(x);         //set the Y adress

dat=ReadDatFromLCD12864();

if(flag)

dat=dat|(Tab[y%8]);

else

dat=dat&(~(Tab[y%8]));

SetY(x);         //set the Y adress

WriteDatToLCD12864(dat);

}

else if(x<128){

LCDSel(2);

SetX(y/8);

SetY(x-64);

dat=ReadDatFromLCD12864();

if(flag)

dat=dat|(Tab[y%8]);

else

dat=dat&(~(Tab[y%8]));

SetY(x-64);

WriteDatToLCD12864(dat);

}

}

/*------------------------------------------------------------*/

//draw a line between point(x1,y1) and point(x2,y2)

//flag   0:erase the line    1:draw a line

void Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag){

unsigned char i;

unsigned char temp;

float k;

if(x1==x2){

if(y1>y2){

temp=x1;x1=x2;x2=temp;

temp=y1;y1=y2;y2=temp;

}

for(i=y1;i<=y2;i++){

Dot(x1,i,flag);

}

}else{

if(x1>x2){

temp=x1;x1=x2;x2=temp;

temp=y1;y1=y2;y2=temp;

}

k=(float)(y2-y1)/(float)(x2-x1);

for(i=0;i

Dot(x1+i,(unsigned char)(y1+k*i),flag);

}

}

}

/*-------------------------------------------------------------*/

void Rect(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag){

Line(x1,y1,x2,y1,flag);

Line(x2,y1,x2,y2,flag);

Line(x2,y2,x1,y2,flag);

Line(x1,y2,x1,y1,flag);

}

/*-------------------------------------------------------------*/

//16*16

//x行  0~7      y列 0~127

//flag 0:汉字反白显示

//upline: 0表示有上划线

//underline: 0表示有下划线

void hz_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code * hz,bit flag,bit upline,bit underline){

unsigned char i,j;

for (j=0;j

//显示上半个汉字

for(i=0;i<16;i++){

//点的位置是在左还是右

if(y+16*j+i<64){

LCDSel(1);

WriteCmdToLCD12864(LCD_ON);

SetX(x);

SetZ(0);

SetY(y+16*j+i);

if(upline){

if(flag)

WriteDatToLCD12864(hz[32*j+i]);

else

WriteDatToLCD12864(~hz[32*j+i]);

}

else{

if(flag)

WriteDatToLCD12864(hz[32*j+i]|UPLINE);

else

WriteDatToLCD12864(~hz[32*j+i]|UPLINE);

}

}

else if(y+16*j+i<128){

LCDSel(2);

WriteCmdToLCD12864(LCD_ON);

SetX(x);

SetZ(0);

SetY(y+16*j+i-64);

if(upline){

if(flag)

WriteDatToLCD12864(hz[32*j+i]);

else

WriteDatToLCD12864(~hz[32*j+i]);

}

else{

if(flag)

WriteDatToLCD12864(hz[32*j+i]|UPLINE);

else

WriteDatToLCD12864(~hz[32*j+i]|UPLINE);

}

}

}

//显示下半个汉字

for(i=16;i<32;i++){

//先判断点是在左还是在右

if(y+16*j+i-16<64){

if(x+1<8){               //最后一行显示上半个字

LCDSel(1);

WriteCmdToLCD12864(LCD_ON);

SetX(x+1);

SetZ(0);

SetY(y+16*j+i-16);

if(underline){

if(flag)

WriteDatToLCD12864(hz[32*j+i]);

else

WriteDatToLCD12864(~hz[32*j+i]);

}

else{

if(flag)

WriteDatToLCD12864(hz[32*j+i]|UNDERLINE);

else

WriteDatToLCD12864(~hz[32*j+i]|UNDERLINE);

}

}

}else if(y+16*j+i-16<127){

if(x+1<8){               //最后一行

LCDSel(2);

WriteCmdToLCD12864(LCD_ON);

SetX(x+1);

SetZ(0);

SetY(y+16*j+i-16-64);

if(underline){

if(flag)

WriteDatToLCD12864(hz[32*j+i]);

else

WriteDatToLCD12864(~hz[32*j+i]);

}

else{

if(flag)

WriteDatToLCD12864(hz[32*j+i]|UNDERLINE);

else

WriteDatToLCD12864(~hz[32*j+i]|UNDERLINE);

}

}

}

}

}

}

/*-------------------------------------------------------------*/

//x:行0~7

//y:列0~127

//asc: 指向标准交换码

//string: 指向要显示的字符串

//flag:  0 反白显示

//online: 0 带上划线

//underline : 0带下划线

//n: the number of the string

void en_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code *asc,unsigned char *string,bit flag,bit online,bit underline){

unsigned char i,j,loc;

for (j=0;j

loc=string[j]-0x20;            //确定要显示的字符在asc表中的位置(乘上16)

//显示上半个字母

for(i=0;i<8;i++){

//点的位置是在左还是右

if(y+8*j+i<64){

LCDSel(1);

WriteCmdToLCD12864(LCD_ON);

SetX(x);

SetZ(0);

SetY(y+8*j+i);

if(online){

if(flag)

WriteDatToLCD12864(asc[16*loc+i]);

else

WriteDatToLCD12864(~asc[16*loc+i]);

}

else{

if(flag)

WriteDatToLCD12864(asc[16*loc+i]|UPLINE);

else

WriteDatToLCD12864(~asc[16*loc+i]|UPLINE);

}

}

else if(y+8*j+i<128){

LCDSel(2);

WriteCmdToLCD12864(LCD_ON);

SetX(x);

SetZ(0);

SetY(y+8*j+i-64);

if(online){

if(flag)

WriteDatToLCD12864(asc[16*loc+i]);

else

WriteDatToLCD12864(~asc[16*loc+i]);

}

else {

if(flag)

WriteDatToLCD12864(asc[16*loc+i]|UPLINE);

else

WriteDatToLCD12864(~asc[16*loc+i]|UPLINE);

}

}

}

//显示下半个字母

for(i=8;i<16;i++){

//先判断点是在左还是在右

if(y+8*j+i-8<64){

if(x+1<8){        //最后一行

LCDSel(1);

WriteCmdToLCD12864(LCD_ON);

SetX(x+1);

SetZ(0);

SetY(y+8*j+i-8);

if(underline){

if(flag)

WriteDatToLCD12864(asc[16*loc+i]);

else

WriteDatToLCD12864(~asc[16*loc+i]);

}

else{

if(flag)

WriteDatToLCD12864(asc[16*loc+i]|UNDERLINE);

else

WriteDatToLCD12864(~asc[16*loc+i]|UNDERLINE);

}

}

}

else if(y+8*j+i-8<128){

if(x+1<8){               //最后一行

LCDSel(2);

WriteCmdToLCD12864(LCD_ON);

SetX(x+1);

SetZ(0);

SetY(y+8*j+i-8-64);

if(underline){

if(flag)

WriteDatToLCD12864(asc[16*loc+i]);

else

WriteDatToLCD12864(~asc[16*loc+i]);

}

else{

if(flag)

WriteDatToLCD12864(asc[16*loc+i]|UNDERLINE);

else

WriteDatToLCD12864(~asc[16*loc+i]|UNDERLINE);

}

}

}

}

}

}

//亦木明 2008.2.23

//显示一个16X32的字符

void Show16X32(unsigned char line,unsigned char column, unsigned char code *pt,bit flag){

unsigned char i,column_temp1,column_temp2,column_temp3;

column_temp1=column;

column_temp2=column;

column_temp3=column;

LCDSel(1);                         //选通左屏

SetY(column);                      //设置起始列

SetX(line);                          //设置行

for(i=0;i<16;i++){

if(column>=64){                      //如果列>=64,则选通右屏

LCDSel(2);

column=column%64;               //设置右屏起始列

SetY(column);

SetX(line);

}

if(flag)

WriteDatToLCD12864(*pt);                     //写数据

else

WriteDatToLCD12864(~(*pt));

pt++;

column++;

}

LCDSel(1);

SetX(line+1);

column=column_temp1;

SetY(column);

for(i=0;i<16;i++){

if(column>=64){

LCDSel(2);

column=column%64;

SetY(column);

SetX(line+1);

}

if(flag)

WriteDatToLCD12864(*pt);                     //写数据

else

WriteDatToLCD12864(~(*pt));

pt++;

column++;

}

LCDSel(1);

SetX(line+2);

column=column_temp2;

SetY(column);

for(i=0;i<16;i++){

if(column>=64){

LCDSel(2);

column=column%64;

SetY(column);

SetX(line+2);

}

if(flag)

WriteDatToLCD12864(*pt);                     //写数据

else

WriteDatToLCD12864(~(*pt));

pt++;

column++;

}

LCDSel(1);

SetX(line+3);

column=column_temp3;

SetY(column);

for(i=0;i<16;i++){

if(column>=64){

LCDSel(2);

column=column%64;

SetY(column);

SetX(line+3);

}

if(flag)

WriteDatToLCD12864(*pt);                     //写数据

else

WriteDatToLCD12864(~(*pt));

pt++;

column++;

}

}

/*-------------------------------------------------------*/

/*从第一列开始向下取8个点作为一个字节,然后从第二列开始向下取8个点作为第二个

字节...依此类推。如果最后不足8个点就补满8位.取模顺序是从低到高,即第一个点作为最

低位。如*-------取为00000001 */

unsigned char   code uMod[][32]=

{

0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,

0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//年

/*--  文字:  月  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,

0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00,

/*--  文字:  日  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,

/*--  文字:  时  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0xFC,0x44,0x44,0xFC,0x20,0x24,0x24,0x24,0x3F,0x24,0xE4,0x24,0x24,0x20,0x00,

0x00,0x1F,0x08,0x08,0x1F,0x01,0x01,0x05,0x19,0x41,0x81,0x7F,0x01,0x01,0x01,0x00,

/*--  文字:  分  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00,

0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  秒  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x12,0x12,0xD2,0xFE,0x91,0x11,0xC0,0x38,0x10,0x00,0xFF,0x00,0x08,0x10,0x60,0x00,

0x04,0x03,0x00,0xFF,0x00,0x83,0x80,0x40,0x40,0x20,0x23,0x10,0x08,0x04,0x03,0x00,

};

unsigned char code ucLunar[][32]=

{

//"初"

0x10,0x10,0x91,0xD6,0x30,0x98,0x00,0x08, 0x08,0xF8,0x08,0x08,0x08,0xFC,0x08,0x00,

0x02,0x01,0x00,0xFF,0x01,0x82,0x40,0x20,0x18,0x07,0x40,0x80,0x40,0x3F,0x00,0x00,

/*--  文字:  一  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  二  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,

0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,

/*--  文字:  三  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,

0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,

/*--  文字:  四  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,

0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,

/*--  文字:  五  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,

0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00,

/*--  文字:  六  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,

0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00,

/*--  文字:  七  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x40,0x40,0x40,0x40,0x40,0x40,0xFE,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x38,0x00,0x00,

/*--  文字:  八  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x00,0x00,0x00,0x80,0x7C,0x08,0x00,0x00,0x7E,0x84,0x00,0x00,0x00,0x00,0x00,

0x20,0x10,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x18,0x30,0x10,0x00,

/*--  文字:  九  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x10,0x10,0x10,0x10,0x90,0x7F,0x10,0x10,0x10,0xF8,0x10,0x00,0x00,0x00,0x00,

0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x78,0x20,0x00,

/*--  文字:  十  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽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,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*--  文字:  农  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x20,0x18,0x08,0x88,0xE8,0x1F,0x6A,0x88,0x08,0x88,0xC8,0xA8,0x1C,0x08,0x00,

0x08,0x04,0x02,0x41,0xFF,0x40,0x20,0x10,0x01,0x02,0x0D,0x18,0x70,0x20,0x20,0x00,

/*--  文字:  历  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x00,0xFE,0x02,0x22,0x22,0x22,0x22,0xFA,0x22,0x22,0x22,0xE2,0x02,0x02,0x00,

0x40,0x30,0x0F,0x00,0x40,0x20,0x18,0x06,0x01,0x00,0x20,0x60,0x3F,0x00,0x00,0x00,

/*--  文字:  星  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,

0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00,

/*--  文字:  期  --*/

/*--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --*/

0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,

0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,

//"正"            15

0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00,

0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00,

//"冬",           16

0x00,0x00,0x20,0x10,0x08,0x17,0xA4,0x44,0xA4,0x94,0x0C,0x04,0x00,0x00,0x00,0x00,

0x04,0x04,0x02,0x02,0x01,0x25,0x24,0x48,0x48,0x80,0x01,0x01,0x02,0x06,0x02,0x00,

//"腊",           17

0x00,0xFE,0x22,0x22,0xFF,0x42,0x48,0x48,0x7F,0x48,0x48,0x7F,0xC8,0x68,0x40,0x00,

0x40,0x3F,0x02,0x82,0xFF,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0xFF,0x01,0x00,0x00,

//"℃",           18

0x00,0x06,0x09,0x09,0xE6,0xF0,0x18,0x08,0x08,0x08,0x18,0x30,0x78,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x30,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00,

//"廿",    19

0x20,0x20,0x20,0x20,0xFE,0x20,0x20,0x20,0x20,0x20,0xFE,0x20,0x20,0x30,0x20,0x00,

0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,0x00

};

unsigned char code SX[][32] =          // 数据表

{

//"猴",

0x22,0x14,0x08,0xF4,0x42,0x21,0xF8,0x17,

0xD2,0x92,0x92,0x92,0xDF,0x92,0x10,0x00,

0x04,0x42,0x81,0x7F,0x00,0x00,0xFF,0x85,

0x44,0x24,0x1F,0x24,0x44,0xC6,0x44,0x00,

//"鸡",

0x08,0x28,0x48,0x88,0x68,0x18,0x00,0xFC,

0x06,0x15,0x44,0x84,0x7E,0x04,0x00,0x00,

0x10,0x08,0x06,0x01,0x02,0x14,0x10,0x13,

0x12,0x12,0x1A,0x52,0x82,0x7F,0x02,0x00,

//"狗",

0x00,0x22,0x14,0x08,0xF4,0x03,0x20,0x98,

0x8F,0x88,0xC8,0x88,0x08,0xFC,0x08,0x00,

0x08,0x44,0x82,0x41,0x3F,0x00,0x00,0x1F,

0x08,0x08,0x4F,0x80,0x40,0x3F,0x00,0x00,

//"猪",

0x40,0x22,0x14,0x08,0xF4,0x02,0x25,0xA4,

0x64,0x3F,0x34,0x2C,0xA4,0x32,0x20,0x00,

0x08,0x04,0x42,0x81,0x7F,0x02,0x01,0xFF,

0x49,0x49,0x49,0x49,0xFF,0x01,0x00,0x00,

//"鼠",

0x00,0xBE,0x2A,0xAA,0x29,0x29,0xE0,0x22,

0xAA,0x2A,0x2A,0xAA,0x3F,0x02,0x00,0x00,

0x40,0x7F,0x20,0x24,0x09,0x40,0x7F,0x20,

0x24,0x09,0x00,0x1F,0x60,0x80,0xE0,0x00,

//"牛",

0x00,0x40,0x30,0x0E,0x08,0x08,0x08,0xFF,

0x08,0x08,0x08,0x0C,0x08,0x80,0x00,0x00,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,

//"虎",

0x00,0x00,0xF8,0x48,0x48,0x48,0xF8,0x4F,

0x4A,0x2A,0x2B,0x0A,0xA8,0x18,0x00,0x00,

0x80,0x40,0x3F,0x80,0x40,0x3C,0x04,0x05,

0x05,0x7F,0x85,0x81,0x81,0xE0,0x00,0x00,

//"兔",

0x20,0x10,0xF8,0x14,0x13,0x12,0x12,0xF2,

0x1A,0x16,0x12,0x10,0xF8,0x10,0x00,0x00,

0x00,0x80,0x83,0x41,0x21,0x19,0x07,0x01,

0x3F,0x41,0x45,0x59,0x43,0x40,0x70,0x00,

//"龙",

0x10,0x10,0x10,0x10,0x10,0x90,0x7F,0x10,

0xF0,0x12,0x14,0x10,0xD0,0x18,0x10,0x00,

0x00,0x80,0x40,0x30,0x0C,0x23,0x20,0x10,

0x3F,0x44,0x42,0x41,0x40,0x40,0x78,0x00,

//"蛇",

0x00,0xF0,0x10,0xFF,0x10,0xF0,0x20,0x18,

0xC8,0x09,0x0E,0x08,0x88,0x28,0x18,0x00,

0x20,0x67,0x22,0x1F,0x12,0x3B,0x00,0x00,

0x3F,0x44,0x42,0x41,0x41,0x40,0x70,0x00,

//"马",

0x00,0x00,0x02,0x02,0xFA,0x02,0x02,0x02,

0x02,0x02,0xFF,0x02,0x00,0x80,0x00,0x00,

0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,

0x09,0x09,0x4D,0x89,0x41,0x3F,0x01,0x00,

//"羊",

0x00,0x08,0x88,0x88,0x89,0x8A,0x8C,0xF8,

0x8C,0x8A,0x89,0xC8,0x8C,0x08,0x00,0x00,

0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xFF,

0x08,0x08,0x08,0x08,0x08,0x0C,0x08,0x00

};

unsigned char code TianGan[][32] =          // 数据表

{

//"庚",

0x00,0x00,0xFC,0x84,0xA4,0xA4,0xA4,0xA5,

0xFE,0xA4,0xA4,0xA4,0xF4,0xA6,0x84,0x00,

0x40,0x30,0x0F,0x80,0x82,0x42,0x22,0x1A,

0x07,0x1A,0x22,0x22,0x47,0xC0,0x40,0x00,

//"辛",

0x40,0x40,0x44,0x44,0x4C,0x74,0x45,0xC6,

0x44,0x64,0x5C,0x46,0x44,0x60,0x40,0x00,

0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,

0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,

//"壬",

0x00,0x00,0x04,0x04,0x04,0x04,0x04,0xFC,

0x04,0x02,0x02,0x03,0x02,0x80,0x00,0x00,

0x01,0x01,0x41,0x41,0x41,0x41,0x41,0x7F,

0x41,0x41,0x41,0x61,0x41,0x01,0x01,0x00,

//"癸",

0x00,0x80,0x4A,0x32,0x92,0x8A,0x86,0x80,

0x87,0x98,0xA4,0x52,0x88,0x80,0x80,0x00,

0x01,0x80,0x84,0x44,0x44,0x24,0x14,0x0F,

0x14,0x14,0x24,0x66,0xC4,0x01,0x00,0x00,

//"甲",

0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,

0x22,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,

0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,

0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,

//"乙",

0x00,0x04,0x04,0x04,0x04,0x84,0x44,0x24,

0x14,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x38,0x46,0x41,0x40,0x40,0x40,

0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,

//"丙",

0x04,0x04,0xC4,0x44,0x44,0x44,0x44,0xFC,

0x44,0x44,0x44,0x44,0xE4,0x46,0x04,0x00,

0x00,0x00,0xFF,0x00,0x10,0x08,0x04,0x03,

0x02,0x04,0x58,0x80,0x7F,0x00,0x00,0x00,

//"丁",

0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,

0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

//"戊",

0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x08,

0x7F,0x88,0x0A,0x0C,0x08,0xC8,0x00,0x00,

0x40,0x30,0x0F,0x00,0x00,0x00,0x40,0x40,

0x20,0x13,0x1C,0x24,0x43,0x80,0xE0,0x00,

//"已",

0x00,0x02,0xF2,0x42,0x42,0x42,0x42,0x42,

0x42,0x42,0x42,0xFF,0x02,0x00,0x00,0x00,

0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,

0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00

};

unsigned char code DiZhi[][32] =          // 数据表

{

//"申",

0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,

0x88,0x88,0x88,0x88,0xFC,0x08,0x00,0x00,

0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0xFF,

0x08,0x08,0x08,0x08,0x1F,0x00,0x00,0x00,

//"酉",

0x02,0x02,0xF2,0x12,0x12,0xFE,0x12,0x12,

0x12,0xFE,0x12,0x12,0xFA,0x13,0x02,0x00,

0x00,0x00,0xFF,0x44,0x4A,0x49,0x48,0x48,

0x48,0x4D,0x49,0x41,0xFF,0x00,0x00,0x00,

//"戌",

0x00,0x00,0xF8,0x08,0x08,0x88,0x08,0x08,

0x7F,0x88,0x0A,0x0C,0x08,0xC8,0x00,0x00,

0x40,0x30,0x0F,0x01,0x01,0x01,0x41,0x40,

0x20,0x13,0x1C,0x24,0x43,0x80,0xE0,0x00,

//"亥",

0x08,0x08,0x08,0x08,0x88,0x48,0x29,0x1E,

0x88,0x48,0x68,0x08,0x08,0x0C,0x08,0x00,

0x00,0x80,0x90,0x51,0x49,0x25,0x23,0x11,

0x08,0x0C,0x12,0x23,0x40,0xC0,0x00,0x00,

//"子",

0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2,

0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00,

0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

//"丑",

0x00,0x00,0x02,0x82,0x82,0x82,0xFE,0x82,

0x82,0x82,0x82,0xFF,0x02,0x00,0x00,0x00,

0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,

0x40,0x40,0x40,0x7F,0x40,0x60,0x40,0x00,

//"寅",

0x10,0x0C,0xA4,0xA4,0xA4,0xA4,0xA5,0xE6,

0xA4,0xA4,0xA4,0xB4,0xA4,0x14,0x0C,0x00,

0x00,0x80,0x4F,0x4A,0x2A,0x2A,0x0A,0x0F,

0x0A,0x2A,0x2A,0x4A,0x4F,0x80,0x00,0x00,

//"卯",

0x00,0x00,0xFC,0x04,0x02,0x03,0xFA,0x00,

0x00,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,

0x00,0x40,0x47,0x24,0x22,0x12,0x0F,0x00,

0x00,0xFF,0x02,0x04,0x08,0x07,0x00,0x00,

//"辰",

0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,

0x92,0x92,0x9A,0x93,0xC2,0x80,0x00,0x00,

0x40,0x30,0x0F,0x00,0x00,0xFF,0x40,0x23,

0x04,0x08,0x14,0x12,0x20,0x60,0x20,0x00,

//"巳",

0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,

0x42,0x42,0x42,0x42,0xFF,0x02,0x00,0x00,

0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,

0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00,

//"午",

0x00,0x40,0x20,0x18,0x07,0x04,0x04,0xFC,

0x04,0x04,0x04,0x06,0x04,0x80,0x00,0x00,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,

//"未",

0x80,0x88,0x88,0x88,0x88,0x88,0x88,0xFF,

0x88,0x88,0x88,0x88,0x8C,0xC8,0x80,0x00,

0x00,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,

0x01,0x02,0x04,0x08,0x10,0x30,0x10,0x00

};

unsigned char code Asc[] =                    // ASCII

{

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // - -

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x38,0xFC,0xFC,0x38,0x00,0x00,  // -!-

0x00,0x00,0x00,0x0D,0x0D,0x00,0x00,0x00,

0x00,0x0E,0x1E,0x00,0x00,0x1E,0x0E,0x00,  // -"-

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x20,0xF8,0xF8,0x20,0xF8,0xF8,0x20,0x00,  // -#-

0x02,0x0F,0x0F,0x02,0x0F,0x0F,0x02,0x00,

0x38,0x7C,0x44,0x47,0x47,0xCC,0x98,0x00,  // -$-

0x03,0x06,0x04,0x1C,0x1C,0x07,0x03,0x00,

0x30,0x30,0x00,0x80,0xC0,0x60,0x30,0x00,  // -%-

0x0C,0x06,0x03,0x01,0x00,0x0C,0x0C,0x00,

0x80,0xD8,0x7C,0xE4,0xBC,0xD8,0x40,0x00,  // -&-

0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00,

0x00,0x10,0x1E,0x0E,0x00,0x00,0x00,0x00,  // -'-

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0xF0,0xF8,0x0C,0x04,0x00,0x00,  // -(-

0x00,0x00,0x03,0x07,0x0C,0x08,0x00,0x00,

0x00,0x00,0x04,0x0C,0xF8,0xF0,0x00,0x00,  // -)-

0x00,0x00,0x08,0x0C,0x07,0x03,0x00,0x00,

0x80,0xA0,0xE0,0xC0,0xC0,0xE0,0xA0,0x80,  // -*-

0x00,0x02,0x03,0x01,0x01,0x03,0x02,0x00,

0x00,0x80,0x80,0xE0,0xE0,0x80,0x80,0x00,  // -+-

0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // -,-

0x00,0x00,0x10,0x1E,0x0E,0x00,0x00,0x00,

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,  // ---

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // -.-

0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,

0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x00,  // -/-

0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,

0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00,  // -0-

0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00,

0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,  // -1-

0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,

0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,  // -2-

0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,

0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00,  // -3-

0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,

0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,  // -4-

0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,

0x7C,0x7C,0x44,0x44,0xC4,0xC4,0x84,0x00,  // -5-

0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,

0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,  // -6-

0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,

0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00,  // -7-

0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,

0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,  // -8-

0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,

0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00,  // -9-

0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,

0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,  // -:-

0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,

0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,  // -;-

0x00,0x00,0x08,0x0E,0x06,0x00,0x00,0x00,

0x00,0x80,0xC0,0x60,0x30,0x18,0x08,0x00,  // -

0x00,0x00,0x01,0x03,0x06,0x0C,0x08,0x00,

0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,  // -=-

0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,

0x00,0x08,0x18,0x30,0x60,0xC0,0x80,0x00,  // ->-

0x00,0x08,0x0C,0x06,0x03,0x01,0x00,0x00,

0x18,0x1C,0x04,0xC4,0xE4,0x3C,0x18,0x00,  // -?-

0x00,0x00,0x00,0x0D,0x0D,0x00,0x00,0x00,

0xF0,0xF8,0x08,0xC8,0xC8,0xF8,0xF0,0x00,  // -@-

0x07,0x0F,0x08,0x0B,0x0B,0x0B,0x01,0x00,

0xE0,0xF0,0x98,0x8C,0x98,0xF0,0xE0,0x00,  // -A-

0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,

0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0x00,  // -B-

0x08,0x0F,0x0F,0x08,0x08,0x0F,0x07,0x00,

0xF0,0xF8,0x0C,0x04,0x04,0x0C,0x18,0x00,  // -C-

0x03,0x07,0x0C,0x08,0x08,0x0C,0x06,0x00,

0x04,0xFC,0xFC,0x04,0x0C,0xF8,0xF0,0x00,  // -D-

0x08,0x0F,0x0F,0x08,0x0C,0x07,0x03,0x00,

0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,  // -E-

0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00,

0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00,  // -F-

0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,

0xF0,0xF8,0x0C,0x84,0x84,0x8C,0x98,0x00,  // -G-

0x03,0x07,0x0C,0x08,0x08,0x07,0x0F,0x00,

0xFC,0xFC,0x40,0x40,0x40,0xFC,0xFC,0x00,  // -H-

0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,

0x00,0x00,0x04,0xFC,0xFC,0x04,0x00,0x00,  // -I-

0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,

0x00,0x00,0x00,0x04,0xFC,0xFC,0x04,0x00,  // -J-

0x07,0x0F,0x08,0x08,0x0F,0x07,0x00,0x00,

0x04,0xFC,0xFC,0xC0,0xF0,0x3C,0x0C,0x00,  // -K-

0x08,0x0F,0x0F,0x00,0x01,0x0F,0x0E,0x00,

0x04,0xFC,0xFC,0x04,0x00,0x00,0x00,0x00,  // -L-

0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00,

0xFC,0xFC,0x38,0x70,0x38,0xFC,0xFC,0x00,  // -M-

0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,

0xFC,0xFC,0x38,0x70,0xE0,0xFC,0xFC,0x00,  // -N-

0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,

0xF0,0xF8,0x0C,0x04,0x0C,0xF8,0xF0,0x00,  // -O-

0x03,0x07,0x0C,0x08,0x0C,0x07,0x03,0x00,

0x04,0xFC,0xFC,0x44,0x44,0x7C,0x38,0x00,  // -P-

0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,

0xF8,0xFC,0x04,0x04,0x04,0xFC,0xF8,0x00,  // -Q-

0x07,0x0F,0x08,0x0E,0x3C,0x3F,0x27,0x00,

0x04,0xFC,0xFC,0x44,0xC4,0xFC,0x38,0x00,  // -R-

0x08,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,

0x18,0x3C,0x64,0x44,0xC4,0x9C,0x18,0x00,  // -S-

0x06,0x0E,0x08,0x08,0x08,0x0F,0x07,0x00,

0x00,0x1C,0x0C,0xFC,0xFC,0x0C,0x1C,0x00,  // -T-

0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,

0xFC,0xFC,0x00,0x00,0x00,0xFC,0xFC,0x00,  // -U-

0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,

0xFC,0xFC,0x00,0x00,0x00,0xFC,0xFC,0x00,  // -V-

0x01,0x03,0x06,0x0C,0x06,0x03,0x01,0x00,

0xFC,0xFC,0x00,0x80,0x00,0xFC,0xFC,0x00,  // -W-

0x03,0x0F,0x0E,0x03,0x0E,0x0F,0x03,0x00,

0x0C,0x3C,0xF0,0xC0,0xF0,0x3C,0x0C,0x00,  // -X-

0x0C,0x0F,0x03,0x00,0x03,0x0F,0x0C,0x00,

0x00,0x3C,0x7C,0xC0,0xC0,0x7C,0x3C,0x00,  // -Y-

0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,

0x1C,0x0C,0x84,0xC4,0x64,0x3C,0x1C,0x00,  // -Z-

0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0E,0x00,

0x00,0x00,0xFC,0xFC,0x04,0x04,0x00,0x00,  // -[-

0x00,0x00,0x0F,0x0F,0x08,0x08,0x00,0x00,

0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,  // -\-

0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x00,

0x00,0x00,0x04,0x04,0xFC,0xFC,0x00,0x00,  // -]-

0x00,0x00,0x08,0x08,0x0F,0x0F,0x00,0x00,

0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00,  // -^-

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  // -_-

0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,

0x00,0x00,0x03,0x07,0x04,0x00,0x00,0x00,  // -`-

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0xA0,0xA0,0xA0,0xE0,0xC0,0x00,0x00,  // -a-

0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00,

0x04,0xFC,0xFC,0x20,0x60,0xC0,0x80,0x00,  // -b-

0x08,0x0F,0x07,0x08,0x08,0x0F,0x07,0x00,

0xC0,0xE0,0x20,0x20,0x20,0x60,0x40,0x00,  // -c-

0x07,0x0F,0x08,0x08,0x08,0x0C,0x04,0x00,

0x80,0xC0,0x60,0x24,0xFC,0xFC,0x00,0x00,  // -d-

0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00,

0xC0,0xE0,0xA0,0xA0,0xA0,0xE0,0xC0,0x00,  // -e-

0x07,0x0F,0x08,0x08,0x08,0x0C,0x04,0x00,

0x40,0xF8,0xFC,0x44,0x0C,0x18,0x00,0x00,  // -f-

0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,

0xC0,0xE0,0x20,0x20,0xC0,0xE0,0x20,0x00,  // -g-

0x27,0x6F,0x48,0x48,0x7F,0x3F,0x00,0x00,

0x04,0xFC,0xFC,0x40,0x20,0xE0,0xC0,0x00,  // -h-

0x08,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,

0x00,0x00,0x20,0xEC,0xEC,0x00,0x00,0x00,  // -i-

0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,

0x00,0x00,0x00,0x00,0x20,0xEC,0xEC,0x00,  // -j-

0x00,0x30,0x70,0x40,0x40,0x7F,0x3F,0x00,

0x04,0xFC,0xFC,0x80,0xC0,0x60,0x20,0x00,  // -k-

0x08,0x0F,0x0F,0x01,0x03,0x0E,0x0C,0x00,

0x00,0x00,0x04,0xFC,0xFC,0x00,0x00,0x00,  // -l-

0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,

0xE0,0xE0,0x60,0xC0,0x60,0xE0,0xC0,0x00,  // -m-

0x0F,0x0F,0x00,0x0F,0x00,0x0F,0x0F,0x00,

0x20,0xE0,0xC0,0x20,0x20,0xE0,0xC0,0x00,  // -n-

0x00,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,

0xC0,0xE0,0x20,0x20,0x20,0xE0,0xC0,0x00,  // -o-

0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,

0x20,0xE0,0xC0,0x20,0x20,0xE0,0xC0,0x00,  // -p-

0x40,0x7F,0x7F,0x48,0x08,0x0F,0x07,0x00,

0xC0,0xE0,0x20,0x20,0xC0,0xE0,0x20,0x00,  // -q-

0x07,0x0F,0x08,0x48,0x7F,0x7F,0x40,0x00,

0x20,0xE0,0xC0,0x60,0x20,0x60,0xC0,0x00,  // -r-

0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,

0x40,0xE0,0xA0,0x20,0x20,0x60,0x40,0x00,  // -s-

0x04,0x0C,0x09,0x09,0x0B,0x0E,0x04,0x00,

0x20,0x20,0xF8,0xFC,0x20,0x20,0x00,0x00,  // -t-

0x00,0x00,0x07,0x0F,0x08,0x0C,0x04,0x00,

0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,  // -u-

0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00,

0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,  // -v-

0x00,0x03,0x07,0x0C,0x0C,0x07,0x03,0x00,

0xE0,0xE0,0x00,0x00,0x00,0xE0,0xE0,0x00,  // -w-

0x07,0x0F,0x0C,0x07,0x0C,0x0F,0x07,0x00,

0x20,0x60,0xC0,0x80,0xC0,0x60,0x20,0x00,  // -x-

0x08,0x0C,0x07,0x03,0x07,0x0C,0x08,0x00,

0xE0,0xE0,0x00,0x00,0x00,0xE0,0xE0,0x00,  // -y-

0x47,0x4F,0x48,0x48,0x68,0x3F,0x1F,0x00,

0x60,0x60,0x20,0xA0,0xE0,0x60,0x20,0x00,  // -z-

0x0C,0x0E,0x0B,0x09,0x08,0x0C,0x0C,0x00,

0x00,0x40,0x40,0xF8,0xBC,0x04,0x04,0x00,  // -{-

0x00,0x00,0x00,0x07,0x0F,0x08,0x08,0x00,

0x00,0x00,0x00,0xBC,0xBC,0x00,0x00,0x00,  // -|-

0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,

0x00,0x04,0x04,0xBC,0xF8,0x40,0x40,0x00,  // -}-

0x00,0x08,0x08,0x0F,0x07,0x00,0x00,0x00,

0x08,0x0C,0x04,0x0C,0x08,0x0C,0x04,0x00,  // -~-

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x80,0xC0,0x60,0x30,0x60,0xC0,0x80,0x00,  // --

0x07,0x07,0x04,0x04,0x04,0x07,0x07,0x00,

};

/*--------------------------------32X16-----------------------------------------*/

unsigned char code ucNum3216[][64]=

{0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,

0x00,0xF0,0xFE,0xFF,0x0F,0x01,0x00,0x00,0x00,0x00,0x01,0x0F,0xFF,0xFE,0xF0,0x00,

0x00,0x1F,0x7F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x1F,0x00,

0x00,0x00,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x07,0x03,0x01,0x00,0x00,0x00,/*"0",0*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x0C,0x0C,0x0C,0x0E,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,/*"1",1*/

0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x3C,0x3F,0x3F,0x03,0x00,0x00,0x00,0xC1,0xFF,0xFF,0x7E,0x00,0x00,

0x00,0x00,0x00,0xC0,0xE0,0xF0,0x78,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,

0x00,0x00,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,/*"2",2*/

0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,

0x00,0x00,0x0C,0x0F,0x0F,0x03,0x00,0x80,0x80,0xC1,0xFF,0x7F,0x3E,0x00,0x00,0x00,

0x00,0x70,0xF0,0xF0,0x80,0x00,0x00,0x01,0x01,0x03,0x87,0xFF,0xFE,0xFC,0x00,0x00,

0x00,0x00,0x01,0x03,0x03,0x07,0x06,0x06,0x06,0x06,0x03,0x03,0x01,0x00,0x00,0x00,/*"3",3*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x80,0xE0,0xF0,0x3C,0x0E,0x07,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,

0x00,0x1C,0x1E,0x1F,0x19,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,/*"4",4*/

0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,

0x00,0x00,0xF8,0xFF,0xCF,0xC0,0x60,0x60,0x60,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,

0x00,0xE0,0xE1,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x7E,0x00,0x00,

0x00,0x00,0x03,0x07,0x07,0x0E,0x0C,0x0C,0x0C,0x0E,0x07,0x07,0x01,0x00,0x00,0x00,/*"5",5*/

0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,

0x00,0x00,0xF0,0xFC,0xFF,0x8F,0xC1,0x60,0x60,0x60,0xE0,0xE1,0xC7,0x87,0x06,0x00,

0x00,0x00,0x3F,0xFF,0xFF,0x81,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0x7E,0x00,

0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x07,0x07,0x03,0x01,0x00,0x00,/*"6",6*/

0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFE,0xFF,0x1F,0x03,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x06,0x07,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"7",7*/

0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x3E,0x7F,0xFF,0xC1,0x80,0x80,0x80,0xC1,0xFF,0x7F,0x3E,0x00,0x00,0x00,

0x00,0xF8,0xFE,0xFE,0x87,0x03,0x01,0x01,0x01,0x03,0x87,0xFE,0xFE,0xF8,0x00,0x00,

0x00,0x00,0x01,0x03,0x03,0x07,0x06,0x06,0x06,0x07,0x03,0x03,0x01,0x00,0x00,0x00,/*"8",8*/

0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,

0x00,0x00,0xFC,0xFF,0xFF,0x83,0x01,0x00,0x00,0x00,0x01,0x83,0xFF,0xFE,0xF8,0x00,

0x00,0x00,0xC0,0xC1,0xC3,0x07,0x06,0x06,0x06,0x06,0x83,0xE1,0xFF,0x7F,0x1F,0x00,

0x00,0x00,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x07,0x03,0x03,0x01,0x00,0x00,0x00,/*"9",9*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

#ifndef _COLINLUAN_DS1302_H_

#define _COLINLUAN_DS1302_H_

#define uchar unsigned char

typedef struct systime

{

uchar         cYear;

uchar        cMon;

uchar        cDay;

uchar        cHour;

uchar        cMin;

uchar        cSec;

uchar        cWeek;

}SYSTIME;

extern void DS1302_Write(uchar ucData);

extern uchar DS1302_Read();

extern void DS1302_Init();

extern uchar WDS1302(uchar ucAddr,uchar ucDar);

extern uchar RDS1302(uchar ucAddr);

extern void  SetTime(SYSTIME sys);

extern void  GetTime(SYSTIME *sys);

#endif

#ifndef _COLINLUAN_LUNAR_H_

#define _COLINLUAN_LUNAR_H_

#define uchar unsigned char

#define uint unsigned int

typedef struct spdate

{

char         cYear;

char        cMon;

char        cDay;

}SPDATE;

extern SPDATE GetSpringDay(uchar GreYear,uchar GreMon,uchar GreDay);                  //获得农历日期

extern bit YearFlag(uchar cYear);                                                                                         //判断平年,闰年

extern uchar GetWeekDay(uchar cYear,uchar cMon,uchar cDay);                                         //判断当前天是星期几

#endif

#define int8 unsigned char

#define  KEY1     0

#define  KEY2     1

#define  KEY3     2

#define  KEY4     3

//键值定义

#define   KEY_NONE               0x00

#define   KEY_ONOFF               0x10

#define   KEY_ACCU               0x20

#define   KEY_BUZZER              0x40

#define   KEY_BACKLED              0x80

#define   KEYCOUNT_DEF                 1                     //10ms*1=10ms  去抖时间

int8  keyvalue=KEY_NONE;

int8  key1count_dn =0,key1count_up =0;                //按键去抖计数器

int8  key2count_dn =0,key2count_up =0;

int8  key3count_dn =0,key3count_up =0;

int8  key4count_dn =0,key4count_up =0;

void keyinput(void){

int8  portb_temp;

portb_temp=P3;

if(!(portb_temp&0x10)){  //SET键按下处理

if (key1count_up

key1count_dn++;

if (key1count_dn==KEYCOUNT_DEF)         { keyvalue|=0x10;key1count_up= 0; }

if (key1count_dn> KEYCOUNT_DEF)         key1count_dn = KEYCOUNT_DEF;        //保持按下计数器

}

else{         //SET键弹起处理

if (key1count_dn

key1count_up++;

if (key1count_up==KEYCOUNT_DEF)         { keyvalue&=0xef;key1count_dn=0;}

if (key1count_up>KEYCOUNT_DEF)                key1count_up = KEYCOUNT_DEF;

}

if(!(portb_temp&0x20)){  //INC键按下处理

if (key2count_up

key2count_dn++;

if (key2count_dn==KEYCOUNT_DEF)         { keyvalue|=0x20;key2count_up= 0; }

if (key2count_dn> KEYCOUNT_DEF)         key2count_dn = KEYCOUNT_DEF;        //保持按下计数器

}

else{         //INC键弹起处理

if (key2count_dn

key2count_up++;

if (key2count_up==KEYCOUNT_DEF)         { keyvalue&=0xdf;key2count_dn=0;}

if (key2count_up>KEYCOUNT_DEF)                key2count_up = KEYCOUNT_DEF;

}

if(!(portb_temp&0x40)){  //DEC键按下处理

if (key3count_up

key3count_dn++;

if (key3count_dn==KEYCOUNT_DEF)         { keyvalue|=0x40; key3count_up= 0;}

if (key3count_dn> KEYCOUNT_DEF)         key3count_dn = KEYCOUNT_DEF;        //保持按下计数器

}

else{        //DEC键弹起处理

if (key3count_dn

key3count_up++;

if (key3count_up==KEYCOUNT_DEF)         { keyvalue&=0xbf;key3count_dn=0;}

if (key3count_up>KEYCOUNT_DEF)                key3count_up = KEYCOUNT_DEF;

}

}

uchar dispBuf[7];

uchar T0_Count=0,Tmp_Count=0;

bit T0_Flag,Tmp_Flag,Flash_Flag;

SYSTIME sys;                   //系统日期

SPDATE SpDat;                   //农历日期

bit Hour_Flag=TRUE,Min_Flag=TRUE,Sec_Flag=TRUE;           //设置时间标志

bit Year_Flag=TRUE,Mon_Flag=TRUE,Day_Flag=TRUE;

uchar State_Set=0;     //设置时、分、秒、日、月、年等状态

bit State_Flag=FALSE,Inc_Flag=FALSE,Dec_Flag=FALSE;        //三个按键是否按下的标志

uchar code Mon2[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,

0,31,29,31,30,31,30,31,31,30,31,30,31};

/*****************************LCD显示函数******************************

入口参数:

cDat:                要显示的数

X:                        行数 0~7

Y:          列数 0~127

show_flag:  是否反白显示,0反白,1不反白

upline:         上划线, 0表示带上划线

underline:  下划线, 0表示带下划线

***********************************************************************/

void LCD_ShowTime(char cDat,uchar X,uchar Y,bit show_flag,bit up,bit under){

uchar s[2];

s[0]=cDat/10+'0';

s[1]=cDat%10+'0';

en_disp(X,Y,2,Asc,s,show_flag,up,under);

}

void Show_YMD(){          //年、月、日、星期、显示函数

uchar uiTempDat;

uiTempDat=RDS1302(0x88|0x01);

sys.cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);

LCD_ShowTime(sys.cMon,2,5,Mon_Flag,NoUpLine,NoUnderLine);

hz_disp(4,5,1,uMod[1],1,NoUpLine,NoUnderLine);                                //月

Show16X32(2,27,ucNum3216[sys.cDay/10],Day_Flag);                        //日

Show16X32(2,43,ucNum3216[sys.cDay%10],Day_Flag);

hz_disp(6,8,2,ucLunar[13],1,UpLine,UnderLine);

if(sys.cWeek==7)

hz_disp(6,40,1,uMod[2],1,UpLine,UnderLine);                                        //星期

else

hz_disp(6,40,1,ucLunar[sys.cWeek],1,UpLine,UnderLine);                //星期

LCD_ShowTime(20,0,9,1,UpLine,UnderLine);

LCD_ShowTime(sys.cYear,0,25,Year_Flag,UpLine,UnderLine);

hz_disp(0,41,1,uMod[0],1,UpLine,UnderLine);                                        //年

SpDat=GetSpringDay(sys.cYear,sys.cMon,sys.cDay);                        //获得农历

if(SpDat.cMon==1)                                                                                           //显示农历月

hz_disp(4,64,1,ucLunar[15],1,UpLine,NoUnderLine);                        //"正"

else if(SpDat.cMon==11)

hz_disp(4,64,1,ucLunar[16],1,UpLine,NoUnderLine);                        //"冬"

else if(SpDat.cMon==12)

hz_disp(4,64,1,ucLunar[17],1,UpLine,NoUnderLine);                        //"腊"

else

hz_disp(4,63,1,ucLunar[SpDat.cMon],1,UpLine,NoUnderLine); //"二"~"十"

if(SpDat.cDay/10==1 && SpDat.cDay%10>0)                                        //显示"十" 例如"十四"而不是"一四"

hz_disp(4,95,1,ucLunar[10],1,UpLine,NoUnderLine);

else if(SpDat.cDay/10==2 && SpDat.cDay%10>0)               //显示"廿" 例如"廿三"而不是"二四"

hz_disp(4,95,1,ucLunar[19],1,UpLine,NoUnderLine);

else

hz_disp(4,95,1,ucLunar[SpDat.cDay/10],1,UpLine,NoUnderLine);  //正常数字

if(!(SpDat.cDay%10))                                                                        //"十"

hz_disp(4,111,1,ucLunar[10],1,UpLine,NoUnderLine);

else                                                                                                                //正常数字

hz_disp(4,111,1,ucLunar[SpDat.cDay%10],1,UpLine,NoUnderLine);

hz_disp(0,104,1,SX[(uint)(2000+SpDat.cYear)%12],1,UpLine,UnderLine);   //生肖

hz_disp(2,95,1,TianGan[(uint)(2000+SpDat.cYear)%10],1,NoUpLine,NoUnderLine); //天干

hz_disp(2,111,1,DiZhi[(uint)(2000+SpDat.cYear)%12],1,NoUpLine,NoUnderLine);  //地支

}

void LCD_ShowWNL(){          //万年历显示函数

LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);                 //秒,每秒钟刷新

if(!sys.cSec || State_Set)                                                                     //分,普通模式每分钟刷新

LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine);                 //    设置模式每次刷新

if(!sys.cSec && !sys.cMin || State_Set)                                                 //时,普通模式每小时刷新

LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);     //    设置模式每次刷新

if(!sys.cSec && !sys.cMin && !sys.cHour || State_Set ){      //公历农历的年、月、日、星期

Show_YMD();                                                                                                 //普通模式每天刷新

if(State_Set==7) State_Set=0;                                                         //设置模式每次刷新

}

}

void CAL_Init(){        //日期初始化函数

sys.cYear=0x13;        //BCD码表示的日历时间值

sys.cMon=0x06;

sys.cDay=0x030;

sys.cHour=0x23;

sys.cMin=0x59;

sys.cSec=0x55;

sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);

}

void SFR_Init(){                 //定时器1初始化函数

Flash_Flag=FALSE;

TMOD=0x11;

ET1=1;

TH1= (-10000)/256;

TL1= (-10000)%256;

EA=1;

}

void GUI_Init(){         //LCD图形初始化函数

LCD12864_init();

ClearLCD();

Rect(0,0,127,63,1);   //描绘框架

Line(62,0,62,62,1);

Line(0,48,127,48,1);

Line(0,15,127,15,1);

Line(24,15,24,48,1);

Line(63,32,128,32,1);

SetTime(sys);                                   //设置时间

GetTime(&sys);                                   //获得时间

Show_YMD();

LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);

en_disp(6,103,1,Asc,":",1,UpLine,UnderLine);

LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine);

en_disp(6,79,1,Asc,":",1,UpLine,UnderLine);

LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);

hz_disp(2,64,1,ucLunar[11],1,NoUpLine,NoUnderLine);           //"农"

hz_disp(2,80,1,ucLunar[12],1,NoUpLine,NoUnderLine);           //"历"

hz_disp(4,79,1,uMod[1],1,UpLine,NoUnderLine);                           //"月"

}

void DecToBCD(){   //二-十进制转换函数

sys.cHour=(((sys.cHour)/10)<<4)+((sys.cHour)%10);

sys.cMin=(((sys.cMin)/10)<<4)+((sys.cMin)%10);

sys.cSec=((sys.cSec/10)<<4)+((sys.cSec)%10);

sys.cYear=((sys.cYear/10)<<4)+((sys.cYear)%10);

sys.cMon=((sys.cMon/10)<<4)+((sys.cMon)%10);

sys.cDay=((sys.cDay/10)<<4)+((sys.cDay)%10);

}

void Time_Set(){   //时间设置函数

if(State_Flag){                                        //设置键按下

State_Flag=FALSE;

State_Set++;

if(State_Set==8) State_Set=0;

}

Hour_Flag=TRUE;Min_Flag=TRUE;Sec_Flag=TRUE;

Year_Flag=TRUE;Mon_Flag=TRUE;Day_Flag=TRUE;

switch(State_Set){              //设置类型

case 0:                 //无设置

break;

case 1:                                        //设置时

Hour_Flag=FALSE;

break;

case 2:                                           //设置分

Min_Flag=FALSE;

break;

case 3:                                         //设置秒

Sec_Flag=FALSE;

break;

case 4:                                        //设置天

Day_Flag=FALSE;

break;

case 5:

Mon_Flag=FALSE;     //设置月

break;

case 6:

Year_Flag=FALSE;        //设置年

break;

case 7:                                        //无动作,设置此值为让"年"的反白消失。

break;

}

if(Inc_Flag){                                        //加键被按下

Inc_Flag=FALSE;

switch(State_Set)                {

case 0:

break;

case 1:                                            //小时加

sys.cHour++;

(sys.cHour)%=24;

break;

case 2:                                            //分加1

sys.cMin++;

sys.cMin%=60;

break;

case 3:                                         //秒加1

sys.cSec++;

sys.cSec%=60;

break;

case 4:                                         //天加1

(sys.cDay)=(sys.cDay%Mon2[YearFlag(sys.cYear)][sys.cMon])+1;

break;

case 5:                                         //月加1

sys.cMon=(sys.cMon%12)+1;

break;

case 6:

sys.cYear++;                 //年加1

sys.cYear=sys.cYear%100;

break;

}

DecToBCD();                                        //转为BCD数

sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);    //算出星期

SetTime(sys);                            //存入DS1302

}

if(Dec_Flag){                                         //减键按下

Dec_Flag=FALSE;

switch(State_Set){

case 0:

break;

case 1:

sys.cHour=(sys.cHour+23)%24;  //时减1

break;

case 2:                                                            //分减1

sys.cMin=(sys.cMin+59)%60;

break;

case 3:                                                          //秒减1

sys.cSec=(sys.cSec+59)%60;

break;

case 4:                                                          //天减1

sys.cDay=((sys.cDay+Mon2[YearFlag(sys.cYear)][sys.cMon]-1)%Mon2[YearFlag(sys.cYear)][sys.cMon]);

if(sys.cDay==0) sys.cDay=Mon2[YearFlag(sys.cYear)][sys.cMon];

break;

case 5:                                                          //月减1

sys.cMon=(sys.cMon+11)%12;

if(sys.cMon==0) sys.cMon=12;

break;

case 6:                                                          //年减1

sys.cYear=(sys.cYear+99)%100;

break;

}

DecToBCD();

sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);

SetTime(sys);

}

}

void  main(){        //主函数

SFR_Init();

CAL_Init();

GUI_Init();

TR1=1;

while(1){

GetTime(&sys);                //获得时间

LCD_ShowWNL();                //显示万年历

Time_Set();         //时间设置

}

}

void timer1() interrupt  3 {  //定时器1中断服务函数

TH1= (-10000)/256;

TL1= (-10000)%256;

keyinput();                                        //读取按键

if (keyvalue&0x10){

State_Flag=TRUE;

keyvalue &= 0xef;                //清键值,保证一直按下只执行一次按键动作。

}

if (keyvalue&0x20 ){                //加

Inc_Flag=TRUE;

keyvalue &= 0xdf;                //清键值,保证一直按下只执行一次按键动作。

}

if (keyvalue&0x40){                        //减

Dec_Flag=TRUE;

keyvalue &= 0xbf;                //清键值,保证一直按下只执行一次按键动作。

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值