⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 12864 具有菜单显示的电子钟 温度计.txt

📁 12864
💻 TXT
📖 第 1 页 / 共 5 页
字号:
/****************************************************************************
*描述:12864+ds1302+ds18b20                                              *
*硬件:AT89C52单片机,晶振为11.0592MHz,KS0108驱动的128*64液晶                   *
*      SPI总线的DS1302时钟,1-WIRE温度传感器DS18B20。      *
*作者:LO单片机VE                                                           *                                                 
*文件:12864.c                  *             
*日期:2007-06-10                                                           *
*****************************************************************************
*描述:                                                                     *
****************************************************************************/

/****************************************************************************
头文件区
****************************************************************************/
#include<reg52.h>
#include<intrins.h>

/****************************************************************************
内存区定义
****************************************************************************/
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,0x00,

      0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,// 四
      0x04,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,
      0x00,0x7F,0x20,0x28,0x24,0x23,0x20,0x20,
      0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,

      0x00,0x04,0x84,0x84,0x84,0x84,0xFC,0x84,// 五
      0x84,0x84,0x84,0xC4,0x86,0x84,0x00,0x00,
      0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,
      0x40,0x40,0x40,0x7F,0x40,0x60,0x40,0x00,

      0x20,0x20,0x20,0x20,0x20,0x22,0x2C,0x38,// 六
      0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
      0x00,0x40,0x20,0x18,0x06,0x03,0x00,0x00,
      0x00,0x01,0x02,0x0C,0x38,0x70,0x00,0x00,

      0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,// 日
      0x82,0x82,0x82,0xFF,0x02,0x00,0x00,0x00,
      0x00,0x00,0x00,0x7F,0x20,0x20,0x20,0x20,
      0x20,0x20,0x20,0x7F,0x00,0x00,0x00,0x00, 
   
   0x00,0x00,0x00,0xFF,0x01,0x02,0x04,0x08,//闹钟图标
      0xF0,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,
      0x00,0x00,0x00,0xFF,0x80,0x40,0x20,0x10,
      0x0F,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,

   0x00,0x00,0x00,0x18,0x18,0xF8,0xFE,0x0E,//加热图标
   0x0E,0xFE,0xF8,0x18,0x18,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0xC0,
   0xC0,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,

   0x00,0x00,0x00,0xC8,0x64,0xFE,0x64,0x48,//进出水图标
   0x44,0x68,0xFE,0x68,0xC4,0x00,0x00,0x00,
   0x00,0x00,0x00,0x7F,0xF0,0xF3,0xF0,0xF0,
   0xF0,0xF0,0xF3,0xF0,0x7F,0x00,0x00,0x00
};

// 汉字表:
// 一二三四五六日及几个图标

/****************************************************************************
汉字字模的数据结构定义
****************************************************************************/
typedef struct typFNT_GB16                 // 汉字字模数据结构
{
       signed char Index[2];               // 汉字内码索引
       char Msk[32];                       // 点阵码数据
};

