找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5409|回复: 4
打印 上一主题 下一主题
收起左侧

12864液晶屏8个点后的地址怎么确定?

[复制链接]
跳转到指定楼层
楼主
ID:88815 发表于 2015-8-28 08:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

带字库12864中间两行要在空 8 个点之后 再写入18*32大小字体,首地址怎么写。水平地址只能是0x80到0x87,每个地址间是16个bit间距,没有8个点后的间距地址。求大神 指点。
万分感谢

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2015-8-28 11:02 | 只看该作者
你说的有点乱。带字库的12864的汉字是16*16点阵的,没有你说的18*32的。如果你是用图形模式,是可以从任意位置开始写的。
回复

使用道具 举报

板凳
ID:88815 发表于 2015-8-28 11:58 | 只看该作者
ahshmj 发表于 2015-8-28 11:02
你说的有点乱。带字库的12864的汉字是16*16点阵的,没有你说的18*32的。如果你是用图形模式,是可以从任意 ...

谢谢大哥,我是用画图模式写字模取出来的 18*32的汉字,现在想从中间两行八个点后写入 字模里的汉字。不知道怎样从任意位置写起。还需要大神 多指点。

void write1632GDRAM(unsigned char x,unsigned char y,unsigned char *bmp)       
{
        unsigned char i,j,basex,basey;
        switch(y)         //由y纵坐标定是上半屏还是下半屏
        {
          case 1: basex=0x80; break;  //上半屏
          case 2: basex=0x80; break;  //先上半屏,下面再下半屏。
          case 3: basex=0x88; break;  //下半屏
          default:   return;   //别的则返回
        }
        basey=basex+x-1;
        LCD_write_command(0x34);   //打开扩展指令
        LCD_write_command(0x36);  
        if(y==1||y==3)        //如为第一第三行,则直接是在同一半屏,直接绘完32行点陈数据。
        {
                  for(i=0;i<32;i++)         //写入32行点阵
                  {                                                                                                               
                           LCD_write_command(0x80+i);  //先写入垂直位址,选上下32行的哪一行,不管上下半屏,首行都为0X80
                           LCD_write_command(basey);     //再写入水平位址(选上下半屏)
                            for(j=0;j<2;j++)           //2个8位元的数据,即16BIT宽度
                            LCD_write_data(*bmp++);   
                  }         
        }
        if(y==2)  //从第二行开始则画图将上下半屏都有,所以先画完上半屏16行,再画下半屏16行。
        {                                       
                  for(i=0;i<16;i++)         //写入上半屏16行点阵
                  {                                                                                                               
                           LCD_write_command(0x90+i);  //先写入垂直位址,选上下32行的哪一行,不管上下半屏,首行都为0X80,第二行为0X90。
                            LCD_write_command(basey);    //(选上半屏)再写入水平位址
                            for(j=0;j<2;j++)           //2个8位元的数据,即16BIT宽度
                            LCD_write_data(*bmp++);   
                  }
                  for(i=0;i<16;i++)         //写入下半屏16行点阵
                  {                                                                                                               
                           LCD_write_command(0x80+i);  //先写入垂直位址,选上下32行的哪一行,不管上下半屏,首行都为0X80
                           LCD_write_command(basey+8);   //(选下半屏)再写入水平位址
                            for(j=0;j<2;j++)           //2个8位元的数据,即16BIT宽度
                            LCD_write_data(*bmp++);   
                  }         
        }
        LCD_write_command(0x36);  //写完数据,开图片显示   
        LCD_write_command(0x30);   //基本指令  
}

void clear_gcrom()
{
        unsigned char i,j,k;
  // LCD_write_command(0x30);
   LCD_write_command(0x34);
        for(i=0;i<2;i++)
        {
                for(j=0;j<32;j++)
                {
             LCD_write_command(0x80+j);
                    if(i==0)       
                        {
                 LCD_write_command(0x80);
                        }
                        else
                        {
                LCD_write_command(0x88);
                        }
                        for(k=0;k<16;k++)
                        {
                LCD_write_data(0x00);
                LCD_write_data(0x00);
                        }
                   }
        }
     LCD_write_command(0x36);
     LCD_write_command(0x30);       
}

这是我写中间两行16*32字体的函数,但汉字位置只能从起始位置,或隔16个点后的地址写起。
回复

使用道具 举报

地板
ID:88815 发表于 2015-8-28 12:45 | 只看该作者
哦,写错了,是16*32,我是用图形模式在中间两行写入16*32的字模取出来的汉字。但想从这中间两行起始位置后 的8个 点后 开始写16*32汉字,不知道怎么写入。

回复

使用道具 举报

5#
ID:84652 发表于 2015-8-28 15:17 | 只看该作者
本帖最后由 王朗的诱惑 于 2015-8-28 15:19 编辑
zmy521 发表于 2015-8-28 12:45
哦,写错了,是16*32,我是用图形模式在中间两行写入16*32的字模取出来的汉字。但想从这中间两行起始位置后 ...

没办法分成8个的吧……列坐标貌似只能精确到16个的。不想在前8个点显示东西就只好写0x00了。如果后面写的内容的显示范围涉及到前面的,前面的那部分写一样的数据就行了。至于地址,因为是上下两个屏,列地址相差8,分开写就行了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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