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

📄 12864指针式时钟.txt

📁 LCM128*64指针式万年 硬件:LCM128*64 M16 DS1302 软件:WinAVR 2.0.6.1 时钟:内部4M
💻 TXT
📖 第 1 页 / 共 5 页
字号:
	 else
	  {
	   if(tx>xe&&ty>ye)
	    { 
		 xe=tx-xe;
	     ye=ty-ye;
		}
	  }
	}
  }


  if(xe>ye)
    dist=xe;
  else
    dist=ye;

 xerr=yerr=0;
 for(t=0;t<=dist;t++)
  {
   xerr=xerr+xe;
   yerr=yerr+ye;
   if(xerr>dist)
    {
	  xerr=xerr-dist;
	  if(incx>1)
	   tx++;
	  if(incx<1)
	   tx--;
    }
   if(yerr>dist)
    {
	  yerr=yerr-dist;
	  if(incy>1)
	   ty++;
	  if(incy<1)
	   ty--;
	 }
	LCM12864_dot(tx,ty,mode);
  }
   LCM12864_dot(tx+1,ty,1);    //清除画线后最后一点的右边一点.

}


/**************************************************************************** 
函 数 名:box()
功    能:画框
说    明:边框:mode=0:画     1:清       2:反显 
          填充:tc=0 填充黑色.1:清除填充.2:框内反显.3:不填充
入口参数:sx,sy,ex,ey,mode
          sx,sy:左上角坐标.ex,ey:右下角坐标
返 回 值:无
*****************************************************************************/
void box(unsigned char sx,unsigned char sy,unsigned char ex,unsigned char ey,unsigned char mode,unsigned char tc)
{
 unsigned char n;
 line(sx,sy,ex,sy,mode);
 line(sx,ey,sx,sy,mode);
 line(sx,ey,ex,ey,mode);
 line(ex,ey,ex,sy,mode);
 if(tc!=3)
  {
   for(n=sy;n<ey;n++)
	 line(sx+1,n,ex-1,n,tc);
  }
}


/**************************************************************************** 
函 数 名:circle()
功    能:画圆
说    明:flay=0:画     1:清       2:反显 
入口参数:xxx,yyy,Rx,flay
          xxx,yyy:圆点坐标.Rx:半径
返 回 值:无
*****************************************************************************/

void circle(unsigned char xxx,unsigned char yyy,unsigned char Rx,unsigned char flag) 
   { 
    unsigned int xx,rr,xt,yt,rs,col,row; 
    yt=Rx; 
    rr=Rx*Rx+1; //补偿 1 修正方形 
    rs=(yt+(yt>>1))>>1; //(*0.75)分开1/8 圆弧来画 
    for(xt=0;xt<=rs;xt++) 
       { 
        xx=xt*xt; 
        while((yt*yt)>(rr-xx))yt--; 
        col=xxx+xt; //第一象限 
        row=yyy-yt; 
        LCM12864_dot(col,row,flag); 
        col=xxx-xt; //第二象限 
        LCM12864_dot(col,row,flag); 
        row=yyy+yt; //第三象限 
        LCM12864_dot(col,row,flag); 
        col=xxx+xt; //第四象限 
        LCM12864_dot(col,row,flag); 
/***************45 度镜象画另一半***************/ 
        col=xxx+yt; //第一象限 
        row=yyy-xt; 
        LCM12864_dot(col,row,flag); 
        col=xxx-yt; //第二象限 
        LCM12864_dot(col,row,flag); 
        row=yyy+xt; //第三象限 
        LCM12864_dot(col,row,flag); 
        col=xxx+yt; //第四象限 
        LCM12864_dot(col,row,flag); 
       } 
   } 





//********************************************************************************************
//LCM12864初始化		LCM12864_Init()
//
//*********************************************************************************************/
void LCM12864_Init(void)
{
  CBI_RST;								            //复位
  _delay_us(2000);
  SBI_RST;
  _delay_us(2000);
  LCM12864_Clear_Screen();							//清除屏幕
  CBI_CS1; CBI_CS2;				                    //选中双屏
  LCM12864_WriteCMD(LCM12864_DISP_OFF);				//关显示
  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+0);	//第0页位置
  LCM12864_WriteCMD(LCM12864_START_ROW+0);			//第0行			
  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0);		//第0列
  LCM12864_WriteCMD(LCM12864_DISP_ON);				//开显示
}


