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);//回到基本指令               
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
yiminglei
1楼-- · 2020-01-25 15:15
梦的飞翔 发表于 2012-8-11 08:33
这个是显示汉字的地址,我现在是要画点画线

我觉得附件的spec说明得挺清晰的,看哪一款适合你的。
飞舞的鬼车
2楼-- · 2020-01-25 17:43
同样的疑问,坐标搞不清了。
lswhome
3楼-- · 2020-01-25 22:51
ST7920确实坐标系非常坑爹。。。。字符方式还可以啦,图形方式真心受不了。。。麻烦死了,建议换其他液晶吧
Smartist
4楼-- · 2020-01-26 02:49
还以为是个教程呢,运来是个问题

一周热门 更多>