LCD12864 打点求助

2019-07-16 04:48发布

这个是在网上找的打点函数,其中有几点不太懂,希望有经验的指点一下,万分感谢!
void draw_dot(uchar x,uchar y)
{
        uchar x_byte,x_bit;                        //确定dot在横轴上的哪个字节内的哪个位
        uchar y_byte,y_bit;                        //确定dot在竖轴上的哪个字节内的哪个位
        uchar TempH,TempL;                        //用来存放读出来的原始数据的高8位和低8位,
                                                                //目的是为了避免新的数据点写进去后覆盖掉前面的点

        x=x&0x7f;                                        //限制横坐标所在范围,为0-127
        y=y&0x3f;                                        //限制纵坐标所在范围,为0-31(上半屏)  0-31(下半屏)

        x_byte=x/16;                                //确定该dot在哪一个字节       
        x_bit=x%16;                                        //确定该dot在哪一个点

       
        y_byte=y/32;                                //确定该dot在那个半屏,0:上半屏 1:下半屏
        y_bit=y%32;                                        //确定该dot在第几行(因为到了下半屏也是从0行开始到31行)

       
        wr_cmd(0x34);                                                        //打开扩展指令集,关闭基本功能模式,绘图显示关闭
        set_col(y_bit);                                                //先将光标纵坐标写到指定行
        set_row(x_byte+8*y_byte);                        //再将光标横坐标写到指定位置,若y_byte为1,则说明大于了31行(从0行算起)
                                                                                                //则需将AC指针写到0x88处即ST7920控制下的第3行
       
        Read_data();                                                    //当下设定AC地址指令后,若要读取数据需要预先dummy read一次,才会读到正确数据
                                                                                                //第2次读取时不需要dummy read,除非又重新设定AC位置才需再次dummy read

        TempH=Read_data();                                                        //读取高8位数据
        TempL=Read_data();                                                        //读取低8位数据                                                                                       
       
        set_col(y_bit);                                                //读操作会改变AC位置,所以需要重新写入1次
        set_row(x_byte+8*y_byte);       

        if(x_bit<8)
        {
                wr_data(1,TempH|(0x01<<(7-x_bit)));         //如果要写的dot在高8位,则这样写利用or运算避免新数据覆盖原先数据
                wr_data(1,TempL);                                                //原先的低8位数据照常写入
        }
        else
        {
                wr_data(1,TempH);                                                //如果要写的dot在低8位,原先的高8位数据照常写入
                wr_data(1,TempL|(0x01<<(15-x_bit)));        //低8位则这样写利用or运算避免新数据覆盖原先数据
        }
               
        wr_cmd(0x36);                                                        //开绘图显示                                                                       
        wr_cmd(0x30);                                                        //回到GDRAM显示模式
}




主要是这里有些疑问
        uchar TempH,TempL;                        //用来存放读出来的原始数据的高8位和低8位,
                                                                //目的是为了避免新的数据点写进去后覆盖掉前面的点

1。为什么要设置两个变量,个人解释为要读两次值,并储存起来

       
        Read_data();                                                    //当下设定AC地址指令后,若要读取数据需要预先dummy read一次,才会读到正确数据
                       
2.这个读取,可能是硬件问题,也可以理解

        TempH=Read_data();                                                        //读取高8位数据
        TempL=Read_data();                                                        //读取低8位数据                                                                        33.这里为什么要读取两次啊????十分不理解,解释说两次一次读取高位,一个读取低位,具体不太清除,希望能详解一下,也可以举下例子,比如说 draw_dot(0,0)        ,个人认为,读取一次不就可以了么,为什么还有读取两次啊,》》》       



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
gao5613786
1楼-- · 2019-07-16 07:13
坐等回帖!!!!
希望单个你几分钟,来解救我的困惑我好久的难题
lovezjf234
2楼-- · 2019-07-16 09:12
 精彩回答 2  元偷偷看……
gao5613786
3楼-- · 2019-07-16 14:44
lovezjf234 发表于 2012-8-27 11:12
1。为什么要设置两个变量,个人解释为要读两次值,并储存起来
因为读取的数据时16位,而LCD只能单次发送8位 ...

谢谢啦,这个我下去有查了一下资料,确实是十六位数据,
由于我对扩展指令理解有点误解,导致我很多东西理解错误,走了很多弯路,
最后还是谢谢版主!
gao5613786
4楼-- · 2019-07-16 16:55
本帖最后由 gao5613786 于 2012-8-28 22:10 编辑

file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg
这个是我找到的坐标表,仔细看的话可以发现存取的数据是十六位的,我是按照以往的模式理解的,结果走了弯路,哈哈,

捕获.JPG
superwd12
5楼-- · 2019-07-16 21:54
MARK。。。。。。
yuying2015
6楼-- · 2019-07-17 00:01
受益

一周热门 更多>