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

📄 123.txt

📁 用12864实现多功能数码时钟
💻 TXT
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************/
/*  Name:  LCD12864(KS0108+KS0107)+DS1302+DS18B20+S52                         */
/*                                                                            */
/*  Designed by : 李 海 群                                                    */
/*                                                                            */
/*  http://www.mculover.net                                                   */   
/*  http://www.mculover.net/whoami                Date : 2005/12/13           */
/******************************************************************************/
#include <reg52.h>

sbit Bell_Out  = P1 ^ 6;//闹钟管脚输出。低电平有效
//sbit Bak_Light = P1 ^ 5;//LCD背光控制,低电平有效 

sbit DQ        = P1 ^ 7;//ds1820data
sbit CLK = P3 ^ 6;//ds1302_clk
sbit IO = P3 ^ 7;//ds1302_dat
sbit RST2 = P3 ^ 5;//ds1302_Rst

#define Disp_On     0x3f //定义12864管脚的指令值
#define Disp_Off    0x3e
#define Col_Add     0x40
#define Page_Add    0xb8
#define Start_Line  0xc0

#define Lcd_Bus     P0  //定义12864数据口

sbit Mcs    =   P2 ^ 5;  //12864CS1
sbit Scs    =   P2 ^ 4;  //CS2
sbit Enable =   P2 ^ 1; //Enable
sbit Di     =   P2 ^ 3;  //di
sbit RW     =   P2 ^ 2;  //rw
sbit Lcd_Rst=   P2 ^ 0; //rst

//键盘扫描
sbit Add_Key  = P1 ^ 1;//加1键,S1
sbit Dec_Key  = P1 ^ 2;//减1键,S2
sbit OK_Key   = P1 ^ 0;//确定键,S3
sbit Rst_Key  = P1 ^ 3;//系统复位键,S4

//为了编程方便定义的位变量
sbit ACC7 = ACC^7; //新更改
sbit ACC0 = ACC^0; //新更改
bit K1,K2,K3,K4,K5,K6,K7,KT;//新更改

bit flag, Bell_Swh,Hourb,Minb,Secb,Kgb;//闹钟调时闪烁标志位
unsigned char  sec=0,min=0,hour=0,year=0,mon=0,day=0,weekk=0,n=0; //闪烁标志位
bit flag_min    = 0,flag_sec = 0;//整点报警标志位
unsigned char id,id2,d,e,S_1302,H_1302,H_Bell,S_Bell; //

//Function Definition 函数声明 
void Delay(int num);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
unsigned int ReadTemperature(void);
clock_out(void);
void clock_in(unsigned char dat);
unsigned char read_clock(unsigned char ord);
void write_clock(unsigned char ord, unsigned char dd);
void Disp(void);
void id_case1_key(void);
void id_case2_key(void);
void Set_time(unsigned char sel,bit sel_1);
void Timer0_Init(void);
void Init_1302(void);
void Set_Bell(unsigned char sel, bit sel_1);
void Beep(void);

//12864
void Delay12864(unsigned int t);
void write_com(unsigned char cmdcode);
void write_data(unsigned char Dispdata);
void frame(void);
void Clr_Scr(void);
void Disp_Img(unsigned char code *img);
void Disp_Digit(unsigned char pag,unsigned char col, unsigned char code *hzk);
void Disp_Chinese(unsigned char pag,unsigned char col, unsigned char code *hzk);
void Init_lcd(void);

//汉字库及数字符号库
unsigned char code nao[32]={0x00,0x00,0xF9,0x12,0x90,0x92,0x96,0xFA,0x92,0x92,0x92,0x12,0x02,0xFE,0x00,0x00,
0x00,0x00,0xFF,0x00,0x1F,0x00,0x00,0x7F,0x00,0x08,0x1F,0x40,0x80,0x7F,0x00,0x00};/*--  文字:  闹  --*/

unsigned char code zhong[32]={0x40,0x30,0x2C,0xEB,0x28,0x28,0x00,0xF8,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,
0x01,0x01,0x01,0xFF,0x41,0x21,0x00,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x00,0x00};/*--  文字:  钟  --*/

unsigned char code she[32]={0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00,
0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00};/*--  文字:  设  --*/

unsigned char code ding[32]={0x00,0x10,0x0C,0xA4,0x24,0x24,0x25,0xE6,0x24,0x24,0x24,0x24,0x14,0x0C,0x04,0x00,
0x40,0x20,0x18,0x07,0x08,0x10,0x20,0x7F,0x42,0x42,0x42,0x42,0x40,0x40,0x00,0x00};/*--  文字:  定  --*/

