单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 302|回复: 7
收起左侧

请别嫌我烦。继续请教12864地址设置问题

[复制链接]
kissme 发表于 2019-1-16 17:07 来自手机 | 显示全部楼层 |阅读模式
四大行。第一行为0x80..0从第一行0处开始。那么请问有程序里面的x和y又和行啥关系呢。。r如果我从第一行空八位再输出字符。是不是就是0x81.0呢。。数据手册我实在看着头晕。。。不光有x.y还有z.地址。。没明白。。。请教大神。。谢谢
回复

使用道具 举报

周超然 发表于 2019-1-16 17:25 | 显示全部楼层
你先让这个屏幕显示起来,网上驱动很多啊
https://wenku.baidu.com/view/0979b11cfc4ffe473368ab10.html
回复

使用道具 举报

f556 发表于 2019-1-16 21:18 | 显示全部楼层
/* program for JLX12864G-109 189,并行接口
//   驱动 IC 是:ST7565R(or competible)
  冯编写,20140517    */


// 设定图形row,col值
//        row,col(Dec,十进制)
//        page:0~7,页,+1则纵下走8点,ST7565
//        col:0~127~132        列,+1则横右+1点
//              col: 0  1  2  3  4  ... 127 ...  132                                                                                                               
//-------------========================================
//page0 行   0  D0
//           1  D1
//           2  D2
//           3  D3
//           4  D4
//           5  D5
//           6  D6
//           7  D7
//
//page1 行   8  D0
//           9  D1


//                 
//page7 行   56 D0                

//           63 D7
//-------------========================================
void SetAddr(unsigned char row,unsigned char col)         //地址指针设置
{
//        unsigned char Addr;
        unsigned char D1,D2; //双参数  (低8,高8)
//        ff        上:16表示第行y有16个列x。
//        Addr=((unsigned int)(y)*16)+x+256; //Y16表示是16行,Y256表示是一个字节 ?
        Lcd_CMD(0xb0+row);   //set page address,
        D2 = col>>4;           //取高4位
        D1 = col & 0x0f;                //取低4位
        Lcd_CMD(0x10+D2);         //set column add High 4bit (0x1_0 ~ 1_F,Max is 0x18,b1000 0100=132)
        Lcd_CMD(0x00+D1);         //set column add Low 4bit  (0x0_0 ~ 0x0_F)
}

主要看前边的说明、注解,那才是关键,应该能看懂,程序相信你有一大堆,无用的代码就不上来影响分析了。
回复

使用道具 举报

 楼主| kissme 发表于 2019-1-16 22:09 来自手机 | 显示全部楼层
周超然 发表于 2019-1-16 17:25
你先让这个屏幕显示起来,网上驱动很多啊
https://wenku.baidu.com/view/0979b11cfc4ffe473368ab10.html

谢谢。。。屏幕可以显示........做了个时钟程序。。。不显示。。。乱跳乱码
回复

使用道具 举报

 楼主| kissme 发表于 2019-1-17 11:01 来自手机 | 显示全部楼层
f556 发表于 2019-1-16 21:18
/* program for JLX12864G-109 189,并行接口
//   驱动 IC 是:ST7565R(or competible)
  冯编写,20140 ...

详细。。。谢谢你了
回复

使用道具 举报

f556 发表于 2019-1-17 17:26 | 显示全部楼层
老大不给加分?我认为我提供的内容才是重要的!
想法及感受如下:
1、逻辑、设计思路、原理比程序更重要,我个人比较讨厌程序本身,特别是有人上传一个hex、bin编译文件,纯是垃圾。没有好的注解的原程序都没有价值。
2、12864液晶首先要看一下驱动芯片,它的地址及RAM影射,如果用别人的原程序也要找相兼容芯片的。
3、关键概念page(页),0~64行是分成8个页的,8页X8点=64个row,一个页对应一个8位(1字节),另外就是列了0~127,有些芯片是132列,多余列的不会显示在液晶上。
回复

使用道具 举报

 楼主| kissme 发表于 2019-1-18 17:16 来自手机 | 显示全部楼层
f556 发表于 2019-1-17 17:26
老大不给加分?我认为我提供的内容才是重要的!
想法及感受如下:
1、逻辑、设计思路、原理 ...

谢谢,,.
回复

使用道具 举报

 楼主| kissme 发表于 2019-2-24 19:46 | 显示全部楼层
现在汉字可以任一点显示了。。图形显示还是不懂这地址咋设置的。比如下面画图函数:
void huatu(unsigned char x,unsigned char code *img)
{
        unsigned char i,j;
        SetGraphicMode();
        for(i=0;i<32;i++)  此处32不明白。如果是一行。应该是水平位置有128点吧?
        {
                if(i<16)  这里的16又是干啥呢?
                {
                        Write_Cmd(0x80+16+i);      //将D15 ——D8写入到RAM中
                        Write_Cmd(0x80+x);
                }
                if(i>=16)
                {
                        Write_Cmd(0x80+i-16);      //将D7——D0写入到RAM中;???更懵逼这里
                        Write_Cmd(0x88+x);        
                }
                for(j=0;j<2;j++)   又来个2??
                {
                        Write_Data(*img);
                img++;        
                }        
        }
        SetNormalMode();        
}
继续请教大神
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51hei电子论坛2群 联系QQ:125739409;技术交流QQ群219535678

Powered by 单片机教程网

快速回复 返回顶部 返回列表