找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么在12864液晶上显示任意大小汉字

  [复制链接]
跳转到指定楼层
楼主
ID:87312 发表于 2015-7-31 09:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么在12864液晶上显示任意大小汉字
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2015-7-31 12:50 | 只看该作者
本帖最后由 ahshmj 于 2015-7-31 12:53 编辑

自带字库的字就是16*16点阵的汉字(全角字符),或8*16(半角字符,数字或字母),只能是这样。但是你可以使用图形模式用自己的字模。
你做成的字模是多大显示就是多大。小于16*16的不好看,大于32*32的显示的字又太少。
不带字库的,要显示汉字或字母当然要制作字模。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:86389 发表于 2015-7-31 14:41 | 只看该作者
汉字一般12*12分辨率已经很低了,不过还是能看,但是笔画多的就不一定了,建议最小12*12,,自己取模,写个显示函数。我一般是用无字库的cog,价格很便宜,几块钱到十几块一大把。一般采用16*16,那就可以直接用字库的了

评分

参与人数 1黑币 +30 收起 理由
admin + 30 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:87312 发表于 2015-7-31 15:15 | 只看该作者
ahshmj 发表于 2015-7-31 12:50
自带字库的字就是16*16点阵的汉字(全角字符),或8*16(半角字符,数字或字母),只能是这样。但是你可以 ...

可不可以发一个示例程序?
回复

使用道具 举报

5#
ID:87312 发表于 2015-7-31 15:17 | 只看该作者
zhou961291176 发表于 2015-7-31 14:41
汉字一般12*12分辨率已经很低了,不过还是能看,但是笔画多的就不一定了,建议最小12*12,,自己取模,写个 ...

谢谢指导!
回复

使用道具 举报

6#
ID:85129 发表于 2015-7-31 21:17 | 只看该作者
#include <reg52.h>
#include"intrins.h"
#define  uchar unsigned char
#define  uint  unsigned  int
sbit rs =P2^0;   // //数据\//指令//选择
sbit rw =P2^1;   // //读\写选择
sbit en =P2^2;   // 读\写使能  
sbit cs1 =P2^4;  // 片选1,低有效(前64列)
sbit cs2 =P2^5;  // 片选2,低有效(后64列)
void    lcdstate()
{
uchar  lcd=0x00; /*设置初值为0,全部为低,方便后面的判忙*/
rs=0; /*根据时序图拉低,选择写指令*/
rw=1; /*根据时序图拉低,选择写模式*/
do
{
en=1; /*使能,使液晶输出信号,检查是否忙*/
_nop_();_nop_();_nop_();_nop_();/*延时4US*/
lcd=P0; /*把P0口的状态值读回来给lcd*/
en=0; /*使能端跳变*/;
}while(lcd&0x80); /*结果的高位保留,如果高位DB7为一,则表示忙*/
}
void delay(uchar  ms)
{ uchar   i;
   uchar   j;
  for(i=0;i<100;i++)
   for(j=0;j<ms;j++);
}
void   write_command(uchar   command)
{
lcdstate();
  rs=0;                                //RS=0;为往MCU进行指令操作
  rw=0;                                //RW=0;为往MCU写入操作
  en=0;
  _nop_();_nop_();_nop_();_nop_();/*延时4US*/
  en=1;
  _nop_();_nop_();_nop_();_nop_();/*延时4US*/
  P0=command;
  _nop_();_nop_();_nop_();_nop_();/*延时4US*/
  en=0;
}
void   write_data(uchar   datas)
{  
   lcdstate();
   rs=1;
   rw=0;  
   en=0;
   _nop_();_nop_();_nop_();_nop_();/*延时4US*/
   en=1;
   _nop_();_nop_();_nop_();_nop_();/*延时4US*/
   P0=datas;
   _nop_();_nop_();_nop_();_nop_();/*延时4US*/
   en=0;
}
void   lcdinit()
{
    delay(100);                                         //
    cs1=1;
        cs2=1;
        delay(100);       
        lcdstate();                                 //
        write_command(0x3e);                 //
        write_command(0xb8+0);                         //
        write_command(0xc0+0);                 //
        write_command(0x40+0);                 //
        write_command(0x3f);                 
}
void clearScreen(  )
{   uchar i,j;
    lcdstate();
    cs1=1;
        cs2=1;
        write_command(0x3f);                        //设置显示开
        write_command(0xb8);                    //Y        设置第0页;
        write_command(0x40);                         //        设置第0列
   for(i=0;i<8;i++)
   {
     write_command(0xb8+i);
     for(j=0;j<64;j++)
     {
           //write_command(0x40+j);
       write_data(0x00);
          
     }
   }
}
unsigned char code    jin[128]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0x7C,0x3C,0x7C,0xF8,0xE0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x20,0x60,0x70,0x78,0x38,0x3C,0x7E,0x6F,0x67,0x67,0x63,0x61,0xE0,0xE0,0xE0,0xE0,0x61,0x63,0x63,0x67,0x6F,0x7E,0x7E,0x1C,0x3C,0x38,0x78,0x78,0x10,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0xD8,0xD8,0xD8,0x98,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x18,0x18,0x38,0xF8,0xD8,0xD8,0xD8,0x18,0x18,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x31,0x37,0x37,0x33,0x32,0x30,0x3F,0x3F,0x3F,0x3F,0x30,0x38,0x3F,0x3F,0x3F,0x33,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00};/*"金",0*/
/* (32 X 32 , 黑体, 加粗 )*/
uchar code    se[128]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xFC,0xFC,0xF8,0xC8,0xC8,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x10,0x30,0x38,0x3C,0xFE,0xFF,0xFF,0xF7,0x33,0x30,0x30,0x30,0x30,0xF0,0xF0,0xF8,0xFE,0x3F,0x3F,0x33,0x31,0x30,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1C,0x1C,0x1C,0x1C,0x1C,0x1F,0x1F,0x1F,0x1F,0x1C,0x1C,0x1C,0x1C,0x1C,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x3F,0x3F,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x3E,0x1E,0x0C,0x00,0x00};/*"色",1*/
/* (32 X 32 , 黑体, 加粗 )*/
uchar code    tong[128]=
{0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x60,0x68,0x7C,0x7C,0x7C,0x60,0x60,0xE0,0xE0,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x04,0x04,0xE4,0xE4,0xE4,0x64,0x67,0x67,0x67,0x67,0x64,0xE4,0xE4,0xE4,0x64,0x67,0x67,0x67,0x65,0x64,0xE4,0xE4,0xE4,0x04,0x04,0x04,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x32,0x32,0x32,0x32,0x32,0x32,0xFF,0xFF,0xFF,0x32,0x32,0x32,0x32,0x32,0x32,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x30,0x30,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x30,0x30,0x00,0x00};/*"童",2*/
/* (32 X 32 , 黑体, 加粗 )*/
uchar code    nian[128]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFC,0xFC,0x98,0x88,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,
0x00,0x00,0x20,0x30,0x78,0x7C,0x3F,0xDF,0xCF,0xC3,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xFF,0xFF,0xFF,0xFF,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0xC1,0x01,0x00,0x00,0x00,
0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*"年",3*/
/* (32 X 32 , 黑体, 加粗 )*/
void hz_display16(unsigned char pag, unsigned char col, unsigned char code *hzk)
{
        uchar j=0;
        uchar i=0;
        for(j=0;j<4;j++)                          //这里写四页
        {
                write_command(0xb8+pag+j);          //page在这里就是从page表示的这页开始写起。
                write_command(0x40+col);          //从列为col表示的列开始
                for(i=0;i<32;i++)                           //这里写32列
                write_data(hzk[32*j+i]);        //J为页,I,为第J行第I个数
        }
}
void main()
{
lcdinit();
clearScreen(  );
   
while(1)
{
  delay(2);
// hz_display16(0,0,xms[]);
   cs1=1;
    cs2=0;
  hz_display16(0,0,jin);
  hz_display16(0,32,se);
  cs1=0;cs2=1;
hz_display16(0,0,tong);
hz_display16(0,32,nian);
}
}
这个是显示32*32字的,金色童年
回复