void LCM12864_disp(void) 
 {
  unsigned int i;
  unsigned char data;
  SBI_CS1; CBI_CS2;           //右半屏
  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+6);
  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0);
  for(i=yid;i<64+yid;i++)
   {
    data=disp_ram[(i/16)*32+(i%16)];
    LCM12864_WriteData(data);
   }
   
  LCM12864_WriteCMD(LCM12864_PAGE_START_ADDR+7);
  LCM12864_WriteCMD(LCM12864_COL_START_ADDR+0);
  for(i=yid;i<64+yid;i++)
   {
    data=disp_ram[(i/16)*32+(i%16)+16];
    LCM12864_WriteData(data);
   }
   LCM12864_WriteCMD(LCM12864_START_ROW+0);			//第0行	
 }


/**************************************************************************** 
函 数 名: LCM12864_analog_rest_data(void)
功    能:移动显示不变的内容写入缓存
说    明:板上没接18B20 温度值是固定的28.5 
入口参数:无
返 回 值:无
*****************************************************************************/


void LCM12864_analog_rest_data(void)
 {
  unsigned int i,j,t=285;   //伪温度值 t为温度*10
  unsigned char k;
  j=32*6;
  for(i=j,k=0;i<j+32;i++,k++)
   {
    disp_ram[i]=pgm_read_byte(hanzi+32+k);     //"月"
   }
   
  j=32*9;
  for(i=j,k=0;i<j+32;i++,k++)
   {
    disp_ram[i]=pgm_read_byte(hanzi+32*24+k);     //","
   } 
   
  j=32*13;
  for(i=j,k=0;i<j+32;i++,k++)
   {
    disp_ram[i]=pgm_read_byte(hanzi+32*24+k);     //","
   } 
   
 
   
   
  j=32*10;
  for(i=j,k=0;i<j+64;i++,k++)
   {
    disp_ram[i]=pgm_read_byte(hanzi+32*3+k);     //"星期"
   }
   
  j=32*16;
  for(i=j,k=0;i<j+32;i++,k++)
   {
    disp_ram[i]=pgm_read_byte(hanzi+32*9+k);     //"℃"
   }
  
  ///////////////////////////////以下是温度显示部分,接18B20后,把下面语句剪切到缓存更新函数里面
  j=32*14;
  for(i=j,k=0 ;i<j+16;i++,k++)                  //温度十位\个位
    {
	 disp_ram[i+(k/8*8)]=pgm_read_byte(shuzi+16*(t/100)+k);   
	 disp_ram[i+(k/8*8)+8]=pgm_read_byte(shuzi+16*(t/10%10)+k);
	}
	
  j=32*15;
  for(i=j,k=0 ;i<j+16;i++,k++)                  //温度小数点和后一位
    {
	 disp_ram[i+(k/8*8)]=pgm_read_byte(shuzi+16*11+k);   
	 disp_ram[i+(k/8*8)+8]=pgm_read_byte(shuzi+16*(t%10)+k);
	}
 /////////////////////////////////////////以上是温度显示部分
   
 }
   
  
