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

📄 12864lcd显示.c

📁 LCD12864+18b20+1302串口
💻 C
📖 第 1 页 / 共 2 页
字号:
//12864LCD显示温度&时钟程序



#include <AT89X52.h>

sbit Bell_Out  = P1^0;//闹钟管脚输出,低有效

sbit DQ        = P1^4;//ds1820data//温感数据口
sbit clock_clk = P3^5;//ds1302_clk//时钟同步
sbit clock_dat = P3^6;//ds1302_dat//时钟数据
sbit clock_Rst = P3^7;//ds1302_Rst//时钟复位

//键盘扫描
sbit Add_Key   = P1^1;//加1键
sbit Dec_Key   = P1^2;//减1键
sbit OK_Key    = P1^3;//确定键

//引脚定义
sbit   CS    =  P3^0;	//片选 高电平有效 单片LCD使用时可固定高电平
sbit   SID   =  P3^1;	//数据
sbit   SCLK  =  P3^2;	//时钟

//为了编程方便定义的位变量
sbit a0   = ACC ^ 0;
sbit a1   = ACC ^ 1;
sbit a2   = ACC ^ 2;
sbit a3   = ACC ^ 3;
sbit a4   = ACC ^ 4;
sbit a5   = ACC ^ 5;
sbit a6   = ACC ^ 6;
sbit a7   = ACC ^ 7;

bit flag, Bell_Swh,Hourb,Minb,Kgb;		   	//闹钟调时闪烁标志位
bit sec=0,min=0,hour=0,year=0,mon=0,day=0,weekk=0; 	//光标闪烁标志位
unsigned char id;					//调时钟闪烁变量
unsigned char id2;					//调闹钟闪烁变量
unsigned char d;					//温度传送高4位字节
unsigned char e;					//温度传送低4位字节
unsigned char S_1302;					//读取小时寄存器数据
unsigned char H_1302;					//读取分钟寄存器数据
unsigned char H_Bell;					//读取闹钟RAM小时数据			
unsigned char S_Bell;					//读取闹钟RAM分钟数据


//Function Definition 函数声明 
void Delay(int num);					//延迟uM
							
void Init_DS18B20(void);				//初始化温度感应器
unsigned char ReadOneChar(void);			//读取温度传感器字节
void WriteOneChar(unsigned char dat);			//发送指令到温度传感器		
unsigned int ReadTemperature(void);			//读取温度数据并转换为10进制

void clock_out(unsigned char dd);			//1302时钟接收一个字节
unsigned char clock_in(void);				//1302时钟发送一个字节
unsigned char read_clock(unsigned char ord);		//读取1302时钟时间寄存器
void write_clock(unsigned char ord, unsigned char dd);	//写数据或指令到1302

void Disp(void);					//时间界面光标闪烁
void id_case1_key(void);				//时间界面上下按键判别
void id_case2_key(void);				//闹钟界面上下按键判别
void Set_time(unsigned char sel,bit sel_1);		//判别时间光标位置,加或减
void Init_1302(void);					//初始化时钟IC
void Timer0_Init(void);					//TO中断初始化				
void Set_Bell(unsigned char sel, bit sel_1);		//判别闹钟时间光标位置,家或减
void Bell(void);					//驱动蜂鸣器

//12864函数
void Write_char(bit start, unsigned char ddata);	//写数据或者指令
void Send_byte(unsigned char bbyte);			//发送一个字节
void Delaynms(unsigned int di);				//延迟uM
void Lcd_init(void);					//初始化LCD屏幕
void Disp_img(unsigned char *img);			//插入LOGO 128*64
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s);//指定LCD位置写字符
void LCD_set_xy( unsigned char x, unsigned char y );	//指定LCD位置

