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

📄 lcd_picure.c

📁 在12864上显示图片!!hehe ,很有成就感的
💻 C
📖 第 1 页 / 共 2 页
字号:
  {
      lcd_y=63-y+0x80;
	  x1=x/16;                       
	  x2=x%16;                       //确定x轴地址的位
	  lcd_x=0x90+x1;                 //确定x轴地址
	  data1=0x80;
	  data2=0x80;
	  if(x2>8)
	  {
	  data1=0x00;                    //确定要送的第一个数的值
	  count2=x2-8;
//	  data2=(data2>>count2);
	  if(count2==1)                  //确定第二个数的值
	    data2|=0x80;
	  else if(count2==2)
	    data2|=0x40;
	  else if(count2==3)
	    data2|=0x20;
	  else if(count2==4)
	    data2|=0x10;
	  else if(count2==5)
	    data2|=0x08;
	  else if(count2==6)
	    data2|=0x04;
	  else if(count2==7)
	    data2|=0x02;
	  else 
	    data2|=0x01;
	  }
	  else 
	  {
	  data2|=0x00;
	  count1=x2;
//	  data1=(data1>>count1);
	  if(count1==0)
	    data1|=0x00;
	  else if(count1==1)
	    data1|=0x80;
	  else if(count1==2)
	    data1|=0x40;
	  else if(count1==3)
	    data1|=0x20;
	  else if(count1==4)
	    data1|=0x10;
	  else if(count1==5)
	    data1|=0x08;
	  else if(count1==6)
	    data1|=0x04;
	  else if(count1==7)
	    data1|=0x02;
	  else if(count1==8)
	    data1|=0x01;

	  }
  }
  else
  {
      lcd_y=31-y+0x80;  
	  x1=x/16;                       
	  x2=x%16;                       //确定x轴地址的位
	  lcd_x=0x98+x1;                 //确定x轴地址
	  if(x2>8)
	  {
	  data1=0x00;                    //确定要送的第一个数的值
	  count2=x2-8;
//	  data2=(data2>>count2);
	  if(count2==1)                  //确定第二个数的值
	    data2|=0x80;
	  else if(count2==2)
	    data2|=0x40;
	  else if(count2==3)
	    data2|=0x20;
	  else if(count2==4)
	    data2|=0x10;
	  else if(count2==5)
	    data2|=0x08;
	  else if(count2==6)
	    data2|=0x04;
	  else if(count2==7)
	    data2|=0x02;
	  else 
	    data2|=0x01;
	  }
	  else 
	  {
	  data2=0x00;
	  count1=x2;
//	  data1=(data1>>count1);

	  if(count1==1)
	    data1|=0x80;
	  else if(count1==2)
	    data1|=0x40;
	  else if(count1==3)
	    data1|=0x20;
	  else if(count1==4)
	    data1|=0x10;
	  else if(count1==5)
	    data1|=0x08;
	  else if(count1==6)
	    data1|=0x04;
	  else if(count1==7)
	    data1|=0x02;
	  else if(count1==8)
	    data1|=0x01;

	  }
  }
}
*/
void set_dot(unsigned char x,unsigned char y)
{
  unsigned char x1,x2;
  if(y>31)
  {
      lcd_y=63-y+0x80;
	  x1=x/16;                       
	  x2=x%16;                       //确定x轴地址的位
	  lcd_x=0x90+x1;                 //确定x轴地址
	  data1=0x80;
	  data2=0x80;
	  if(x2>8)
	  {
	  data1=0x00;                    //确定要送的第一个数的值
	  count2=x2-8;
	  if(count2==1)                  //确定第二个数的值
	    data2=0x80;
	  else if(count2==2)
	    data2=0x40;
	  else if(count2==3)
	    data2=0x20;
	  else if(count2==4)
	    data2=0x10;
	  else if(count2==5)
	    data2=0x08;
	  else if(count2==6)
	    data2=0x04;
	  else if(count2==7)
	    data2=0x02;
	  else 
	    data2=0x01;
	  }
	  else 
	  {
	  data2=0x00;
	  count1=x2;
	  if(count1==0)
	    data1=0x00;
	  else if(count1==1)
	    data1=0x80;
	  else if(count1==2)
	    data1=0x40;
	  else if(count1==3)
	    data1=0x20;
	  else if(count1==4)
	    data1=0x10;
	  else if(count1==5)
	    data1=0x08;
	  else if(count1==6)
	    data1=0x04;
	  else if(count1==7)
	    data1=0x02;
	  else if(count1==8)
	    data1=0x01;

	  }
  }
  else
  {
      lcd_y=31-y+0x80;  
	  x1=x/16;                       
	  x2=x%16;                       //确定x轴地址的位
	  lcd_x=0x98+x1;                 //确定x轴地址
	  if(x2>8)
	  {
	  data1=0x00;                    //确定要送的第一个数的值
	  count2=x2-8;
	  if(count2==1)                  //确定第二个数的值
	    data2=0x80;
	  else if(count2==2)
	    data2=0x40;
	  else if(count2==3)
	    data2=0x20;
	  else if(count2==4)
	    data2=0x10;
	  else if(count2==5)
	    data2=0x08;
	  else if(count2==6)
	    data2=0x04;
	  else if(count2==7)
	    data2=0x02;
	  else 
	    data2=0x01;
	  }
	  else 
	  {
	  data2=0x00;
	  count1=x2;
	  if(count1==1)
	    data1=0x80;
	  else if(count1==2)
	    data1=0x40;
	  else if(count1==3)
	    data1=0x20;
	  else if(count1==4)
	    data1=0x10;
	  else if(count1==5)
	    data1=0x08;
	  else if(count1==6)
	    data1=0x04;
	  else if(count1==7)
	    data1=0x02;
	  else if(count1==8)
	    data1=0x01;

	  }
  }
}