/**************************************************************************** 
函 数 名: LCM12864_updata(void)
功    能:移动显示会改变的内容更新
说    明:无
入口参数:无
返 回 值:无
*****************************************************************************/
void LCM12864_updata(void)
 {
  unsigned int i,j;
  unsigned char k;
  j=32*4;
  if(month_moon<11)                 //如 小于10月(即无"月"十位),则不显示
   {
    for(i=j,k=0;i<j+32;i++,k++)
	 {
	  disp_ram[i]=0x00;
	 }
     
   }
  else
   {
    for(i=j,k=0;i<j+32;i++,k++)
     {
      disp_ram[i]=pgm_read_byte(hanzi+640+k);     //月十位
     }
   }
   
   j=32*5; //第五位.月个位
   if(month_moon==10)
    {
	 for(i=j,k=0;i<j+32;i++,k++)
	  {
	   disp_ram[i]=pgm_read_byte(hanzi+640+k);     //十月特殊处理
	  }
	}
   else
    {
	 for(i=j,k=0;i<j+32;i++,k++)
	  {
	   disp_ram[i]=pgm_read_byte(hanzi+(((month_moon%10)+10)*32)+k);     //月十位
	  }
	}
	
	
	j=32*7; //第七位,日十位
   if(day_moon<11)
    {
	 for(i=j,k=0;i<j+32;i++,k++)
	  {
	   disp_ram[i]=pgm_read_byte(hanzi+(21*32)+k);     //日十位"初"
	  }
	}
   else
    {
	 if(day_moon<20)
	  {
	   for(i=j,k=0;i<j+32;i++,k++)
	    {
	     disp_ram[i]=pgm_read_byte(hanzi+(20*32)+k);     //日十位 "十"
	    }
	  }
	 else
	  {
	   if(day_moon<30)
	    {
		 for(i=j,k=0;i<j+32;i++,k++)
		  {
		   disp_ram[i]=pgm_read_byte(hanzi+(22*32)+k);     //日十位 "廿"
		  }
		}
	   else
	    {
		 for(i=j,k=0;i<j+32;i++,k++)
		  {
		   disp_ram[i]=pgm_read_byte(hanzi+(23*32)+k);     //日十位 "卅"
		  }
		}
	  }
    }    //日十位 完
	
	
	j=32*8; //第八位,日个位
   if((day_moon%10)==0)
    {
	 for(i=j,k=0;i<j+32;i++,k++)
	  {
	   disp_ram[i]=pgm_read_byte(hanzi+640+k);     //十月特殊处理
	  }
	}
   else
    {
	 for(i=j,k=0;i<j+32;i++,k++)
	  {
	   disp_ram[i]=pgm_read_byte(hanzi+(((day_moon%10)+10)*32)+k);     //日个位
	  }
	}
	
	
   j=32*12; //第十二位,星期
   for(i=j,k=0;i<j+32;i++,k++)
	{
	 disp_ram[i]=pgm_read_byte(hanzi+(((week%7)+10)*32)+k);     //星期
	}
 }

/**************************************************************************** 
函 数 名: updata_time(void)
功    能:把时间装入数组,方便调整
说    明:无
入口参数:无
返 回 值:无
*****************************************************************************/
void updata_time()
 {
  inittime[0]=sec;
  inittime[1]=min;
  inittime[2]=hour;
  
  inittime[3]=day;
  inittime[4]=month;
  inittime[5]=week;
  
  inittime[6]=year;
 }
  
/**************************************************************************** 
函 数 名: write_time(void)
功    能:把重新调整后的时间写入1302
说    明:无
入口参数:无
返 回 值:无
*****************************************************************************/  
void write_time()
 {
  unsigned char i,j;
  for(i=0;i<7;i++)
   {
    j=inittime[i];
    inittime[i]=j/10*16+j%10;
   }
   Set1302(&inittime);
 }
	
	
    
/**************************************************************************** 
函 数 名: key_left(void)
功    能:按键左键处理
说    明:无
入口参数:无
返 回 值:无
*****************************************************************************/ 
void key_left()
 {
  LCM12864_Clear_Screen();
  switch(disp_set)
   {
    case 0:  disp_set=3;
	          break;
			  
	case 1:  disp_set=3;
	          break;
			  
	case 3:  disp_set=10;
	          two_show=(show*10)+10;
			  updata_time();
			  break; 
			  
	case 10: switch(show)
	          {
			   case 0:
	           case 1: disp_set=3;
			            two_show=0;
			            break;
						
			   case 4: disp_set=20;
			            three_show=0;
						break;
			  }
			  if ( two_show==40 )
				{
					disp_set=3;
				    two_show=(two_show-10)/10;
				}
			  break;
			  
	case 20: disp_set=10;
	          three_show=0;
	          break;
	          
			  
   }
 }
 
 
/**************************************************************************** 
函 数 名: key_right(void)
功    能:按键右键处理
说    明:无
入口参数:无
返 回 值:无
*****************************************************************************/ 
void key_right()
 {
  LCM12864_Clear_Screen();
  switch(disp_set)
   {
    case 3: 
	         disp_set=0;
			 show=0;
			 LCM12864_time_disp_analog();
	         break;
			 
	case 10:switch(show)
	          {
			   case 0:
	                    if(two_show<15)
	                     {
			              two_show++;
			             }
			            else
			             {
			              two_show=10;
			             }
			            break;
						
			   case 1:
			   	       if(two_show<26)
				        {
				         two_show++;
				        }
				       else
				        {
				         two_show=20;
				        }
				       break;

⌨️ 快捷键说明

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