|
uint read_dat(void)
{
uint data;
PORTA=0XFF;
PORTB|=BIT(0); //Rs
PORTB|=BIT(1); //RW
PORTB|=BIT(2); //EN
data=PINA;
delay(1);
PORTB&=~BIT(2); //EN
delay(1);
return data;
}
void GUI_Point(unsigned int y,unsigned int x)
{
unsigned int GDRAM_hbit,GDRAM_lbit;
unsigned int x_Dyte,x_byte; //定义列地址的字节位,及在字节中的哪1位
unsigned int y_Dyte,y_byte;
write_com(0x36);
delay(1);
x--;y--; //定义为上下两个屏(取值为0,1),行地址(取值为0~31)
/***X,Y坐标互换,即普通的X,Y坐标***/
x_Dyte=y/16; //计算在16个字节中的哪一个
x_byte=y&0x0f; //计算在该字节中的哪一位
y_Dyte=x/32; //0为上半屏,1为下半屏
y_byte=x&0x1f; //计算在0~31当中的哪一行
write_com(0x80+y_byte); //设定行地址(y坐标)
delay(1);
write_com(0x80+x_Dyte+8*y_Dyte); //设定列地址(x坐标),并通过8*y_Dyte选定上下屏
delay(1);
DDRA=0X00;
delay(5);
GDRAM_lbit=read_dat(); //读取当前显示高8位数据
delay(1);
GDRAM_hbit=read_dat(); //读取当前显示低8位数据
delay(1);
DDRA=0XFF;
write_com(0x80+y_byte); //设定行地址(y坐标)
delay(1);
write_com(0x80+x_Dyte+8*y_Dyte); //设定列地址(x坐标),并通过8*y_Dyte选定上下屏
delay(1);
if(x_byte<8) //判断其在高8位,还是在低8位
{
write_dat(~(GDRAM_hbit & ~(0X01<<(7-x_byte)))); //显示GDRAM区高8位数据
delay(1);
write_dat(~GDRAM_lbit); //显示GDRAM区低8位数据
delay(1);
}
else
{
write_dat(~GDRAM_hbit);
delay(1);
write_dat(~(GDRAM_lbit & ~(0x01<<(15-x_byte))));
delay(1);
}
//}
}
该画点函数新画上的点的同时会消掉同在一个列地址的16个点上的其他亮点。。。实在是不知道毛病出在哪里。。
求高手帮忙看下。谢谢了。
用的是带字库的12864 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|