unsigned char code kai[32]={0x40,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00};/*--  文字:  开  --*/

unsigned char code guan[32]={0x00,0x10,0x10,0x10,0x11,0x1E,0x14,0xF0,0x10,0x18,0x17,0x12,0x18,0x10,0x00,0x00,
0x01,0x81,0x41,0x21,0x11,0x09,0x05,0x03,0x05,0x09,0x31,0x61,0xC1,0x41,0x01,0x00};/*--  文字:  关  --*/

unsigned char code shit[32]={0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00};/*--  文字:  时  --*/
unsigned char code jian[32]={0x00,0xF8,0x01,0x06,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x40,0x80,0x7F,0x00,0x00};/*--  文字:  间  --*/
unsigned char code dao[32]={0x00,0x22,0x72,0x2A,0x26,0xE2,0x2A,0x72,0x22,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00,
0x00,0x42,0xC2,0x42,0x22,0x3F,0x22,0x12,0x12,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00};/*--  文字:  到  --*/

unsigned char code shi[32]={0x00,0x10,0x2C,0x24,0xA4,0x64,0x25,0x26,0x24,0x24,0xA4,0x24,0x34,0x2C,0x04,0x00,
0x40,0x40,0x48,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x40,0x00};//室
unsigned char code wen[32]={0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00};//温
unsigned char code zero[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};//0
unsigned char code one[16]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};//1
unsigned char code two[16]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};//2
unsigned char code three[16]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};//3
unsigned char code four[16]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};//4
unsigned char code five[16]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};//5
unsigned char code six[16]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};//6
unsigned char code seven[16]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};//7
unsigned char code eight[16]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};//8
unsigned char code nine[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};//9
unsigned char code point[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};//小数点
unsigned char code maohao[16]={0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};//冒号
unsigned char code space[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//空白
unsigned char code fh[16]={0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x6F,0x6F,0x00,0x00,0x00};//!感叹号

unsigned char code nian[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};//年
unsigned char code yue[32]={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};//月
unsigned char code xing[32]={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};//星
unsigned char code qi[32]={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};//期
unsigned char code cone[32]={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};//一
unsigned char code ctwo[32]={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};//二
unsigned char code cthree[32]={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};//三
unsigned char code cfour[32]={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};//四
unsigned char code cfive[32]={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};//五
unsigned char code csix[32]={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};//六
unsigned char code ri[32]={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};//日
unsigned char code sheshidu[32]={0x00,0x02,0x05,0xE2,0x18,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,
0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x18,0x00,0x00};//摄氏度的符号
unsigned char code spaces[32]={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};//汉字空格
unsigned char code biaozhi[32]={0x00,0x00,0x00,0x00,0xE0,0xF8,0xFC,0xFC,0xFC,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,
0x00,0x10,0x18,0x3E,0x3F,0x7F,0x5F,0x9F,0x9F,0x5F,0x7F,0x3F,0x3E,0x18,0x10,0x00};//闹钟的图标

/******************************************************************************/
void Delay(int num)//延时函数
{
	while(num--) ;
}

/*12864driver.c*/
/******************************************************************************/
void Delay12864(unsigned int t)//
{
	unsigned int i,j;
	for(i=0;i<t;i++)
	{
		for(j=0;j<10;j++);
	}
}

/******************************************************************************/
void write_com(unsigned char cmdcode)//写命令到LCD
{
	Di = 0;
	RW = 0;

	Lcd_Bus = cmdcode;
    Delay12864(0);
	Enable = 1;
	Delay12864(0);
	Enable = 0;
}

/******************************************************************************/
void write_data(unsigned char Dispdata)//写数据到LCD
{
	Di = 1;
	RW = 0;

	Lcd_Bus = Dispdata;
	Delay12864(0);
	Enable = 1;
	Delay12864(0);
	Enable = 0;
}

/*******************************************************************************/
void frame(void)//显示边框
{
	unsigned char i;
	Mcs = 1;
	Scs = 1;
 	write_com(Page_Add+0);
 	write_com(Col_Add+0);
	for(i=0;i<64;i++) 
	{
		write_data(0x01);
	}
	write_com(Page_Add+7);
	write_com(Col_Add+0);
	for(i=0;i<64;i++)
 	{
		write_data(0x80);
	}
	for(i=0;i<8;i++)
	{
		Mcs=0;
		Scs=1;
		write_com(Page_Add+i);
		write_com(Col_Add+63);
		write_data(0xff);
		Mcs=1;
		Scs=0;
		write_com(Page_Add+i);
		write_com(Col_Add+0);
		write_data(0xff);
	}
}

/******************************************************************************/
void Clr_Scr(void)//清空屏幕 
{
  unsigned char j,k;
  Mcs=1;Scs=0;             // 清左半屏 //
   {
    write_com(Page_Add+0);
    write_com(Col_Add+0);
    for(k=0;k<4;k++)               // 清左上半屏 //
     {
      for(j=0;j<64;j++)
	  write_data(0x00);
     }
    for(k=0;k<4;k++)               // 清左下半屏 //
     {
      write_com(Page_Add+4);
      for(j=0;j<64;j++)
	  write_data(0x00);
     }
   }
  Mcs=0;Scs=1;                     // 清右半屏 //
   {
    write_com(Page_Add+0);
    write_com(Col_Add+0);
    for(k=0;k<4;k++)               // 清右上半屏 //
     {
      for(j=0;j<64;j++)
	  write_data(0x00);
     }
    for(k=0;k<4;k++)               // 清右下半屏 //
     {
	  write_com(Page_Add+4);
      for(j=0;j<64;j++)
	  write_data(0x00);
     }
   }
 }
/*******************************************************************************/
void Disp_Img(unsigned char code *img)//显示12864图片
{
	unsigned char j,k;
 	for(k=0;k<8;k++)
	{
  		Mcs=1;
		Scs=0;
		Delay(10);
  		write_com(Page_Add+k);
  		write_com(Col_Add+0);
  		for(j=0;j<64;j++) 
		{
			write_data(img[k*128+j]);
		}
  		Mcs=0;
		Scs=1;
	 	Delay(10);
  		write_com(Page_Add+k);
  		write_com(Col_Add+0);
  		for(j=64;j<128;j++)
	    {
			write_data(img[k*128+j]);
		}
 	}
}

/*******************************************************************************/
void Disp_Chinese(unsigned char pag,unsigned char col,  char code *hzk)
{   //指定位置显示汉字16*16
	unsigned char j=0,i=0;

	for(j=0;j<2;j++)
	{
		write_com(Page_Add+pag+j);
		write_com(Col_Add+col);
		for(i=0;i<16;i++) 
		{
			write_data(hzk[16*j+i]);
		}
	}
}

/*******************************************************************************/
void Disp_Digit(unsigned char pag,unsigned char col, unsigned char code *hzk)
{   //指定位置显示字母或数字8*16
	unsigned char j=0, i=0;

	for(j=0;j<2;j++)
	{
		write_com(Page_Add+pag+j);
		write_com(Col_Add+col);
		for(i=0;i<8;i++) 
		{
			write_data(hzk[8*j+i]);
		}
	}
}

/********************************************************************************/
void Init_lcd(void)//初始化LCD屏
{
	Lcd_Rst=0;
	Delay12864(100);
	Lcd_Rst=1;
	Delay12864(100);

	Mcs=1;	Scs=1;

	Delay12864(100);
	write_com(Disp_Off);
	write_com(Page_Add+0);
	write_com(Start_Line+0);
	write_com(Col_Add+0);
	write_com(Disp_On);
}
	
/*******************************************************************************/
void Init_DS18B20(void)//初始化ds1820
{
	unsigned char x=0;
	DQ = 1;    //DQ复位
	Delay(8);  //稍做延时
	DQ = 0;    //单片机将DQ拉低
	Delay(80); //精确延时 大于 480us
	DQ = 1;    //拉高总线
	Delay(14);
	x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
	Delay(20);
}

/******************************************************************************/
unsigned char ReadOneChar(void)//读一个字节
{
	unsigned char i=0;
	unsigned char dat = 0;
	for (i=8;i>0;i--)
	{
		DQ = 0; // 给脉冲信号
		dat>>=1;
		DQ = 1; // 给脉冲信号
		if(DQ)
		dat|=0x80;
		Delay(4);
	}
	return(dat);
}

/******************************************************************************/
void WriteOneChar(unsigned char dat)//写一个字节
{
	unsigned char i=0;
	for (i=8; i>0; i--)
	{
		DQ = 0;
		DQ = dat&0x01;
		Delay(5);
		DQ = 1;
		dat>>=1;
	}
}

/******************************************************************************/
unsigned int ReadTemperature(void)//读取温度
{
	unsigned char a=0;

⌨️ 快捷键说明

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