/****************************************************************************
*描述:12864+ds1302+ds18b20 *
*硬件:AT89C52单片机,晶振为11.0592MHz,KS0108驱动的128*64液晶 *
* SPI总线的DS1302时钟,1-WIRE温度传感器DS18B20。 *
*作者:LO单片机VE *
*文件:12864.c *
*日期:2007-06-10 *
*****************************************************************************
*描述: *
****************************************************************************/
/****************************************************************************
头文件区
****************************************************************************/
#include
#include
/****************************************************************************
内存区定义
****************************************************************************/
sbit BF=P0^7; //12864
sbit DI=P2^0;
sbit RW=P2^1;
sbit ENABLE=P2^2;
sbit CS1=P2^3;
sbit CS2=P2^4;
sbit TIMECLK=P2^7; //DS1302
sbit TIMEDATA=P1^7;
sbit TIMERST=P1^6;
sbit K1=P1^2; //三个按键
sbit K2=P1^3;
sbit K3=P1^4;
sbit K4=P1^5;
sbit LN1=P3^2; //水位控制端口
//sbit LN2=P3^7;
sbit DQ=P3^6; //DS18b20*1
sbit HT=P3^4; //温度控制端口
sbit CR=P3^5;
sbit WT=P3^3;
sbit BUZZ=P3^7;//蜂鸣器
sbit BeiGuang=P2^6;//液晶背光控制
bit SCNF=1; //秒闪烁标志位
bit tempflag; //温度标志位
#define INIT_SECOND 0x00 //年月日星期时间初始值
#define INIT_MINUTE 0x00
#define INIT_HOUR 0x00
#define INIT_DAY 0x01
#define INIT_MONTH 0x01
#define INIT_WEEK 0x01
#define INIT_YEAR 0x00
unsigned char data SECOND; //年月日星期时间
unsigned char data MINUTE;
unsigned char data HOUR;
unsigned char data DAY;
unsigned char data MONTH;
unsigned char data WEEK;
unsigned char data YEAR;
unsigned char count=10; //计数器记数值
unsigned char RF1; //一路闹钟
unsigned char RF2; //二路闹钟
unsigned char MF=0; //移位设置
unsigned char TMF=0;
unsigned char TPF=0;
unsigned char TRF=0;
unsigned char TN=0x60; //温度初始值
unsigned char n=0; //音调
unsigned char year_lunar;
unsigned char month_lunar;
unsigned char day_lunar;
/****************************************************************************
函数声明
****************************************************************************/
void busyl(void); //12864
void busyr(void);
void write_cmdl(unsigned char Commandaddr);
void write_datal(unsigned char Dataaddr);
void busyr(void);
void write_cmdr(unsigned char Commandaddr);
void write_datar(unsigned char Dataaddr);
void init_12864(void);
void clear(void);
void write_ascii(unsigned char x,unsigned char y,unsigned char time,bit fanhei);
void write_character(unsigned char x,unsigned char y,unsigned char *ptr,bit fanhei);
void write_week(unsigned char x,unsigned char y,unsigned char weektime,bit fanhei);
void write_ds1302(unsigned char Writeaddr,unsigned char Writedata); //DS1302
unsigned char read_ds1302(unsigned char Readaddr);
void init_ds1302(void);
void readtime(void);
bit reset_ds18b20(void); //DS18B20
unsigned char ds18b20(void);
void write_ds18b20(unsigned char value);
unsigned char read_temp(void);
void keyscanf(void); //按键
void tempdisplay(void);
void ringdisplay(void);
void keyscanf1(void);
void timereset(void);
void ringreset(void);
void tempreset(void);
unsigned char turntobcd(unsigned char x,unsigned char y,unsigned char value,signed char max,signed char min);
void sound(void);
void display1(void);
void display2(void);
void delayus(unsigned char i); //延时
void delayms(unsigned char j);
void delays(unsigned char k);
void initTimer0(void);
void Timer0(void);
void initTimer1(void);
void Timer1(void);
/****************************************************************************
表格
****************************************************************************/
unsigned char bcddis[6];
unsigned char code divdisplay[] =
{
0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,
0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09
};
/****************************************************************************
ASCII字模的数据表
码表从0x20~0x7e
字库: D:\学习软件\单片机小软件\字模提取\Asc8X16E.dat 纵向取模下高位
****************************************************************************/
unsigned char code nAsciiDot[] = // ASCII
{
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,0x00,0x00,0x00,0x00,0x00, // -.-
0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, // -:-
0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, // ---
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/****************************************************************************
星期汉字字模表
星期汉字库: 宋体16.dot 纵向取模下高位,数据排列:从左到右从上到下
****************************************************************************/
unsigned char code characterweek[] = // 数据表
{
0x80,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,
0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,// 二
0x08,0x08,0x08,0x0C,0x08,0x00,0x00,0x00,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,// 三
0x84,0x84,0x84,0xC4,0x86,0x04,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x30,0x20,