[菜农助学交流] 【第四批】入门笔记第二帖—LCD显示

[复制链接]
3301|9
 楼主| zxcscm 发表于 2012-1-31 22:30 | 显示全部楼层 |阅读模式
新年新气象,决定全力学习菜农的助学板,那么首先得给助学板做个人机界面。串口显示不可行,俺的电脑没串口(都怪俺当初配电脑是不懂啥是单片机),用USB转的虚拟串口,连接STC的单片机没问题,可是死活连不上菜农的助学板,无奈,只好另想其他方法。尝试用已有的四位数码管,可接口与助学板不好直接配对,需用杜邦线,显得太乱。翻箱倒柜,找出一块LCD液晶屏,是诺基亚511048*84的,大小正合适,于是想办法点亮它。

该屏总共8个引脚,自左至有分别是:VCCGNDSCERESDCSDINSCLKBackLED
首先是电源问题:助学板引出的电源VBUS5V的,而LCDVCC=3.3V,园地里有位网友用M0的引脚作为LCD的地,受之启发,用M0GPC6GPC7分别作为LCD屏的电源和地。

接下来开始改造程序,在原单片机的程序上更改端口和驱动方式后直接移植,尝试若干次后,LCD屏顺利点亮!

  1. #include "NUC1xx.h"
  2. #include "DrvGPIO.h"
  3. #include "DrvSYS.h"
  4. #include "DrvTIMER.h"
  5. #include "LCD4884.h"
  6. //---------------------------------------
  7. //函数名称: LCD_init
  8. //函数功能:5110LCD初始化函数
  9. //输    入:无
  10. //输    出:无
  11. //作    者:zxcscm
  12. //日期版本:20120131-01  
  13. //-----------------------------------------
  14. void LCD_init(void)
  15. {
  16. unsigned char k;
  17. CLR_RES;               //LCD复位
  18. for(k=0;k<250;k++);
  19. SET_RES;         
  20.     LCD_write_byte(0x21,0);//LCD功能设置:芯片活动,水平寻址,使用扩展指令
  21. LCD_write_byte(0xd0,0);//设置VOP值,室温下的编程范围为3.00-10.68
  22. //Vlcd=3.06+(VOP)*0.06,本例VOP为0B0101 0000为十进制的80,Vlcd=7.86V
  23. LCD_write_byte(0x20,0);//LCD功能设置:芯片活动,水平寻址,使用基本指令
  24. LCD_write_byte(0x0C,0);//设定显示配置:普通模式
  25. }
  26. //---------------------------------------
  27. //函数名称: LCD_clear
  28. //函数功能:LCD清屏函数
  29. //输    入:无
  30. //输    出:无
  31. //作    者:zxcscm
  32. //日期版本:20120131-01  
  33. //-----------------------------------------
  34. void LCD_clear(void)
  35. {
  36. unsigned char t;
  37. unsigned char k;   
  38. for(t=0;t<6;t++)
  39. {
  40.   for(k=0;k<84;k++)
  41.   {
  42.    LCD_write_byte(0,1);   
  43.   }
  44. }
  45. }
  46. //---------------------------------------
  47. //函数名称: LCD_write_byte
  48. //函数功能:使用SPI接口写数据到LCD
  49. //输    入:dat:写入的数据 command: 1-数据/0-命令
  50. //输    出:无
  51. //作    者:zxcscm
  52. //日期版本:20120131-01  
  53. //-----------------------------------------
  54. void LCD_write_byte(unsigned char dat, unsigned char command)
  55. {
  56. unsigned char i;
  57. CLR_SCE;              //使能LCD
  58.     if(command==1)
  59.         DATE_DC;           //DC=1写数据
  60.     else
  61.         COMMEND_DC;           //DC=0写指令
  62. for(i=0;i<8;i++)
  63. {
  64.   if(dat&(0x80>>i))
  65.    SET_SDIN;     //写1
  66.   else
  67.    CLR_SDIN;       //写0
  68.   CLR_SCLK;
  69.         SET_SCLK;        //时钟上升沿写入数据到LCD

  70. }
  71. DATE_DC;
  72. SET_SCE;
  73. SET_SDIN;
  74. }
  75. //---------------------------------------
  76. //函数名称: LCD_write_char
  77. //函数功能:显示英文字符
  78. //输    入:c:显示的字符在font6x8表格中的位置
  79. //输    出:无
  80. //作    者:zxcscm
  81. //日期版本:20120131-01  
  82. //-----------------------------------------   
  83. void LCD_write_char(unsigned char c)
  84. {
  85. unsigned char line;
  86. c-= 32;
  87. for (line=0; line<6; line++)
  88. LCD_write_byte(font6x8[c][line], 1);
  89. }
  90. //---------------------------------------
  91. //函数名称: LCD_set_XY
  92. //函数功能:设置坐标函数
  93. //输    入:X:0-83 Y:0-5
  94. //输    出:无
  95. //作    者:zxcscm
  96. //日期版本:20120131-01  
  97. //-----------------------------------------   
  98. void LCD_set_XY(unsigned char X, unsigned char Y)
  99. {
  100. LCD_write_byte(0x40 | Y, 0);
  101. LCD_write_byte(0x80 | X, 0);
  102. }
  103. //---------------------------------------
  104. //函数名称: LCD_write_String
  105. //函数功能:显示英文字符串
  106. //输    入:XY:设置坐标(X:0-83 Y:0-5) *s:英文字符串指针(带双引号的英文字符串)
  107. //输    出:无
  108. //作    者:zxcscm
  109. //日期版本:20120131-01  
  110. //-----------------------------------------
  111. void LCD_write_String(unsigned char X,unsigned char Y,char *s)
  112. {
  113. LCD_set_XY(X,Y);
  114. while (*s)
  115. {
  116.   LCD_write_char(*s);
  117.   s++;
  118. }
  119. }
  120. //---------------------------------------
  121. //函数名称: LCD_Disp16_16
  122. //函数功能:写一个16*16的汉字到LCD
  123. //输    入:x,y:写入汉字的地址 index: 写入汉字在han表格中的位置
  124. //输    出:无
  125. //作    者:zxcscm
  126. //日期版本:20120131-01
  127. //---------------------------------------  
  128. void LCD_Disp16_16(unsigned char x,unsigned char y,unsigned char index)
  129. {
  130. unsigned char c;
  131. LCD_set_XY(x*8, y);
  132. for(c=0;c<16;c++)
  133. {   
  134.   LCD_write_byte(han[index*32+c],1);
  135. }
  136.     LCD_set_XY(x*8, y+1);
  137. for(c=16;c<32;c++)
  138. {   
  139.   LCD_write_byte(han[index*32+c],1);
  140. }
  141. }
  142. void GPIOInit()
  143. {
  144.     DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );//设置GPA.2~GPA.9为输出模式
  145.     DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
  146.     DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
  147.     DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );
  148.     DrvGPIO_Open( E_GPA, 6, E_IO_OUTPUT );
  149.     DrvGPIO_Open( E_GPA, 7, E_IO_OUTPUT );
  150.     DrvGPIO_Open( E_GPA, 8, E_IO_INPUT );
  151.     DrvGPIO_Open( E_GPA, 9, E_IO_INPUT );
  152.     DrvGPIO_Open( E_GPC,14, E_IO_OUTPUT );//设置GPC为输出模式
  153.     DrvGPIO_Open( E_GPC,15, E_IO_OUTPUT );
  154.     DrvGPIO_Open( E_GPC, 6, E_IO_OUTPUT );
  155.     DrvGPIO_Open( E_GPC, 7, E_IO_OUTPUT );
  156. }

  157. int main()
  158. {
  159. GPIOInit();
  160.     DrvGPIO_SetBit(E_GPC, 6);//作为LCD的电源
  161.     DrvGPIO_ClrBit(E_GPC, 7);//作为LCD的地
  162. LCD_init();   //初始化LCD模块
  163. LCD_clear();   //清屏幕
  164.       
  165. LCD_Disp16_16(0,0,0); //菜
  166. LCD_Disp16_16(2,0,1); //农
  167. LCD_Disp16_16(4,0,2); //助
  168. LCD_Disp16_16(6,0,3); //学
  169. LCD_Disp16_16(8,0,4); //板
  170.    
  171. LCD_Disp16_16(1,2,5); //祝
  172. LCD_Disp16_16(3,2,6); //愿
  173. LCD_Disp16_16(5,2,7); //园
  174.     LCD_Disp16_16(7,2,8); //地
  175.    
  176.     LCD_Disp16_16(0,4,9); //越
  177.     LCD_Disp16_16(2,4,10); //来
  178.     LCD_Disp16_16(4,4,11); //越
  179.     LCD_Disp16_16(6,4,12); //红
  180.     LCD_Disp16_16(8,4,13); //火

  181. SET_BackLed;   //开背光
  182. while(1)
  183. {
  184.      ;
  185. }
  186. }



附艳照






完整工程



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
hotpower 发表于 2012-1-31 22:37 | 显示全部楼层
很好!
adampan 发表于 2012-1-31 23:30 | 显示全部楼层
我也正想弄个小液晶显示,,先学习了
adampan 发表于 2012-2-1 09:48 | 显示全部楼层
楼上这位,,,算是广告么。。。汗。。。。
lixiaoxu2meng 发表于 2012-2-1 09:53 | 显示全部楼层
 楼主| zxcscm 发表于 2012-2-1 10:31 | 显示全部楼层
汗,广告跑这儿了
outstanding 发表于 2013-8-13 10:31 | 显示全部楼层
ceflsh 发表于 2013-8-15 20:09 | 显示全部楼层
开眼界,谢谢楼主。
newsoule 发表于 2013-8-17 15:03 | 显示全部楼层
谢谢分享,很有帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

628

帖子

1

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