/****************************************************************************
汉字字模表                                                          
汉字库: 宋体16.dot 纵向取模下高位,数据排列:从左到右从上到下         
****************************************************************************/
struct typFNT_GB16 code GB_16[] =          // 数据表
{
"年", 0x00,0x20,0x10,0xCC,0x47,0x44,0x44,0xFC,
      0x44,0x44,0x44,0x64,0x46,0x04,0x00,0x00,
      0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,
      0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,

"月", 0x00,0x00,0x00,0x00,0xFE,0x22,0x22,0x22,
      0x22,0x22,0x22,0xFF,0x02,0x00,0x00,0x00,
      0x00,0x80,0x40,0x30,0x0F,0x02,0x02,0x02,
      0x02,0x42,0x82,0x7F,0x00,0x00,0x00,0x00,

"日", 0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,
      0x82,0x82,0x82,0xFF,0x02,0x00,0x00,0x00,
      0x00,0x00,0x00,0x7F,0x20,0x20,0x20,0x20,
      0x20,0x20,0x20,0x7F,0x00,0x00,0x00,0x00,

"星", 0x00,0x00,0xBE,0x2A,0x2A,0x2A,0x2A,0xEA,
      0x2A,0x2A,0x2A,0x2A,0xBF,0x02,0x00,0x00,
      0x48,0x44,0x4B,0x49,0x49,0x49,0x49,0x7F,
      0x49,0x49,0x49,0x4D,0x49,0x61,0x40,0x00,

"期", 0x00,0x08,0xFF,0xA8,0xA8,0xA8,0xFF,0x08,
      0x00,0xFE,0x22,0x22,0x22,0xFF,0x02,0x00,
      0x84,0x44,0x37,0x04,0x04,0x14,0xA7,0x44,
      0x24,0x1F,0x02,0x42,0x82,0x7F,0x00,0x00,

"室", 0x10,0x0C,0x24,0x24,0xA4,0x64,0x25,0x26,
      0x24,0x24,0xA4,0x34,0x24,0x14,0x0C,0x00,
      0x00,0x40,0x40,0x49,0x49,0x49,0x49,0x7F,
      0x49,0x49,0x49,0x4B,0x60,0x40,0x00,0x00,

"温", 0x10,0x22,0x64,0x0C,0x80,0x00,0xFE,0x92,
      0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
      0x04,0x04,0xFE,0x01,0x40,0x7E,0x42,0x42,
      0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,

"度", 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,
      0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00,
      0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,
      0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00,

"热", 0x00,0x88,0x88,0x48,0xFF,0x48,0x28,0x08,
      0x48,0xFF,0x08,0x08,0xFC,0x08,0x00,0x00,
      0x80,0x60,0x04,0x08,0x27,0xC0,0x08,0x04,
      0x23,0xC0,0x01,0x00,0x27,0x48,0xC6,0x00,

"水", 0x00,0x20,0x20,0x20,0x20,0xE0,0x00,0xFF,
      0xC0,0x40,0x20,0x10,0x18,0x00,0x00,0x00,
      0x20,0x10,0x08,0x04,0x03,0x40,0x80,0x7F,
      0x00,0x01,0x02,0x04,0x08,0x18,0x08,0x00,

"箱", 0x40,0x48,0x44,0x43,0xF6,0x4A,0x43,0x0A,
      0xE4,0x23,0x26,0x2A,0x22,0xF3,0x22,0x00,
      0x20,0x10,0x0C,0x03,0xFF,0x02,0x04,0x00,
      0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,

"管", 0x80,0x68,0x24,0xA3,0xA6,0xAA,0xA2,0xBA,
      0xA4,0xA3,0xA2,0xA6,0x2A,0xA2,0x60,0x00,
      0x00,0x00,0x00,0xFF,0x4A,0x4A,0x4A,0x4A,
      0x4A,0x4A,0x4A,0x7B,0x00,0x00,0x00,0x00,

"集", 0x20,0x10,0x08,0xFC,0x57,0x54,0x54,0xFD,
      0x56,0x54,0x54,0x56,0x04,0x00,0x00,0x00,
      0x04,0x44,0x44,0x27,0x15,0x0D,0x05,0xFF,
      0x05,0x0D,0x15,0x25,0x65,0x24,0x04,0x00,

"器", 0x80,0x80,0x9F,0x91,0x91,0x91,0x9F,0xE0,
      0x9F,0x91,0xB1,0xD1,0x9F,0xC0,0x80,0x00,
      0x08,0x08,0xFC,0x8C,0x8A,0x8A,0xF9,0x00,
      0xF9,0x8A,0x8A,0x8C,0xFC,0x08,0x08,0x00,

"闹", 0x00,0xF9,0x02,0x26,0x20,0x22,0x2A,0xF2,
      0x22,0x22,0xB2,0x22,0x02,0xFF,0x02,0x00,
      0x00,0xFF,0x00,0x00,0x1F,0x01,0x01,0x7F,
      0x01,0x11,0x1F,0x41,0x80,0x7F,0x00,0x00,

"钟", 0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xF0,
      0x10,0x10,0xFF,0x10,0x10,0xF8,0x10,0x00,
      0x02,0x02,0x02,0x7F,0x22,0x12,0x00,0x07,
      0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00,

"设", 0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9F,
      0x81,0x81,0x81,0x9F,0xA0,0x20,0x20,0x00,
      0x00,0x00,0x00,0x7F,0xA0,0x90,0x40,0x43,
      0x2C,0x10,0x28,0x26,0x41,0xC0,0x40,0x00,

"置", 0x00,0x10,0x17,0xD5,0x55,0x57,0x55,0x7D,
      0x55,0x57,0x55,0xD5,0x17,0x10,0x00,0x00,
      0x40,0x40,0x40,0x7F,0x55,0x55,0x55,0x55,
      0x55,0x55,0x55,0x7F,0x40,0x60,0x40,0x00,

"返", 0x40,0x42,0x44,0xCC,0x00,0x00,0xFC,0x04,
      0xA4,0x24,0x24,0xA2,0x63,0x02,0x00,0x00,
      0x00,0x40,0x20,0x1F,0x20,0x58,0x87,0x90,
      0x88,0x85,0x82,0x85,0x88,0xD8,0x40,0x00,

"回", 0x00,0xFC,0x04,0x04,0x04,0xE4,0x24,0x24,
      0x24,0xF4,0x24,0x04,0x04,0xFE,0x04,0x00,
      0x00,0x7F,0x20,0x20,0x20,0x2F,0x24,0x24,
      0x24,0x2F,0x20,0x20,0x20,0x7F,0x00,0x00,

"时", 0x00,0xFC,0x84,0x84,0x84,0xFE,0x14,0x10,
      0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,
      0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,
      0x00,0x23,0x40,0x80,0x7F,0x00,0x00,0x00,

"间", 0x00,0xF8,0x01,0x02,0xF6,0x10,0x12,0x12,
      0x12,0x12,0xFA,0x12,0x02,0xFF,0x02,0x00,
      0x00,0xFF,0x00,0x00,0x3F,0x11,0x11,0x11,
      0x11,0x11,0x3F,0x40,0x80,0x7F,0x00,0x00,

"路", 0x00,0xFE,0x42,0xC2,0x42,0x7F,0x12,0x08,
      0x8C,0x57,0x24,0x54,0x8C,0x84,0x80,0x00,
      0x40,0x7E,0x40,0x3F,0x22,0x22,0x01,0xFF,
      0x42,0x42,0x42,0x42,0x42,0xFF,0x02,0x00,

"开", 0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,
      0x82,0x82,0xFE,0x82,0x83,0xC2,0x80,0x00,
      0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,
      0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,

"关", 0x00,0x10,0x10,0x11,0x12,0x1C,0x10,0xF0,
      0x10,0x18,0x14,0x13,0x1A,0x90,0x00,0x00,
      0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,
      0x0D,0x11,0x21,0x21,0x41,0xC1,0x41,0x00,

"定", 0x10,0x0C,0x04,0x24,0x24,0x24,0x25,0xE6,
      0x24,0x24,0x34,0x24,0x04,0x14,0x0C,0x00,
      0x80,0x40,0x20,0x1F,0x20,0x40,0x40,0x7F,
      0x42,0x42,0x43,0x42,0x40,0x60,0x20,0x00,

"到", 0x00,0x62,0x52,0x4A,0xC6,0x42,0x52,0x63,
      0xC2,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00,
      0x40,0x42,0x42,0x42,0x7F,0x22,0x23,0x22,
      0x20,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,

"℃", 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  
};


