版主
  
主题
帖子
积分39447
阅读权限200
注册时间2011-5-6
最后登录1970-1-1
在线时间 小时
|

楼主 |
发表于 2012-1-24 16:19
|
显示全部楼层
不会吧~为什么我的电脑就能打开?
程序就贴在这里了
/*******************************程序设计:张军考QQ:86046233************************/
//#include <REG52.H>
#include <STC12C5A60S2.h>
//#include <AT89X55.H>
#include "intrins.h" //_nop_();延时函数用
#include <intrins.h> /* use _nop_() function */
#include <math.h>
#define XMS 65535-1536 /* 定时中断间隔 1uS 改这里可以解决闪动的问题*/
#define uchar unsigned char
#define uint unsigned int
#define tmh XMS/256;
#define tml XMS%256;
/*****************************************/
void UARTSET(); //串口初始化
uchar x,g;
uchar code tab[]={254,253,251,247,239,223,191,127,254,253,251,247,239,223,191,127};
/*****************************************/
uchar chang1,hang1,shujujixing1=1,oejixing1;
uchar d8,ch; wendu;
bit txx;
/*****************************************************************/
#define AUXR =0xa2;
/**************************************************************************/
/* 定义常量 */
#define ERROR 0
#define OK 1
//#define ENABLE_ISP 0x80 //系统工作时钟<24MHz 时,对IAP_CONTR 寄存器设置此值
//#define DEBUG_DATA 0x5A //本测试程序最终存储在 EEPROM 单元的数值
//ABCD四个的数据在982和984行,这里定义为p1
sbit LT =P3^1;//ST
sbit SK =P3^2;//CK
sbit DIN=P3^3;//R2
sbit G1=P3^4;
sbit DIN1=P3^5;//R1
sbit G2 =P3^6;
sbit en =P3^7;//OE
sbit T_CLK=P2^5; //1302sclk
sbit T_IO=P2^6; //1302data
sbit T_RST=P2^7; //1302rst
sbit ACC0=ACC^0; //1bit数据存储位
sbit ACC7=ACC^7;
sbit test=P0^6; // 按键
sbit up=P0^7; // 按键
sbit DQ=P0^0; // 18B20温度传感器
uchar xdata yw4x7[]= {0x01,0x02,0x04,0x08};
uchar xdata yw[]= {0x40,0x20,0x10,0x08,0x04,0x02,0x01};
uchar xdata yw1[]= {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
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 idata 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
{
0x06,0x09,0x09,0x09,0x09,0x09,0x06, //0
0x02,0x06,0x02,0x02,0x02,0x02,0x07, //1
0x06,0x09,0x01,0x02,0x04,0x08,0x0f, //2
0x06,0x09,0x01,0x06,0x01,0x09,0x06, //3
0x02,0x06,0x0a,0x0a,0x0f,0x02,0x02, //4
0x0f,0x08,0x0e,0x09,0x01,0x09,0x06, //5
0x06,0x09,0x08,0x0e,0x09,0x09,0x06, //6
0x0f,0x01,0x01,0x02,0x04,0x04,0x04, //7
0x06,0x09,0x09,0x06,0x09,0x09,0x06, //8
0x06,0x09,0x09,0x07,0x01,0x09,0x06, //9
0x00,0x02,0x02,0x00,0x02,0x02,0x00, //10 :
0x00,0x00,0x00,0x00,0x00,0x00,0x00, //11 空
0x02,0x02,0x02,0x02,0x02,0x02,0x03, //13 -
0x00,0x00,0x02,0x07,0x02,0x00,0x00, //14 +
0x00,0x00,0x00,0x00,0x0f,0x00,0x00, // - 15
0x00,0x00,0x00,0x01,0x00,0x00,0x00, // . 16
0x00,0x00,0x00,0x03,0x00,0x00,0x00, // .。 17
0x00,0x00,0x00,0x03,0x00,0x00,0x00, // - 18
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,0x3C,0x24,0x24,0x3C,0x24,0x24,0x3C, //6 日
0x08,0x3e,0x52,0x5a,0x24,0x32,0x59,0x10, //7 农
0x00,0x78,0x48,0x48,0x78,0x48,0x48,0x78, //8 日
0x00,0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11, //9 月
0x08,0x1f,0x24,0x1f,0x14,0x3f,0x04,0x04, //10 年
0x3F,0x20,0x24,0x2F,0x25,0x25,0x49,0x53, //11 历
0x3F,0x29,0x3D,0x29,0x3D,0x21,0x3D,0x5D, //12 周
};
unsigned char code DateD[]= //二维数据5x7
{
0xB8,0x20,0x20,0x38,0x00,0x00,0x00, //1 ℃
};
unsigned char code DZF[]=
{
/* --- 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,0x07,0x06,0x06,0x06,0x0E,0x0C,0x0C,0x1C,0x18,0x18,0x18, //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,0x3c,0x3c,0x18,0x00,0x00,0x00,0x00,0x18,0x3c,0x3c,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[]= //一维数据7x12
{
0x3e,0x7f,0x63,0x63,0x63,0x63, 0x63, 0x63, 0x63, 0x63, 0x7f, 0x3e, //0
0x1c,0x3c,0x1c,0x1c,0x1c,0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x3e, //1
0x3e,0x7f,0x63,0x63,0x07,0x0e, 0x1c, 0x38, 0x70, 0x60, 0x7f, 0x7f, //2
0x3e,0x7f,0x63,0x63,0x03,0x06, 0x06, 0x03, 0x63, 0x63, 0x7f, 0x3e, //3
0x1e,0x1e,0x36,0x36,0x36,0x66, 0x66, 0x7f, 0x7f, 0x06, 0x06, 0x06, //4
0x3f,0x7f,0x60,0x60,0x60,0x7e, 0x3f, 0x03, 0x03, 0x63, 0x7f, 0x3e, //5
0x3e,0x7f,0x63,0x60,0x60,0x7e, 0x7f, 0x63, 0x63, 0x63, 0x7f, 0x3e, //6
0x3e,0x7f,0x63,0x63,0x03,0x06, 0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, //7
0x3e,0x7f,0x63,0x63,0x63,0x3e, 0x3e, 0x63, 0x63, 0x63, 0x7f, 0x3e, //8
0x3e,0x7f,0x63,0x63,0x63,0x7f, 0x3f, 0x03, 0x03, 0x63, 0x7f, 0x3e, //9
0x00,0x00,0x00,0x06,0x06,0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, //10 :
0x00,0x00,0x00,0x00,0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //11
};
uchar hang=0;
uchar xdata buff[640];//显示缓冲区
/********************************************1302********************************/
uchar R1302(uchar ucAddr);
void W1302(uchar ucAddr, uchar ucDa);
void RTInputByte(uchar d);
uchar RTOutputByte(void);
uchar miao,fen,shi,ri,yue,xinqi,nian;
void du1302();
void Set(uchar sel);
void xianshi(void);
void SBUF_byte(uchar i);
uchar anjianzhuangtai;
/*********************************************************************************/
void in_data16(void);//1/16扫描
void fasong(uchar dat,uchar dat1 );//高32点
/************************测试程序********************************/
uchar code huangse[]= {0x3f,0xcf,0xf3,0xfc};
uchar code hongse[]= {0x7f,0xdf,0xf7,0xfd};
uchar code lvse[]= {0xbf,0xef,0xfb,0xfe};
uchar code heise[]= {0xc0,0x30,0x0c,0x03};
/**************************************************************************************************************/
void delay(int useconds)
{
int s;
for (s=0; s<useconds;s++);
}
/*----------------18B20 程序----------------------*/
//复位
bit ow_reset(void)
{
bit presence;
DQ=1;
delay(20);
DQ=0; //拉低总线
EA=0;
delay(250);
EA=1;
_nop_(); //稍作延时。没有这条无法读取温度值
DQ = 1; // 释放总线
delay(30); // 等待回复,12M时=30
presence = DQ; // 读取信号
delay(100);
// 等待结束信号,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;
if(DQ)value|=0x80;
delay(30); // 12M时=12
}
return(value);
}
//向 1-WIRE 总线上写一个字节
void write_byte(char val)
{
unsigned char i;
for (i=8; i>0; i--) // 一次写一位
{
DQ=0;
DQ = val&0x01;
delay(30); // 12M时=30
DQ = 1;
val=val/2;
}
}
unsigned int Read_Temperature(void)
{
union
{
unsigned char c[2];
unsigned int x;
}temp;
temp.x=0x0000;
EA=0;
i=ow_reset(); //reset
if(!i)
{
write_byte(0xCC); //S kip ROM
write_byte(0x44); //Start Conversion
EA=1;
delay(5);
}
EA=0; i=ow_reset();EA=1;
if(!i)
{EA=0;
write_byte(0xCC); //Skip ROM
write_byte(0xBE); //Read Scratch Pad
EA=1;
delay(5);
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= ri;
mo= yue;
yy= nian;
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;
}
/****************************画点函数******张军考原创*********************************/
//ys=0黄色ys=1红色ys=2绿色
void huadian(uchar x1,uchar y1,uchar ys)
{if(ys==0)
{
buff[y1*chang1+x1/4]&=huangse[x1%4];
}
if(ys==1)
{
buff[y1*chang1+x1/4]&=hongse[x1%4];
}
if(ys==2)
{
buff[y1*chang1+x1/4]&=lvse[x1%4];
}
if(ys==3)
{
buff[y1*chang1+x1/4]|=heise[x1%4];
}
}
/**************在指定位置显示4x7数字************************/
void sz4x7(uchar x,uchar y,uchar ys,uint add)
{uchar w,h;
for(h=0;h<7;h++)for(w=0;w<4;w++)
{if(ZF[h+add]&yw4x7[3-w])huadian(w+x,h+y,ys);else huadian(w+x,h+y,3);
}
}
/**************在指定位置显示5x7数字************************/
void sz5x7(uchar x,uchar y,uchar ys,uint add)
{uchar w,h;
for(h=0;h<7;h++)for(w=0;w<5;w++)
{if(DateD[h+add]&yw1[w])huadian(w+x,h+y,ys);else huadian(w+x,h+y,3);
}
}
/**************在指定位置显示7x8汉字************************/
void hz7x8(uchar x,uchar y,uchar ys,uint add)
{uchar w,h;
for(h=0;h<8;h++)for(w=0;w<7;w++)
{if(HZ[h+add]&yw[w])huadian(w+x,h+y,ys);else huadian(w+x,h+y,3);
}
}
/**************在指定位置显示8x16数字************************/
void sz8x16(uchar x,uchar y,uchar ys,uint add)
{uchar w,h;
for(h=0;h<16;h++)for(w=0;w<8;w++)
{if(DZF[h+add]&yw1[w])huadian(w+x,h+y,ys);else huadian(w+x,h+y,3);
}
}
/****************************键盘扫描********************************/
void keyscan()
{
if(test==0){delay(10);if(test==0){while(test==0){xianshi();}anjianzhuangtai++;if(anjianzhuangtai>=8)anjianzhuangtai=0;}}
if(anjianzhuangtai!=0)
{if(up==0){delay(10);if(up==0){while(up==0){xianshi();}Set(anjianzhuangtai);}}
}
}
/*******************************显示*************************/
void xianshi()
{uchar j,i;
unsigned char p, q;
if(i==6){
//EA=0;
tem=Read_Temperature();
//EA=1;
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];
}
j++;
if(j>3){du1302();get_yinli();j=0;}
i++;if(i>8)i=0;
/******************时分秒显示****************/
if(i>=4&&anjianzhuangtai==1)//时闪烁
{sz8x16(1,0,3,160);//
sz8x16(11,0,3,160);//
}
else{sz8x16(1,0,0,(shi/16)*16);//
sz8x16(11,0,0,(shi%16)*16);//
}
sz8x16(21,0,2,11*16); //秒点
if(i>=4&&anjianzhuangtai==2)//分闪烁
{sz8x16(31,0,3,160);//
sz8x16(41,0,3,160);//
}
else{sz8x16(31,0,0,(fen/16)*16);//
sz8x16(41,0,0,(fen%16)*16);//
}
sz8x16(51,0,2,11*16); //秒点
if(i>=4&&anjianzhuangtai==3)//秒闪烁
{sz8x16(61,0,3,160);//
sz8x16(71,0,3,160);//
}
else{sz8x16(61,0,0,(miao/16)*16);//
sz8x16(71,0,0,(miao%16)*16);//
}
/*****************年月日显示**************************/
if(i>=4&&anjianzhuangtai==4)//年闪烁
{sz4x7(0,17,3,44);
sz4x7(5,17,3,44);
sz4x7(10,17,3,44);
sz4x7(15,17,3,44);
}
else{sz4x7(0,17,1,14);
sz4x7(5,17,1,0);
sz4x7(10,17,1,(nian/16)*7);
sz4x7(15,17,1,(nian%16)*7);
}
hz7x8(19,16,0,80); //年
if(i>=4&&anjianzhuangtai==5)//月闪烁
{sz4x7(28,17,3,44);
sz4x7(33,17,3,44);
}
else{sz4x7(28,17,1,(yue/16)*7);
sz4x7(33,17,1,(yue%16)*7);
}
hz7x8(37,16,0,72); //月
if(i>=4&&anjianzhuangtai==6)//日闪烁
{sz4x7(45,17,3,44);
sz4x7(50,17,3,44);
}
else{sz4x7(45,17,1,(ri/16)*7);
sz4x7(50,17,1,(ri%16)*7);
}
hz7x8(56,16,0,64); //日
/******************星期显示**********************************/
hz7x8(63,16,2,96); //周
if(xinqi==7)xinqi=0;
if(i>=4&&anjianzhuangtai==7)//日闪烁
{hz7x8(73,16,3,44);}
else{hz7x8(73,16,1,xinqi%16*8);}
/***********************农历温度***********************************/
hz7x8(1,24,2,56); //农
hz7x8(10,24,2,88);
sz4x7(19,25,1,(nm1)*7);
sz4x7(24,25,1,(nm0)*7);
hz7x8(29,24,2,72); //月
sz4x7(38,25,1,(nd1)*7);
sz4x7(43,25,1,(nd0)*7);
hz7x8(49,24,2,64); //日
sz4x7(57,25,1,(t1)*7);
sz4x7(62,25,1,(t0)*7);
huadian(68,31,1);
sz4x7(70,25,1,(td)*7);
sz5x7(75,25,2,(0)*7); //温度符号
}
//根据选择调整相应项目
void Set(uchar sel)
{
uchar address,item;
uchar max,mini;
if(sel==3) {address=0x80; max=0;mini=0;} //秒
if(sel==2) {address=0x82; max=59;mini=0;} //分钟
if(sel==1) {address=0x84; max=23;mini=0;} //小时
if(sel==7) {address=0x8a; max=7; mini=1;} //星期
if(sel==6) {address=0x86; max=31;mini=1;} //日
if(sel==5) {address=0x88; max=12;mini=1;} //月
if(sel==4) {address=0x8c; max=99;mini=0;} //年
item=R1302(address+1)/16*10+R1302(address+1)%16;
item++;if(item>max) item=mini;
W1302(0x8e,0x00);
W1302(address,item/10*16+item%10);
W1302(0x8e,0x80);
du1302();
}
/***********************************************************程序*************************************************************/
void main ()
{
uint j;
//P4SW=0xff;
P0M1=0;
P0M0=1;
//P4M1=0;
//P4M0=0xff;
P1M1=0;
P1M0=0xff;
P2M1=0;
P2M0=0xff;
UARTSET();
ET0=1;
EA=1;
oejixing1=1;
chang1=20;
for(j=0;j<640;j++)buff[j]=0xff;
while(1)
{keyscan();
xianshi();
}
}
/*********************************************************************/
/************************************定时器中断程序**************************************0***/
void timer0( ) interrupt 1 using 1 //定时器中断程序
{uchar h;
ET0=0;
TH0=tmh; /* 5ms */
TL0=tml;
{
in_data16();
if(oejixing1==1) en=1;else en=0;
LT=0;
LT=1;
h=P1;
h&=0xf0;
P1=h|(hang);if(oejixing1==1)en=0;else en=1;
hang++;if(hang==16)hang=0;
}
ET0=1;
}
/********************************初始化串口定时器***************************************/
void UARTSET()
{
SCON=0X50; //串口为模式1,一位起始位,8位数据位,一位停止位。启动串口。
TMOD &= 0x00;
TMOD |= 0x21;
TH1 = 0xFD;
TL1 = 0xFD;
PCON &= 0x7f;
TH0=tmh; /* 5ms */
TL0=tml;
TR0=1; //启动定时器0
ET1=0;
TR1=1; //启动定时器1
PS=1; //串口中断优先
ES=1; //开启串口中断
REN=1;
}
/**********************************串口中断**********************************/
/**********************************串口中断**********************************/
void ser() interrupt 4 //中断程序,接收数据块,标志位置1
{uchar a;
EA=0;//if(oejixing1==1)en=0;else en=1;//en=1;
a=SBUF;
//wod=0;
if(RI)
{RI=0;
switch (g)
{
case 0: //第一次数据
if(a==0xca) //收到握手信号
{
g=1;
}else g=0;
break;
case 1:if(a==0x91)g=14;else g=0;
break;
case 14:W1302(0x8e,0x00);W1302(0x80,a);W1302(0x8e,0x80);g=15;break;
case 15:W1302(0x8e,0x00);W1302(0x82,a);W1302(0x8e,0x80);g=16;break;
case 16:W1302(0x8e,0x00);W1302(0x84,a);W1302(0x8e,0x80);g=17;break;
case 17:W1302(0x8e,0x00);W1302(0x86,a);W1302(0x8e,0x80);g=18;break;
case 18:W1302(0x8e,0x00);W1302(0x88,a);W1302(0x8e,0x80);g=19;break;
case 19:W1302(0x8e,0x00);W1302(0x8a,a);W1302(0x8e,0x80);g=20;break;
case 20:W1302(0x8e,0x00);W1302(0x8c,a);W1302(0x8e,0x80);g=21;break;
case 21:SBUF_byte(0xf5);g=0;IAP_CONTR=0x20;break;
}
}
EA=1;
}
void SBUF_byte(uchar i)
{
SBUF=i;
while(!TI);
TI=0;
}
//*************1/16扫描***********************************//
void in_data16( )
{
uchar v=0;
uint m;
// mh=320;
m=hang*20;
for (v=0;v<20;v++)
{
fasong(buff[v+m],buff[v+m+320]); } }
/*********************************************************************/
//**************八位数据发送****************//
void fasong(uchar dat,uchar dat1 )
{
uchar t;
for (t=0;t<4;t++)
{
{ DIN=dat&0x80;DIN1=dat1&0x80;
G1=dat&0x40;G2=dat1&0x40;
}
if(shujujixing1==1){ DIN=!DIN;DIN1=!DIN1;G1=!G1;G2=!G2;}
SK=0;
SK=1;
dat<<=2; dat1<<=2;
}
}
/****************************************/
//********DS1302读写程序***************//
/******************************************************************** /
函 数 名:RTInputByte()
功 能:实时时钟写入一字节
说 明:往DS1302写入1Byte数据 (内部函数)
入口参数:d 写入的数据
返 回 值:无
***********************************************************************/
void RTInputByte(uchar d)
{
uchar h;
ACC = d;
for(h=8; h>0; h--)
{
T_IO = ACC0; _nop_(); /*相当于汇编中的 RRC */
T_CLK = 1;_nop_();
T_CLK = 0;_nop_();
ACC = ACC >> 1;
}
}
/********************************************************************
函 数 名:RTOutputByte()
功 能:实时时钟读取一字节
说 明:从DS1302读取1Byte数据 (内部函数)
入口参数:无
返 回 值:ACC
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
uchar RTOutputByte(void)
{
uchar h;
for(h=8; h>0; h--)
{
ACC = ACC >>1; /*相当于汇编中的 RRC */
ACC7 = T_IO;
_nop_();_nop_();
T_CLK = 1;
_nop_();
T_CLK = 0;
}
return(ACC);
}
/********************************************************************
函 数 名:W1302()
功 能:往DS1302写入数据
说 明:先写地址,后写命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址, ucData: 要写的数据
返 回 值:无
***********************************************************************/
void W1302(uchar ucAddr, uchar ucDa)
{
T_RST = 0;_nop_();
T_CLK = 0;_nop_();
T_RST = 1;_nop_();
RTInputByte(ucAddr); _nop_(); /* 地址,命令 */
RTInputByte(ucDa); _nop_(); /* 写1Byte数据*/
T_CLK = 1; _nop_();
T_RST = 0;_nop_();
}
/********************************************************************
函 数 名:R1302()
功 能:读取DS1302某地址的数据
说 明:先写地址,后读命令/数据 (内部函数)
调 用:RTInputByte() , RTOutputByte()
入口参数:ucAddr: DS1302地址
返 回 值:ucData :读取的数据
***********************************************************************/
uchar R1302(uchar ucAddr)
{
uchar ucData;
T_RST = 0;_nop_();//delay1(1);
T_CLK = 0;//delay1(1);
_nop_();_nop_();
T_RST = 1;_nop_();//delay1(1);
RTInputByte(ucAddr); _nop_(); //delay1(1); /* 地址,命令 */
ucData = RTOutputByte(); _nop_();// delay1(1); /* 读1Byte数据 */
T_CLK = 1;_nop_();//delay1(1);
T_RST = 0;//delay1(1);
return(ucData);
}
/********************************************************************
函 数 名:Set1302()
功 能:设置初始时间
说 明:先写地址,后读命令/数据(寄存器多字节方式)
调 用:W1302()
入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
返 回 值:无
***********************************************************************/
/******************读取DS1302中的时间****************/
void du1302()
{
miao=R1302(0x81); //对取 秒 分 时 日 月 星期 年
fen=R1302(0x83);
shi=R1302(0x85);
ri=R1302(0x87);
yue=R1302(0x89);
xinqi=R1302(0x8b);
nian=R1302(0x8d);
} |
|