void curve(unsigned char xlable,unsigned char ylable,bit dot)
{
unsigned char H[1]={0};//读RAM寄存
unsigned char L[1]={0};
unsigned char xbuf;
w_com(0x01);
w_com(0x34);
w_com(0x36); //功能设置:一次送8位数据,扩展指令集
xlable=xlable+xoffset;//求相对零点
ylable=ylable+yoffset;
if(xlable<0)xlable=-1;//超出边界处理
if(ylable<0)ylable=0;
if(ylable>64)ylable=65;
xbuf=xlable%16;
xlable=xlable/16;
if(ylable>32)//上半屏
{
ylable=64-ylable;//切换上下屏
xbuf=15-xbuf;//x坐标归位
w_com(0x80|ylable); //输入垂直地址
w_com(0x80|xlable); //输入水平地址
read_RAM();//屏蔽
if(xbuf>7)
{
if(dot==0)
H[0]=read_RAM()&(~(1<<xbuf-8));//擦点
else
H[0]=read_RAM()|1<<xbuf-8;//插点,需要打的点
L[0]=read_RAM();
}
else
{
H[0]=read_RAM();//插点,需要打的点
if(dot==0)
L[0]=read_RAM()&(~(1<<xbuf));//擦点
else
L[0]=read_RAM()|1<<xbuf;
}
w_com(0x80|ylable); //输入垂直地址
w_com(0x80|xlable); //输入水平地址
w_byte(H[0]);
w_byte(L[0]);
}
else //下半屏
{
ylable=32-ylable;
xbuf=15-xbuf;//x坐标归位
w_com(0x80|ylable); //输入垂直地址
w_com(0x88|xlable); //输入水平地址
read_RAM();//屏蔽
if(xbuf>7)
{
if(dot==0)
H[0]=read_RAM()&(~(1<<xbuf-8));//擦点
else
H[0]=read_RAM()|1<<xbuf-8;//插点,需要打的点
L[0]=read_RAM();
}
else
{
H[0]=read_RAM();//插点,需要打的点
if(dot==0)
L[0]=read_RAM()&(~(1<<xbuf));//擦点
else
L[0]=read_RAM()|1<<xbuf;
}
w_com(0x80|ylable); //输入垂直地址
w_com(0x88|xlable); //输入水平地址
w_byte(H[0]);
w_byte(L[0]);
}
}
//清除屏幕
void BMP_clear( void )
{
unsigned char i,j;unsigned char L[1]={0};
w_com(0x34); //8Bit扩充指令集,即使是36H也要写两次
w_com(0x36); //绘图ON,基本指令集里面36H不能开绘图
for(i=0;i<32;i++) //12864实际为256x32
{
w_com(0x80|i); //行位置
w_com(0x80); //列位置
for(j=0;j<32;j++) //256/8=32 byte
w_byte(L[0]);
}
}
|