unsigned char code num[]={"0123456789 :."};
unsigned char code yi[]={"一"};
unsigned char code er[]={"二"};
unsigned char code san[]={"三"};
unsigned char code si[]={"四"};
unsigned char code wu[]={"五"};
unsigned char code liu[]={"六"};
unsigned char code ri[]={"日"};
unsigned char code guan[]={"关"};
unsigned char code kai[]={"开"};
unsigned char code bt[]={"电子万年历"};
unsigned char code nian[]={"年"};
unsigned char code yue[]={"月"};
unsigned char code xq[]={"星期"};
unsigned char code sw[]={"室温"};
unsigned char code ssd[]={"℃"};
unsigned char code nzbz []={"ON"};
unsigned char code nzsd []={"闹钟设定"};
unsigned char code colon []={":"};
unsigned char code nzsjd []={"闹钟时候到!"};
unsigned char code xsfz[]={"H : M"};
unsigned char code space_c[]={"  "};

//插入图片
unsigned char code logo[]={   
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,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x06,0x00,0x00,0x30,0x00,0x00,0x37,0xF8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x06,0x00,0x01,0x20,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x06,0x00,0x02,0x60,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x38,0x06,0x00,0x16,0x40,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x06,0x00,0x24,0x00,0x3F,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0F,0x00,0x64,0x01,0xFF,0xF0,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0x1F,0x00,0x60,0x0F,0xFF,0xFC,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x17,0xBF,0xE0,0x60,0x3F,0xFF,0xFE,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0x80,0x80,0xFF,0x00,0x3F,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x01,0x80,0x00,
0x00,0x7E,0x01,0x81,0xF8,0x00,0x0F,0x01,0xE0,0x00,0x00,0x00,0x00,0x01,0xE6,0x00,
0x00,0x0E,0x03,0x43,0xEF,0xFC,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x03,0x7F,0x00,
0x00,0x0E,0x03,0x07,0xCF,0xFE,0x0F,0x80,0xC0,0x00,0x00,0x00,0x00,0x06,0x19,0x80,
0x00,0x0E,0x06,0x0F,0xBF,0xFE,0x0F,0x80,0xC0,0x00,0x3F,0x80,0x00,0x06,0x00,0xC0,
0x60,0x0E,0x06,0x1F,0x3F,0xBE,0x0F,0x00,0xC0,0x00,0xFF,0xC0,0x00,0x04,0x00,0xC0,
0x60,0x0E,0x0E,0x3C,0x7F,0x9E,0x0F,0x10,0xC0,0x81,0x80,0x60,0x01,0x84,0x00,0xC0,
0x60,0x0E,0x0C,0x38,0xFF,0xFE,0x1E,0x10,0xC1,0x83,0x00,0x21,0xC6,0x8C,0x00,0x60,
0x38,0x1E,0x18,0x70,0xFF,0xFE,0x3C,0x30,0xC3,0x0E,0x00,0x63,0x2C,0x8C,0xE0,0x30,
0x7F,0x9E,0x18,0x71,0xFF,0xFC,0x78,0x70,0xC3,0x18,0x00,0x62,0x29,0x8D,0xF8,0x18,
0x3E,0xBF,0x18,0xE1,0xFF,0xFC,0xF0,0x7C,0xC2,0x10,0x01,0xC2,0x25,0xF9,0x1E,0x08,
0x30,0x76,0x18,0xC1,0xFF,0xF1,0xE0,0xEC,0xC0,0x30,0x03,0x02,0x24,0xF9,0x03,0x8C,
0x20,0x66,0x11,0xC0,0xFF,0xE7,0x80,0x82,0x60,0x10,0x02,0x06,0x64,0x19,0x00,0x84,
0x20,0xC6,0x11,0x80,0xFF,0x9F,0x00,0x00,0xF0,0x19,0xC2,0x06,0x64,0x1F,0x10,0xCC,
0x01,0xC4,0x09,0x80,0x7F,0x7C,0x00,0x00,0xF8,0x0F,0x63,0x06,0x2C,0x1E,0x38,0xC8,
0x01,0x84,0x01,0x80,0x00,0xF8,0x0C,0x00,0xD8,0x00,0x23,0x06,0x38,0x12,0x01,0x98,
0x01,0x04,0x01,0x80,0x07,0xE0,0x18,0x00,0xCC,0x00,0x31,0x03,0x19,0xF6,0x01,0xF0,
0x00,0x04,0x01,0x98,0x7F,0x00,0x30,0x00,0x86,0x00,0x11,0x01,0x18,0x37,0x81,0x80,
0x00,0x04,0x01,0xC7,0xFC,0x00,0xE0,0x00,0x87,0x00,0x19,0x81,0x98,0x1D,0x9F,0x00,
0x00,0x04,0x01,0xC0,0x00,0x01,0x80,0x01,0x83,0x80,0x18,0xF0,0x98,0x18,0x03,0x00,
0x03,0x04,0x00,0xE0,0x00,0x07,0x00,0x01,0x01,0xC0,0xF8,0xD8,0x98,0xA8,0x03,0x00,
0x07,0x04,0x00,0xF0,0x00,0x1E,0x00,0x03,0x00,0xE0,0xC0,0x08,0x99,0xEF,0x3E,0x00,
0x0E,0x04,0x00,0x7C,0x00,0x7C,0x00,0x06,0x00,0x60,0xC0,0x08,0x99,0x12,0x36,0x00,
0x1C,0x04,0x00,0x3F,0xCF,0xF0,0x00,0x0C,0x00,0x30,0x40,0x0C,0x99,0x10,0x02,0x00,
0x3C,0x04,0x00,0x0F,0xFF,0xC0,0x00,0x38,0x00,0x18,0x7F,0xF8,0xFF,0x18,0x06,0x00,
0x3C,0x04,0x00,0x03,0xFF,0x00,0x00,0x60,0x00,0x00,0x3F,0xF0,0x66,0x1F,0xFC,0x00,
0x3C,0x04,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0C,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0C,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3C,0x0C,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x18,0x04,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,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,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,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};


void Lcd_init(void)		 //初始化LCD	
{
	Delaynms(10); 	 	 //启动等待,等LCD进入工作状态
  	CS=1;
  	Write_char(0,0x30); 	 //8 位数据,基本指令集
  	Write_char(0,0x0c);  	 //显示打开,光标关,反白关
  	Write_char(0,0x01);  	 //清屏,将DDRAM的地址计数器归零  
}


void Write_char(bit start, unsigned char ddata)  	//发送指令或者数据
{
	unsigned char start_data,Hdata,Ldata;
  	if(start==0) 
		start_data=0xf8;	 		//写指令
    	else    
    		start_data=0xfa;  			//写数据
  
  	Hdata=ddata&0xf0;		  		//取高四位
  	Ldata=(ddata<<4)&0xf0;  			//取低四位
  	Send_byte(start_data);	  			//发送起始信号
  	Delaynms(5); 					//延时420u秒是必须的
  	Send_byte(Hdata);	     			//发送高四位
  	Delaynms(1);  					//延时72u秒是必须的
  	Send_byte(Ldata);		 		//发送低四位
  	Delaynms(1);  					//延时72u秒是必须的
}


void Send_byte(unsigned char bbyte) 			//串口发送一个字节(底层函数)
{
		unsigned char i;
 		for(i=0;i<8;i++)			//循环8位(一个字节)
   	{
   		SID=bbyte&0x80; 			//取出最高位
 		SCLK=1;
   		SCLK=0;
   		bbyte<<=1; 				//左移1位
   	}  
}


void Delaynms(unsigned int di) 				
{
		unsigned int i,db;
 		for(i=0;i<di;i++)			
   		for(db=0;db<10;db++);			//延迟72u秒左右以12MHz晶振
}



void Disp_img(unsigned char  *img)			//插入LOGO函数
{ 
		unsigned char i,j;
		unsigned int k = 0;

		Write_char(0,0x36); 			//图形方式LCD指令
		for(i=0;i<32;i++)			//循环上半屏填充点			
  		{ 
			Write_char(0,0x80+i);		//指定上半屏横坐标位置
			Write_char(0,0x80);		//指定上半屏纵坐标位置
    		   for(j=0;j<16;j++) 
		   {
			   Write_char(1,img[k++]);	//填充对应点阵
 		   }
  		}

 		for(i=0;i<32;i++)			//循环下半屏填充点
  		{ 
				Write_char(0,0x80+i);
				Write_char(0,0x88);
    		   for(j=0;j<16;j++) 
		   {
			   Write_char(1,img[k++]);
  		   }
		}
}
	

