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

📄 lcd128x64_2.c

📁 图形式液晶LCD128*64的典型驱动~ 包含很多常用的画图函数和指令~
💻 C
📖 第 1 页 / 共 3 页
字号:

/*-------------------------------------------*/
//写入字节完整子函数
void WriteTo1302(unsigned char Addr,unsigned char Date)
{
	RST2=0;
	CLK=0;
	RST2=1;
	InputByte(Addr);
	InputByte(Date);
	CLK=1;
	RST2=0;
}
/*-------------------------------------------*/



/*-------------------------------------------*/
//读出一个完整的字节
unsigned char ReadFrom1302(unsigned char Add)
{
	unsigned char Date;
	RST2=0;
	CLK=0;
	RST2=1;
	InputByte(Add);
	Date=OutputByte();
	CLK=1;
	RST2=0;
	return (Date);
}
/*-------------------------------------------*/



/*-------------------------------------------*/
//设置初始时间
void SetTime(unsigned char *pSecDa)
{
	unsigned char i;
	unsigned char Addr=0x80;
	WriteTo1302(0x8e,0x00);
	for(i=7;i>0;i--)
	{
		WriteTo1302(Addr,*pSecDa);
		pSecDa++;
		Addr+=2;
	}
	WriteTo1302(0x8e,0x80);
}
/*-------------------------------------------*/



/*-------------------------------------------*/
//读出当前时间
void GetTime(void)
{
	unsigned char i;
	unsigned char Addr=0x81;
	for(i=0;i<7;i++)
	{
		Curtime[i]=ReadFrom1302(Addr);
		Addr+=2;
	}
	sec=Curtime[0];
	min=Curtime[1];
	hour=Curtime[2];
	day=Curtime[5];
	date=Curtime[3];
	month=Curtime[4];
	year=Curtime[6];
}
/*-------------------------------------------*/


/*-------------------------------------------*/
//初始化定时器T0 延迟时间50ms
void Init_T0(void)
{
	TMOD=0x01;
	TH0=0x3c;//TH0=-50000>>8;
	TL0=0xb0;//TL0=-50000&0xff;
	EA=1;
	ET0=1;
	TR0=1;
}
/*-------------------------------------------*/


/*-------------------------------------------*/
//用定时中断产生闪烁信号
void To_flash(void) interrupt 1 using 0 //中断程序,产生时钟秒信号
{
	TR0=0;
	fla_cou++;
	if(fla_cou==10)
	{
		flash=!flash;
		fla_cou=0;
	}
	TH0=0x3c;//TH0=-50000>>8;
	TL0=0xb0;//TL0=-50000&0xff;
	TR0=1;
}
/*-------------------------------------------*/



/*-------------------------------------------*/
//选择确定闪烁位置等待调节
void FlashKey(void)
{
	if(P1_0==0)
	{
		while(P1_0==0)
			Refresh();
		n++;
	}
	if(n==8) n=0;
	if(n!=1) K1=1;
	if(n!=2) K2=1;
	if(n!=3) K3=1;
	if(n!=4) K4=1;
	if(n!=5) K5=1;
	if(n!=6) K6=1;
	if(n!=7) K7=1;
	switch(n)
	{
	case 0: KT=0; break;
	case 1: K1=flash;hms=year;KT=1;break;
	case 2: K2=flash;hms=month;KT=1;break;
	case 3: K3=flash;hms=date;KT=1;break;
	case 4: K4=flash;hms=hour;KT=1;break;
	case 5: K5=flash;hms=min;KT=1;break;
	case 6: K6=flash;hms=sec;KT=1;break;
	case 7: K7=flash;hms=day;KT=1;break;
	}
	Add();
}
/*-------------------------------------------*/



