/**************************************************
函数名称:write_point(uchar x,uchar y)
函数功能:在任意位置画点
返回值:无
x表示横坐标,y表示纵坐标
**************************************************/
void write_point(uchar x,uchar y)
{
uchar x_byte,x_bit;//在横坐标的哪一个地址,哪一位
uchar y_byte,y_bit;
uchar temp_h,temp_l;//定义两个变量用来存放读出来的数据
x_byte=x/16;//计算出在哪一个地址,水平地址为0,1,2,3,4,5,……15
x_bit=x&0x0f;//0x0f的二进制:0000 1111,十进制:15,经过与运算后可计算出在那一列
y_byte=y/32;//12864液晶分为上下两屏,用来判断在上屏还是在下屏,0表示上屏,1表示下屏
y_bit =y&0x3f;//0x1f的二进制:0001 1111,十进制:31,经过与运算后可计算出在那一行
//0x3f的二进制:0011 1111,十进制:63
write_com(0x34);//使用扩充指令
write_com(0x34);//关绘图显示
write_com(0x80+y_bit);//写垂直地址
write_com(0x80+x_byte+8*y_byte+x_bit);//下半屏的起始地址为0x88,用8*x_byte来确定这条指令计算上错哪里了,液晶都没有显示
read_data();//空读一次
temp_h=read_data();//读高8位
temp_l=read_data();//读低8为
if(x_bit<8)
{
write_data(temp_h|(0x01<<(7-x_bit)));//写高字节,因为坐标是从左向右的
//而GDRAM高位在左,底位在右
write_data(temp_l);//写低字节
}
else
{
write_data(temp_h);//写高字节
write_data(temp_l|(0x01<<(15-x_bit)));//写低字节
}
write_com(0x36);//打开绘图显示
write_com(0x32);//回到基本指令
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
怎么啦?
一周热门 更多>