/******************************************
实验步骤
1.配置引脚功能,将其GPI、GPJ引脚设置为VD数据输出模式,及GPJ后几位设置成LCD时钟输出;
2.设置LCD时序值,初始化时序值。
(1)需要初始化时序:VSPW、VBPD、LINEVAL、VFPD、HSPW、HBPB、HOZVAL、HFPD、
CLKVAL(在LCD芯片手册中找到初始化时序图,然后找到对应的时序参数)
(2)找到初始化这些时序信号相应的寄存器(在芯片手册中找到相应的寄存器,并对其初始化)
(3)结合LCD芯片手册和时序图将对应参数的是设置出来
3.帧缓存初始化(帧缓冲指的是在内存中开辟出来的用来存储图像数据空间,并告知给LCD的CMA。)
(1)设置窗口大小对应的寄存器
(2)告诉ADM寄存器内存起始地址和大小
4.杂项初始化()
5.画点
6.画线
7.绘制QQ图
8.单色显示
**********************************************************/
#define GPICON (*(volatile unsigned long *)0x7F008100)
#define GPJCON (*(volatile unsigned long *)0x7F008120)
#define MOFPCON (*(volatile unsigned long *)0x7410800C)
#define SPCON (*(volatile unsigned long *)0x7F0081A0)
#define VIDCON0 (*(volatile unsigned long *)0x77100000)
#define VIDCON1 (*(volatile unsigned long *)0x77100004)
#define VIDTCON0 (*(volatile unsigned long *)0x77100010)
#define VIDTCON1 (*(volatile unsigned long *)0x77100014)
#define VIDTCON2 (*(volatile unsigned long *)0x77100018)
#define WINCON0 (*(volatile unsigned long *)0x77100020)
#define VIDOSD0A (*(volatile unsigned long *)0x77100040)
#define VIDOSD0B (*(volatile unsigned long *)0x77100044)
#define VIDOSD0C (*(volatile unsigned long *)0x77100048)
#define VIDW00ADD0B0 (*(volatile unsigned long *)0x771000A0)
#define VIDW00ADD1B0 (*(volatile unsigned long *)0x771000D0) #define VSPW 9
#define VBPD 1
#define LINEVAL 271
#define VFPD 1
//#define CLKVAL 4 //10 = 100/((CLKVAL+1)*2)
#define HSPW 40
#define HBPD 1
#define HOZVAL 479
#define HFPD 1 #define LeftTopX 0
#define LeftTopY 0
#define RightBotX 479
#define RightBotY 271 #define FRAME_BUFFER 0x54000000 extern unsigned char bmp[];/* 导出的时候切记不要包含图像头数据!!!!!! */ void lcd_port_init()
{
GPICON = 0xaaaaaaaa;
GPJCON = 0xaaaaaaaa;
}
void lcd_contral_init()
{
MOFPCON = <<; /* 这一位必须设置为0 */
SPCON = 0x01; /* RGB模式下必须设置为1 */ VIDCON0 = (<<)|(<<)|(<<); /* 禁止视频输出和控制信号 选择视频时钟源 确定VCLK和CLKVAL[7:0]的值[VCLK=视频时钟源/(CLKVAL+1)] */
VIDCON1 = (<<)|(<<); VIDTCON0 = (VBPD<<)|(VFPD<<)|(VSPW<<); /* 时钟初始化 */
VIDTCON1 = (HBPD<<)|(HFPD<<)|(HSPW<<);
VIDTCON2 = (LINEVAL<<)|(HOZVAL<<); WINCON0 = (<<)|(0xb<<)|(<<); /* 禁止视频输出和视频控制信号 选择BPP图像窗口模式(24bpp) 打开半字交换控制位 */ VIDOSD0A = (LeftTopX<<)|(LeftTopY<<); /* 设置视频窗口0的位置 */
VIDOSD0B = (RightBotX<<)|(RightBotY<<);
VIDOSD0C = (LINEVAL+)|(HOZVAL+); /* 设置视频窗口0的尺寸 */ VIDW00ADD0B0 = FRAME_BUFFER; /* 设置缓存区开始地址 */
VIDW00ADD1B0 = ((FRAME_BUFFER+(HOZVAL+)**(LINEVAL+)))&(0xffffff); /* 设置缓存区结束地址 ????*/
} void lcd_init()
{
lcd_port_init();
lcd_contral_init(); //打开LCD电源
} void point(int row, int col, int color)
{
int red, green, blue;
unsigned long *point = (unsigned long*)FRAME_BUFFER;
red = (color>>) & 0xff;
green = (color>>) & 0xff;
blue = (color>>) & 0xff;
*(point + row* + col) = (green<<) | (blue<<) | red; /* 具体不知原因 试出来的 */ } void paint_bmp(const unsigned char bmp[])
{
int i,j;
unsigned char *p = (unsigned char *)bmp;
int blue, green,red;
int color; for(i=;i<;i++) /* 必须和导出的尺寸一致!!! */
{
for(j=;j<;j++)
{
red = *p++; /* 必须和导出的颜色顺序一模一样!!!!!! */
blue = *p++;
green = *p++; color = (red<<)|(green<<)|(blue<<); point(i,j,color);
}
}
} void lcd_test()
{
int y;
for(y=;y<;y++)
point(,y,0xFF0000); paint_bmp(bmp);
}

最新文章

  1. JHipster框架的简要搭建与说明
  2. bzoj2702[SDOI2012]走迷宫
  3. LuaLaTeX \documemtclass{standalone} 编译错误
  4. MySql与SqlServer的一些常用用法的差别
  5. 【☆】javascript数据类型拾遗
  6. GCD三种队列
  7. BestCoder Round #35
  8. ssh连接阿里云一段时间不操作自动断开
  9. iOS Runtime 实践(1)
  10. hibernate一对多关系映射(自身关联)
  11. 屏蔽鼠标右键功能JS
  12. Enterprise Architect UML 建模之活动图
  13. iOS Socket第三方开源类库 ----AsyncSocket 分类: ios相关 ios技术 2015-03-11 22:14 59人阅读 评论(0) 收藏
  14. 第一个SpringMVC实例和解析(HelloSpringMVC)
  15. 从锅炉工到AI专家(11)(END)
  16. Eclipse Memory Analyzer
  17. 快速排序 java详解
  18. CF535E Tavas and Pashmaks 单调栈、凸包
  19. 使用dtc把dtb的反编译为dts
  20. openstack(Pike 版)集群部署(六)--- Horizon 部署

热门文章

  1. OC基础(27)
  2. Hive基础之COALESCE用法
  3. 使用 Razor 生成 HTML5 中的 data- 属性
  4. JMeter简介
  5. git 仓库操作
  6. Unity AssetBundles and Resources指引 (三) AssetBundle基础
  7. [AFUI]App Framework Quickstart
  8. extjs grid 分页
  9. php头函数和浏览器缓存
  10. NOIP2007 守望者的逃离-DP