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

📄 youbing.c

📁 基于80S52控制的12864液晶显示万年历程序
💻 C
📖 第 1 页 / 共 2 页
字号:
///*****初始化******///
void Init()
{
//开显示;
  p_di=0;
  p_rw=0;
  Data=0x3f;
  p_cs1=0;
  p_cs2=1;
  p_e=1;
  p_e=0;
  p_cs1=1;
  p_cs2=0;
  p_e=1;
  p_e=0;
//0行开始显示
  busy(); 

  p_cs1=0;
  p_cs2=1;
  Data=0xc0;
  p_e=1;
  p_e=0;
  p_cs1=1;
  p_cs2=0;
  p_e=1;
  p_e=0;
}

void setxy(unsigned char x,unsigned char y)
{  
  if(y<64)
  { 
  //***写行地址l**//
    busy();
    p_di=p_rw=p_cs2=0;
    p_cs1=1;
    Data=0xb8|x;
    p_e=1;
    p_e=0;
///***写列地址l**//
    busy();  
    p_di=p_rw=p_cs2=0;
    p_cs1=1;
    Data=0x40|y;
    p_e=1;
    p_e=0;
  }
  else
  { 
  //***写行地址r**//
    busy();
    p_di=p_rw=p_cs1=0;
    p_cs2=1;
    Data = 0xb8|x;
    p_e=1;
    p_e=0;
  ///***写列地址r**//
    busy();  
    p_di=p_rw=p_cs1=0;
    p_cs2=1;
    Data=0x40|y;
    p_e=1;
    p_e=0;
  }

}

//****写数据****//
void writedata(unsigned char x,unsigned char y)
{
  busy();
  setxy(x,y);//set x,y address address  
  if(y<64)
  {
    p_rw=p_cs2=0;
    p_cs1=1;    
  }
  else
  {
    p_rw=p_cs1=0;
  p_cs2=1;
  }
  p_di=1;
  Data=0x00;
  p_e=1;
  p_e=0;
}

///******* 显示字******///
void writeword1(unsigned char x,unsigned char y,unsigned char d[2][16])
{
  unsigned char i,j;
  unsigned char temp;
  
  for(i=0;i<2;i++)
     for(j=0;j<16;j++)
 {
   busy();
   setxy(i+x,j+y);
   if(y<64)
   {
     p_rw=p_cs2=0;
     p_di=1;
     p_cs1=1;
   }
   else
   {
     p_rw=p_cs1=0;
     p_di=1;
     p_cs2=1;
   }
   temp=abs(d[i][j]/128)+abs((d[i][j]%128)/64)*2+abs((d[i][j]%64)/32)*4+abs((d[i][j]%32)/16)*8+abs((d[i][j]%16)/8)*16+abs((d[i][j]%8)/4)*32+abs((d[i][j]%4)/2)*64+abs(d[i][j]%2)*128;
   Data=temp;
   p_e=1;
   p_e=0;
 }  
 }


///******* 显示字符、数字******///
void writeword2(unsigned char x,unsigned char y,unsigned char d[2][8])
{
  unsigned char i,j;
  unsigned char temp;
 {for(i=0;i<2;i++)
     for(j=0;j<8;j++)
 {
   busy();
   setxy(i+x,j+y);
   if(y<64)
   {
     p_rw=p_cs2=0;
     p_di=1;
     p_cs1=1;
   }
   else
   {
     p_rw=p_cs1=0;
     p_di=1;
     p_cs2=1;
   }
   temp=abs(d[i][j]/128)+abs((d[i][j]%128)/64)*2+abs((d[i][j]%64)/32)*4+abs((d[i][j]%32)/16)*8+abs((d[i][j]%16)/8)*16+abs((d[i][j]%8)/4)*32+abs((d[i][j]%4)/2)*64+abs(d[i][j]%2)*128;
   Data=temp;
   p_e=1;
   p_e=0;
 }  
}
}


///****清屏***//
void clear()
{
  unsigned char i,j;
  for(i=0;i<8;i++)
    for(j=0;j<128;j++)
    writedata(i,j);
}

//*******设定清屏********

void clearset(unsigned x,unsigned y)
{
  unsigned char i,j;
  for(i=x;i<x+2;i++)
    for(j=y;j<y+16;j++)
    writedata(i,j);
}

///***主函数****///
void main(void)
{ 
  unsigned char m,n;
 
    IE = 0x8f;							//CPU开中断,INT0,INT1,Timer0开中断
	IP = 0x04;							//设置INT0为中断最高优先级
	IT0=1;IT1=1;						//外部INT0,IT1设置为边沿触发方式
	TMOD = 0x11;						//Timer0工作于模式1, 16位定时方式
	TH0 = 0xdc;
	TL0 = 0x00;				//Timer0置10ms定时初值 		
	TR0 = 1;
 
	 Init();
	display(m,n);
	delay(1500);	
    clear();
  while(1)
 {
  keyhangdle();
  pro_timedate();
  timedisplay();
 
  }
 }








