-------------------------------*/
#include <STC12C5A60S2.h>
//#include <STC12C5410AD.h>
//#include <REG52.H>
//#include <STC90C58RD.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
extern void Read_Time(unsigned char ucCurtime[]);
extern void Set_Time(unsigned char *pSecDa);
extern void Set_Charge(void);
sbit HC138_A=P0^0;
sbit HC138_B=P0^1;
sbit HC138_C=P0^2;
sbit HC138_D=P0^3; //138, 4, 5
sbit HC138_OE=P0^6; //138 6
sbit HC595_LAT=P2^1; //595 12
sbit HC595_CLK=P2^2; //595 11
sbit HC595_GD=P2^0; //595 14
sbit HC595_RD=P2^3; //595 14
sbit KEY1=P1^6;
sbit KEY2=P1^7;
sbit DQ=P3^3;
/*
sbit 1302=P3^4; //DS1302-5
sbit 1302=P3^3; //DS1302-6
sbit 1302=P3^2; //DS1302-7
*/
unsigned char zr[16], zg[16], w[3];
unsigned char i, MSecond, Aminute, Ahour, Alarm, alarmlenth;
unsigned char Second,Minute,Hour, day, month, week, year, adjust, adj, dd, mo, yy;
unsigned char f1,f0,s1,s0,h1,h0,sd,d1,d0,m1,m0,y1,y0,wk, nd1, nd0, nm1, nm0, ny1, ny0,a1, a0;
unsigned char Time[8], Ldate[5];
unsigned char KeyState;
unsigned char Key1On;
unsigned char Key2On;
unsigned char ampm, cal;
unsigned char sign, DS18B20, t1, t0, td;
int tem;
unsigned char code tab2[16][4]={{0,0,0,0},{0,6,2,5},{1,2,5,0},{1,8,7,5},
{2,5,0,0},{3,1,2,5},{3,7,5,0},{4,3,7,5},
{5,0,0,0},{5,6,2,5},{6,2,5,0},{6,8,7,5},
{7,5,0,0},{8,1,2,5},{8,7,5,0},{9,3,7,5}};
unsigned char code ZF[]= //一维数据4x7
{
0x00,0x06,0x09,0x09,0x09,0x09,0x09,0x06, //0
0x00,0x02,0x06,0x02,0x02,0x02,0x02,0x07, //1
0x00,0x06,0x09,0x01,0x02,0x04,0x08,0x0f, //2
0x00,0x06,0x09,0x01,0x06,0x01,0x09,0x06, //3
0x00,0x02,0x06,0x0a,0x0a,0x0f,0x02,0x02, //4
0x00,0x0f,0x08,0x0e,0x09,0x01,0x09,0x06, //5
0x00,0x06,0x09,0x08,0x0e,0x09,0x09,0x06, //6
0x00,0x0f,0x01,0x01,0x02,0x04,0x04,0x04, //7
0x00,0x06,0x09,0x09,0x06,0x09,0x09,0x06, //8
0x00,0x06,0x09,0x09,0x07,0x01,0x09,0x06, //9
0x00,0x00,0x02,0x02,0x00,0x02,0x02,0x00, //10 :
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //11 空
0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x03, //13 -
0x00,0x00,0x00,0x02,0x07,0x02,0x00,0x00, //14 +
0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00, // - 15
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, // . 16
0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, // .。 17
0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, // - 18
0x00,0x00,0x80,0x00,0x30,0x40,0x40,0x30, //19 .c 4x7
}; //0,1,2,3,4,5,6,7,8,9,:,空,|,A, P (0-14)
unsigned char code HZ[]= //一维数据7x7
{
0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00, //0 一
0x00,0x00,0x00,0x3c,0x00,0x00,0x7e,0x00, //1 二
0x00,0x00,0x00,0x3c,0x00,0x3c,0x00,0x7e, //2 三
0x00,0x00,0x7f,0x55,0x55,0x77,0x41,0x7f, //3 四
0x00,0x00,0x3e,0x08,0x3e,0x12,0x22,0x7f, //4 五
0x00,0x08,0x00,0x7f,0x00,0x14,0x22,0x41, //5 六
0x00,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e, //6 日
0x10,0x7c,0xa4,0xb4,0x48,0x64,0xb2,0x20, //7 农
0x00,0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f, //8 日
0x00,0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11, //9 月
0x08,0x1f,0x24,0x1f,0x14,0x3f,0x04,0x04, //10 年
};
unsigned char code DateD[][8]= //二维数据5x7
{
0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x70, //0
0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x70, //1
0x00,0x70,0x88,0x08,0x10,0x20,0x40,0xf8, //2
0x00,0x70,0x88,0x08,0x30,0x08,0x88,0x70, //3
0x00,0x10,0x30,0x50,0x90,0xf8,0x10,0x10, //4
0x00,0x78,0x80,0xf0,0x08,0x08,0x88,0x70, //5
0x00,0x70,0x80,0x80,0xf0,0x88,0x88,0x70, //6
0x00,0xf0,0x08,0x10,0x20,0x40,0x40,0x40, //7
0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x70, //8
0x00,0x70,0x88,0x88,0x70,0x08,0x88,0x70, //9
0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00, //10 .
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //11 空
0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00, //12 -
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, //13.
0x00,0x80,0x00,0x30,0x48,0x40,0x48,0x30, //14 C
};
unsigned char code DZF[][16]=
{
/* --- 8x16 ---*/
0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xe7,0x7e,0x3c, //0
0x1c,0x7c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x7f, //1
0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0x03,0x03,0x07,0x0e,0x1c,0x38,0x70,0xe1,0xff,0xff, //2
0x3c,0x7e,0xe7,0xc3,0x03,0x03,0x03,0x3e,0x3e,0x03,0x03,0x03,0xc3,0xe7,0x7e,0x3c, //3
0x0c,0x0c,0x1c,0x1c,0x3c,0x3c,0x6c,0x6c,0xcc,0xcc,0x8c,0xff,0xff,0x0c,0x0c,0x1e, //4
0x7e,0xff,0xc0,0xc0,0xc0,0xc0,0xfc,0xfe,0x07,0x03,0x03,0x03,0xc3,0xe7,0x7e,0x3c, //5
0x3c,0x7e,0xe7,0xc3,0xc0,0xc0,0xc0,0xfc,0xfe,0xe7,0xc3,0xc3,0xc3,0xe7,0x7e,0x3c, //6
0x7e,0xff,0xc3,0x83,0x03,0x03,0x06,0x06,0x0c,0x0c,0x18,0x18,0x18,0x18,0x18,0x3c, //7
0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0xe7,0x7e,0x7e,0xe7,0xc3,0xc3,0xc3,0xe7,0x7e,0x3c, //8
0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0xe7,0x7f,0x3f,0x03,0x03,0xc3,0xc3,0xe7,0x7e,0x3c, //9
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //10
0x00,0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x18,0x24,0x24,0x18,0x00,0x00, //11 SD
0x00,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x21,0x45,0x82, //12 月
0x00,0x00,0x7f,0x41,0x41,0x41,0x41,0x7f,0x41,0x41,0x41,0x41,0x41,0x7f,0x41,0x00, //13 日
0x00,0x7f,0x41,0x49,0x5d,0x49,0x5d,0x41,0x5d,0x55,0x55,0x5d,0x55,0x41,0x41,0x82, //14 周
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //15 一
0x00,0x00,0x00,0x00,0x00,0x02,0x7e,0x00,0x00,0x00,0x00,0x01,0xff,0x00,0x00,0x00, //16 二
0x00,0x00,0x02,0x7e,0x00,0x00,0x02,0x7e,0x00,0x00,0x00,0x01,0xff,0x00,0x00,0x00, //17 三
0x00,0x00,0x02,0x7e,0x00,0x00,0x02,0x7e,0x00,0x00,0x00,0x01,0xff,0x00,0x00,0x00, //18 四
0x00,0x00,0x7e,0x08,0x08,0x08,0x0a,0x7e,0x12,0x12,0x12,0x22,0x22,0xff,0x00,0x00, //19 五
0x00,0x20,0x18,0x0c,0x08,0xff,0x00,0x00,0x24,0x34,0x24,0x46,0x43,0x83,0x82,0x00, //20 六
0x00,0x00,0x10,0x10,0x10,0x1f,0xf0,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x0e,0x00, //21 七
0x00,0x00,0x04,0x26,0x34,0x24,0x24,0x24,0x24,0x66,0x62,0x62,0x83,0x83,0x81,0x00, //22 八
0x00,0x20,0x20,0x20,0x20,0xfc,0x24,0x24,0x24,0x24,0x44,0x44,0x45,0x85,0x86,0x00, //23 九
0x00,0x10,0x10,0x10,0x10,0x10,0x10,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00, //24 十
0x00,0x44,0x44,0x44,0x44,0x44,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x7e,0x00, //25 廿
0x00,0x00,0x54,0x54,0x54,0x54,0x54,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x00, //26 卅
0x00,0x00,0xe1,0xa1,0xe2,0x02,0x04,0x04,0x08,0x10,0x20,0x20,0x40,0x47,0x85,0x87, //27 %
0x00,0x00,0xe0,0xa0,0xe0,0x00,0x1e,0x23,0x41,0x40,0x40,0x40,0x40,0x41,0x23,0x1e, //28 c
};
unsigned char code ZZF[][16]= //一维数据7x12
{
0x00,0x00,0x3e,0x7f,0x63,0x63,0x63,0x63, 0x63, 0x63, 0x63, 0x63, 0x7f, 0x3e, 0x00, 0x00, //0
0x00,0x00,0x1c,0x3c,0x1c,0x1c,0x1c,0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x3e, 0x00, 0x00, //1
0x00,0x00,0x3e,0x7f,0x63,0x63,0x07,0x0e, 0x1c, 0x38, 0x70, 0x60, 0x7f, 0x7f, 0x00, 0x00, //2
0x00,0x00,0x3e,0x7f,0x63,0x63,0x03,0x06, 0x06, 0x03, 0x63, 0x63, 0x7f, 0x3e, 0x00, 0x00, //3
0x00,0x00,0x1e,0x1e,0x36,0x36,0x36,0x66, 0x66, 0x7f, 0x7f, 0x06, 0x06, 0x06, 0x00, 0x00, //4
0x00,0x00,0x3f,0x7f,0x60,0x60,0x60,0x7e, 0x3f, 0x03, 0x03, 0x63, 0x7f, 0x3e, 0x00, 0x00, //5
0x00,0x00,0x3e,0x7f,0x63,0x60,0x60,0x7e, 0x7f, 0x63, 0x63, 0x63, 0x7f, 0x3e, 0x00, 0x00, //6
0x00,0x00,0x3e,0x7f,0x63,0x63,0x03,0x06, 0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, //7
0x00,0x00,0x3e,0x7f,0x63,0x63,0x63,0x3e, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x3e, 0x00, 0x00, //8
0x00,0x00,0x3e,0x7f,0x63,0x63,0x63,0x7f, 0x3f, 0x03, 0x03, 0x63, 0x7f, 0x3e, 0x00, 0x00, //9
0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, //10 :
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //11
};
unsigned char code hanzi[28][32]={ //二维数据16x16
/*-- 文字0: 零 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x1F,0xF8,0x01,0x00,0x7F,0xFE,0x41,0x04,0x1D,0x70,0x01,0x00,0x1D,0x70,0x02,0x80,
0x04,0x60,0x1A,0x1E,0xE1,0x08,0x1F,0xE0,0x00,0x40,0x02,0x80,0x01,0x00,0x01,0x00,
/*-- 文字1: 一 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字2: 二 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x10,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字3: 三 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,
/*-- 文字4: 四 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x7F,0xFC,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,
0x48,0x84,0x48,0x7C,0x50,0x04,0x60,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00,
/*-- 文字5: 五 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x7F,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x3F,0xF0,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x24,0xFF,0xFE,0x00,0x00,0x00,0x00,
/*-- 文字6: 六 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x04,0x00,0x03,0x00,0x01,0x80,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x04,0x80,
0x06,0x40,0x04,0x20,0x08,0x10,0x08,0x18,0x10,0x0C,0x20,0x0C,0x40,0x08,0x00,0x00,
/*-- 文字7: 七 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFE,0x7F,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00,
/*-- 文字8: 八 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x40,0x04,0x60,0x06,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x20,
0x08,0x20,0x10,0x10,0x10,0x10,0x20,0x08,0x40,0x0E,0x80,0x04,0x00,0x00,0x00,0x00,
/*-- 文字9: 九 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x7F,0xF0,0x02,0x20,0x02,0x20,0x04,0x20,
0x04,0x20,0x04,0x20,0x08,0x20,0x08,0x24,0x10,0x24,0x20,0x26,0x40,0x3C,0x00,0x00,
/*-- 文字10: 十 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
/*-- 文字11: 年 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x00,0x0F,0xFC,0x10,0x80,0x10,0x80,0x20,0x80,0x4F,0xF8,0x88,0x80,0x08,0x80,
0x08,0x80,0x08,0x80,0xFF,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,
/*-- 文字12: 月 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,
0x07,0xF0,0x04,0x10,0x08,0x10,0x08,0x10,0x10,0x10,0x20,0x50,0x40,0x20,0x00,0x00,
/*-- 文字13: 日 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00,0x00,0x00,
/*-- 文字14: 星 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x1F,0xF8,0x10,0x08,0x1F,0xF8,0x10,0x08,0x1F,0xF8,0x01,0x00,0x11,0x00,
0x1F,0xFC,0x21,0x00,0x21,0x00,0x4F,0xF8,0x01,0x00,0x01,0x00,0x7F,0xFE,0x00,0x00,
/*-- 文字15: 期 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x22,0x00,0x22,0x7C,0x7F,0x44,0x22,0x44,0x3E,0x44,0x22,0x7C,0x3E,0x44,0x22,0x44,
0x22,0x44,0xFF,0x7C,0x00,0x44,0x24,0x84,0x22,0x84,0x43,0x14,0x81,0x08,0x00,0x00,
/*-- 文字16: 时 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x10,0x00,0x10,0x7C,0x10,0x44,0x10,0x47,0xFE,0x44,0x10,0x7C,0x10,0x45,0x10,
0x44,0x90,0x44,0x90,0x7C,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x50,0x00,0x20,
/*-- 文字17: 分 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x0C,0x80,0x08,0x40,0x10,0x20,0x10,0x30,0x20,0x18,0x40,0x0E,0x9F,0xE4,
0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x08,0x20,0x10,0xA0,0x20,0x40,0x40,0x00,
/*-- 文字18: 周 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x1F,0xFC,0x10,0x84,0x13,0xE4,0x10,0x84,0x10,0x84,0x17,0xF4,0x10,0x04,
0x13,0xE4,0x12,0x24,0x12,0x24,0x13,0xE4,0x22,0x24,0x20,0x04,0x40,0x14,0x80,0x08,
/*-- 文字19 定 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0x00,0x01,0x00,0x3F,0xFE,0x20,0x04,0x40,0x08,0x1F,0xF0,0x01,0x00,0x11,0x00,
0x11,0x00,0x11,0xF0,0x11,0x00,0x29,0x00,0x25,0x00,0x43,0x00,0x81,0xFC,0x00,0x00,
/*-- 文字20; 调 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x47,0xFC,0x24,0x44,0x24,0x44,0x05,0xF4,0x04,0x44,0xE4,0x44,0x27,0xFC,
0x24,0x04,0x25,0xF4,0x25,0x14,0x2D,0x14,0x35,0xF4,0x24,0x04,0x04,0x14,0x08,0x08,
/*-- 文字21: 整 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x08,0x20,0x08,0x20,0xFF,0xBE,0x08,0x44,0x7F,0xA4,0x49,0x24,0x7F,0x28,0x2A,0x10,
0x49,0x28,0x88,0x46,0x00,0x00,0x7F,0xFC,0x01,0x00,0x11,0xF8,0x11,0x00,0xFF,0xFE,
/*-- 文字22: 快 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x40,0x10,0x40,0x10,0x40,0x13,0xF8,0x18,0x48,0x54,0x48,0x50,0x48,0x50,0x48,
0x97,0xFE,0x10,0x40,0x10,0xA0,0x10,0xA0,0x11,0x10,0x11,0x10,0x12,0x08,0x14,0x06,
/*-- 文字23: 慢 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x23,0xF8,0x22,0x08,0x23,0xF8,0x32,0x08,0xAB,0xF8,0xA0,0x00,0xA7,0xFC,0xA4,0xA4,
0x24,0xA4,0x27,0xFC,0x20,0x00,0x23,0xF8,0x21,0x10,0x20,0xE0,0x23,0x18,0x2C,0x06,
};
void delay(int useconds)
{
int s;
for (s=0; s<useconds;s++);
}
/*----------------18B20 程序----------------------*/
//复位
bit ow_reset(void)
{
bit presence;
DQ=0; //拉低总线
delay(250); // 保持 480us, 12M时=80
// delay(250);
DQ = 1; // 释放总线
delay(50); // 等待回复,12M时=30
presence = DQ; // 读取信号
delay(250); // 等待结束信号,12M时=250
return(presence); // 返回 0:正常 1:不存在
}
//从 1-wire 总线上读取一个字节
unsigned char read_byte(void)
{
unsigned char i;
unsigned char value = 0;
for (i=8;i>0;i--)
{
DQ = 0;
value>>=1;
DQ = 1;
delay(15); // 12M时=10, 24M, 20抖动, 15正好
if(DQ)value|=0x80;
delay(50); // 12M时=12
}
return(value);
}
//向 1-WIRE 总线上写一个字节
void write_byte(char val)
{
unsigned char i;
for (i=8; i>0; i--) // 一次写一位
{
DQ=0;
// delay(2);
DQ = val&0x01;
delay(40); // 12M时=30
DQ = 1;
val=val/2;
delay(2);
}
delay(30);
}
unsigned int Read_Temperature(void)
{
union
{
unsigned char c[2];
unsigned int x;
}temp;
temp.x=0x0000;
i=ow_reset(); //reset
if(!i)
{
write_byte(0xCC); //Skip ROM
write_byte(0x44); //Start Conversion
delay(10);
}
i=ow_reset();
if(!i)
{
write_byte(0xCC); //Skip ROM
write_byte(0xBE); //Read Scratch Pad
delay(250);
temp.c[1]=read_byte(); //Start read data
temp.c[0]=read_byte(); //read two byte data from device
DS18B20=0;
}
else DS18B20=9;
return temp.x; //
}
/*----------18B20 程序结束-------------*/
/*------------农历程序-------------------------*/
code uchar year_code[597]={
0x04,0xAe,0x53, //1901 0
0x0A,0x57,0x48, //1902 3
0x55,0x26,0xBd, //1903 6
0x0d,0x26,0x50, //1904 9
0x0d,0x95,0x44, //1905 12
0x46,0xAA,0xB9, //1906 15
0x05,0x6A,0x4d, //1907 18
0x09,0xAd,0x42, //1908 21
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
};
code uchar day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};
code uint day_code2[3]={0x111,0x130,0x14e};
bit c_moon;
data uchar year_moon,month_moon,day_moon;
bit get_moon_day(uchar month_p,uint table_addr)
{
uchar temp;
switch (month_p){
case 1:{temp=year_code[table_addr]&0x08;
if (temp==0)return(0);else return(1);}
case 2:{temp=year_code[table_addr]&0x04;
if (temp==0)return(0);else return(1);}
case 3:{temp=year_code[table_addr]&0x02;
if (temp==0)return(0);else return(1);}
case 4:{temp=year_code[table_addr]&0x01;
if (temp==0)return(0);else return(1);}
case 5:{temp=year_code[table_addr+1]&0x80;
if (temp==0) return(0);else return(1);}
case 6:{temp=year_code[table_addr+1]&0x40;
if (temp==0)return(0);else return(1);}
case 7:{temp=year_code[table_addr+1]&0x20;
if (temp==0)return(0);else return(1);}
case 8:{temp=year_code[table_addr+1]&0x10;
if (temp==0)return(0);else return(1);}
case 9:{temp=year_code[table_addr+1]&0x08;
if (temp==0)return(0);else return(1);}
case 10:{temp=year_code[table_addr+1]&0x04;
if (temp==0)return(0);else return(1);}
case 11:{temp=year_code[table_addr+1]&0x02;
if (temp==0)return(0);else return(1);}
case 12:{temp=year_code[table_addr+1]&0x01;
if (temp==0)return(0);else return(1);}
case 13:{temp=year_code[table_addr+2]&0x80;
if (temp==0)return(0);else return(1);}
}
}
void Conversion(bit c,uchar year,uchar month,uchar day)
{ //c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据
uchar temp1,temp2,temp3,month_p;
uint temp4,table_addr;
bit flag2,flag_y;
temp1=year/16; //hex->BCD 先把数据转换为十进制
temp2=year%16;
year=temp1*10+temp2;
temp1=month/16;
temp2=month%16;
month=temp1*10+temp2;
temp1=day/16;
temp2=day%16;
day=temp1*10+temp2;
//定位数据表地址
if(c==0){
table_addr=(year+0x64-1)*0x3;
}
else {
table_addr=(year-1)*0x3;
}
//定位数据表地址完成
//取当年春节所在的公历月份
temp1=year_code[table_addr+2]&0x60;
temp1=_cror_(temp1,5);
//取当年春节所在的公历月份完成
//取当年春节所在的公历日
temp2=year_code[table_addr+2]&0x1f;
//取当年春节所在的公历日完成
// 计算当年春年离当年元旦的天数,春节只会在公历1月或2月
if(temp1==0x1){
temp3=temp2-1;
}
else{
temp3=temp2+0x1f-1;
}
// 计算当年春年离当年元旦的天数完成
//计算公历日离当年元旦的天数,为了减少运算,用了两个表
//day_code1[9],day_code2[3]
//如果公历月在九月或前,天数会少于0xff,用表day_code1[9],
//在九月后,天数大于0xff,用表day_code2[3]
//如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1
//如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1
if (month<10){
temp4=day_code1[month-1]+day-1;
}
else{
temp4=day_code2[month-10]+day-1;
}
if ((month>0x2)&&(year%0x4==0)){ //如果公历月大于2月并且该年的2月为闰月,天数加1
temp4+=1;
}
//计算公历日离当年元旦的天数完成
//判断公历日在春节前还是春节后
if (temp4>=temp3){ //公历日在春节后或就是春节当日使用下面代码进行运算
temp4-=temp3;
month=0x1;
month_p=0x1; //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月
flag2=get_moon_day(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0
flag_y=0;
if(flag2==0)temp1=0x1d; //小月29天
else temp1=0x1e; //大小30天
temp2=year_code[table_addr]&0xf0;
temp2=_cror_(temp2,4); //从数据表中取该年的闰月月份,如为0则该年无闰月
while(temp4>=temp1){
temp4-=temp1;
month_p+=1;
if(month==temp2){
flag_y=~flag_y;
if(flag_y==0)month+=1;
}
else month+=1;
flag2=get_moon_day(month_p,table_addr);
if(flag2==0)temp1=0x1d;
else temp1=0x1e;
}
day=temp4+1;
}
else{ //公历日在春节前使用下面代码进行运算
temp3-=temp4;
if (year==0x0){year=0x63;c=1;}
else year-=1;
table_addr-=0x3;
month=0xc;
temp2=year_code[table_addr]&0xf0;
temp2=_cror_(temp2,4);
if (temp2==0)month_p=0xc;
else month_p=0xd; //
/*
month_p为月份指向,如果当年有闰月,一年有十三个月,月指向13,
无闰月指向12
*/
flag_y=0;
flag2=get_moon_day(month_p,table_addr);
if(flag2==0)temp1=0x1d;
else temp1=0x1e;
while(temp3>temp1){
temp3-=temp1;
month_p-=1;
if(flag_y==0)month-=1;
if(month==temp2)flag_y=~flag_y;
flag2=get_moon_day(month_p,table_addr);
if(flag2==0)temp1=0x1d;
else temp1=0x1e;
}
day=temp1-temp3+1;
}
c_moon=c; //HEX->BCD ,运算结束后,把数据转换为BCD数据
temp1=year/10;
temp1=_crol_(temp1,4);
temp2=year%10;
year_moon=temp1|temp2;
temp1=month/10;
temp1=_crol_(temp1,4);
temp2=month%10;
month_moon=temp1|temp2;
temp1=day/10;
temp1=_crol_(temp1,4);
temp2=day%10;
day_moon=temp1|temp2;
}
/*----------农历程序结束-------------*/
/*
void days (void) //公历节日数据库
{ uchar i,t;
hh= hour;
dd= day;
mo= month;
yy= year;
Conversion(0,yy,mo,dd);
i=0;
t=0;
if ( mo == 0x01 && dd == 0x01 ) {Sendping5(13,30,48,54,24,30,26,43,54,54);i=1;} //new year
if (month_moon== 0x01 && day_moon == 0x01 ){Sendping5(10,41,43,34,39,32,54,15); i=1;} //Lu new year
if (month_moon== 0x01 && day_moon == 0x15 ){Sendping5(16,17,18,19,20,21,14,15);i=1;} //元宵节
if (month_moon== 0x02 && day_moon == 0x02 ){Sendping5(96,22,13,24,25,14,15,96);i=1;} //龙台头
if ( mo == 0x02 && dd == 0x14 ) {Sendping5(96,26,17,28,29,14,15,96); i=1;} //情人节
if ( mo == 0x03 && dd == 0x08 ) {Sendping5(96,30,31,32,33,14,15,96);i=1;} //妇女节
if ( mo == 0x03 && dd == 0x12 ) {Sendping5(96,34,35,36,37,14,15,96); i=1;} //植树节
if (mo == 0x04 && dd == 0x05 ){Sendping5(96,38,39,40,41,14,15,96); i=1;} //清明节
if (month_moon== 0x05 && day_moon == 0x05 ){Sendping5(96,38,39,40,41,14,15,96); i=1;} //端午节
if ( mo == 0x05 && dd == 0x01 ) {Sendping5(96,42,43,44,45,14,15,96); i=1;} //劳动节
if ( mo == 0x05 && dd == 0x04 ) {Sendping5(96,46,47,48,49,14,15,96); i=1;} //青年节
if ( mo == 0x06 && dd == 0x01 ) {Sendping5(96,50,51,52,53,14,15,96);i=1;} //儿童节
if (month_moon== 0x07 && day_moon == 0x07 ){Sendping5(96,54,55,56,57,14,15,96); i=1;} //
if (month_moon== 0x07 && day_moon == 0x15 ){Sendping5(96,58,59,60,61,14,15,96); i=1;} //
if (month_moon== 0x08 && day_moon == 0x15 ){Sendping5(96,58,59,62,63,14,15,96);i=1; } //中秋
if ( mo == 0x08 && dd == 0x01 ) {Sendping5(96,64,65,66,67,14,15,96); i=1;} //建军节
if (month_moon== 0x09 && day_moon == 0x09 ){Sendping5(96,68,69,70,71,14,15,96);i=1; } //重阳节
if ( mo == 0x09 && dd == 0x10 ) {Sendping5(96,72,73,74,75,14,15,96); i=1;}
if ( mo == 0x10 && dd == 0x01 ) {Sendping5(96,76,77,78,79,14,15,96); i=1;} 国庆
if (month_moon== 0x12 && day_moon == 0x08 ){Sendping5(96,80,81,82,83,14,15,96); i=1;}
if (month_moon== 0x12 && day_moon == 0x23 ){Sendping5(96,84,85,86,87,88,89,96); i=1;} 圣诞节
if (month_moon== 0x12 && day_moon == 0x29 ){Sendping5(105,106,107,108,109,110,111,112);i=1;} //除夕
if (month_moon== 0x12 && day_moon == 0x30 ){Sendping5(90,91,88,89,92,93,94,95); i=1;} //除夕
if(i==t){
if ( hh >= 0x04 && hh < 0x06 ){ Sendping5(137,138,135,136,117,118,115,116); }
if ( hh >= 0x06 && hh < 0x08 ){ Sendping5(135,136,141,142,113,114,115,116); }
if ( hh >= 0x08 && hh < 0x12 ){ Sendping5(135,136,139,140,119,120,125,126); }
if ( hh == 0x12) { Sendping5(143,144,143,144,121,122,125,126); }
if ( hh >= 0x13 && hh < 0x18 ){ Sendping5(139,140,135,136,123,124,125,126); }
if ( hh >= 0x18 && hh < 0x22 ){ Sendping5(141,142,135,136,127,128,119,120); }
if ( hh >= 0x22 && hh <= 0x23 ){ Sendping5(135,136,135,136,129,130,131,132); }
if ( hh >= 0x00 && hh < 0x04 ){ Sendping5(137,138,137,138,133,134,129,130); }
}
}
}
*/
void get_yinli()
{
dd= day;
mo= month;
yy= year;
Conversion(0,yy,mo,dd);
ny1=(year_moon&0x70)>>4;
ny0=year_moon&0x0F;
nm1=(month_moon&0x70)>>4;
nm0=month_moon&0x0F;
nd1=(day_moon&0x70)>>4;
nd0=day_moon&0x0F;
}
void write595(unsigned char rdd, gdd)
{
unsigned char i;
for (i=0;i<8;i++)
{
HC595_RD=rdd&0x80;
rdd=rdd<<1;
HC595_GD=gdd&0x80;
gdd=gdd<<1;
HC595_CLK=1;
HC595_CLK=0;
}
}
/*
void LS_data1(unsigned char z1, z2, zz1, zz2)
{
zz1=zz1-(hanzi[z1][i*2]<<col)-(hanzi[z1][i*2+1]>>(8-col)); //z1前8位和后8位合并
zz2=zz2-(hanzi[z1][i*2+1]<<col)-(hanzi[z2][i*2]>>(8-col)); //z1后8位和z2前8位合并
}
void LS_data2(unsigned char z1, z2, zz1, zz2)
{
zz1=zz1-(hanzi[z1][i*2+1]<<(col-8))-(hanzi[z2][i*2]>>(16-col));//z1后8位和z2前8位合并
zz2]=zz2-(hanzi[z2][i*2]<<(col-8))-(hanzi[z2][i*2+1]>>(16-col));//z2前8位和后8位合并
}
void script(unsigned char hz1, hz2, hz3, hz4, hz5)
{
unsigned char i, j, k, col;
for (k=0;k<8;k++)
{
z[k]=0xff;
}
if (col<8)
{
LS_data1(hz1, hz2, z[0],z[1]); //hz1前8位和后8位合并, hz1后8位和hz2前8位合并
LS_data1(hz2, hz3, z[2],z[3]); //hz2前8位和后8位合并, hz2后8位和hz3前8位合
LS_data1(hz3, hz4, z[4],z[5]); //hz3前8位和后8位合并, hz3后8位和hz4前8位合
LS_data1(hz4,hz5, z[6],z[7]); //hz4前8位和后8位合并, hz4后8位和hz5前8位合
}
else
{
LS_data2(hz1,hz2, z[0],z[1]); //hz1后8位和hz2前8位合, hz2前8位和后8位合
LS_data2(hz2, hz3, z[2],z[3]); //hz2后8位和hz3前8位合, hz3前8位和后8位合
LS_data2(hz3, hz4, z[4],z[5]); //hz3后8位和hz4前8位合, hz4前8位和后8位合
LS_data2(hz4, hz5, z[6],z[7]); //hz4后8位和hz5前8位合, hz5前8位和后8位合
}
}
*/
/*
void script(unsigned char zi_1, zi_2, zi_3, zi_4, z1_5)
{
unsigned char i, j, k, col;
for(col=0;col<16;col++) //col为位移变量, 0-15
{
for(j=0;j<30;j++) // SPEED
{
for (i=0;i<16;i++) // 行信号
{
HC595SER=0;
HC595RCLK=0;
HC595SRCLK=0;
HC138EN=1;
script;
for (k=0;k<8;k++)
{
write595(z[k]);
}
HC595RCLK=1;
HC595RCLK=0;
if (i==15) x=0;
else x=i+1;
HC138A=x&0x01;
HC138B=x&0x02;
HC138C=x&0x04;
HC138D=x&0x08;
HC138EN=0;
Delay1(30);
} //end 行循环
} //end SPEED循环
} //end col循环
}*/
/*
void write_mess() // 今天是XX日, 祝XXX生日快乐,
{
for (k=10; k<20; k++)
{
word[k]=22;
}
word[0]=21;
word[1]=2;
word[2]=0;
word[3]=y1;
word[4]=y0;
word[5]=11; //年
k=6;
if (m1==1)
{
word[k]=10;
k=k+1;
}
if (m0!=0)
{
word[k]=m0;
k=k+1;
}
word[k]=12; //月
k=k+1;
if (d1!=0)
{
if (d1!=1)
{
word[k]=d1;
k=k+1;
}
word[k]=10;
k=k+1;
}
if (d0!=0)
{
word[k]=d0;
k=k+1;
}
word[k]=13; //日
k=k+1;
word[k]=14; //星
k=k+1;
word[k]=15; //期
k=k+1;
word[k]=w;
for (i=0; i<16; i++) script (word[i], word[i+1], word[i+2]);
}
*/
void key_scan() // key scan
{
if (KEY1==0) //key1按下
{
if (Key1On==0) Key1On=1;
else if (Key1On==1)
{
Key1On=2;
KeyState++;
if (KeyState>9)
{
KeyState=0;
Read_Time(Time);
Time[0]=Second;
Time[1]=Minute;
Time[2]=Hour;
Time[3]=day;
Time[4]=month;
Time[5]=week;
Time[6]=year;
Set_Time(Time);
} // end state>9
}
}
else Key1On=0;
if (KEY2==0) //key2按下
{
if (Key2On==0) Key2On=1;
else if (Key2On==1)
{
Key2On=2;
if (KeyState==1)
{
Minute++;
if (Minute%16>9) Minute=Minute+6;
if (Minute>0x59) Minute=0;
}
else if (KeyState==2)
{
Hour++;
if (Hour%16>9) Hour=Hour+6;
if (Hour>0x23) Hour=0;
}
else if (KeyState==3)
{
day++;
if (day%16>9) day=day+6;
if (day>0x31) day=0x01;
}
else if (KeyState==4)
{
month++;
if (month%16>9) month=month+6;
if (month>0x12) month=0x01;
}
else if (KeyState==5)
{
week++;
if (week>0x07) week=0x01;
}
else if (KeyState==6)
{
year++;
if (year%16>9) year=year+6;
if (year>0x99) year=0x00;
}
else if (KeyState==7) // alarm minute
{
Aminute++;
if (Aminute>0x59) Aminute=0;
}
else if (KeyState==8) // alarm hour
{
Ahour++;
if (Ahour>0x23) Ahour=0;
}
else if (KeyState==9) // 时间调整+
{
adjust++;
if (adjust>40) adjust=0;
}
}
}
else Key2On=0;
}
void get_time() // time update
{
Read_Time(Time);
if (Second!=Time[0])
{
sd=10;
MSecond=0;
}
Second=Time[0];
Minute=Time[1];
Hour=Time[2];
day=Time[3];
month=Time[4];
week=Time[5];
year=Time[6];
}
void main (void)
{
unsigned char i, j, k, p, q;
sign=0;
EA=1; //允许CPU中断
ET0=1; //定时器0中断打开
TMOD=0x01; //设定时器0为方式1
TH0=0x63; //24M 63d0; 12M B7FF
TL0=0xD0; //设定时值为20 000 μs(20 ms)
TR0=1; //开始定时
// EA=0;
// P1M0=0;
// P1M1=0;
Set_Charge();
adjust=20;
adj=0;
cal=0;
adj=0;
p=0;
q=0;
KeyState=0;
Key1On=0;
Key2On=0;
Aminute=0;
Ahour=0;
Alarm=1;
Read_Time(Time);
Second=Time[0];
Minute=Time[1];
Hour=Time[2];
day=Time[3];
month=Time[4];
week=Time[5];
year=Time[6];
// Time[0]=0x00;
Set_Time(Time);
f0=Minute%16;
f1=Minute/16;
sd=10;
h0=Hour%16;
h1=Hour/16;
s0=Second%16;
s1=Second/16;
while(1)
{
sign=0;
i=0x01;
tem=Read_Temperature();
sign=tem>>12; //取高1位
if (sign!=0)
{
tem=~tem+1; //负温度读数求补,取反加1 (减一取反?)
}
q=(unsigned char)(tem&0x000f);
p=(unsigned char)(tem>>4);
t1=p/10;
if (t1==0) t1=11;
t0=p%10;
td=tab2[q][0];
if (DS18B20==9) t1=9;
key_scan();
if (KeyState==0) get_time(); //keystate=0时接收时间数据
h0=Hour%16;
h1=Hour/16;
f0=Minute%16;
f1=Minute/16;
s0=Second%16;
s1=Second/16;
d0=day%16;
d1=day/16;
m0=month%16;
m1=month/16;
y0=year%16;
y1=year/16;
wk=week%16;
for (i=0;i<16;i++) //显示内容
{
HC595_LAT=0;
HC595_CLK=0;
HC138_OE=1;
for (k=0;k<16;k++)
{
zg[k]=0xff;
zr[k]=0xff;
}
if (KeyState==0)
{
if (h1==0) h1=10;
if (f1>2)
{
zg[0]=zg[0]-DZF[h1][i]; //h1
zg[1]=zg[1]-(DZF[h0][i]>>1); //h0
zg[2]=zg[2]-(DZF[h0][i]<<7); //h0
zr[2]=zr[2]-DZF[sd][i]; //sd
zg[2]=zg[2]-DZF[sd][i]; //sd
zg[3]=zg[3]-DZF[f1][i]; //f1
zg[4]=zg[4]-(DZF[f0][i]>>1); //f0
zg[5]=zg[5]-(DZF[f0][i]<<7); //f0
zr[5]=zr[5]-DZF[sd][i]; //sd
zg[5]=zg[5]-DZF[sd][i]; //sd
zg[6]=zg[6]-ZZF[s1][i]; //s1
zg[7]=zg[7]-ZZF[s0][i];; //s0
}
else
{
zr[0]=zr[0]-DZF[h1][i]; //h1
zg[0]=zg[0]-DZF[h1][i];
zr[1]=zr[1]-(DZF[h0][i]>>1); //h0
zg[1]=zg[1]-(DZF[h0][i]>>1);
zr[2]=zr[2]-(DZF[h0][i]<<7); //h0
zg[2]=zg[2]-(DZF[h0][i]<<7);
zg[2]=zg[2]-DZF[sd][i]; //sd
zr[3]=zr[3]-DZF[f1][i]; //f1
zg[3]=zg[3]-DZF[f1][i];
zr[4]=zr[4]-(DZF[f0][i]>>1); //f0
zg[4]=zg[4]-(DZF[f0][i]>>1);
zr[5]=zr[5]-(DZF[f0][i]<<7); //f0
zg[5]=zg[5]-(DZF[f0][i]<<7);
zg[5]=zg[5]-DZF[sd][i]; //sd
zr[6]=zr[6]-ZZF[s1][i]; //s1
zg[6]=zg[6]-ZZF[s1][i];
zr[7]=zr[7]-ZZF[s0][i];; //s0
zg[7]=zg[7]-ZZF[s0][i];;
}
if (i<8)
{
if (f1>2)
{
zg[8]=zg[8]-(ZF[2*8+i]<<4); //2 8-5 前4列,6列空
zg[8]=zg[8]-(ZF[0*8+i]>>1); //0, 前3位 8-8
zg[9]=zg[9]-(ZF[0*8+i]<<7); //0, 后1位 9-3 4列空
zg[9]=zg[9]-(ZF[y1*8+i]<<2); //y1 前4位 9-8 5列空
zg[9]=zg[9]-(ZF[y0*8+i]>>3); //y0 前1位 10-1 2列空
for (k=8; k<10; k++) zr[k]=zg[k]; //
zg[10]=zg[10]-(ZF[y0*8+i]<<5); //y0 前3位 10-3 12列空
zr[10]=zr[10]-(ZF[y0*8+i]<<5); //
zg[10]=zg[10]-(HZ[10*8+i]>>2); //年 , 10-8
zg[11]=zg[11]-(HZ[10*8+i]<<6); //年 , 11-2
if (m1==0) m1=11;
zg[11]=zg[11]-(ZF[m1*8+i]<<1); //m1 3位 11-7
zr[11]=zr[11]-(ZF[m1*8+i]<<1); //
zg[12]=zg[12]-(ZF[m0*8+i]<<4); //m9 5 12-4
zr[12]=zr[12]-(ZF[m0*8+i]<<4); //
zg[12]=zg[12]-(HZ[9*8+i]>>1); //月 前4位 12-8 后5列
zg[13]=zg[13]-(HZ[9*8+i]<<7); //月 后1位 13-11
if (d1==0) d1=11;
zg[13]=zg[13]-(ZF[d1*8+i]<<2); //d1 前3位 13-76 前5列
zr[13]=zr[13]-(ZF[d1*8+i]<<2); //
zg[13]=zg[13]-(ZF[d0*8+i]>>3); //d0 14-5
zr[13]=zr[13]-(ZF[d0*8+i]>>3); //
zg[14]=zg[14]-(ZF[d0*8+i]<<5); //d0 14 3
zr[14]=zr[14]-(ZF[d0*8+i]<<5); //
zg[14]=zg[14]-(HZ[8*8+i]); //日 后4位 14-88
// for (k=8; k<15; k++) zr[k]=zg[k]; //
zr[15]=zr[15]-HZ[(wk-1)*8+i]; //week 15-3~15-8
//i<8
}
else
{
zg[8]=zg[8]-(ZF[2*8+i]<<4); //2 8-5 前4列,6列空
zg[8]=zg[8]-(ZF[0*8+i]>>1); //0, 前3位 8-8
zg[9]=zg[9]-(ZF[0*8+i]<<7); //0, 后1位 9-3 4列空
zg[9]=zg[9]-(ZF[y1*8+i]<<2); //y1 前4位 9-8 5列空
zg[9]=zg[9]-(ZF[y0*8+i]>>3); //y0 前1位 10-1 2列空
zg[10]=zg[10]-(ZF[y0*8+i]<<5); //y0 前3位 10-3 12列空
zr[10]=zr[10]-(HZ[10*8+i]>>2); //年 , 10-8
zr[11]=zr[11]-(HZ[10*8+i]<<6); //年 , 11-2
if (m1==0) m1=11;
zg[11]=zg[11]-(ZF[m1*8+i]<<1); //m1 3位 11-7
zg[12]=zg[12]-(ZF[m0*8+i]<<4); //m9 5 12-4
zr[12]=zr[12]-(HZ[9*8+i]>>1); //月 前4位 12-8 后5列
zr[13]=zr[13]-(HZ[9*8+i]<<7); //月 后1位 13-11
if (d1==0) d1=11;
zg[13]=zg[13]-(ZF[d1*8+i]<<2); //d1 前3位 13-76 前5列
zg[13]=zg[13]-(ZF[d0*8+i]>>3); //d0 14-5
zg[14]=zg[14]-(ZF[d0*8+i]<<5); //d0 14 3
zr[14]=zr[14]-(HZ[8*8+i]); //日 后4位 14-88
zg[15]=zg[15]-HZ[(wk-1)*8+i]; //week 15-3~15-8
} //i<8
}
else
{
j=i-8;
get_yinli();
if (f1>2)
{
zg[8]=zg[8]-HZ[7*8+j]; //农后5列 8-77
if (nm1==0) nm1=11;
zr[9]=zr[9]-(ZF[nm1*8+j]<<4); //nm1 5位 9-4
zr[9]=zr[9]-(ZF[nm0*8+j]>>1); //nm0 前2位 9-8
zr[10]=zr[10]-(ZF[nm0*8+j]<<7); //nm0 后3位 10-1
zg[10]=zg[10]-(HZ[9*8+j]<<1); //月 前1位 10-7
if (nd1==0) nd1=11;
zr[11]=zr[11]-(ZF[nd1*8+j]<<4); //d1 前4位 10-8
zr[11]=zr[11]-(ZF[nd0*8+j]>>1); //d0 后1 11-7
zr[12]=zr[12]-(ZF[nd0*8+j]<<7); //d0 后1 11-7
zg[12]=zg[12]-(HZ[8*8+j]<<2); //日 前1位 11-8
if (sign==1)
{
zr[12]=zr[12]-(DateD[12][j]>>6); //- 12-6
zr[13]=zr[13]-(DateD[12][j]<<2); //- 13-1
}
zr[13]=zr[13]-(DateD[t1][j]>>1); //t1 13-4
zr[13]=zr[13]-(DateD[t0][j]>>7); //t0 3 13-8
zr[14]=zr[14]-(DateD[t0][j]<<1); //t0 2 14-4
zr[14]=zr[14]-(DateD[13][j]>>4); //. ` 14-5
zg[14]=zg[14]-(DateD[13][j]>>4); //
zr[14]=zr[14]-(DateD[td][j]>>5); //td 3 14-8
zr[15]=zr[15]-(DateD[td][j]<<3); //td 2 15-2
zr[15]=zr[15]-(DateD[14][j]>>3); //C
zg[15]=zg[15]-(DateD[14][j]>>3); //
}
else
{
zr[8]=zr[8]-HZ[7*8+j]; //农后5列 8-77
if (nm1==0) nm1=11;
zg[9]=zg[9]-(ZF[nm1*8+j]<<4); //nm1 5位 9-4
zg[9]=zg[9]-(ZF[nm0*8+j]>>1); //nm0 前2位 9-8
zg[10]=zg[10]-(ZF[nm0*8+j]<<7); //nm0 后3位 10-1
zr[10]=zr[10]-(HZ[9*8+j]<<1); //月 前1位 10-7
if (nd1==0) nd1=11;
zg[11]=zg[11]-(ZF[nd1*8+j]<<4); //d1 前4位 10-8
zg[11]=zg[11]-(ZF[nd0*8+j]>>1); //d0 后1 11-7
zg[12]=zg[12]-(ZF[nd0*8+j]<<7); //d0 后1 11-7
zr[12]=zr[12]-(HZ[8*8+j]<<2); //日 前1位 11-8
if (sign==1)
{
zg[12]=zg[12]-(DateD[12][j]>>6); //- 12-6
zg[13]=zg[13]-(DateD[12][j]<<2); //- 13-1
}
zg[13]=zg[13]-(DateD[t1][j]>>1); //t1 13-4
zg[13]=zg[13]-(DateD[t0][j]>>7); //t0 3 13-8
zg[14]=zg[14]-(DateD[t0][j]<<1); //t0 2 14-4
zr[14]=zr[14]-(DateD[13][j]>>4); //. ` 14-5
zg[14]=zg[14]-(DateD[td][j]>>5); //td 3 14-8
zg[15]=zg[15]-(DateD[td][j]<<3); //td 2 15-2
zr[15]=zr[15]-(DateD[14][j]>>3); //C
} //>8
} //end Keystate==0
}
else if (KeyState==1) //分
{
f0=Minute%16;
f1=Minute/16;
zr[3]=zr[3]-DZF[f1][i]; //f1
zr[4]=zr[4]-DZF[f0][i]; //f0
zg[8]=zg[8]-hanzi[20][i*2]; //调
zg[9]=zg[9]-hanzi[20][i*2+1]; //
zg[10]=zg[10]-hanzi[21][i*2]; //整
zg[11]=zg[11]-hanzi[21][i*2+1]; //
zg[12]=zg[12]-hanzi[17][i*2]; //分
zg[13]=zg[13]-hanzi[17][i*2+1]; //
} //end Keystate==1
else if (KeyState==2) //时
{
h0=Hour%16;
h1=Hour/16;
zr[0]=zr[0]-DZF[h1][i]; //h1
zr[1]=zr[1]-DZF[h0][i]; //h0
zg[8]=zg[8]-hanzi[20][i*2]; //调
zg[9]=zg[9]-hanzi[20][i*2+1]; //
zg[10]=zg[10]-hanzi[21][i*2]; //整
zg[11]=zg[11]-hanzi[21][i*2+1]; //
zg[12]=zg[12]-hanzi[16][i*2]; //时
zg[13]=zg[13]-hanzi[16][i*2+1]; //
} //end Keystate==2
else if (KeyState==3) //day
{
d0=day%16;
d1=day/16;
zr[3]=zr[3]-DZF[d1][i]; //d1
zr[4]=zr[4]-DZF[d0][i]; //d0
zg[8]=zg[8]-hanzi[20][i*2]; //调
zg[9]=zg[9]-hanzi[20][i*2+1]; //
zg[10]=zg[10]-hanzi[21][i*2]; //整
zg[11]=zg[11]-hanzi[21][i*2+1]; //
zg[12]=zg[12]-hanzi[13][i*2]; //日
zg[13]=zg[13]-hanzi[13][i*2+1]; //
} //end Keystate==3
else if (KeyState==4) //month
{
m0=month%16;
m1=month/16;
zr[3]=zr[3]-DZF[m1][i]; //m1
zr[4]=zr[4]-DZF[m0][i]; //dm0
zg[8]=zg[8]-hanzi[20][i*2]; //调
zg[9]=zg[9]-hanzi[20][i*2+1]; //
zg[10]=zg[10]-hanzi[21][i*2]; //整
zg[11]=zg[11]-hanzi[21][i*2+1]; //
zg[12]=zg[12]-hanzi[12][i*2]; //月
zg[13]=zg[13]-hanzi[12][i*2+1]; //
} //end Keystate==4
else if (KeyState==5) //week
{
if (i<8)
{
zr[7]=zr[7]-HZ[(wk-1)*8+i]; //w1 14-5
}
zg[8]=zg[8]-hanzi[20][i*2]; //调
zg[9]=zg[9]-hanzi[20][i*2+1]; //
zg[10]=zg[10]-hanzi[21][i*2]; //整
zg[11]=zg[11]-hanzi[21][i*2+1]; //
zg[12]=zg[12]-hanzi[14][i*2]; //星
zg[13]=zg[13]-hanzi[14][i*2+1]; //
zg[14]=zg[14]-hanzi[15][i*2]; //期
zg[15]=zg[15]-hanzi[15][i*2+1]; //
} //end Keystate==3
else if (KeyState==6) //year
{
y0=year%16;
y1=year/16;
zr[0]=zr[0]-DZF[2][i];
zr[1]=zr[1]-DZF[0][i];
zr[2]=zr[2]-DZF[y1][i];
zr[3]=zr[3]-DZF[y0][i];
zg[8]=zg[8]-hanzi[20][i*2]; //调
zg[9]=zg[9]-hanzi[20][i*2+1]; //
zg[10]=zg[10]-hanzi[21][i*2]; //整
zg[11]=zg[11]-hanzi[21][i*2+1]; //
zg[12]=zg[12]-hanzi[11][i*2]; //年
zg[13]=zg[13]-hanzi[11][i*2+1]; //
} //end Keystate==6
else if (KeyState==7) // alarm minute
{
f1=Aminute/10;
f0=Aminute%10;
zr[3]=zr[3]-DZF[f1][i]; //f1
zr[4]=zr[4]-DZF[f0][i]; //f0
zg[8]=zg[8]-hanzi[20][i*2]; //调
zg[9]=zg[9]-hanzi[20][i*2+1]; //
zg[10]=zg[10]-hanzi[19][i*2]; //定
zg[11]=zg[11]-hanzi[19][i*2+1]; //
zg[12]=zg[12]-hanzi[16][i*2]; //时
zg[13]=zg[13]-hanzi[16][i*2+1]; //
zg[14]=zg[14]-hanzi[17][i*2]; //分
zg[15]=zg[15]-hanzi[17][i*2+1]; //
} //end Keystate==7
else if (KeyState==8) // alarm hour
{
h1=Ahour/10;
h0=Ahour%10;
zr[1]=zr[1]-DZF[h1][i]; //f1
zr[2]=zr[2]-DZF[h0][i]; //f0
zg[8]=zg[8]-hanzi[20][i*2]; //调
zg[9]=zg[9]-hanzi[20][i*2+1]; //
zg[10]=zg[10]-hanzi[19][i*2]; //定
zg[11]=zg[11]-hanzi[19][i*2+1]; //
zg[12]=zg[12]-hanzi[16][i*2]; //时
zg[13]=zg[13]-hanzi[16][i*2+1]; //
zg[14]=zg[14]-hanzi[16][i*2]; //时
zg[15]=zg[15]-hanzi[16][i*2+1]; //
} //end Keystate==8
else if (KeyState==9) // time adjust
{
if (adjust<20)
{
adj=0;
a1=(20-adjust)/10;
a0=(20-adjust)%10;
}
else
{
adj=1;
a1=(adjust-20)/10;
a0=(adjust-20)%10;
}
if (i<8)
{
if (adj==0) zr[1]=zr[1]-DateD[12][i];
zr[2]=zr[2]-DateD[a1][i];
zr[3]=zr[3]-DateD[a0][i];
}
zg[8]=zg[8]-hanzi[20][i*2]; //调
zg[9]=zg[9]-hanzi[20][i*2+1]; //
zg[10]=zg[10]-hanzi[21][i*2]; //整
zg[11]=zg[11]-hanzi[21][i*2+1]; //
zg[12]=zg[12]-hanzi[22][i*2]; //块
zg[13]=zg[13]-hanzi[22][i*2+1]; //
zg[14]=zg[14]-hanzi[23][i*2]; //慢
zg[15]=zg[15]-hanzi[23][i*2+1]; //慢
} //end Keystate==9
for (k=0;k<16;k++)
{
write595(zr[k], zg[k]);
}
HC138_OE=0;
HC595_LAT=1;
HC595_LAT=0;
HC595_CLK=0;
HC138_A=i&0x01;
HC138_B=i&0x02;
HC138_C=i&0x04;
HC138_D=i&0x08;
if (h1==10 &&h0<6) delay(20); //晚上0-6降低亮度
else
{
if(h1>1&&h0<4) delay(120); //晚上8-24降低亮度
else
delay(250);
}
HC138_OE=1;
} //end for i
if (Ahour==h1*10+h0)
{
if (Aminute==f1*10+f0)
{
if (alarmlenth!=500)
{
Alarm=0;
delay(200);
Alarm=1;
alarmlenth++;
}
}
}
else alarmlenth=0;
} //end while
} //end main
void Time0Interrupt(void) interrupt 1 using 1
{
TH0=0xB7; //20 ms断点 (1)
TL0=0xFF; //设定时值
MSecond=MSecond+1;
if (MSecond==15)
{
sd=11;
}
}
|