void Clr_Scr(void)					//清屏函数
{
		Write_char(0,0x01);
}


void LCD_set_xy( unsigned char x, unsigned char y )	//指定LCD位置X为行Y为列
{	
    unsigned char address;
		switch(x)				//选择函数
		{
			case 0: 
				address = 0x80 + y; 
				break;    
    			case 1: 
    				address = 0x80 + y; 
    				break; 
			case 2: 
				address = 0x90 + y; 
				break; 
   	 		case 3: 
   	 			address = 0x88 + y; 
   	 			break;
			case 4: 
				address = 0x98 + y; 
				break; 
			default:
				address = 0x80 + y; 
				break;
		}
    Write_char(0, address);				//写指令指定位置
}


void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)//指定位置写字符串
{	
    LCD_set_xy( X, Y );
    
    while (*s) 								//循环写字符串
    {
	Write_char( 1, *s );						//写数据
	s ++;								
	Delaynms(1);
    }
}


void LCD_Write_number(unsigned char s)			//数字显示函数
{	
		Write_char(1,num[s]);			//写数据
		Delaynms(1);
}


void LCD_Write_week(unsigned char s)			//星期显示
{
		switch(s)
		{
			case 1: 
				LCD_Write_string(3,2,yi);
				break;
			case 2: 
				LCD_Write_string(3,2,er);
				break;
			case 3:	
				LCD_Write_string(3,2,san);
				break;
			case 4:	
				LCD_Write_string(3,2,si);
				break;
			case 5:	
				LCD_Write_string(3,2,wu);
				break;
			case 6:	
				LCD_Write_string(3,2,liu);
				break;
			case 7:	
				LCD_Write_string(3,2,ri);
				break;
			case 8:	
				LCD_Write_string(3,2,space_c);//显示空格,为调整时间用
				break;
			default:
				break;
		}
}


void Delay(int num)						//延迟Nu秒函数
{
		while(num--);
}
	

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;		//右移1位
		}
}


unsigned int ReadTemperature(void)		//读取温度数值
{
		unsigned char a=0;
		unsigned char b=0;
		unsigned int t=0;
		float tt=0;
		Init_DS18B20();
		WriteOneChar(0xCC); 		//跳过读序号列号的操作
		WriteOneChar(0x44); 		//启动温度转换
		Init_DS18B20();
		WriteOneChar(0xCC); 		//跳过读序号列号的操作
		WriteOneChar(0xBE); 		//读取温度寄存器
		a=ReadOneChar();    		//读低8位
		b=ReadOneChar();    		//读高8位
		t=b;
		t<<=8;
		t=t|a;
		tt=t*0.0625;
		t= tt*10+0.5; //放大10倍输出并四舍五入
		return(t);
}


void clock_out(unsigned char dd)		//1302时钟接收一个字节
{
		ACC=dd;
		clock_dat=a0; clock_clk=1; clock_clk=0;
		clock_dat=a1; clock_clk=1; clock_clk=0;
		clock_dat=a2; clock_clk=1; clock_clk=0;
		clock_dat=a3; clock_clk=1; clock_clk=0;
		clock_dat=a4; clock_clk=1; clock_clk=0;
		clock_dat=a5; clock_clk=1; clock_clk=0;
		clock_dat=a6; clock_clk=1; clock_clk=0;
		clock_dat=a7; clock_clk=1; clock_clk=0;
}


unsigned char clock_in(void)			//1302时钟发送一个字节
{
		clock_dat=1;
		a0=clock_dat;
		clock_clk=1; clock_clk=0; a1=clock_dat;
		clock_clk=1; clock_clk=0; a2=clock_dat;
		clock_clk=1; clock_clk=0; a3=clock_dat;
		clock_clk=1; clock_clk=0; a4=clock_dat;
		clock_clk=1; clock_clk=0; a5=clock_dat;
		clock_clk=1; clock_clk=0; a6=clock_dat;
		clock_clk=1; clock_clk=0; a7=clock_dat;
		return(ACC);			//还原一个字节
}


