基于LPC824 lite开发板的串口TFT屏显示

[复制链接]
 楼主| jinglixixi 发表于 2016-11-26 11:14 | 显示全部楼层 |阅读模式
对于LPC824 lite这款以取代单片机为目标的产品,不为它配上个TFT彩色显示屏也难展其英雄本色。可面对32KB的程序存储空间,要不借助辅助的存储空间的帮助,要想实现图像显示也实在是个难题。那首先就上TFT显示屏亮起来吧,面对LPC824的小身子板,可不能盲目地选TFT显示屏,为了节省GPIO资源这里选的是TFT串口显示屏,其显示效果如图1所示。
图片1.png
             图1  TFT串口屏显示效果
选好显示屏,下面的问题是如何来进行连接,因为板上GPIO资源基本上已被瓜分殆尽了。这里采用如下的连接方式,即:
REST --P0.20    DC --P0.21   CS --P0.22   SDI --P0.25   SCK --P0.24
    为此,相应相关引脚输出高低电平的定义语句如下:
  1. #define LCD_SCK_High()     GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 24, 1 );
  2. #define LCD_SCK_Low()           GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 24, 0 );  
  3. #define LCD_SDI_High()      GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 25, 1 );
  4. #define LCD_SDI_Low()      GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 25, 0 );  
  5. #define LCD_CS_High()      GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 22, 1 );
  6. #define LCD_CS_Low()           GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 22, 0 );
  7. #define LCD_DC_High()      GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 21, 1 );
  8. #define LCD_DC_Low()             GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 21, 0 );
  9. #define LCD_REST_High()            GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 20, 1 );
  10. #define LCD_REST_Low()     GPIOSetBitValue(LPC_GPIO_PORT->PIN0, 20, 0 );
在自定义小字库的情况下,实现32*32点阵汉字显示的函数为:
  1. void showhanzi32(unsigned int x,unsigned int y,unsigned char index)       
  2. {  
  3.         unsigned char i,j,k;
  4.         const unsigned char *temp=hanzi32;   
  5.         temp+=index*128;       
  6.         for(j=0;j<32;j++)
  7.         {
  8.                 LCD_SetCursor(x,y+j);
  9.                 LCD_WriteRAM_Prepare();       
  10.                 for(k=0;k<4;k++)
  11.                 {
  12.                         for(i=0;i<8;i++)
  13.                         {                      
  14.                                  if((*temp&(1<<i))!=0)
  15.                                 {
  16.                                         LCD_WR_DATA(POINT_COLOR);
  17.                                 }
  18.                                 else
  19.                                 {
  20.                                         LCD_WR_DATA(BACK_COLOR);
  21.                                 }   
  22.                         }
  23.                         temp++;
  24.                 }
  25.          }
  26. }
而对应的字库结构则为:
  1. unsigned char hanzi32[]=
  2. {
  3. //心
  4. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  5. 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00,
  6. 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0c, 0x06, 0x00, 0x00, 0x1c, 0x02, 0x00,
  7. 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x40, 0x0c, 0x00, 0x02, 0x40, 0x0c, 0x00, 0x06,
  8. 0x60, 0x0c, 0x00, 0x0c, 0x60, 0x0c, 0x00, 0x1c, 0x60, 0x0c, 0x00, 0x18, 0x70, 0x0c, 0x00, 0x38,
  9. 0x38, 0x0c, 0x80, 0x38, 0x3c, 0x0c, 0x80, 0x10, 0x00, 0x0c, 0x80, 0x00, 0x00, 0x0c, 0x80, 0x00,
  10. 0x00, 0x0c, 0x80, 0x00, 0x00, 0x0c, 0x80, 0x00, 0x00, 0x0c, 0xc0, 0x01, 0x00, 0xf8, 0xff, 0x01,
  11. 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  12. //率
  13. ......
  14. }
那在LPC824 lite开发板上能否实现图片显示呢?
答案是可以的,但图片不能过大,其效果如图2所示。
如果图片较大又如何处理呢?目标是板上的4MBSPI FLASH!但要将大图片查分成小若干片,再分批倒到SPI FLASH中,以供读取使用。
以显示40*40像素的16位色图片为例,其显示程序为:
  1. void showimage(unsigned int x,unsigned int y)
  2. {   // 显示40*40像素图片
  3.         unsigned int i,j,k;
  4.         unsigned int da;
  5.         k=0;
  6.         for(i=0;i<40;i++)         
  7.         {       
  8.                 LCD_SetCursor(x,y+i);
  9.                 LCD_WriteRAM_Prepare();       
  10.                 for(j=0;j<40;j++)               
  11.                 {
  12.                         da=qqimage[k*2+1];
  13.                         da<<=8;
  14.                         da|=qqimage[k*2];
  15.                         LCD_WR_DATA(da);                                       
  16.                         k++;  
  17.                 }
  18.         }
  19. }
图片2.png
             图2 图片显示效果

songchenping 发表于 2016-11-29 09:53 | 显示全部楼层
 楼主| jinglixixi 发表于 2016-11-29 10:27 | 显示全部楼层
zhanzr21 发表于 2016-12-1 16:56 | 显示全部楼层
赞! 不错, 只是好像发错版块了.
 楼主| jinglixixi 发表于 2016-12-2 09:01 | 显示全部楼层
zhanzr21 发表于 2016-12-1 16:56
赞! 不错, 只是好像发错版块了.

哈哈,sorry!
jazzyfox 发表于 2016-12-9 09:21 | 显示全部楼层
昨天还和一个兄弟一起聊MCU,他是用nxp1778,我用的多些的是LPC1114,现在是不是要改到飞思卡尔的了,现在飞思卡尔的ARM好便宜,NXP的arm过几年要停产的好多,我是深深的记得,当年87LPC76X,我本来用的很顺手的,突然停产了,我了个去,坑死我了
 楼主| jinglixixi 发表于 2016-12-9 09:26 | 显示全部楼层
jazzyfox 发表于 2016-12-9 09:21
昨天还和一个兄弟一起聊MCU,他是用nxp1778,我用的多些的是LPC1114,现在是不是要改到飞思卡尔的了,现在 ...

但据说,它要取代单片机。
jazzyfox 发表于 2016-12-9 09:33 | 显示全部楼层
jinglixixi 发表于 2016-12-9 09:26
但据说,它要取代单片机。

说实话,单片机这东西,流行趋势,51,--pic---avr---msp430---ARM,至少我经历的是如此,现在的东西变化太快,当年用51发财的那帮人,用了20年,现在这些东西几年就不流行了,有更好的骗子替代了,做电工好苦逼啊,做个机械设计,三维的UG,proe,CATIA什么会了就OK了,就是个升级换代,我们是换系统,真是坑啊
 楼主| jinglixixi 发表于 2016-12-9 11:25 | 显示全部楼层
jazzyfox 发表于 2016-12-9 09:33
说实话,单片机这东西,流行趋势,51,--pic---avr---msp430---ARM,至少我经历的是如此,现在的东西变化 ...

同感!!!我只走了2步,51-ARM稍省了点气力,现在又在补ARDUINO、派、FPGA等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2933

帖子

39

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

518

主题

2933

帖子

39

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