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

📄 12864时钟.c

📁 12864 做成的数字钟 内含有仿真 是PROUUE 的仿真
💻 C
字号:
#include<reg51.h>
#include<DB_12864.h>
#define lcd_off 0x3e
#define lcd_on 0x3f
#define add_x 0xb8
#define add_y 0x40
#define add_z  0xc0
#define uchar unsigned char 
#define uint unsigned int
char counter,miao,shi,fen,yue,ri,flag,counter1;
uint nian;
sbit  RST = P1^5	 ;
sbit  EN  = P1^4	 ;
sbit  RW = P1^3	;
sbit  RS  =P1^2 ;
sbit  CS_L =P1^1	;
sbit  CS_R =P1^0	;
sbit  s1=P2^0;
sbit  s2=P2^1;
sbit  s3=P2^2;
void keyscan();
void delay(uint i)
{
	uchar j;
	for(;i>0;i--)
	for (j=0;j<110;j++);
}
void LCDsel(uchar sel)
{
	switch(sel)
	{
		case 0:CS_L=0;CS_R=0  ;break;
		case 1:CS_L=1;CS_R=0  ;break;	//选择左边
		case 2:CS_L=0;CS_R=1 ;break;	//选择右边
	}
}
void writedate(uchar date)
{
	RS=1;
	RW=0;
	P0=date;
	EN=1;
	;
	EN=0;
}
void writecom(uchar com)
{
	RS=0;
	RW=0;
	P0=com;
	EN=1;
	;
	EN=0;
}
void  lcd12864init()
{
	RST=0;
	delay(5);
	RST=1;
	LCDsel(0);
	writecom(lcd_off);
	writecom(lcd_on);


}
void setX(uchar i)
{
	writecom(add_x+i);
}
void setY(uchar i)
{
	writecom(add_y+i);
}
void setZ(uchar i)
{
	writecom(add_z+i);

}
void clearlcd()
{
	uchar i,j;
	LCDsel(0);
	for(i=0;i<8;i++)
		{
			writecom(lcd_on) ;
			setX(i);
			setY(0);
			setZ(0);
			for(j=0;j<64;j++)
				{
					writedate(0x00)	 ;
				}

		}
}
void leftdatesend(uchar x,uchar y,uchar *loc,uchar bytes,uchar flag)
{
	uchar i;
	LCDsel(1);
	setX(x);
	setY(y);
	for(i=0;i<bytes;i++)
	{	 if(flag)
		writedate(*(loc+i));
		else
			writedate(~*(loc+i));
	 }
}
void rightdatesend(uchar x,uchar y,uchar *loc,uchar bytes,uchar flag)
{
	uchar i;
	LCDsel(2);
	setX(x);
	setY(y);
	for(i=0;i<bytes;i++)
	 { if(flag)
		writedate(*(loc+i));
		else
			writedate(~*(loc+i));

	  }
}