void display(unsigned char k,unsigned char j)
{
   //if(m==0)
  // {
/****第一屏****/
    clear();
    busy();
    writeword1(1,32,huang);//
    writeword1(1,48,ying);//
    writeword1(1,64,guang);//
	writeword1(1,80,lin);//
    

	writeword2(3,0,w);//
    writeword2(3,8,w);//
    writeword2(3,16,w);//
	writeword2(3,24,diang);//
    writeword2(3,32,y);//
	writeword2(3,40,O);//
    writeword2(3,48,u);//
    writeword2(3,56,b);//
    writeword2(3,64,i);//
	writeword2(3,72,n);//
	writeword2(3,80,g);//
	writeword2(3,88,diang);//
	writeword2(3,96,c);//
	writeword2(3,104,O);//
	writeword2(3,112,m);//

    writeword1(5,0,bang);//
	writeword1(5,16,quan);//
    writeword1(5,32,suo);//
	writeword1(5,48,you1);//
    writeword1(5,64,maohao);//
	writeword1(5,80,zhang);//
	writeword1(5,96,you);//
	writeword1(5,112,ming);//

	delay(150);
}

//**************日历画面***************//
      
 void timedisplay()
{

 unsigned char year1,year2,year3,year4,month1,month2,day1,day2;
 unsigned char hour1,hour2,min1,min2,sec1,sec2;

 //******时间处理**********//

 //年//
  
  year1=year/1000;
  year2=(year-year1*1000)/100;
  year3=(year-year1*1000-year2*100)/10;
  year4=(year-year1*1000-year2*100)%10;
 //月//
  month1=month/10;
  month2=month%10;
 //日//
  day1=day/10;
  day2=day%10;

 //时//
  hour1=hour/10;
  hour2=hour%10;
 //分//
 min1=min/10;
 min2=min%10;
 //秒//
 sec1=sec/10;
 sec2=sec%10;

  writeword1(0,32,nian);//
  writeword1(0,64,yue);//
  writeword1(0,96,ri);//
 
  writeword1(2,48,shi);//
  writeword1(2,80,fen);//
  writeword1(2,112,miao);//
//年//
  writeword2(0,0,BMP[year1]);//
  writeword2(0,8,BMP[year2]);//
  writeword2(0,16,BMP[year3]);//
  writeword2(0,24,BMP[year4]);//
//月//
  writeword2(0,48,BMP[month1]);//
  writeword2(0,56,BMP[month2]);//
 //日//
  writeword2(0,80,BMP[day1]);//
  writeword2(0,88,BMP[day2]);//

 //图标//
  writeword1(2,adr,shu2);//
 
//时//
  writeword2(2,32,BMP[hour1]);//
  writeword2(2,40,BMP[hour2]);//
//分//
  writeword2(2,64,BMP[min1]);//
  writeword2(2,72,BMP[min2]);//
 //秒//
  writeword2(2,96,BMP[sec1]);//
  writeword2(2,104,BMP[sec2]);//
 //************kuang*********
   writeword1(4,0,niankf);//
   writeword1(4,24,ji);//吉
   writeword1(4,48,yuekf);//
   writeword1(4,72,ru);//如
   writeword1(4,96,rikf);//

   writeword1(6,0,shikf);//
   writeword1(6,24,xiang);//祥
   writeword1(6,48,fenkf);//
   writeword1(6,72,yi);//意
   writeword1(6,96,niank1f);//
//********图标2*********
  
 // delay(50);
  clearset(2,adr);
  flag=-flag;
  if(flag==-1) {adr=16,writeword1(2,adr,shu1);}
  else adr=0;
  
}

void timer0() interrupt 1 
{
	TH0=0xdc;			//Timer0置10ms定时初值dc00H(ffffH=65535D,dc00H=56320D)
	TL0=0x00;			//定时时间=(65535-56320)*(1/11.0592)*12=10ms (f0=11.0592Mhz)
	sec100++;
	if(sec100 >= 100)	//1秒时间 (100*10ms=1000ms=1s)
		{
		sec100 = 0;
		sec++;
		// pro_timedate();//调用时间和日期处理程序
		}

}

//时间和日期处理程序
void pro_timedate()
{	

	if(sec > 59)
		{sec = 0;
		 min++;}

		 if(min>59)
			{min=0;
			 hour++;}

			 if(hour>23)
				{hour=0;
				 week++;
				 if (week>6) week=1;
				 day++;}

				 if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
					 if (day>31) {day=1;month++;}					//大月31天
				 if (month==4||month==6||month==9||month==11)		
				 	 if (day>30) {day=1;month++;}					//小月30天
				 if (month==2)			
					 {if((year%4==0 && year%100!=0)||year%400==0)	//闰年的条件
						{if (day>29) {day=1;month++;}}				//闰年2月为29天
					 else
						{if (day>28) {day=1;month++;}}				//平年2月为28天	
					 }				
				if (month>12) {month=1;year++;}
				
			
		
}
//***************8按键处理**************
 void  keyhangdle()
{
	   if(yearup==0)
	    {
		  delay(5);
		  if(yearup==0) 
		   {
		     writeword1(4,0,niank);//
		      year++;  
	         }
         }
		 else if(monthup==0)
		      {
			    delay(5);
			    if(monthup==0)
				  {
				     writeword1(4,48,yuek);//
					 month++;
				   }
				}
		        else if(dayup==0)
				     {
					   delay(5);
					   if(dayup==0)
					     {
						  
						    writeword1(4,96,rik);//
							day++;
						  }
					  }
					else if(hourup==0)
					     {
						     delay(5);
							  if(hourup==0)
					         {
							 
						      writeword1(6,0,shik);//
							  hour++;
						      }
						   }
						  else if(minup==0)
						      {
							    delay(5);
								if(minup==0)
					            {
						          writeword1(6,48,fenk);//
							      min++;
						         }
							   }
							 else if(yeardown==0)
							   {
								      delay(5);
								  if(yeardown==0)
					              {
						            writeword1(6,96,niank1);//
							        year--;
						           }
						       }
	
}			 

⌨️ 快捷键说明

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