[创客交流] 基于纳瓦特MCU+LCD5110显示模块

[复制链接]
 楼主| jinglixixi 发表于 2018-7-1 09:34 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2018-7-1 09:37 编辑

     LCD5110液晶屏最早是用于手机上,相对于数码管来讲它比较省电且显示的信息量更多。在配置字库的情况下,可以显示字符、数字及中文等。同NV32F100开发板相配合是一种不错的显示方案,其显示效果如图所示。
IMG_20180701_091714_HDR.jpg

LCD5110与NV32F100的连接情况如下:
  VCC --  3.3v
  GND --  GND
  SCE --  PD1
  RES --  PH1
  D/C --  PH0
  SDIN -- PE0
  SCLK -- PE1


实现LCD5110显示的程序代码如下:
  1. #include "common.h"
  2. #include "ics.h"
  3. #include "uart.h"
  4. #include "gpio.h"
  5. #include "sysinit.h"
  6. #include "start.h"

  7. //中文字库
  8. unsigned char chinese[][24]=
  9. {
  10. //tian?
  11. {0x20,0x22,0x22,0x22,0xA2,0x7E,0xA2,0x22,0x22,0x22,0x20,0x00,0x08,0x08,0x04,0x02,0x01,0x00,0x01,0x02,0x04,0x08,0x08,0x00},
  12. //jin?
  13. {0x22,0x44,0x00,0x08,0xAA,0xAA,0xFF,0xAA,0xAA,0xBE,0x08,0x00,0x04,0x02,0x01,0x02,0x02,0x02,0x0F,0x02,0x02,0x02,0x02,0x00},
  14. //li?
  15. {0x12,0x12,0xFE,0x12,0x3F,0xA5,0xA5,0xFF,0xA5,0xA5,0x3F,0x00,0x02,0x02,0x01,0x05,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x00},
  16. //gong?
  17. {0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x03,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00},
  18. //da?
  19. {0x08,0x08,0x08,0x08,0xC8,0x3F,0xC8,0x08,0x08,0x0C,0x08,0x00,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x00},
  20. //xue?
  21. {0x9C,0x84,0x95,0x96,0x95,0xD6,0xB4,0x94,0x87,0x94,0x8C,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00},
  22. };  

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

  119. long int delay_1us(void)
  120. {
  121.         long int count=2;
  122.         while(count--);
  123.         return 0;
  124. }

  125. void delay_ms(unsigned int nms)
  126. {         
  127.         unsigned int n,m;        
  128.         n=nms;
  129.         while(n)
  130.         {
  131.         for(m=0;m<1000;m++) delay_1us();
  132.         n--;        
  133.         }              
  134. }   
  135.                                                                                        

  136. void Delay(unsigned long count)
  137. {
  138.     while(count--);
  139. }

  140. void set_SCE(void)
  141. {
  142. GPIO_PinSet(GPIO_PTD1);
  143. }
  144. void clear_SCE(void)
  145. {
  146. GPIO_PinClear(GPIO_PTD1);
  147. }

  148. void set_RES(void)
  149. {
  150. GPIO_PinSet(GPIO_PTH1);        
  151. }
  152. void clear_RES(void)
  153. {
  154. GPIO_PinClear(GPIO_PTH1);
  155. }

  156. void set_DC(void)
  157. {
  158. GPIO_PinSet(GPIO_PTH0);      
  159. }
  160. void clear_DC(void)
  161. {
  162. GPIO_PinClear(GPIO_PTH0);
  163. }


  164. void set_SDIN(void)
  165. {
  166. GPIO_PinSet(GPIO_PTE0);        
  167. }
  168. void clear_SDIN(void)
  169. {
  170. GPIO_PinClear(GPIO_PTE0);        
  171. }

  172. void set_SCLK(void)
  173. {
  174. GPIO_PinSet(GPIO_PTE1);
  175. }
  176. void clear_SCLK(void)
  177. {
  178. GPIO_PinClear(GPIO_PTE1);
  179. }

  180. void LCD_write_byte(unsigned char data,unsigned char cmd)
  181. {
  182.   unsigned char i;   
  183.   clear_SCE();  
  184.   if(cmd)
  185.     set_DC();
  186.   else
  187.     clear_DC();      
  188.   for(i=0;i<8;i++)
  189.   {  
  190.     if(data&0x80)  
  191.     set_SDIN();
  192.     else
  193.       clear_SDIN();
  194.       data = data<<1;
  195.       clear_SCLK();
  196.       delay_1us();
  197.       delay_1us();
  198.       set_SCLK();   
  199.       clear_SCLK();
  200.   }   
  201. }

  202. void LCD_init(void)
  203. {
  204.   set_SCE();
  205.   set_RES();
  206.   delay_ms(20);
  207.   clear_RES();   
  208.   delay_ms(20);
  209.   set_RES();  
  210.   delay_ms(20);
  211.   LCD_write_byte(0x21,0);
  212.   LCD_write_byte(0xd0,0);
  213.   LCD_write_byte(0x20,0);
  214.   LCD_write_byte(0x0c,0);
  215.   set_SCE();
  216. }

  217. void LCD_set_XY(unsigned char X, unsigned char Y)
  218. {
  219.   LCD_write_byte(0x40 | Y, 0);
  220.   LCD_write_byte(0x80 | X, 0);
  221.   set_SCE();
  222. }

  223. void LCD_clear(void)
  224. {
  225.   unsigned char t;
  226.   unsigned char k;
  227.   LCD_set_XY(0,0);
  228.   for(t=0;t<6;t++)
  229.   {  
  230.     for(k=0;k<84;k++)
  231.     {  
  232.       LCD_write_byte(0x00,1);     
  233.     }  
  234.   }
  235.   set_SCE();
  236. }

  237. void LCD_write_char(unsigned char c)
  238. {
  239.     unsigned char c_line;
  240.     c-=32;
  241.     for (c_line=0; c_line<6; c_line++)
  242.     LCD_write_byte(font6x8[c][c_line], 1);  
  243. }

  244. void LCD_write_String(unsigned char X,unsigned char Y,char *s)
  245. {
  246.   LCD_set_XY(X,Y);
  247.   while (*s)  
  248.   {
  249.     LCD_write_char(*s);
  250.     s++;
  251.   }
  252. }

  253. void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
  254. {
  255.     LCD_set_XY(X,Y);
  256.     while (*s)
  257.     {
  258.             LCD_write_char(*s);
  259.             s++;
  260.     }
  261. }

  262. void LCD_write_hanzi(unsigned char X,unsigned char Y,char s)
  263. {        
  264.     do
  265.     {        
  266.                 char line;
  267.                 LCD_set_XY(X,Y);        
  268.                 for (line=0; line<12; line++)
  269.                 {        
  270.                         LCD_write_byte(chinese[s][line],1);
  271.                 }
  272.                 LCD_set_XY(X,Y+1);
  273.                 for (line=12; line<24; line++)
  274.                 {               
  275.                         LCD_write_byte(chinese[s][line],1);
  276.                 }
  277.      }while(0);               
  278. }

  279. int main (void)
  280. {
  281.     sysinit();
  282.     cpu_identify();
  283.     printf("\nRunning the GPIO_demo project.\n");
  284.     GPIO_Init(GPIOB, GPIO_PTE0_MASK, GPIO_PinOutput);
  285.     GPIO_Init(GPIOB, GPIO_PTE1_MASK, GPIO_PinOutput);
  286.         GPIO_Init(GPIOB, GPIO_PTH0_MASK, GPIO_PinOutput);
  287.     GPIO_Init(GPIOB, GPIO_PTH1_MASK, GPIO_PinOutput);
  288.         GPIO_Init(GPIOA, GPIO_PTD1_MASK, GPIO_PinOutput);
  289.     LCD_init();
  290.     LCD_clear();
  291.     LCD_write_english_string(10,0,"NV32F100 ");
  292.     LCD_write_english_string(10,1,"LCD5110 v1.0");
  293.     LCD_write_english_string(10,5,"2018.6.30");
  294.     LCD_write_hanzi(10,3,0);
  295.     LCD_write_hanzi (40,3,1) ;
  296.     while (1);
  297. }


123ycli 发表于 2018-7-22 22:52 | 显示全部楼层
LCD5110,这个没用过,价格贵吗?
 楼主| jinglixixi 发表于 2018-7-23 09:00 | 显示全部楼层
123ycli 发表于 2018-7-22 22:52
LCD5110,这个没用过,价格贵吗?

不太贵,淘宝搜一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

粉丝

517

主题

2932

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部