使用道具 举报

7#
ID:87312 发表于 2015-8-1 08:33 | 只看该作者
qhdfnftyzt 发表于 2015-7-31 21:17
#include
#include"intrins.h"
#define  uchar unsigned char

我在网上搜了一些程序例子,发现有些程序都有cs1和cs3这两个片选端口,但是我的12864上面没有cs1和cs2这2个端口,只有psb这个串并行选择端口,这是为什么?难道是12864有很多不同的型号!
回复

使用道具 举报

8#
ID:85129 发表于 2015-8-2 09:04 | 只看该作者
ice51 发表于 2015-8-1 08:33
我在网上搜了一些程序例子,发现有些程序都有cs1和cs3这两个片选端口,但是我的12864上面没有cs1和cs2这2 ...

这个其实你可以上网查一下,我了解的是因为有两种不同芯片的12864的屏,一种是KS0108芯片的,其中有片选CS1和CS2,它没有内置字库,需要取模,另外一种是ST7920,它是 只有PSB这个串行并行选择端口,它有字库,一般不需要取模了。
回复

使用道具 举报

9#
ID:7485 发表于 2015-8-6 20:51 | 只看该作者
使用KS0108芯片的实际上每一片控制64*64的区域,如果是2片组合,就是128*64,三片组合就是192*64 。
CS1和CS2就是选择这2片或3片的。这样的LCD都是不带字库的。
回复

使用道具 举报

10#
ID:87312 发表于 2015-8-7 08:28 | 只看该作者
ahshmj 发表于 2015-8-6 20:51
使用KS0108芯片的实际上每一片控制64*64的区域,如果是2片组合,就是128*64,三片组合就是192*64 。
CS1和 ...

谢谢你的解答!
回复

使用道具 举报

11#
ID:90563 发表于 2015-9-25 09:50 | 只看该作者
zhou961291176 发表于 2015-7-31 14:41
汉字一般12*12分辨率已经很低了,不过还是能看,但是笔画多的就不一定了,建议最小12*12,,自己取模,写个 ...

请问你是在哪里买的无字库的12864?我买不到,都是带字库的,贵的死
回复

使用道具 举报

12#
ID:91070 发表于 2015-9-25 21:34 | 只看该作者
自带字库文字大小不可以改变,除非自己取模
回复

使用道具 举报

13#
ID:184706 发表于 2018-6-25 11:27 | 只看该作者
程序很不错  谢谢解答楼主的那位高手
回复

使用道具 举报

14#
ID:241249 发表于 2018-8-29 20:55 | 只看该作者
字库好麻烦
回复

使用道具 举报

15#
ID:391411 发表于 2018-8-29 23:46 | 只看该作者
这个还得自己写需要大小的字库,用软件生成吧。上网搜有很多

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

16#
ID:7485 发表于 2018-8-30 09:39 | 只看该作者

软字库本身并不麻烦。但是要生成国标二级字库,容量在255k左右,一般需要外挂EEPROM,或flash芯片。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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