📄 pointline.c
字号:
#define RLCDI XBYTE[0xff80] //读出忙标志(BF)
#define WLCDI XBYTE[0xff00] //写指令到指令寄存器
#define RLCDD XBYTE[0xffc0] //从数据寄存器读出数据
#define WLCDD XBYTE[0xff40] //写数据到数据寄存器
#define uchar unsigned char
#define uint unsigned int
void dwrctrl(uchar x) //写指令
{
while((RLCDI&0x80)==0x80); //检查忙标志
WLCDI=x;
}
void dwrdata(uchar x) //写数据
{
while((RLCDI&0x80)==0x80);
WLCDD=x;
}
void writeXY(uchar x,uchar y,uchar data1,uchar data2) //在x,y坐标处写两字节数据
{
dwrctrl(y|0x80);_nop_();_nop_();
dwrctrl(x|0x80);_nop_();_nop_();
dwrdata(data1);_nop_();_nop_();
dwrdata(data2);_nop_();_nop_();
}
/*画点实现*/
void pixel(uchar x,uchar y) //在指定位置画点函数,x坐标范围为0~127,y坐标范围为0~63
{
uchar i,j;
uint position=0x8000; //每次向绘图RAM写入16个点的画点位置
if(y>31) //屏128*64对应绘图RAM的256*32
{
y=y-32;
x=x+128;
}
position=position>>(x%16); //确定画点位置
dwrctrl(y|0x80);_nop_(); //将垂直坐标写入绘图RAM
dwrctrl(x/16|0x80);_nop_(); //将水瓶座表写入绘图RAM
while((RLCDI&0x80)==0x80);i=RLCDD; //先DUMMYREAD一次
while((RLCDI&0x80)==0x80);i=RLCDD; //从绘图RAM读取一个字节数据到i
while((RLCDI&0x80)==0x80);j=RLCDD; //读取两个字节数据到就j
writeXY(x/16,y,position/256|i,(uchar)position|j); //写入,实现画点
}
/*画线函数 */
void line(uchar sx,uchar sy,uchar ex,uchar ey)
{
char Err=0,dx,dy;
if(ey<sy) //如果终点纵坐标大于起点纵坐标则交换之
{
dx=ex;ex=sx;sx=dx;
dy=ey;ey=sy;sy=dy;
}
pixel(sx,sy);//画起点
dx=ex-sx;dy=ey-sy;//画点步数,dy大于等于0
if(dx>0) //终点在起点右方
{
if(dx>=dy) //横坐标间距大于纵坐标间距
{ while(sx!=ex)
{
if(Err>=0)
{
sy=sy+1;
Err=Err+(dy-dx);//Err为sy的调整因子,决定sy是加1还是不变
}
else
{ Err=Err+dy;
sx=sx+1;//sx想ex逼近,步距为1
}
pixel(sx,sy);
}
}
else //横坐标间距小于纵坐标间距
{
while(sy!=ey)
{
if(Err>=0)
{
sx=sx+1;
Err=Err+(dx-dy);//Err为sx的调整因子,决定sx是加1还是不变
}
else
{ Err=Err+dx;
sy=sy+1;//sy想ey逼近,步距为1
}
pixel(sx,sy);
}
}
}
else //终点在起点左方
{
dx=sx-ex;
if(dx>=dy) //横坐标间距大于纵坐标间距
{ while(sx!=ex)
{
if(Err>=0)
{
sy=sy+1;
Err=Err+(dy-dx);//Err为sy的调整因子,决定sy是加1还是不变
}
else
{ Err=Err+dy;
sx=sx+1;//sx想ex逼近,步距为1
}
pixel(sx,sy);
}
}
else //横坐标间距小于纵坐标间距
{
while(sy!=ey)
{
if(Err>=0)
{
sx=sx+1;
Err=Err+(dx-dy);//Err为sx的调整因子,决定sx是加1还是不变
}
else
{ Err=Err+dx;
sy=sy+1;//sy想ey逼近,步距为1
}
pixel(sx,sy);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -