当前位置: 首页 > news >正文

S3C2440-LCD图片显示

哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2010/12/23/6093448.aspx

折腾了几日,终于可以将图片显示在LCD上了,我使用的东华的WXCAT35-TG3#001 TFT LCD。首先使用PHOTOSHOP软件将图片改成宽320,高240,注意不要反了。然后用Image2Lcd_32软件提取出数组。我选的是24位真彩。所以一个像素3个字节,显示的时候,通过位运算将3个字节合到一起,显示在一个像素上。

c4a1e878990cffd92f73b3cd IMG0190A

Image2Lcd_32的配置方法:

#include "2440addr.h" #include "picture.h" //垂直同步信号的脉宽、后肩和前肩 #define VSPW 15 #define VBPD 3 #define VFPD 5 //水平同步信号的脉宽、后肩和前肩 #define HSPW 8 #define HBPD 58 #define HFPD 15 #define CLKVAL 10 #define HOZVAL 319 #define LINEVAL 239 #define PWREN 1 #define MMODE 0 #define PNRMODE 3 #define BPPMODE 13 #define INVVCLK 0 #define INVVD 0 #define INVVDEN 0 #define U32 unsigned int #define M5D(n) ((n) & 0x1fffff) #define PAGEWIDTH 320 #define OFFSIZE 0 #define LCD_XSIZE 320 #define LCD_YSIZE 240 #define SCR_XSIZE 320 #define SCR_YSIZE 240 #define INVVLINE 1 #define INVVFRAME 1 #define BPP24BL 0 #define BSWP 0 #define HWSWP 0 volatile U32 LCD_BUFFER[240][320]; void Init_LCD(){ rLCDCON1=(CLKVAL<<8)|(MMODE<<7)|(PNRMODE<<5)|(BPPMODE<<1)|0; //设置CLKVAL,VCLK=HCLK/[(CLKVAL+1)*2],决定VM的触发方式,选择显示模式和BPP模式,暂时不要开启LCD,因为还没有设置好 rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW); //rLCDCON2,rLCDCON3和rLCDCON4主要设置时序 rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD); rLCDCON4=(HSPW); rLCDCON5 = (BPP24BL<<12) | (INVVCLK<<10) | (INVVLINE<<9) | (INVVFRAME<<8) | (0<<7) | (INVVDEN<<6) | (PWREN<<3) |(BSWP<<1) | (HWSWP); //INVVLINE和INVVFRAME需要进行翻转,因为CPU发出的是正脉冲,LCD使用的是负脉冲,所以要改变极性,PWREN使能电源信号 rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1); rLCDSADDR2=M5D(((U32)LCD_BUFFER+(SCR_XSIZE*SCR_YSIZE*4))>>1 ); rLCDSADDR3=PAGEWIDTH*32/16; rLCDINTMSK|=(3); rTCONSEL = 0; rGPCUP = 0x0; rGPDCON = 0xaaaaaaaa; rGPCCON = 0xaaaa02a9; rGPDUP = 0x0; rGPGUP=rGPGUP&(~(1<<4))|(1<<4); rGPGCON=rGPGCON&(~(3<<8))|(3<<8); rLCDCON1 |= 1; //使能数据输出和LCD控制信号 } void Paint(unsigned char ch[]){ int y, x, t = 0; for(y = 0; y < LCD_YSIZE; y++) for(x = 0; x < LCD_XSIZE; x++){ LCD_BUFFER[y][x] = (ch[t]<<16)|(ch[t+1]<<8)|(ch[t+2]); //因为是24位真彩,所将3个字节赋值到一个像素点上 t = t + 3; } } void Paint_background(U32 c){ unsigned int i, j; for(j = 0; j < LCD_YSIZE; j++) for(i = 0; i < LCD_XSIZE; i++) LCD_BUFFER[j][i] = c; } int LcdMain(){ Init_LCD(); Paint_background(0xFFFFFF); Paint(picture); //picture是从图片中提取出来的数组 while(1); }

相关文章:

  • 1203有穷自动机
  • eclipse 导入tomcat7源码
  • 硬件黑客
  • Python生成器实现杨辉三角打印
  • jQuery获取表格第一列的值
  • linux 安装mysql
  • 100个vc小项目开发:二、一步一点设计音乐播放器 [I]
  • 升级Windows10后Apache服务器启动失败的解决方法
  • 记2个月来,我在Csdn 掀起的微软面试风暴
  • Bootstrap显示代码的三种效果
  • 经典算法研究系列:二、Dijkstra 算法初探
  • 神经网络(13)--具体实现:random initialization
  • 以软件开始生命周期来说明不同的测试的使用情况
  • SSH远程会话管理工具 - screen使用教程
  • canvas基础学习(三)
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 345-反转字符串中的元音字母
  • 4个实用的微服务测试策略
  • es6--symbol
  • HashMap剖析之内部结构
  • JavaScript 基本功--面试宝典
  • Java编程基础24——递归练习
  • JAVA并发编程--1.基础概念
  • jquery cookie
  • Making An Indicator With Pure CSS
  • React系列之 Redux 架构模式
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Vue官网教程学习过程中值得记录的一些事情
  • vue脚手架vue-cli
  • 欢迎参加第二届中国游戏开发者大会
  • 记一次删除Git记录中的大文件的过程
  • 技术胖1-4季视频复习— (看视频笔记)
  • 如何合理的规划jvm性能调优
  • 译米田引理
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #Z0458. 树的中心2
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $$$$GB2312-80区位编码表$$$$
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)(3.5) 遥测无线电区域条例
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (c语言)strcpy函数用法
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二)Linux——Linux常用指令
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (三)mysql_MYSQL(三)
  • (生成器)yield与(迭代器)generator
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)Linux下编译安装log4cxx
  • (转)nsfocus-绿盟科技笔试题目
  • (转)拼包函数及网络封包的异常处理(含代码)