/*-------------------------------------------*/
//对闪烁位置进行调整
void Add(void)
{
	if(P1_2==0)
	{
		while(P1_2==0)
			Refresh();
		if(KT==1)
		{
			hms++;
			switch(n)
			{
			case 1: year=hms; break;
			case 2: month=hms; break;
			case 3: date=hms; break;
			case 4: hour=hms; break;
			case 5: min=hms; break;
			case 6: sec=hms; break;
			case 7: day=hms; break;
			}

			if((sec&0x0f)==0x0a) 
			{
				sec&=0xf0;
				sec+=0x10;			// 如果秒位满十,向十秒位进一 //
			}
			if((min&0x0f)==0x0a)
			{
				min&=0xf0;
				min+=0x10;
			}
			if((hour&0x0f)==0x0a)
			{
				hour&=0xf0;
				hour+=0x10;
			}
			if(day==8)
			{
				day=1;				// 如果星期满七,重新从星期一开始计 //
			}

			if((sec&0xf0)==0x60) 
			{
				sec&=0x0f;			// 如果十秒位满六,清零 //
			}
			if((min&0xf0)==0x60)
			{
				min&=0x0f;
			}
			if(((hour&0xf0)==0x20)&((hour&0x0f)==0x04))
			{
				hour&=0x00;			//如果小时满24,清零//
			}

			if((date&0x0f)==0x0a) 
			{
				date&=0xf0; 
				date+=0x10;
			}         // 如果日期位满十,向十号位进一 //
			if((month&0x0f)==0x0a) 
			{
				month&=0xf0; 
				month+=0x10;
			}         // 如果月份位满十,向十月位进一 //
			if((year&0x0f)==0x0a) 
			{
				year&=0xf0; 
				year+=0x10;
			}      // 如果年位满十,向十年位进一 //

			if(((date&0xf0)==0x30)&((date&0x0f)==0x02)) 
			{
				date&=0x00;
			}
			if(((month&0xf0)==0x10)&((month&0x0f)==0x03))
			{
				month&=0x00;
			}
			if((year&0xf0)==0xa0)
			{
				year&=0x0f;
			}
			Curtime[0]=sec;
			Curtime[1]=min;
			Curtime[2]=hour;
			Curtime[3]=date;
			Curtime[4]=month;
			Curtime[5]=day;
			Curtime[6]=year;
			SetTime(&Curtime[0]);
		}
	}
}
/*-------------------------------------------*/



/*-------------------------------------------*/
//时钟初始化函数
void Init_Clock(void)
{
	K1=1;
	K2=1;
	K3=1;
	K4=1;
	K5=1;
	K6=1;
	K7=1;
	KT=0;
	n =0;
	Init_T0();
}
/*-------------------------------------------*/



/*-------------------------------------------*/
//刷新显示子函数
void Refresh(void)
{
	GetTime();
	CS1=1;		//右半屏
	CS2=0;
	if(K6)
	{
		sz_disp16(5,24,shuzi[sec&0x0f]);
		sz_disp16(5,16,shuzi[sec>>4]);
	}
	else
	{
		hz_disp16(5,16,kongbai2);
	}
	
	
	if(K3)
	{
		sz_disp16(3,24,shuzi[date&0x0f]);
		sz_disp16(3,16,shuzi[date>>4]);
	}
	else
	{
		hz_disp16(3,16,kongbai2);
	}
	
	CS1=0;
	CS2=1;		//左半屏
	if(K5)
	{
		sz_disp16(5,56,shuzi[min&0x0f]);
		sz_disp16(5,48,shuzi[min>>4]);
	}
	else
	{
		hz_disp16(5,48,kongbai2);
	}
	if(K4)
	{
		sz_disp16(5,24,shuzi[hour&0x0f]);
		sz_disp16(5,16,shuzi[hour>>4]);
	}
	else
	{
		hz_disp16(5,16,kongbai2);
	}
	if(K2)
	{
		sz_disp16(3,56,shuzi[month&0x0f]);
		sz_disp16(3,48,shuzi[month>>4]);
	}
	else
	{
		hz_disp16(3,48,kongbai2);
	}
	if(K1)
	{
		sz_disp16(3,24,shuzi[year&0x0f]);
		sz_disp16(3,16,shuzi[year>>4]);
	}
	else
	{
		hz_disp16(3,16,kongbai2);
	}
	if(K7)
	{
		sz_disp16(1,32,shuzi[day&0x0f]);
	}
	else
	{
		hz_disp16(1,32,kongbai2);
	}
}
/*-------------------------------------------*/


/*-------------------------------------------*/
//状态判断提示
void State(void)
{
	CS1=1;
	CS2=0;
	if(KT==1)
	{
		hz_disp16(1,32,tiao);
		hz_disp16(1,48,shi2);
	}
	else
	{
		hz_disp16(1,32,kongbai2);
		hz_disp16(1,48,kongbai2);
	}
}
/*-------------------------------------------*/



/*-------------------------------------------*/
//主函数
void main(void)
{
	Init_Clock();
	init_lcd();
	Disp_Img(FirstPage);
	delay(10000);
	StartMsg();
	delay(10000);
	
	ClockMsg();
	while(1)
	{
		Refresh();
		FlashKey();
		State();
		delay(250);
	}
}



		



			



	




 

⌨️ 快捷键说明

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