/****************************************************************************
延时
****************************************************************************/
void delayus(unsigned char i)
{
 for(;i>0;i--);
}

void delayms(unsigned char j)
{
 unsigned char i;

 for(;j>0;j--)
 for(i=248;i>0;i--);
}

void delays(unsigned char k)
{
 unsigned char i,j;

 for(;k>0;k--)
 for(j=200;j>0;j--)
 for(i=248;i>0;i--);
}

/****************************************************************************
定时器0
****************************************************************************/
void initTimer0(void)
{
 TMOD=0x01;
 TH0=0x3c;
 TL0=0xb0;
}

void timer0(void)interrupt 1 using 1
{
 count--;
 TH0=0x3c;
 TL0=0xb0;
 if(count==0)
 {
  count=10;
  SCNF=~SCNF;
 }
}

/****************************************************************************
定时器1
****************************************************************************/
void initTimer1(void)
{
 TMOD=0x10;
 TH1=0xd8;
 TL1=0xef;
}

void timer1(void)interrupt 3 using 2
{ 
 TH1=0xd8;
 TL1=0xef;
 n--;
}

/****************************************************************************
向DS1302写入一个字节数据
****************************************************************************/
void write_ds1302(unsigned char Writeaddr,unsigned char Writedata)
{
 unsigned char i;

 TIMECLK=0;
 delayus(1);
 TIMERST=1;
 delayus(1);

 for(i=8;i>0;i--)
 {
  TIMECLK=0;
  TIMEDATA=Writeaddr&0x01;
  delayus(1);
  TIMECLK=1;
  Writeaddr=Writeaddr>>1;
 }

 for(i=8;i>0;i--)
 {
  TIMECLK=0;
  TIMEDATA=Writedata&0x01;
  delayus(1);
  TIMECLK=1;
  Writedata=Writedata>>1;
 }

 TIMERST=0;
 delayus(1);
 TIMECLK=0;
 delayus(1);
}

/****************************************************************************
从DS1302读出一个字节的数据
****************************************************************************/
unsigned char read_ds1302(unsigned char Readaddr)
{
 unsigned char i;
 unsigned char value=0;

 TIMECLK=0;
 delayus(1);
 TIMERST=1;
 delayus(1);
 
 for(i=8;i>0;i--)
 {
  TIMECLK=0;
  TIMEDATA=Readaddr&0x01;
  delayus(1);
  TIMECLK=1;
  Readaddr=Readaddr>>1;
 }

 for(i=8;i>0;i--)
 {
  value=value>>1;
  TIMECLK=1;
  delayus(1);
  TIMECLK=0;
  if(TIMEDATA==1)
  {
   value=value|0x80;
  }
  delayus(1);
 }

 TIMERST=0;
 delayus(1);
 TIMECLK=0;
 delayus(1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -