12864液晶画点问题,横纵坐标如何确定?

2020-01-24 12:05发布

/**************************************************
函数名称: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);//回到基本指令               
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。