void displaymiao(uchar miao,uchar flag)
{
	uchar shi,ge;
	shi=miao/10;
	ge=miao%10;
	rightdatesend(2,48,(taba+shi*16),8,flag);
	rightdatesend(3,48,(taba+shi*16+8),8,flag);
	rightdatesend(2,56,(taba+ge*16),8,flag);
	rightdatesend(3,56,(taba+ge*16+8),8,flag);
}
void  clearmiao()
{
	uchar i,j;
	LCDsel(2);
	for(i=2;i<=3;i++)
		{
			setX(i);
			setY(48);
			for(j=0;j<16;j++)
			writedate(0x00);
		}

}
void displayfen(uint fen,uchar flag)
{
	uchar shi,ge;
	shi=fen/10;
	ge=fen%10;
	rightdatesend(2,24,taba+shi*16,8,flag);
	rightdatesend(3,24,taba+shi*16+8,8,flag);
	rightdatesend(2,32,taba+ge*16,8,flag);
	rightdatesend(3,32,taba+ge*16+8,8,flag);
}
void displayshi(uint shi,uchar flag)
{
	uchar sh,ge;
	sh=shi/10;
	ge=shi%10;
		rightdatesend(2,0,taba+sh*16,8,flag);
	rightdatesend(3,0,taba+sh*16+8,8,flag);
	rightdatesend(2,8,taba+ge*16,8,flag);
	rightdatesend(3,8,taba+ge*16+8,8,flag);

	
}
void displaynian(uint nian,uchar flag)
{
	uchar qian,bai,shi,ge;
	qian=nian/1000;
	bai=nian%1000/100;
	shi=nian%1000%100/10;
	ge=nian%1000%100%10;
	leftdatesend(0,0,taba+qian*16,8,flag);
	leftdatesend(1,0,taba+qian*16+8,8,flag);

	leftdatesend(0,8,taba+bai*16,8,flag);
	leftdatesend(1,8,taba+bai*16+8,8,flag);

	leftdatesend(0,16,taba+shi*16,8,flag);
	leftdatesend(1,16,taba+shi*16+8,8,flag);

	leftdatesend(0,24,taba+ge*16,8,flag);
	leftdatesend(1,24,taba+ge*16+8,8,flag);
}
void displayyue(uchar yue,uchar flag)
{
	uchar shi,ge;
	shi=yue/10;
	ge=yue%10;
	leftdatesend(0,48,taba+shi*16,8,flag);
	leftdatesend(1,48,taba+shi*16+8,8,flag);
	leftdatesend(0,56,taba+ge*16,8,flag);
	leftdatesend(1,56,taba+ge*16+8,8,flag);
	
	

}
void displayri(uint ri,uchar flag)
{
	uchar sh,ge;
	sh=ri/10;
	ge=ri%10;
		rightdatesend(0,16,taba+sh*16,8,flag);
	rightdatesend(1,16,taba+sh*16+8,8,flag);
	rightdatesend(0,24,taba+ge*16,8,flag);
	rightdatesend(1,24,taba+ge*16+8,8,flag);

	
}
void miaoflash(uchar flag1)
	{
		uchar i,j;
		if(flag1==0)
		{
			LCDsel(2);
			
			for(i=2;i<=3;i++)
				{
					setX(i);
					setY(40);
					for(j=0;j<8;j++)
						writedate(0x00);	
				}		

		}
		else

		{
			rightdatesend(2,40,tabc+64,8,1); //显示:
			rightdatesend(3,40,tabc+72,8,1);
		 }
	}

   void lcd12864init1()
{
	leftdatesend(0,0,taba+32,8,1); //显示2
	leftdatesend(1,0,taba+40,8,1);
	leftdatesend(0,8,taba,8,1);	//0
	leftdatesend(1,8,taba+8,8,1);
	leftdatesend(0,16,taba,8,1);	   //0
	leftdatesend(1,16,taba+8,8,1);
	leftdatesend(0,24,taba+128,8,1);	  //8
	leftdatesend(1,24,taba+136,8,1) ;

	leftdatesend(0,32,tabc,16,1);	 //nian
	leftdatesend(1,32,tabc+16,16,1);
	leftdatesend(0,48,taba,8,1);//显示04
	leftdatesend(1,48,taba+8,8,1);
	leftdatesend(0,56,taba+64,8,1);
	leftdatesend(1,56,taba+72,8,1);

	rightdatesend(0,0,tabc+32,16,1);//显示月1
	rightdatesend(1,0,tabc+48,16,1);
	rightdatesend(0,16,taba+32,8,1);//显示20
	rightdatesend(1,16,taba+40,8,1);
	rightdatesend(0,24,taba,8,1);
	rightdatesend(1,24,taba+8,8,1);

	rightdatesend(0,32,tabb+192,16,1);//显示日1
	rightdatesend(1,32,tabb+208,16,1);

	leftdatesend(2,0,tabc+80,16,1);//显示星期日1
	leftdatesend(3,0,tabc+96,16,1);
	leftdatesend(2,16,tabc+112,16,1);
	leftdatesend(3,16,tabc+128,16,1);
	leftdatesend(2,32,tabb+192,16,1);
	leftdatesend(3,32,tabb+208,16,1);

	rightdatesend(2,16,tabc+64,8,1); //显示:
	rightdatesend(3,16,tabc+72,8,1);
	rightdatesend(2,40,tabc+64,8,1); //显示:
	rightdatesend(3,40,tabc+72,8,1);

	displaymiao(31,1);
	displayfen(30,1);
	displayshi(12,1);
	


}

 void timeinit()
 {	  TMOD=0X01;
 	 TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   ET0=1;
   TR0=1;
   EA=1;
   shi=12;fen=30;miao=31;
   nian=2008;yue=4;ri=20;
 }