void line(unsigned char start_x,unsigned char start_y,unsigned char end_x,unsigned char end_y)
{
  char erro=0;
  char d_x,d_y;
  if(end_y<start_y)                          //终点纵坐标大于起点纵坐标
  {
    d_x=end_x;	end_x=start_x;	start_x=d_x;
    d_y=end_y;	end_y=start_y;	start_y=d_y;
  }
  set_dot(start_x,start_y);                 //转换成液晶坐标 
  picture_display(data1,data2);             //描点
  d_x=end_x-start_x; d_y=end_y-start_y;     //描点步数,d_y>=0
  if(d_x>0)                                 //终点在起点左侧
  {
        if(d_x>=d_y)                             //横坐标间距大于纵坐标间距
	    {
		      while(start_x!=end_x)
		      {
			        if(erro>=0)
			        {
			          start_y+=1;
			          erro+=(d_y-d_x);                   //err0为start_y的调整因子,决定start_y是加一还是不变
			        }
			        else erro+=d_y;
					start_x+=1;                          //start_x向end_x逼近,步距为1
			        set_dot(start_x,start_y);            //转换成液晶坐标 
			        picture_display(data1,data2);        //描点
				  	//start_x+=1; 
		      }
	    }
        else                                            //纵坐标间距大于横坐标间距
        {
              while(start_y!=end_y)
              {
                    if(erro>0)
                    {
                      start_x+=1;
                      erro+=(d_x-d_y);
                    }
                    else erro+=d_x;
					start_y+=1;
					set_dot(start_x,start_y);                 //转换成液晶坐标 
			        picture_display(data1,data2);             //描点
					//start_y+=1;
              }
        }
  }
  else                                                       //终点在起点左方
  {
        d_x=start_x-end_x;
        if(d_x>=d_y)
        {
              while(start_x!=end_x)
              {
                    if(erro>=0)
                    {
                      start_y+=1;
					  erro+=(d_y-d_x);
                    }
                    else erro+=d_y;
					start_x-=1;
			        set_dot(start_x,start_y);                 //转换成液晶坐标 
			        picture_display(data1,data2);             //描点
              }
        }
        else
        {
              while(start_y!=end_y)
              {
                    if(erro<=0)
                       erro+=d_x;
                    else
                    {
                      start_x-=1;
					  erro+=(d_x-d_y);
                    }
                    start_y+=1;
			        set_dot(start_x,start_y);                 //转换成液晶坐标 
			        picture_display(data1,data2);             //描点
              }
        }

  }

}

⌨️ 快捷键说明

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