unsigned char read_clock(unsigned char ord)	//读取时钟数据
{
		unsigned char dd=0;
		clock_clk=0;
		clock_Rst=0;
		clock_Rst=1;
		clock_out(ord);
		dd=clock_in();
		clock_Rst=0;
		clock_clk=1;
		return(dd);
}


void write_clock(unsigned char ord, unsigned char dd)//写入时钟数据
{
		clock_clk=0;
		clock_Rst=0;
		clock_Rst=1;
		clock_out(ord);
		clock_out(dd);
		clock_Rst=0;
		clock_clk=1;
}


void Disp(void)					//时间界面光标闪烁
{
		unsigned int i=0;
		unsigned char a=0,b=0,c=0,f=0;

		i=ReadTemperature();		//读温度并送显
		a=i/100;

		LCD_set_xy(4,2);
		LCD_Write_number(a);
		b=i/10-a*10;
		LCD_Write_number(b);
		LCD_Write_number(12);//.
		c=i-a*100-b*10;
		LCD_Write_number(c);

		if(hour==1)  			//小时闪烁标志位
    	{
    		if(flag==1) 			//光标闪烁 
       		{    
      			d=read_clock(0x85);	//读小时
			e=d;
			d=d>>4;			//十位数据
			e=e&0x0f;		//个位数据
			LCD_set_xy(3,3);	//指定LCD屏位置
			LCD_Write_number(d);	//写入十位数值
			LCD_Write_number(e);	//写入个位数值
       		}
     		else
       		{
			LCD_set_xy(3,3);
        		LCD_Write_number(10);   //显示空格
	        	LCD_Write_number(10);   //显示空格
    			}
    	} 
  	else
   		{ 
    		d=read_clock(0x85);		//读小时
			e=d;
			d=d>>4;
			e=e&0x0f;
			LCD_set_xy(3,3);
			LCD_Write_number(d);
			LCD_Write_number(e);
   		}

		if(flag == 0)
			LCD_Write_number(11);	//显示:
		else 
			LCD_Write_number(10);	//显示空格
		
	if(min==1)  				//分钟闪烁标志位
    	{
    		if(flag==1)
       		{    
       			d=read_clock(0x83);	//读分钟
			e=d;
			d=d>>4;
			e=e&0x0f;
			LCD_Write_number(d);
			LCD_Write_number(e);     
       		}
     		else
       		{	
        		LCD_Write_number(10); 	//显示空格
	        	LCD_Write_number(10);    
       		}
    	} 
  		else
    		{
    			d=read_clock(0x83);	//读分钟
					e=d;
					d=d>>4;
					e=e&0x0f;
					LCD_Write_number(d);
					LCD_Write_number(e);         
    		} 

		if(flag == 0) 
			LCD_Write_number(11);	//显示:
		else    
			LCD_Write_number(10);	//显示空格
			
		if(sec==1)  			//秒闪烁标志位
 		{
    		if(flag==1)
       		{    
        		d=read_clock(0x81);	//读秒
			e=d;
			d=d>>4;
			e=e&0x0f;
			LCD_Write_number(d);	//送显示
			LCD_Write_number(e);   
       		}
	   	else
       	{
			LCD_Write_number(10); 	//显示数字空格
        		LCD_Write_number(10);    
       	}
    } 
  	else
    	{
     			d=read_clock(0x81);	//读秒
			e=d;
			d=d>>4;
			e=e&0x0f;
			LCD_Write_number(d);
			LCD_Write_number(e);          
    	}    
  	
    if(year==1)  				//年闪烁标志位
    {
    	if(flag==1)
       	{    
        		d=read_clock(0x8d);	//读年
			e=d;
			d=d>>4;
			e=e&0x0f;
			LCD_set_xy(2,2);
			LCD_Write_number(d);
			LCD_Write_number(e);
       	}
     	else
       	{
			LCD_set_xy(2,2);
        		LCD_Write_number(10); 	//显示空格
        		LCD_Write_number(10);    
       	}
    } 
  	else
    { 
    			d=read_clock(0x8d);	//读年

⌨️ 快捷键说明

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