void main()
{
	lcd12864init();
	clearlcd();	
	lcd12864init1();
	timeinit();
//	writecom(0x0a);
	//displaynian(2006);
	//displayyue(6);
	//displayri(11);
	//clearmiao();
	while(1)
		{
		  keyscan();
		}

	

	
}
void time0() interrupt   1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   counter++;
   if(counter==10)
   		miaoflash(0);
   if(counter==20)
   		{
			counter=0;
			miaoflash(1);
			miao++;
				if(miao==60)
					{
						miao=0;
						fen++;
						if(fen==60)
							{
								fen=0;
								shi++;
								if(shi==24)
									{
										shi=0;
										ri++;
										{
											if((nian%4==0)&&(nian%100!=0)||(nian%400==0)) flag=1;
											if(yue==2&&ri==30&&flag==1)
													{
														ri=1;
														yue++;
													}
											 else if(yue==2&&ri==29&&flag==0)
											 		{
														ri=1;
														yue++;
													}
											 else if(ri==31&&(yue==4||yue==6||yue==9 ||yue==11))
											 		{
														ri=1;
														yue++ ;
													}
											else  if(ri==32)
													{
														ri=1;
														yue++ ;
														if(yue==13)
															{
																yue=1;
																nian++;
																 
															
															}
															displaynian(nian,1);
	
													}
													displayyue(yue,1);
											}
											displayri(ri,1);
									
									}
									displayshi(shi,1);
							}
							displayfen(fen,1)	 ;
					}	
					clearmiao();
					displaymiao(miao,1);
		
		}

}  


void keyscan()
{
	if(s1==0)
		{
			delay(10);
			if(s1==0)
				{
					counter1++;
					while(!s1) ;
						if(counter1==1)
							{
								TR0=0;
								displaymiao(miao,0);
							}
						if(counter1==2)
							{
								displayfen(fen,0);
								displaymiao(miao,1);
							}
						if(counter1==3)
							{
								displayshi(shi,0);
								
								displayfen(fen,1);
							}
						if(counter1==4)
							{
								displayri(ri,0)	;
								displayshi(shi,1);
							}
						if(counter1==5)
							{
								displayyue(yue,0);
								displayri(ri,1);

							}
						if(counter1==6)
							{
								displaynian(nian,0);
								displayyue(yue,1);
							}
						if(counter1==7)
							{
								counter1=0;
								displaynian(nian,1);
								TR0=1;
							}


				}

		}
		if(counter1!=0)
			{
				if(s2==0)
					{
						delay(10);
						if(s2==0)
							{
								while(!s2);
								if(counter1==1)
									{
										miao++;
										if(miao==60)
											miao=0;
										displaymiao(miao,0);
									}
								 if(counter1==2)
								 	{
										fen++;
										if(fen==60)
											fen=0;
										displayfen(fen,0);
									}
								if(counter1==3)
									{
										shi++;
										if(shi==24)
											shi=0;
										displayshi(shi,0);
									}
								if(counter1==4)
									{
										ri++;
										if(ri==32)
											ri==1;
										displayri(ri,0);
									}
								if(counter1==5)
									{
										yue++;
										if(yue==13)
											yue=1;
										displayyue(yue,0);
									}
								if(counter1==6)
									{
										nian++;
										if(nian==2100)
											nian=2000;
										displaynian(nian,0);
									}

							}
					 }


					 if(s3==0)
						{
							delay(10);
							if(s3==0)
								{
									while(!s3) ;
										if(counter1==1)
									{
										miao--;
										if(miao==-1)
											miao=59;
										displaymiao(miao,0);
									}
								 if(counter1==2)
								 	{
										fen--;
										if(fen==-1)
											fen=59;
										displayfen(fen,0);
									}
								if(counter1==3)
									{
										shi--;
										if(shi==-1)
											shi=23;
										displayshi(shi,0);
									}
								if(counter1==4)
									{
										ri--;
										if(ri==0)
											ri==31;
										displayri(ri,0);
									}
								if(counter1==5)
									{
										yue--;
										if(yue==0)
											yue=12;
										displayyue(yue,0);
									}
								if(counter1==6)
									{
										nian--;
										if(nian==1999)
											nian=2100;
										displaynian(nian,0);
									}




								}
						}




			}

}	 

⌨️ 快捷键说明

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