极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 47518|回复: 20

arduino笔记-----诺基亚5110显示汉字

[复制链接]
发表于 2012-7-12 15:11:08 | 显示全部楼层 |阅读模式
第一次发帖,今天在论坛上看到各位发的5110显示英文字符的贴,学习了一下,看到没有显示汉字的,顺便整了一个,和大家交流学习下,不好的地方还请大家多多指教。
  1. //端口定义

  2. int LCD_CE=2;
  3. int LCD_RST=3;
  4. int SCLK=4;
  5. int SDIN=5;
  6. int LCD_DC=6;

  7. //****************************定义ASCII字符**********************//

  8. /**********************************
  9. 6 x 8 font
  10. 1 pixel space at left and bottom
  11. index = ASCII - 32
  12. ***********************************/
  13. const unsigned char font6x8[][6] =
  14. {
  15.     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
  16.     { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
  17.     { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
  18.     { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
  19.     { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
  20.     { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
  21.     { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
  22.     { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
  23.     { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
  24.     { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
  25.     { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
  26.     { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
  27.     { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
  28.     { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
  29.     { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
  30.     { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
  31.     { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
  32.     { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
  33.     { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
  34.     { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
  35.     { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
  36.     { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
  37.     { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
  38.     { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
  39.     { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
  40.     { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
  41.     { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
  42.     { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
  43.     { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
  44.     { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
  45.     { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
  46.     { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
  47.     { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
  48.     { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
  49.     { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
  50.     { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
  51.     { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
  52.     { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
  53.     { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
  54.     { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
  55.     { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
  56.     { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
  57.     { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
  58.     { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
  59.     { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
  60.     { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
  61.     { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
  62.     { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
  63.     { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
  64.     { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
  65.     { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
  66.     { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
  67.     { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
  68.     { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
  69.     { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
  70.     { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
  71.     { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
  72.     { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
  73.     { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
  74.     { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
  75.     { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
  76.     { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
  77.     { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
  78.     { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
  79.     { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
  80.     { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
  81.     { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
  82.     { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
  83.     { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
  84.     { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
  85.     { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
  86.     { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
  87.     { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
  88.     { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
  89.     { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
  90.     { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
  91.     { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
  92.     { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
  93.     { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
  94.     { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
  95.     { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
  96.     { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
  97.     { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
  98.     { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
  99.     { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
  100.     { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
  101.     { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
  102.     { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
  103.     { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
  104.     { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
  105.     { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
  106.     { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines
  107. };
  108. static const byte hanzi12x16[][24]={
  109. {0x88,0x68,0xFF,0x48,0x02,0xFE,0x82,0x02,0x32,0x2E,0xE0,0x00,0x00,0x00,0x0F,0x08,
  110. 0x06,0x01,0x08,0x05,0x02,0x05,0x08,0x00}//80 极
  111. ,{0x86,0xA2,0x92,0xAE,0x4A,0x4B,0x4A,0xAA,0x9A,0x82,0x86,0x00,0x00,0x00,0x0F,0x05,
  112. 0x05,0x05,0x05,0x05,0x0F,0x00,0x00,0x00}//81 客
  113. ,{0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x00,0x00,0x08,0x08,0x08,0x08,
  114. 0x08,0x0F,0x08,0x08,0x08,0x08,0x08,0x00}//82 工
  115. ,{0x10,0x10,0xFF,0x10,0x04,0x04,0xFD,0x26,0x24,0x24,0xE4,0x00,0x04,0x04,0x03,0x02,
  116. 0x08,0x06,0x01,0x00,0x08,0x08,0x07,0x00} //83 坊
  117. };

  118. /************************LCD初始化函数********************************/  
  119. void LCD_init(void)
  120. {
  121.     //先设置为输出
  122.      pinMode(SCLK,OUTPUT);
  123.      pinMode(SDIN,OUTPUT);
  124.      pinMode(LCD_DC,OUTPUT);
  125.      pinMode(LCD_CE,OUTPUT);
  126.      pinMode(LCD_RST,OUTPUT);

  127.     // 产生一个让LCD复位的低电平脉冲
  128.      digitalWrite( LCD_RST, LOW);

  129.      delayMicroseconds(1);
  130.      digitalWrite( LCD_RST, HIGH);

  131.     // 关闭LCD
  132.      digitalWrite( LCD_CE, LOW);
  133.      delayMicroseconds(1);

  134.     // 使能LCD
  135.      digitalWrite( LCD_CE, HIGH); //LCD_CE = 1;
  136.      delayMicroseconds(1);
  137.     LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
  138.     LCD_write_byte(0xc8, 0); // 设置偏置电压
  139.     LCD_write_byte(0x06, 0); // 温度校正
  140.     LCD_write_byte(0x13, 0); // 1:48
  141.     LCD_write_byte(0x20, 0); // 使用基本命令
  142.     LCD_clear();             // 清屏
  143.     LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示

  144.     // 关闭LCD
  145.    digitalWrite( LCD_CE, LOW);  //LCD_CE = 0;
  146. }
  147. /************************LCD清屏函数*******************************/
  148. void LCD_clear(void)
  149. {
  150.     unsigned int i;
  151.     LCD_write_byte(0x0c, 0);  
  152.     LCD_write_byte(0x80, 0);
  153.     for (i=0; i<504; i++)
  154.       {
  155.         LCD_write_byte(0, 1);
  156.       }   
  157. }
  158. /*************************设置字符位置函数**************************/
  159. void LCD_set_XY(unsigned char X, unsigned char Y)
  160. {
  161.     LCD_write_byte(0x40 | Y, 0);// column
  162.     LCD_write_byte(0x80 | X, 0);// row
  163. }
  164. /*************************ASCII字符显示函数*************************/
  165. void LCD_write_char(unsigned char c)
  166. {
  167.     unsigned char line;
  168.     c -= 32;
  169.     for (line=0; line<6; line++)
  170.     {
  171.         LCD_write_byte(font6x8[c][line], 1);
  172.     }
  173. }
  174. /*******************************************************************/
  175. /*-------------------------------------------------
  176. LCD_write_english_String  : 英文字符串显示函数
  177. 输入参数:*s      :英文字符串指针;
  178.           X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
  179. --------------------------------------------------*/
  180. void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
  181. {
  182.     LCD_set_XY(X,Y);
  183.     while (*s)  
  184.     {
  185.      LCD_write_char(*s);
  186.      s++;
  187.     }
  188. }
  189. /******************************************************************/
  190. /*---------------------------------------------
  191. LCD_write_byte    : 写数据到LCD
  192. 输入参数:data    :写入的数据;
  193.           command :写数据/命令选择;
  194. ---------------------------------------------*/
  195. void LCD_write_byte(unsigned char dat, unsigned char command)
  196. {
  197.     unsigned char i;
  198.    digitalWrite( LCD_CE, LOW); // 使能LCD_CE = 0
  199.     if (command == 0)
  200.     {
  201.      digitalWrite( LCD_DC, LOW);// 传送命令 LCD_DC = 0;
  202.     }
  203.     else
  204.     {
  205.       digitalWrite( LCD_DC, HIGH);// 传送数据LCD_DC = 1;
  206.     }

  207.   for(i=0;i<8;i++)
  208.   {
  209.      if(dat&0x80)
  210.      {
  211.         digitalWrite( SDIN, HIGH);//SDIN = 1;
  212.      }
  213.     else
  214.     {
  215.      digitalWrite( SDIN, LOW);//SDIN = 0;
  216.      }
  217.    digitalWrite( SCLK, LOW);//SCLK = 0;
  218.    dat = dat << 1;
  219.    digitalWrite( SCLK, HIGH);//SCLK = 1;
  220.   }
  221.     digitalWrite( LCD_CE, HIGH);//LCD_CE = 1;

  222. }
  223. /******************************************************************/
  224. /*---------------------------------------------
  225. void LCD_write_hanzi  : 汉字显示子函数
  226. 输入参数:row :写入汉字列 page :写入汉字行 row :写入汉字   ;
  227. ---------------------------------------------*/  
  228. void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char dd) //row:列 page:页 dd:字符
  229. {
  230.         unsigned char i;         
  231.         LCD_set_XY(row*8, page);// 列,页
  232.         for(i=0; i<12;i++)
  233.         {
  234.                 LCD_write_byte(hanzi12x16[dd][i],1);
  235.         }
  236.        
  237.     LCD_set_XY(row*8, page+1);// 列,页
  238.         for(i=12; i<24;i++)
  239.         {
  240.                 LCD_write_byte(hanzi12x16[dd][i],1);
  241.         }       
  242. }

  243. void setup()
  244. {
  245.   LCD_init();//初始化液晶     
  246.   LCD_clear();
  247.   delay(10) ;
  248. }
  249. void loop()
  250. {
  251.   LCD_write_hanzi(2,0,0) ;
  252.   LCD_write_hanzi(4,0,1) ;
  253.   LCD_write_hanzi(6,0,2) ;
  254.   LCD_write_hanzi(8,0,3) ;
  255.   delay(1000) ;
  256. }
复制代码

评分

参与人数 1 +2 收起 理由
幻生幻灭 + 2 鼓励新人贴,期待更新,增加点图片和视频最.

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-7-12 15:12:10 | 显示全部楼层
第一次发帖,比较粗糙,沙发自己坐了吧
回复 支持 反对

使用道具 举报

发表于 2012-7-12 15:34:16 | 显示全部楼层
这显示屏不能直接显示数字符号字母?
回复 支持 反对

使用道具 举报

发表于 2012-7-12 15:48:26 | 显示全部楼层
pww999 发表于 2012-7-12 15:34
这显示屏不能直接显示数字符号字母?

肯定可以显示数字和字符了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-12 16:28:19 | 显示全部楼层
pww999 发表于 2012-7-12 15:34
这显示屏不能直接显示数字符号字母?

你说的直接是怎么个直接法?
回复 支持 反对

使用道具 举报

发表于 2012-7-12 17:21:09 | 显示全部楼层
const unsigned char font6x8[][6] = {
......
要//****************************定义ASCII字符**********************//??
不能象lcd1602
直接显示啊?
lcd.setCursor(0,1);
  lcd.print("LOW");
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-12 18:41:45 | 显示全部楼层
pww999 发表于 2012-7-12 17:21
const unsigned char font6x8[][6] = {
......
要//****************************定义ASCII字符******** ...

好像是的。
回复 支持 反对

使用道具 举报

发表于 2012-7-12 19:07:19 | 显示全部楼层
玩的高端,。。。。。。
回复 支持 反对

使用道具 举报

发表于 2012-7-12 21:57:56 | 显示全部楼层
N5110 LCD 是84*48点
一般网上资料都是3列汉字 12*16
但印象中似乎有可显示4列汉字的方法 12*12
向各位求教了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-13 14:05:55 | 显示全部楼层
picfan 发表于 2012-7-12 21:57
N5110 LCD 是84*48点
一般网上资料都是3列汉字 12*16
但印象中似乎有可显示4列汉字的方法 12*12

这个估计要看你的取模软件能不能取出12*12的字模。
回复 支持 反对

使用道具 举报

发表于 2013-4-21 12:13:55 | 显示全部楼层
夏异 发表于 2012-7-13 14:05
这个估计要看你的取模软件能不能取出12*12的字模。

请问取模软件怎么用,新手用不来
回复 支持 反对

使用道具 举报

发表于 2013-4-25 15:11:16 | 显示全部楼层
这个好。。。。
回复 支持 反对

使用道具 举报

发表于 2014-7-7 13:24:43 | 显示全部楼层
刚买了个5110,来试试
回复 支持 反对

使用道具 举报

发表于 2014-7-7 13:50:16 | 显示全部楼层
picfan 发表于 2012-7-12 21:57
N5110 LCD 是84*48点
一般网上资料都是3列汉字 12*16
但印象中似乎有可显示4列汉字的方法 12*12

12*12,是把第二行开始的汉字,拆开为2组数据来写。第一行的12余下4空的,那就把第二组的前4写到第一行去,下边第三方依次往上挤
回复 支持 反对

使用道具 举报

发表于 2014-11-11 19:47:47 | 显示全部楼层
想按照楼主这个代码改成自己的汉字,可是取模软件什么的都是12*12,16*16什么的,怎么才能取到12*16的汉字呢?
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 12:37 , Processed in 0.044541 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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