找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 24309|回復: 15
打印 上一主題 下一主題
收起左側

怎么在12864液晶上顯示任意大小漢字

  [復制鏈接]
跳轉到指定樓層
樓主
ID:87312 發(fā)表于 2015-7-31 09:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
怎么在12864液晶上顯示任意大小漢字
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:7485 發(fā)表于 2015-7-31 12:50 | 只看該作者
本帖最后由 ahshmj 于 2015-7-31 12:53 編輯

自帶字庫的字就是16*16點陣的漢字(全角字符),或8*16(半角字符,數(shù)字或字母),只能是這樣。但是你可以使用圖形模式用自己的字模。
你做成的字模是多大顯示就是多大。小于16*16的不好看,大于32*32的顯示的字又太少。
不帶字庫的,要顯示漢字或字母當然要制作字模。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:86389 發(fā)表于 2015-7-31 14:41 | 只看該作者
漢字一般12*12分辨率已經(jīng)很低了,不過還是能看,但是筆畫多的就不一定了,建議最小12*12,,自己取模,寫個顯示函數(shù)。我一般是用無字庫的cog,價格很便宜,幾塊錢到十幾塊一大把。一般采用16*16,那就可以直接用字庫的了

評分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:87312 發(fā)表于 2015-7-31 15:15 | 只看該作者
ahshmj 發(fā)表于 2015-7-31 12:50
自帶字庫的字就是16*16點陣的漢字(全角字符),或8*16(半角字符,數(shù)字或字母),只能是這樣。但是你可以 ...

可不可以發(fā)一個示例程序?
回復

使用道具 舉報

5#
ID:87312 發(fā)表于 2015-7-31 15:17 | 只看該作者
zhou961291176 發(fā)表于 2015-7-31 14:41
漢字一般12*12分辨率已經(jīng)很低了,不過還是能看,但是筆畫多的就不一定了,建議最小12*12,,自己取模,寫個 ...

謝謝指導!
回復

使用道具 舉報

6#
ID:85129 發(fā)表于 2015-7-31 21:17 | 只看該作者
#include <reg52.h>
#include"intrins.h"
#define  uchar unsigned char
#define  uint  unsigned  int
sbit rs =P2^0;   // //數(shù)據(jù)\//指令//選擇
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; /*根據(jù)時序圖拉低,選擇寫指令*/
rw=1; /*根據(jù)時序圖拉低,選擇寫模式*/
do
{
en=1; /*使能,使液晶輸出信號,檢查是否忙*/
_nop_();_nop_();_nop_();_nop_();/*延時4US*/
lcd=P0; /*把P0口的狀態(tài)值讀回來給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個數(shù)
        }
}
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 發(fā)表于 2015-8-1 08:33 | 只看該作者
qhdfnftyzt 發(fā)表于 2015-7-31 21:17
#include
#include"intrins.h"
#define  uchar unsigned char

我在網(wǎng)上搜了一些程序例子,發(fā)現(xiàn)有些程序都有cs1和cs3這兩個片選端口,但是我的12864上面沒有cs1和cs2這2個端口,只有psb這個串并行選擇端口,這是為什么?難道是12864有很多不同的型號!
回復

使用道具 舉報

8#
ID:85129 發(fā)表于 2015-8-2 09:04 | 只看該作者
ice51 發(fā)表于 2015-8-1 08:33
我在網(wǎng)上搜了一些程序例子,發(fā)現(xiàn)有些程序都有cs1和cs3這兩個片選端口,但是我的12864上面沒有cs1和cs2這2 ...

這個其實你可以上網(wǎng)查一下,我了解的是因為有兩種不同芯片的12864的屏,一種是KS0108芯片的,其中有片選CS1和CS2,它沒有內(nèi)置字庫,需要取模,另外一種是ST7920,它是 只有PSB這個串行并行選擇端口,它有字庫,一般不需要取模了。
回復

使用道具 舉報

9#
ID:7485 發(fā)表于 2015-8-6 20:51 | 只看該作者
使用KS0108芯片的實際上每一片控制64*64的區(qū)域,如果是2片組合,就是128*64,三片組合就是192*64 。
CS1和CS2就是選擇這2片或3片的。這樣的LCD都是不帶字庫的。
回復

使用道具 舉報

10#
ID:87312 發(fā)表于 2015-8-7 08:28 | 只看該作者
ahshmj 發(fā)表于 2015-8-6 20:51
使用KS0108芯片的實際上每一片控制64*64的區(qū)域,如果是2片組合,就是128*64,三片組合就是192*64 。
CS1和 ...

謝謝你的解答!
回復

使用道具 舉報

11#
ID:90563 發(fā)表于 2015-9-25 09:50 | 只看該作者
zhou961291176 發(fā)表于 2015-7-31 14:41
漢字一般12*12分辨率已經(jīng)很低了,不過還是能看,但是筆畫多的就不一定了,建議最小12*12,,自己取模,寫個 ...

請問你是在哪里買的無字庫的12864?我買不到,都是帶字庫的,貴的死
回復

使用道具 舉報

12#
ID:91070 發(fā)表于 2015-9-25 21:34 | 只看該作者
自帶字庫文字大小不可以改變,除非自己取模
回復

使用道具 舉報

13#
ID:184706 發(fā)表于 2018-6-25 11:27 | 只看該作者
程序很不錯  謝謝解答樓主的那位高手
回復

使用道具 舉報

14#
ID:241249 發(fā)表于 2018-8-29 20:55 | 只看該作者
字庫好麻煩
回復

使用道具 舉報

15#
ID:391411 發(fā)表于 2018-8-29 23:46 | 只看該作者
這個還得自己寫需要大小的字庫,用軟件生成吧。上網(wǎng)搜有很多

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

16#
ID:7485 發(fā)表于 2018-8-30 09:39 | 只看該作者

軟字庫本身并不麻煩。但是要生成國標二級字庫,容量在255k左右,一般需要外掛EEPROM,或flash芯片。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表