Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1593079
  • 博文数量: 354
  • 博客积分: 8137
  • 博客等级: 中将
  • 技术积分: 5137
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-26 15:40
文章分类

全部博文(354)

文章存档

2010年(300)

2009年(54)

分类: 嵌入式

2010-08-20 17:51:39

最近在学习一个触摸液晶屏与arm的设计

在这里把自己的心得写下来,为以后使用打下基础

本人新手 若有错误恳请指正

有关TFT LCD以及其他液晶的概念及原理可以参考

有关GUI编程的可以参考

这次使用的模块框图如下


Lcd的驱动使用的是ssd1289 18位 数据 240*3RGB*320

触摸控制使用的是ads7843网上有数据手册和使用方法这里不再鳌述,


第一步连接电路保 证电源正确 晶振正确 信号连接正确

第二部根据ssd1289datasheet设置寄存器(根据时序编程进行配置)


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

清屏

显示图片

(显示图片这一块有专门的软件生成 数组直接调用数组即可实现)

待续...

阅读(5437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~