全部博文(354)
分类: 嵌入式
2010-08-20 17:51:39
最近在学习一个触摸液晶屏与arm的设计
在这里把自己的心得写下来,为以后使用打下基础
本人新手 若有错误恳请指正
有关TFT LCD以及其他液晶的概念及原理可以参考
有关GUI编程的可以参考
这次使用的模块框图如下
Lcd的驱动使用的是ssd1289 18位 数据 240*3(RGB)*320
触摸控制使用的是ads7843网上有数据手册和使用方法这里不再鳌述,
第一步连接电路保 证电源正确 晶振正确 信号连接正确
第二部根据ssd1289的datasheet设置寄存器(根据时序编程进行配置)
LCD_RESET_0;
//低电平复位
DelayMs(10);
LCD_RESET_1;
write_com(0x0000,0x0001); DelayMs(10); //打开晶振
write_com(0x0003,0xA8A4); DelayMs(10); //0xA8A4
write_com(0x000C,0x0000); DelayMs(10);
write_com(0x000D,0x080C); DelayMs(10);
write_com(0x000E,0x2B00); DelayMs(10);
write_com(0x001E,0x00B0); DelayMs(10);
write_com(0x0001,0x2B3F); DelayMs(10); //驱动输出控制320*240
0x6B3F
write_com(0x0002,0x0600); DelayMs(10);
write_com(0x0010,0x0000); DelayMs(10);
write_com(0x0011,0x6070); DelayMs(10);
//0x4030 //定义数据格式 16位色
write_com(0x0005,0x0000); DelayMs(10);
write_com(0x0006,0x0000); DelayMs(10);
write_com(0x0016,0xEF1C); DelayMs(10);
write_com(0x0017,0x0003); DelayMs(10);
write_com(0x0007,0x0233); DelayMs(10); //0x0233
write_com(0x000B,0x0000); DelayMs(10);
write_com(0x000F,0x0000); DelayMs(10); //扫描开始地址
write_com(0x0041,0x0000); DelayMs(10);
write_com(0x0042,0x0000); DelayMs(10);
write_com(0x0048,0x0000); DelayMs(10);
write_com(0x0049,0x013F); DelayMs(10);
write_com(0x004A,0x0000); DelayMs(10);
write_com(0x004B,0x0000); DelayMs(10);
write_com(0x0044,0xEF00); DelayMs(10);
write_com(0x0045,0x0000); DelayMs(10);
write_com(0x0046,0x013F); DelayMs(10);
write_com(0x0030,0x0707); DelayMs(10);
write_com(0x0031,0x0204); DelayMs(10);
write_com(0x0032,0x0204); DelayMs(10);
write_com(0x0033,0x0502); DelayMs(10);
write_com(0x0034,0x0507); DelayMs(10);
write_com(0x0035,0x0204); DelayMs(10);
write_com(0x0036,0x0204); DelayMs(10);
write_com(0x0037,0x0502); DelayMs(10);
write_com(0x003A,0x0302); DelayMs(10);
write_com(0x003B,0x0302); DelayMs(10);
write_com(0x0023,0x0000); DelayMs(10);
write_com(0x0024,0x0000); DelayMs(10);
write_com(0x0025,0x8000); DelayMs(10);
write_com(0x004f,0); //行首址0
write_com(0x004e,0); //列首址0
第三步 编写一个简单的测试程序进行测试
另外还要知道tftlcd的扫描方 式
240*320既横向240个点每 个点由16位数据控制竖向320个点每个点同样由16位数据控制
通过定义宏 改变RGB的数据来定义其他的颜色以便调用
例如我们要让屏幕显示一种颜色
在ssd寄存器配置之后
编写一段小程序
void displayonecol(int color)
{
写命令选中起始行地址 0x004f,0 //从第0行开始
写命令选中起始列地址 0x004e,0 //从第0列开始
写命令0x22
大循环320次
{
小循环240次
{
向数据总线写控制颜色的数据(colour)(写到IO数据存储器即可)
}
}
}
编程方面主要要有这几个函数
显示汉字
显示ascii
清屏
显示图片
(显示图片这一块有专门的软件生成 数组直接调用数组即可实现)
待续...