📄 lcd_picure.c
字号:
{
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 + -