搜索
bottom↓
回复: 180

【BMP图片浏览器】 UCOSII + FATFS 读SD CARD的24位BMP文件,带字库,用的是淘宝27元的2

[复制链接]

出0入0汤圆

发表于 2009-3-15 18:49:59 | 显示全部楼层 |阅读模式
近日刚接触TFT屏,购买了淘宝27元的屏,由于OURAVR这里的资料丰富,硬件搭好后,改改引脚就有显示了,TFT屏显示真的太爽了,于是想到了做一个BMP的图片浏览器,本想做jpg的解码,但jpg有点复杂,要慢慢研究下。经过周6,日的奋斗,我的BMP图片浏览器终于可以工作了,2G 卡可以装8000张240 X 320的图片,购用啦!!!   申请穿裤子 -_-!     欢迎转载

1。原理图,protell99格式和pdf

原理图ourdev_425710.rar(文件大小:17K) (原文件名:原理图.rar)

2。字库文件

烧录在lpc2148的0x30000处ourdev_425711.rar(文件大小:138K) (原文件名:汉字库.rar)

3。保存在SD卡上的图片  (240 * 320)

放入SD卡的根目录ourdev_425713.rar(文件大小:297K) (原文件名:放进SD卡的图片.rar)

4。源程序
   
   简单移植了FATFS到LPC2148,测试了写的速度,很满意,280K/S;UCOSII用的是2.76的,建立了5个简单的任务;建立了字库,写汉字很方便;现上传源程序,如发现错误请告诉我。

加QQ 373998768 讨论FATFS和UCOSII,我叫“哈哈笑”ourdev_425714.rar(文件大小:1.02M) (原文件名:源程序.rar)

5。效果图

效果图ourdev_425715.rar(文件大小:685K) (原文件名:效果图.rar)


1 (原文件名:1.jpg)


2 (原文件名:2.jpg)


3 (原文件名:3.jpg)


4 (原文件名:4.jpg)


5 (原文件名:5.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-3-15 18:54:13 | 显示全部楼层
沙发,图片不错

出0入0汤圆

 楼主| 发表于 2009-3-15 18:56:36 | 显示全部楼层
^_^,是不错~~~

出0入0汤圆

发表于 2009-3-15 19:43:10 | 显示全部楼层
顶上去

出0入0汤圆

发表于 2009-3-15 20:11:56 | 显示全部楼层
再顶

出0入0汤圆

发表于 2009-3-15 20:14:01 | 显示全部楼层
不顶就不对了

出0入0汤圆

发表于 2009-3-15 20:53:03 | 显示全部楼层
很不错的例子,收藏了~~~~~~~~~~~~~~~

出0入0汤圆

发表于 2009-3-15 21:46:34 | 显示全部楼层
很不错,要是能加上JPG解码,顺便加个MP3功能进去,也不复杂,不然浪费SD卡。就算就完美了。

加其它功能不太现实。太复杂。

出0入0汤圆

发表于 2009-3-15 21:58:47 | 显示全部楼层
强,学习!

出0入0汤圆

发表于 2009-3-15 22:21:16 | 显示全部楼层
最好加个txt文本阅读!

顺便问一下,怎样才可以把字库烧录在0x30000啊

出0入0汤圆

 楼主| 发表于 2009-3-15 22:30:22 | 显示全部楼层
To【9楼】 not_at_all

TXT阅读,这个可以加。

用h-Jtag烧录的话看图。


(原文件名:shaolu.JPG)

刚才找了一下JPEG图片的资料,准备搞JPEG解码

出0入4汤圆

发表于 2009-3-15 23:08:18 | 显示全部楼层
顶一个

出0入90汤圆

发表于 2009-3-15 23:10:39 | 显示全部楼层
图片不错!呵呵………………………………………………………………………………

出0入0汤圆

发表于 2009-3-15 23:22:31 | 显示全部楼层
我不是用h-Jtag的!呵呵!我这里也有点图片解码的资料,不过比较乱。希望对你有帮助
点击此处下载 ourdev_425767.rar(文件大小:2.63M) (原文件名:图片文件格式.rar)

出0入0汤圆

发表于 2009-3-15 23:29:29 | 显示全部楼层
不错!

出0入0汤圆

发表于 2009-3-15 23:48:07 | 显示全部楼层
如果能加上UCGUI的更好了.网上看到有这个例子:
点击此处打开 ourdev_425771.jpg(文件大小:520K,只有400K以内的图片才能直接显示) (原文件名:U1.jpg)
点击此处打开 ourdev_425772.jpg(文件大小:673K,只有400K以内的图片才能直接显示) (原文件名:U2.jpg)
点击此处打开 ourdev_425773.jpg(文件大小:502K,只有400K以内的图片才能直接显示) (原文件名:U3.jpg)
http://item.taobao.com/auction/item_detail.jhtml?item_id=ba33c6a29a164515d69441c1cd7b587f&x_id=0db2

出0入0汤圆

 楼主| 发表于 2009-3-16 06:54:58 | 显示全部楼层
To 【13楼】 not_at_all

你的资料不错,Thx

出0入0汤圆

发表于 2009-3-16 08:09:05 | 显示全部楼层
太好了,这两天真是一天比一天幸福,两天竟然找到了两个有关于LPC21XX的液晶屏例子,硬件几乎是相同的。

可以买彩票了。

出0入0汤圆

发表于 2009-3-16 08:11:45 | 显示全部楼层
【15楼】 kakaarm


东西还不错啊。

出0入0汤圆

发表于 2009-3-16 09:02:42 | 显示全部楼层
带字库文件烧到其它单片机能用 不??

出0入0汤圆

发表于 2009-3-16 13:08:02 | 显示全部楼层
下来研究下FATFS,谢谢楼主

出0入0汤圆

发表于 2009-3-16 13:09:52 | 显示全部楼层
请问楼主刷屏闪烁吗?

出0入0汤圆

发表于 2009-4-5 19:04:58 | 显示全部楼层
楼主写的代码实在是不敢恭维阿,找个代码半天没看到函数在哪里声明的!郁闷中...

出0入4汤圆

发表于 2009-4-5 19:36:07 | 显示全部楼层
不错。

出0入0汤圆

发表于 2009-4-5 20:40:26 | 显示全部楼层
很好的例子和我想做的小玩意差不多

出0入0汤圆

 楼主| 发表于 2009-4-5 20:52:42 | 显示全部楼层
TO:【22楼】 liujun6037

我写的代码虽然都无什么注解也不是最优化的,但是都是1个C文件对应1个H文件的,声明都是在H文件里面的。。。

也不会看的很郁闷吧?-_#!

出0入0汤圆

 楼主| 发表于 2009-4-5 21:10:31 | 显示全部楼层
TO :【21楼】 caochujin

无EMC的CPU刷屏当然慢了,无办法的,IO速度跟不上,用44b0,2478,2440刷屏就会很快。

出0入0汤圆

发表于 2009-4-5 22:00:54 | 显示全部楼层
顶!

出0入0汤圆

发表于 2009-4-11 12:50:18 | 显示全部楼层
楼主,能给个联系方式吗?有些问题向你请教下哈

出0入0汤圆

发表于 2009-4-11 13:21:28 | 显示全部楼层
很好啊...可惜不懂UCOS....看来以后有时间还是要学学啊..

出0入0汤圆

发表于 2009-4-11 13:50:22 | 显示全部楼层
好诱惑呀,心动不如行动,去买真彩LCD

出0入4汤圆

发表于 2009-4-14 17:10:03 | 显示全部楼层
强。记号

出0入0汤圆

发表于 2009-4-14 17:37:20 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-4-14 17:39:00 | 显示全部楼层
楼主.看看你的板子..

出0入0汤圆

 楼主| 发表于 2009-4-20 17:34:28 | 显示全部楼层
淘宝上买块核心板自己diy的

出0入0汤圆

 楼主| 发表于 2009-4-20 17:49:45 | 显示全部楼层
/****************************************************************************
**文件名称:tftdrv.c
**功能:2.4寸320x240,65K色液晶的基本操作,硬件相关操作
**配置信息:主控芯片:LPC2148
**                      晶振:11.0592MHZ
**                      颜色说明:以一个十六位的数存放一个点的颜色, RGB三种颜色位数分别是5、6、5位
                                      即:最高五位为红色灰阶.中间六位为绿色灰阶.最低五位为蓝色灰阶
                                       例如: 0XF800 纯红色
                                       0X07E0 纯绿色
                           0X001F 纯蓝色
**作者:
**日期:2008.12.22
**备注:硬件相关性强,移植请注意
****************************************************************************/
/*******************************************************************
**管脚连接说明
**D0--D7:P1.16--P1.23
**RS命令/数据:P0.17
**CS片选:P0.18
**WR写:P0.20
**RD读:P0.21
**RST复位:P0.22
*******************************************************************/
#include"config.h"



/* 输出数据宏定义 */
#define         OutData(dat)        FIO1CLR = 0xFF<<16; FIO1SET = (dat&0xff)<<16

/*定义RS控制*/
#define TFT_RS                0
#define SRS()                FIO0SET=1<<TFT_RS
#define CRS()                FIO0CLR=1<<TFT_RS

/*定义CS控制*/
#define TFT_CS                 1
#define SCS()                FIO0SET = 1<<TFT_CS
#define CCS()                FIO0CLR = 1<<TFT_CS

/*定义WR控制*/
#define TFT_WR                20
#define SWR()                FIO0SET=1<<TFT_WR
#define CWR()                FIO0CLR=1<<TFT_WR

/*定义RD控制*/
#define TFT_RD                 21
#define SRD()            FIO0SET=1<<TFT_RD
#define CRD()                FIO0CLR=1<<TFT_RD

/*定义RST控制*/
#define  TFT_RST        22            
#define  SRST()                FIO0SET = 1<<TFT_RST
#define  CRST()                FIO0CLR = 1<<TFT_RST





const uint16 color[8]={0xf800,0x07e0,0x001f,0xffe0,0x0020,0xffff,0x07ff,0xf81f};                    //8 colore
//红、绿、深蓝、黄、深绿、白、淡绿、粉

/************************************************************************************************
* 名称:void Port_Ini(void)
* 功能:管脚初始化
* 入口参数:无
* 出口参数:无
***********************************************************************/
void Port_Ini(void)
{
        (*((volatile unsigned long *) 0xE01FC1A0))         = 0x03;
       
        FIO0MASK = 0x00;
        FIO1MASK = 0x00;
       
        PINSEL0 &=~(3<<0);
        PINSEL0 &=~(3<<2);
        PINSEL0 &=~(3<<4);
        PINSEL1 &=~(3<<10);
        PINSEL1 &=~(3<<12);
                        

        FIO1DIR=0x00FF0000;                        //设置管脚输入输出

        FIO0DIR |=1<<TFT_RS|
                          1<<TFT_CS|
                          1<<TFT_WR|
                          1<<TFT_RD|
                          1<<TFT_RST;
                  
        FIO0SET |=1<<TFT_RS|
                          1<<TFT_CS|
                          1<<TFT_WR|
                          1<<TFT_RD|
                          1<<TFT_RST;
        FIO1SET=0x00FF0000;
}


/*********************************************************************************
* 名称:void Delay(uint32 time)
* 功能:软件延时函数。用于TFT显示输出时序控制。
* 入口参数:time
* 出口参数:无
**********************************************************************************/
void Delay (uint32 time)   
{
          while(time--);
}
/*********************************************************************************
* 名称:void Delay_us(uint16  time)
* 功能:us级软件延时函数。用于TFT显示输出时序控制。
* 入口参数:i
* 出口参数:无
**********************************************************************************/
extern void Delay_us(uint16 i)                      //delay function of us
{                                                                                  
          uint16 j;
          for(;i>0;i--)
          for(j=20;j>0;j--);                                                                                   
       
}                                                                                  
/*********************************************************************************
* 名称:void Delay_ms(uint16 i)
* 功能:ms级软件延时函数。用于TFT显示输出时序控制。
* 入口参数:i
* 出口参数:无
**********************************************************************************/
void Delay_ms(uint16 i)                      //delay funtion of ms
{
  uint16 j;
  for(;i>0;i--)
  for(j=9000;j>0;j--)
    ;
}
/***********************************************************************
* 名称:void TFT_WData(uint8 data)
* 功能:写数据子程序
* 入口参数:data          要写入TFT的数据
*出口参数:无
***********************************************************************/

#define TFT_WData(data)         SRS();\
                                                 CCS();\
                                                 OutData(data);\
                                                 CWR();\
                                                 SWR();\
                                                 SCS();\
                                                 CRS()


/*

void TFT_WData(uint8 data)
{        
        SRS();                                        //data
        CCS();                                        //select
        OutData(data);                                //out data
        CWR();                                        //write
        SWR();
        SCS();                                        //unselect
        CRS();
}
*/

/***********************************************************************
* 名称:void TFT_WReg(uint8 adr)
* 功能:写寄存器地址
* 入口参数:adr          要写的地址
*出口参数:无
***********************************************************************/

#define TFT_WReg(adr)   CRS();\
                                                CCS();\
                                                OutData(adr);\
                                                CWR();\
                                                SWR();\
                                                SCS();\
                                                CRS()

/*
void TFT_WReg(uint8 adr)
{
        CRS();                                        //command
       
        CCS();                                        //select
        OutData(adr);                                //out data
        CWR();                                        //write
        SWR();
        SCS();                                        //unselect
        CRS();
}
*/

/***********************************************************************
* 名称:void TFT_WCmd(uint8 dbw,uint8 index,uint16 cmd)
* 功能:写数据子程序
* 入口参数:dbw:          the style of command 1:16 bit 0:8bit
                     index:   number of register
                     cmd:    command     
*出口参数:无
***********************************************************************/

#define TFT_WCmd(dbw,index,cmd)    TFT_WReg(index);\
                                                                   if(dbw)\
                                                                   {TFT_WData(cmd>>8);}\
                                                                   TFT_WData(cmd&0xFF)



/*
void TFT_WCmd(uint8 dbw,uint8 index,uint16 cmd)
{
        TFT_WReg(index);                                        //write thr address of register
       
        if(dbw)                                                        //16 bits command
        {       
                TFT_WData(cmd>>8);                        //high 8 bits
        }
        TFT_WData(cmd&0xFF);                        //low 8 bits
}
*/
/***********************************************************************
* 名称:void TFT_WData16(uint16 data)
* 功能:写16位数据子程序
* 入口参数:data                          16 bits data
*出口参数:无
***********************************************************************/

#define TFT_WData16(data)  TFT_WData(data>>8);\
                                                   TFT_WData(data&0xff)


/*
void TFT_WData16(uint16 data)                          //写16位数据函数
{  
        TFT_WData(data>>8);                                      //高8位数据
            TFT_WData(data&0xff);                                    //低8位数据
}

*/
/***********************************************************************
* 名称:void TFT_Clear(uint16 x,uint16 y,uint16 len,uint16 wid,uint16 colour)
* 功能:clear screen with a special colour
* 入口参数:x:start 0--240
                     y:start 0--320
                     len:length of clear area
                     wid:width  of clear area
                     colour:colour
                     
*出口参数:无
*caution:distinguish x and y,len and width
***********************************************************************/

extern void TFT_Clear(uint8 x,uint16 y,uint16 len,uint16 wid,uint16 colour)
{                    
   uint16 mid;
   uint32 n,temp;
   
   TFT_WCmd(0,0x02,x);                                          //start point's x,the x coordinate<=239,the type  is 8 bits
   TFT_WCmd(1,0x03,y);                                    //start point's y,the y coordinate<=319,the type  is 16 bits
   
   mid=x+len-1;                                                        //config the parameter
   
   if(mid>239)mid=239;
    TFT_WCmd(0,0x04,mid);                                        //set end point's x coordinate       
   
    mid=y+wid-1;
   
   if(mid>319)mid=319;
   TFT_WCmd(1,0x05,mid);                              //set end point's y coordinate
       
   TFT_WReg(0x0e);                                        //set register
   
   temp=len*wid;   
   for(n=0;n<temp;n++)                                             //the clear area display white
  {
          TFT_WData16(colour);
  }
}   
/***********************************************************************
* 名称:void TFT_int(void)
* 功能:initialize
* 入口参数:no
*出口参数:无
***********************************************************************/
extern void TFT_int(void)
{
    CRST();                                                   //LCD复位                        
        Delay_ms(400);
        SRST();
        Delay_ms(10);
                                              
        TFT_WReg(0xa1);
        TFT_WData(0x00);
        TFT_WReg(0xa0);
        TFT_WData(0x00);
        TFT_WCmd(0,0x70,0xc8);                //对亮度有影响
        Delay_ms(2);
        TFT_WCmd(0,0x72,0xa3);
        TFT_WCmd(0,0x73,0x04);
        TFT_WCmd(0,0x75,0x45);
        TFT_WCmd(0,0x76,0x23);

        TFT_WCmd(0,0x77,0x08);
        TFT_WCmd(0,0x78,0x08);
        TFT_WCmd(0,0x79,0x00);
        TFT_WCmd(0,0x7f,0xf0);
        TFT_WCmd(0,0x71,0x81);          
        Delay_ms(2);
         
        TFT_WCmd(0,0x0d,0x23);
        TFT_WCmd(0,0x11,0x00);
        TFT_WCmd(0,0x12,0x00);
        TFT_WCmd(0,0x21,0x37);
        TFT_WCmd(0,0x22,0x02);
        TFT_WCmd(0,0x23,0x24);
        TFT_WCmd(0,0x24,0x13);
        TFT_WCmd(0,0x25,0x0a);
        TFT_WCmd(0,0x26,0x82);
        TFT_WCmd(0,0x27,0x01);
        TFT_WCmd(0,0x1e,0x25);
        TFT_WCmd(0,0x1f,0x59);                //有影响
        Delay_ms(2);
                                                                //GAMMA设置
        TFT_WCmd(1,0x30,0x0777);
        TFT_WCmd(1,0x31,0x0444);
        TFT_WCmd(1,0x32,0x0555);
        TFT_WCmd(1,0x33,0x0444);
        TFT_WCmd(1,0x34,0x0333);
        TFT_WCmd(1,0x35,0x0333);
        TFT_WCmd(1,0x36,0x0333);
        TFT_WCmd(1,0x37,0x0333);
        TFT_WCmd(1,0x38,0x0444);
        TFT_WCmd(1,0x39,0x0555);
        TFT_WCmd(1,0x3a,0x0666);
        TFT_WCmd(1,0x3b,0x0666);
        TFT_WCmd(1,0x3c,0x0777);
        TFT_WCmd(1,0x3d,0x0777);
        TFT_WCmd(1,0x3e,0x0777);
        TFT_WCmd(1,0x3f,0x0777);
        TFT_WCmd(1,0x40,0x0777);
        TFT_WCmd(1,0x41,0x0777);
        TFT_WCmd(1,0x42,0x0777);
        TFT_WCmd(1,0x43,0x0777);
        TFT_WCmd(1,0x44,0x0777);
        TFT_WCmd(1,0x45,0x0777);
        TFT_WCmd(1,0x46,0x0777);
        TFT_WCmd(1,0x47,0x0777);
        TFT_WCmd(1,0x48,0x0777);
        TFT_WCmd(1,0x49,0x0777);
        TFT_WCmd(1,0x4a,0x0777);
        TFT_WCmd(1,0x4b,0x0777);
        TFT_WCmd(1,0x4c,0x0777);
        TFT_WCmd(1,0x4d,0x0666);
        TFT_WCmd(1,0x4e,0x0666);
        TFT_WCmd(1,0x4f,0x0666);
       
        TFT_WCmd(0,0x00,0x04);                //扫描方向控制
        TFT_WCmd(0,0x01,0x07);                //扫描方向控制
       
        TFT_WCmd(0,0x02,0x00);                //设置X坐标点
        TFT_WCmd(1,0x03,0x0000);                //设置Y坐标点
                                                                //面板大小设置
        TFT_WCmd(0,0x04,0xef);                //结束列数(0~239)       
        TFT_WCmd(1,0x05,0x013f);                //结束行数(0~319)
                                                                //窗口设置
        TFT_WCmd(0,0x06,0x00);                //水平起始位置
        TFT_WCmd(1,0x07,0x0000);                //垂直起始位置
        TFT_WCmd(0,0x08,0xef);                //水平结束位置
        TFT_WCmd(1,0x09,0x013f);                //垂直结束位置   
       
        TFT_WCmd(0,0x0a,0x00);
        TFT_WCmd(0,0x0b,0x00);
        TFT_WCmd(0,0x0c,0x00);
        TFT_WCmd(0,0x14,0x00);
        TFT_WCmd(0,0x15,0x00);
        TFT_WCmd(0,0x16,0x00);
        TFT_WCmd(1,0x17,0x01ff);
        TFT_WCmd(1,0x18,0x01ff);
        TFT_WCmd(0,0x13,0x00);
        TFT_WCmd(1,0x19,0x01ff);
        TFT_WCmd(1,0x1b,0x01ff);
        TFT_WCmd(1,0x1c,0x01ff);
        TFT_WCmd(1,0x1a,0x01ff);         
        TFT_WCmd(0,0x1d,0x0e);                //无影响
        TFT_WCmd(0,0x10,0x06);                //开显示

        TFT_WReg(0x0E);
        TFT_Clear(0,0,240,320,0x0000);                //清屏            
                                                                                  
}                               


       
/***********************************************************************
* 名称: void TFT_test(void)
* 功能:test function ,display colour bar
* 入口参数:no
*出口参数:无
***********************************************************************/                                                                          
extern void TFT_test(void)
{
        uint16 temp,num;
        uint8 c;
        //TFT_WCmd(0,0x00,0x04);
        //TFT_WCmd(0,0x01,0x07);
        //TFT_WCmd(0,0x02,0);
        //TFT_WCmd(1,0x03,0);
        //TFT_WCmd(0,0x04,0xEF);
        //TFT_WCmd(1,0x05,0x013F);
        //TFT_WCmd(0,0x06,0x00);
        //TFT_WCmd(1,0x07,0x0000);
        //TFT_WCmd(0,0x08,0xEF);
        //TFT_WCmd(1,0x09,0x013F);       
         //TFT_WCmd(0,0x03,0);                       
        //TFT_WCmd(1,0x02,0);                       
       
        TFT_WReg(0x0E);
        for(c=0;c<8;c++)
        {
          temp=color[c];                                  //8种颜色
         for(num=40*240;num>0;num--)
          {
                  TFT_WData16(temp);
          }
        }
                                                                  
}

/***********************************************************************
* 名称: void GUI_Point(uint8 x,uint16 y,uint16 colour)
* 功能:display in special coordinate
* 入口参数x:                x coordinate 0--239
                     y:                y coordinate 0--319
*出口参数:无
***********************************************************************/       
/*
#define GUI_Point( x, y, colour)   TFT_WCmd(0,0x02,x);\
                                                                   TFT_WCmd(1,0x03,y);\
                                                                   x=x+1;\
                                                                   if(x>239)x=239;\
                                                                    TFT_WCmd(0,0x04,x);\
                                                                    y=y+1;\
                                                                   if(y>319)y=319;\
                                                                   TFT_WCmd(1,0x05,y);\
                                                                   TFT_WReg(0x0e);\
                                                                   TFT_WData16(colour)
                                                                  
*/                                                                  
                                                                  
void GUI_Point(uint8 x,uint16 y,uint16 colour)       
{
  
   
   TFT_WCmd(0,0x02,x);                                          //start point's x,the x coordinate<=239,the type  is 8 bits
   TFT_WCmd(1,0x03,y);                                    //start point's y,the y coordinate<=319,the type  is 16 bits
   

   x=x+1;
   if(x>239)x=239;
    TFT_WCmd(0,0x04,x);                                        //set end point's x coordinate       
   
    y=y+1;
   
   if(y>319)y=319;
   TFT_WCmd(1,0x05,y);                              //set end point's y coordinate
       
   TFT_WReg(0x0e);                                        //set register
   
   TFT_WData16(colour);
  

}

/****************************************************************************
* 名称:void  GUI_HLine(uint8 x0,  uint8 x1,uint8 y)
* 功能:画水平线。
* 入口参数:x0                水平线起点所在列的位置                    
*                     x1                 水平线终点所在列的位置
*                       y                         水平线起点所在行的位置
* 出口参数:无
****************************************************************************/
void  GUI_HLine(uint8 x0,  uint8 x1,uint16 y,uint16 colour)
{  
        uint8  bak;

           if(x0>x1)                                                                         // 对x0、x1大小进行排列,以便画图
           {
                    bak = x1;
                      x1 = x0;
                      x0 = bak;
           }
   
           do
           {
                    GUI_Point(x0, y,colour);                // 逐点显示,描出垂直线
              x0++;
           }while(x1>=x0);
}
/****************************************************************************
* 名称:void  GUI_VLine(uint16 y0,  uint16 y1,uint8 x,uint16 colour)
* 功能:画垂直线。
* 入口参数:y0                垂直线起点所在行的位置                    
*                     y1                 水平线终点所在行的位置
*                       x                水平线起点所在列的位置
* 出口参数:无
****************************************************************************/
void  GUI_VLine(uint16 y0,  uint16 y1,uint8 x,uint16 colour)
{  
        uint16  bak;

           if(y0>y1)                                                                         // 对y0、y1大小进行排列,以便画图
           {
                    bak = y1;
                      y1 = y0;
                      y0 = bak;
           }
   
           do
           {
                    GUI_Point(x, y0,colour);                // 逐点显示,描出垂直线
              y0++;
           }while(y1>=y0);
}
/****************************************************************************
* 名称:void  TFT_Colorfyl(uint16 colour)
* 功能:彩条全屏
* 入口参数:uint16 colour:颜色
* 出口参数:无
****************************************************************************/
void  TFT_Colorful(uint16 colour)
{  
        uint16 i;
       
        for(i=0;i<320;i++)
        {
        TFT_Clear(0,i,240,1,colour);
        colour-=1234;
        }
       
}

出0入0汤圆

 楼主| 发表于 2009-4-20 17:52:05 | 显示全部楼层
改用了快速IO,并且超频了,1/3左右刷屏

/********************************/
/*     本例子的配置             */
/*Configuration of the example */
/********************************/
/* System configuration .Fosc、Fcclk、Fcco、Fpclk must be defined */
/* 系统设置, Fosc、Fcclk、Fcco、Fpclk必须定义*/
#define Fosc            11059200                    //Crystal frequence,10MHz~25MHz,should be the same as actual status.
                                                    //应当与实际一至晶振频率,10MHz~25MHz,应当与实际一至
#define Fcclk           (Fosc * 8)                  //System frequence,should be (1~32)multiples of Fosc,and should be equal or less  than 60MHz.
                                                    //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco            (Fcclk * 4)                 //CCO frequence,should be 2、4、8、16 multiples of Fcclk, ranged from 156MHz to 320MHz.
                                                    //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk           (Fcclk / 4) * 1             //VPB clock frequence , must be 1、2、4 multiples of (Fcclk / 4).
                                                    //VPB时钟频率,只能为(Fcclk / 4)的1、2、4倍

出0入0汤圆

发表于 2009-4-20 23:08:20 | 显示全部楼层
我这两天也想用LPC2148点..但老是点不亮..楼上能发一下没有快速IO时的驱动程序吗..

出0入0汤圆

发表于 2009-4-20 23:13:28 | 显示全部楼层
RST  -->  P1.21
CS   -->  P1.22
RD   -->  P1.25
WR   -->  P1.23
RS   -->  P1.20




#include "config.h"


/******************************
//RS????:0 ??   1 ??
//RS------PC3  
******************************/

#define   LCM_RS            20
//#define  SRS()                IO1SET =IO1SET|1<<LCM_RS
//#define  CRS()                IO1CLR =IO1CLR|1<<LCM_RS

#define   LCD_RS_H           IO1SET =IO1SET|1<<LCM_RS
#define   LCD_RS_L     IO1CLR =IO1CLR|1<<LCM_RS

/*****************************
//?????
//WR-----PC4
******************************/

#define  LCM_WR            23
//#define  SRS()                IO1SET =IO1SET|1<<LCM_RS
//#define  CRS()                IO1CLR =IO1CLR|1<<LCM_RS


#define   LCD_WR_H     IO1SET =IO1SET|1<<LCM_WR
#define   LCD_WR_L     IO1CLR =IO1CLR|1<<LCM_WR

/******************************
//?????
//RD-----PC5
******************************/

/* 定义E控制 */
#define   LCM_RD                25

//#define  SE()                IO1SET = IO1SET|1<<LCM_E
//#define  CE()                IO1CLR = IO1CLR|1<<LCM_E

#define   LCD_RD_H     IO1SET = IO1SET|1<<LCM_RD
#define   LCD_RD_L     IO1CLR = IO1CLR|1<<LCM_RD

/******************************
//CS????:0 ??     1 ??
//CS-----PC6
*******************************/

/* 定义R/W控制 */
#define  LCM_CS            22

//#define  SRW()                IO1SET =IO1SET|1<<LCM_RW
//#define  CRW()                IO1CLR =IO1CLR|1<<LCM_RW


#define   LCD_CS_H     IO1SET =IO1SET|1<<LCM_CS
#define   LCD_CS_L     IO1CLR =IO1CLR|1<<LCM_CS


/******************************
//LCD??:0 ??    1  ??
//RST----PC7
******************************/
#define   LCM_RST            21
#define   LCD_RST_H    IO1SET =IO1SET|1<<LCM_RST
#define   LCD_RST_L    IO1CLR =IO1CLR|1<<LCM_RST

/* 定义RS控制 */
//#define  LCM_RS            21
//#define  SRS()                IO1SET =IO1SET|1<<LCM_RS
//#define  CRS()                IO1CLR =IO1CLR|1<<LCM_RS

/*************************
       ?????
**************************/
#define  BUS_NO                8

#define         OutData(dat)        IO0CLR =IO0CLR|0xFF<<BUS_NO; IO0SET =IO0SET|(dat&0xff)<<BUS_NO


//---------------------------------------------------------------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>
/* 定义总线起始的GPIO,即D0对应的GPIO值(P1.16) */


/***************************************************
//????
//??,??,??,??,??,??,???,??
****************************************************/
uint16 color[]={0xF800,0x07E0,0x001F,0xFFE0,0x0000,0xFFFF,0x07FF,0xF81F};


/***********************
    1us????
***********************/
void delay_us(uint16 t)
{

  //_delay_us(1) ;
  

        uint16 j;
          for(;t>0;t--)
          for(j=20;j>0;j--);        
       
         
}


/**********************
    1ms????
***********************/
void delay_ms(uint16 t)
{
  uint16 j;
  for(;t>0;t--)
  for(j=9000;j>0;j--) ;
}

/*********************
    I/O????
**********************/
void LCD_IO_Init()
{
  
//  DDRA = 0xFF;
//  DDRC = 0xFF;
  
  PINSEL0 &= ~(0xffff<<(2*BUS_NO));
  
  PINSEL2 = PINSEL2 & (~0x08);
  // 设置I/O为输出方式

  IO0DIR = IO0DIR|(0xff<<BUS_NO);
  
  IO1DIR = IO1DIR|(1<<LCM_CS)|(1<<LCM_RST)|(1<<LCM_RD)|(1<<LCM_WR)|(1<<LCM_RS);

}


/********************************
         ??????
********************************/
void LCD_WriteRegister(uint8 index)
{

        LCD_RS_L ;
        delay_us(1); //--
    LCD_CS_H ;
       
        //PORTA= index;
        OutData(index) ;
        LCD_WR_L;
        delay_us(1); //--
        LCD_WR_H;

}


/***************************
    ?8?????
****************************/
void LCD_WriteByte(uint8 data)
{
        LCD_RS_H;
        delay_us(1); //--
        LCD_CS_H;
       
        //DATA= data;
        OutData(data) ;
        LCD_WR_L ;
        delay_us(1); //--
        LCD_WR_H ;
}



/***************************************************
//????????
//??:type ????: 1?16?,0?8??
****************************************************/
void LCD_WriteCommand(uint8 type,uint8 index,uint16 val)
{
        LCD_RS_L ;
        delay_us(1);  //--
        LCD_CS_H ;
        //DATA= index;
        OutData(index) ;
        LCD_WR_L;
        delay_us(1);  //--
        LCD_WR_H ;
        delay_us(1);
        LCD_RS_H;
        if(type)
        {
                //DATA= (uint8)(val>>8);
                OutData((uint8)(val>>8)) ;
                LCD_WR_L ;
                delay_us(1); //--
                LCD_WR_H ;

        }
        delay_us(1);
       
        //DATA= (uint8)val;
        OutData((uint8)val) ;
        LCD_WR_L;
        delay_us(1);  //--
        LCD_WR_H ;
       
}


/***************************
//?16?????
//??: val??
****************************/
void LCD_WriteData(uint16 val)
{
        LCD_RS_H;
        delay_us(1);  //--
        LCD_CS_H;
       
        //DATA= (uint8)(val>>8);
        OutData((uint8)(val>>8)) ;
        LCD_WR_L;
        delay_us(1);  //--
    LCD_WR_H;

        //DATA= (uint8)val;
        OutData((uint8)(val));
        LCD_WR_L ;
        delay_us(1); //--
        LCD_WR_H ;

}


/**********************
    LCD初始化
***********************/
void LCD_Init()
{   
    LCD_IO_Init();
        LCD_RST_L;
        delay_ms(10);
        LCD_RST_H;
    delay_ms(10);
       
        //initializing funciton 1
    delay_us(10);
        LCD_WriteRegister(0xA1);
        delay_us(16);
        LCD_WriteByte(0x00);
        delay_us(90);
        LCD_WriteRegister(0xA0);
        delay_us(10);
        LCD_WriteByte(0x00);
        delay_us(10);
        LCD_WriteCommand(0,0x70,0xC8);

        delay_ms(10);
       
        LCD_WriteCommand(0,0x72,0xA3);
        delay_us(10);
        LCD_WriteCommand(0,0x73,0x04);
        delay_us(10);
        LCD_WriteCommand(0,0x75,0x45);
        delay_us(10);
        LCD_WriteCommand(0,0x76,0x23);
        delay_us(10);
        LCD_WriteCommand(0,0x77,0x08);
        delay_us(10);
        LCD_WriteCommand(0,0x78,0x08);
        delay_us(10);
        LCD_WriteCommand(0,0x79,0x00);
        delay_us(10);
        LCD_WriteCommand(0,0x7F,0xF0);
        delay_us(10);
        LCD_WriteCommand(0,0x71,0x81);       
        delay_ms(2);

        LCD_WriteCommand(0,0x0D,0x23);
        delay_us(10);
        LCD_WriteCommand(0,0x11,0x00);
        delay_us(10);
        LCD_WriteCommand(0,0x12,0x00);
        delay_us(10);
        LCD_WriteCommand(0,0x21,0x37);
        delay_us(10);
        LCD_WriteCommand(0,0x22,0x02);
        delay_us(10);
        LCD_WriteCommand(0,0x23,0x24);
        delay_us(10);
        delay_us(10);
        LCD_WriteCommand(0,0x24,0x13);
        delay_us(10);
        LCD_WriteCommand(0,0x25,0x0A);
        delay_us(10);
        LCD_WriteCommand(0,0x26,0x82);
        delay_us(10);
        LCD_WriteCommand(0,0x27,0x01);
        delay_us(10);
        LCD_WriteCommand(0,0x1E,0x25);
        delay_us(10);
        LCD_WriteCommand(0,0x1F,0x59);
        delay_us(10);

        //GAMMA??
        LCD_WriteCommand(1,0x30,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x31,0x0444);
        delay_us(10);
        LCD_WriteCommand(1,0x32,0x0555);
        delay_us(10);
        LCD_WriteCommand(1,0x33,0x0444);
        delay_us(10);
        LCD_WriteCommand(1,0x34,0x0333);
        delay_us(10);
        LCD_WriteCommand(1,0x35,0x0333);
        delay_us(10);
        LCD_WriteCommand(1,0x36,0x0333);
        delay_us(10);
        LCD_WriteCommand(1,0x37,0x0333);
        delay_us(10);
        LCD_WriteCommand(1,0x38,0x0444);
        delay_us(10);
        LCD_WriteCommand(1,0x39,0x0555);
        delay_us(10);
        LCD_WriteCommand(1,0x3A,0x0666);
        delay_us(10);
        LCD_WriteCommand(1,0x3B,0x0666);
        delay_us(10);
        LCD_WriteCommand(1,0x3C,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x3D,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x3E,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x3F,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x40,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x41,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x42,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x43,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x44,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x45,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x46,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x47,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x48,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x49,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x4A,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x4B,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x4C,0x0777);
        delay_us(10);
        LCD_WriteCommand(1,0x4D,0x0666);
        delay_us(10);
        LCD_WriteCommand(1,0x4E,0x0666);
        delay_us(10);
        LCD_WriteCommand(1,0x4F,0x0666);

        delay_us(400);

        LCD_WriteCommand(0,0x00,0x04);        //??????
        delay_us(10);
        LCD_WriteCommand(0,0x01,0x07);       
        delay_us(10);
   
        //?????
        LCD_WriteCommand(0,0x02,0x00);          //X
        LCD_WriteCommand(1,0x03,0x0000);  //Y
        LCD_WriteCommand(0,0x04,0xEF);          //????(0~239)       
        LCD_WriteCommand(1,0x05,0x013F);  //????(0~319)


        LCD_WriteCommand(0,0x06,0x00);       
        LCD_WriteCommand(1,0x07,0x0000);       
        LCD_WriteCommand(0,0x08,0xEF);       
        LCD_WriteCommand(1,0x09,0x013F);

        delay_us(10);
        LCD_WriteCommand(0,0x0A,0x00);
        delay_us(10);
        LCD_WriteCommand(0,0x0B,0x00);
        delay_us(10);
        LCD_WriteCommand(0,0x0C,0x00);
        delay_us(10);
        LCD_WriteCommand(0,0x14,0x00);
        delay_us(10);
        LCD_WriteCommand(0,0x15,0x00);
        delay_us(10);
        LCD_WriteCommand(0,0x16,0x00);
        delay_us(10);
        LCD_WriteCommand(1,0x17,0x01FF);
        delay_us(10);
        LCD_WriteCommand(1,0x18,0x01FF);
        delay_us(10);       
        LCD_WriteCommand(0,0x13,0x00);
        delay_us(10);
        LCD_WriteCommand(1,0x19,0x01FF);
        delay_us(10);
        LCD_WriteCommand(1,0x1B,0x01FF);
        delay_us(10);
        LCD_WriteCommand(1,0x1C,0x01FF);
        delay_us(10);
        LCD_WriteCommand(1,0x1A,0x01FF);       
        delay_us(10);
        LCD_WriteCommand(0,0x1D,0x0E);
        delay_us(10);
        LCD_WriteCommand(0,0x10,0x06);                //???
                
        delay_us(100);
}


/******************************
//????
//????
*******************************/
void LCD_test()
{
        uint16 temp;
        uint32 num,num1,num2;
        uint8 n;
       
        LCD_WriteCommand(0,0x02,0x00);          //X
        LCD_WriteCommand(1,0x03,0x0000);  //Y
        LCD_WriteCommand(0,0x04,0xEF);          //????(0~239)       
        LCD_WriteCommand(1,0x05,0x013F);  //????(0~319)
       
       
        LCD_WriteRegister(0x0E);
       
    //??????
        for(n=0;n<8;n++)
         {
            temp=color[n];
                for(num=40*240;num>0;num--)
                  LCD_WriteData(temp);
         }
        delay_ms(1000);
       
        //??????
        for(n=0;n<8;n++)
         {  
            LCD_WriteRegister(0x0E);
            temp=color[n];
                for(num1=(uint32)240*320;num1>0;num1--)
                  {
                  
                    LCD_WriteData(temp);
                    
                    /*
                    for(num2=320;num2>0;num2--)
                          {
                        LCD_WriteData(temp);
                          }*/
                  }
            delay_ms(1000);
         }



}

出0入0汤圆

发表于 2009-4-21 09:47:13 | 显示全部楼层
酷!

出0入0汤圆

 楼主| 发表于 2009-4-21 12:11:26 | 显示全部楼层
不用快速IO的。

/****************************************************************************
**文件名称:tftdrv.c
**功能:2.4寸320x240,65K色液晶的基本操作,硬件相关操作
**配置信息:主控芯片:LPC2148
**                      晶振:11.0592MHZ
**                      颜色说明:以一个十六位的数存放一个点的颜色, RGB三种颜色位数分别是5、6、5位
                                      即:最高五位为红色灰阶.中间六位为绿色灰阶.最低五位为蓝色灰阶
                                       例如: 0XF800 纯红色
                                       0X07E0 纯绿色
                           0X001F 纯蓝色
**作者:
**日期:2008.12.22
**备注:硬件相关性强,移植请注意
****************************************************************************/
/*******************************************************************
**管脚连接说明
**D0--D7:P1.16--P1.23
**RS命令/数据:P0.17
**CS片选:P0.18
**WR写:P0.20
**RD读:P0.21
**RST复位:P0.22
*******************************************************************/
#include"config.h"



/* 输出数据宏定义 */
#define         OutData(dat)        IO1CLR = 0xFF<<16; IO1SET = (dat&0xff)<<16

/*定义RS控制*/
#define TFT_RS        0
#define SRS()                IO0SET=1<<TFT_RS
#define CRS()                IO0CLR=1<<TFT_RS

/*定义CS控制*/
#define TFT_CS         1
#define SCS()                IO0SET = 1<<TFT_CS
#define CCS()                IO0CLR = 1<<TFT_CS

/*定义WR控制*/
#define TFT_WR        20
#define SWR()                IO0SET=1<<TFT_WR
#define CWR()                IO0CLR=1<<TFT_WR

/*定义RD控制*/
#define TFT_RD         21
#define SRD()            IO0SET=1<<TFT_RD
#define CRD()                IO0CLR=1<<TFT_RD

/*定义RST控制*/
#define  TFT_RST        22            
#define  SRST()        IO0SET = 1<<TFT_RST
#define  CRST()        IO0CLR = 1<<TFT_RST





const uint16 color[8]={0xf800,0x07e0,0x001f,0xffe0,0x0020,0xffff,0x07ff,0xf81f};                    //8 colore
//红、绿、深蓝、黄、深绿、白、淡绿、粉

/************************************************************************************************
* 名称:void Port_Ini(void)
* 功能:管脚初始化
* 入口参数:无
* 出口参数:无
***********************************************************************/
void Port_Ini(void)
{
        PINSEL0 &=~(3<<0);
        PINSEL0 &=~(3<<2);
        PINSEL0 &=~(3<<4);
        PINSEL1 &=~(3<<10);
        PINSEL1 &=~(3<<12);
       
//        PINSEL2                

        IO1DIR=0x00FF0000;                        //设置管脚输入输出

        IO0DIR |=1<<TFT_RS|
                          1<<TFT_CS|
                          1<<TFT_WR|
                          1<<TFT_RD|
                          1<<TFT_RST;
                  
        IO0SET |=1<<TFT_RS|
                          1<<TFT_CS|
                          1<<TFT_WR|
                          1<<TFT_RD|
                          1<<TFT_RST;
        IO1SET=0x00FF0000;
}


/*********************************************************************************
* 名称:void Delay(uint32 time)
* 功能:软件延时函数。用于TFT显示输出时序控制。
* 入口参数:time
* 出口参数:无
**********************************************************************************/
void Delay (uint32 time)   
{
          while(time--);
}
/*********************************************************************************
* 名称:void Delay_us(uint16  time)
* 功能:us级软件延时函数。用于TFT显示输出时序控制。
* 入口参数:i
* 出口参数:无
**********************************************************************************/
extern void Delay_us(uint16 i)                      //delay function of us
{                                                                                  
          uint16 j;
          for(;i>0;i--)
          for(j=20;j>0;j--);                                                                                   
       
}                                                                                  
/*********************************************************************************
* 名称:void Delay_ms(uint16 i)
* 功能:ms级软件延时函数。用于TFT显示输出时序控制。
* 入口参数:i
* 出口参数:无
**********************************************************************************/
void Delay_ms(uint16 i)                      //delay funtion of ms
{
  uint16 j;
  for(;i>0;i--)
  for(j=9000;j>0;j--)
    ;
}
/***********************************************************************
* 名称:void TFT_WData(uint8 data)
* 功能:写数据子程序
* 入口参数:data          要写入TFT的数据
*出口参数:无
***********************************************************************/
void TFT_WData(uint8 data)
{        
        SRS();                                        //data
        CCS();                                        //select
        OutData(data);                                //out data
        CWR();                                        //write
        SWR();
        SCS();                                        //unselect
        CRS();
}

/***********************************************************************
* 名称:void TFT_WReg(uint8 adr)
* 功能:写寄存器地址
* 入口参数:adr          要写的地址
*出口参数:无
***********************************************************************/
void TFT_WReg(uint8 adr)
{
        CRS();                                        //command
       
        CCS();                                        //select
        OutData(adr);                                //out data
        CWR();                                        //write
        SWR();
        SCS();                                        //unselect
        CRS();
}
/***********************************************************************
* 名称:void TFT_WCmd(uint8 dbw,uint8 index,uint16 cmd)
* 功能:写数据子程序
* 入口参数:dbw:          the style of command 1:16 bit 0:8bit
                     index:   number of register
                     cmd:    command     
*出口参数:无
***********************************************************************/
void TFT_WCmd(uint8 dbw,uint8 index,uint16 cmd)
{
        TFT_WReg(index);                                        //write thr address of register
       
        if(dbw)                                                        //16 bits command
        {       
                TFT_WData(cmd>>8);                        //high 8 bits
        }
        TFT_WData(cmd&0xFF);                        //low 8 bits
}

/***********************************************************************
* 名称:void TFT_WData16(uint16 data)
* 功能:写16位数据子程序
* 入口参数:data                          16 bits data
*出口参数:无
***********************************************************************/
void TFT_WData16(uint16 data)                          //写16位数据函数
{  
        TFT_WData(data>>8);                                      //高8位数据
            TFT_WData(data&0xff);                                    //低8位数据
}


/***********************************************************************
* 名称:void TFT_Clear(uint16 x,uint16 y,uint16 len,uint16 wid,uint16 colour)
* 功能:clear screen with a special colour
* 入口参数:x:start 0--240
                     y:start 0--320
                     len:length of clear area
                     wid:width  of clear area
                     colour:colour
                     
*出口参数:无
*caution:distinguish x and y,len and width
***********************************************************************/

extern void TFT_Clear(uint8 x,uint16 y,uint16 len,uint16 wid,uint16 colour)
{                    
   uint16 mid;
   uint32 n,temp;
   
   TFT_WCmd(0,0x02,x);                                          //start point's x,the x coordinate<=239,the type  is 8 bits
   TFT_WCmd(1,0x03,y);                                    //start point's y,the y coordinate<=319,the type  is 16 bits
   
   mid=x+len-1;                                                        //config the parameter
   
   if(mid>239)mid=239;
    TFT_WCmd(0,0x04,mid);                                        //set end point's x coordinate       
   
    mid=y+wid-1;
   
   if(mid>319)mid=319;
   TFT_WCmd(1,0x05,mid);                              //set end point's y coordinate
       
   TFT_WReg(0x0e);                                        //set register
   
   temp=len*wid;   
   for(n=0;n<temp;n++)                                             //the clear area display white
  {
          TFT_WData16(colour);
  }
}   
/***********************************************************************
* 名称:void TFT_int(void)
* 功能:initialize
* 入口参数:no
*出口参数:无
***********************************************************************/
extern void TFT_int(void)
{
    CRST();                                                   //LCD复位                        
        Delay_ms(200);
        SRST();
        Delay_ms(10);
                                              
        TFT_WReg(0xa1);
        TFT_WData(0x00);
        TFT_WReg(0xa0);
        TFT_WData(0x00);
        TFT_WCmd(0,0x70,0xc8);                //对亮度有影响
        Delay_ms(2);
        TFT_WCmd(0,0x72,0xa3);
        TFT_WCmd(0,0x73,0x04);
        TFT_WCmd(0,0x75,0x45);
        TFT_WCmd(0,0x76,0x23);

        TFT_WCmd(0,0x77,0x08);
        TFT_WCmd(0,0x78,0x08);
        TFT_WCmd(0,0x79,0x00);
        TFT_WCmd(0,0x7f,0xf0);
        TFT_WCmd(0,0x71,0x81);          
        Delay_ms(2);
         
        TFT_WCmd(0,0x0d,0x23);
        TFT_WCmd(0,0x11,0x00);
        TFT_WCmd(0,0x12,0x00);
        TFT_WCmd(0,0x21,0x37);
        TFT_WCmd(0,0x22,0x02);
        TFT_WCmd(0,0x23,0x24);
        TFT_WCmd(0,0x24,0x13);
        TFT_WCmd(0,0x25,0x0a);
        TFT_WCmd(0,0x26,0x82);
        TFT_WCmd(0,0x27,0x01);
        TFT_WCmd(0,0x1e,0x25);
        TFT_WCmd(0,0x1f,0x59);                //有影响
        Delay_ms(2);
                                                                //GAMMA设置
        TFT_WCmd(1,0x30,0x0777);
        TFT_WCmd(1,0x31,0x0444);
        TFT_WCmd(1,0x32,0x0555);
        TFT_WCmd(1,0x33,0x0444);
        TFT_WCmd(1,0x34,0x0333);
        TFT_WCmd(1,0x35,0x0333);
        TFT_WCmd(1,0x36,0x0333);
        TFT_WCmd(1,0x37,0x0333);
        TFT_WCmd(1,0x38,0x0444);
        TFT_WCmd(1,0x39,0x0555);
        TFT_WCmd(1,0x3a,0x0666);
        TFT_WCmd(1,0x3b,0x0666);
        TFT_WCmd(1,0x3c,0x0777);
        TFT_WCmd(1,0x3d,0x0777);
        TFT_WCmd(1,0x3e,0x0777);
        TFT_WCmd(1,0x3f,0x0777);
        TFT_WCmd(1,0x40,0x0777);
        TFT_WCmd(1,0x41,0x0777);
        TFT_WCmd(1,0x42,0x0777);
        TFT_WCmd(1,0x43,0x0777);
        TFT_WCmd(1,0x44,0x0777);
        TFT_WCmd(1,0x45,0x0777);
        TFT_WCmd(1,0x46,0x0777);
        TFT_WCmd(1,0x47,0x0777);
        TFT_WCmd(1,0x48,0x0777);
        TFT_WCmd(1,0x49,0x0777);
        TFT_WCmd(1,0x4a,0x0777);
        TFT_WCmd(1,0x4b,0x0777);
        TFT_WCmd(1,0x4c,0x0777);
        TFT_WCmd(1,0x4d,0x0666);
        TFT_WCmd(1,0x4e,0x0666);
        TFT_WCmd(1,0x4f,0x0666);
       
        TFT_WCmd(0,0x00,0x04);                //扫描方向控制
        TFT_WCmd(0,0x01,0x07);                //扫描方向控制
       
        TFT_WCmd(0,0x02,0x00);                //设置X坐标点
        TFT_WCmd(1,0x03,0x0000);                //设置Y坐标点
                                                                //面板大小设置
        TFT_WCmd(0,0x04,0xef);                //结束列数(0~239)       
        TFT_WCmd(1,0x05,0x013f);                //结束行数(0~319)
                                                                //窗口设置
        TFT_WCmd(0,0x06,0x00);                //水平起始位置
        TFT_WCmd(1,0x07,0x0000);                //垂直起始位置
        TFT_WCmd(0,0x08,0xef);                //水平结束位置
        TFT_WCmd(1,0x09,0x013f);                //垂直结束位置   
       
        TFT_WCmd(0,0x0a,0x00);
        TFT_WCmd(0,0x0b,0x00);
        TFT_WCmd(0,0x0c,0x00);
        TFT_WCmd(0,0x14,0x00);
        TFT_WCmd(0,0x15,0x00);
        TFT_WCmd(0,0x16,0x00);
        TFT_WCmd(1,0x17,0x01ff);
        TFT_WCmd(1,0x18,0x01ff);
        TFT_WCmd(0,0x13,0x00);
        TFT_WCmd(1,0x19,0x01ff);
        TFT_WCmd(1,0x1b,0x01ff);
        TFT_WCmd(1,0x1c,0x01ff);
        TFT_WCmd(1,0x1a,0x01ff);         
        TFT_WCmd(0,0x1d,0x0e);                //无影响
        TFT_WCmd(0,0x10,0x06);                //开显示

        TFT_WReg(0x0E);
        TFT_Clear(0,0,240,320,0x0000);                //清屏            
                                                                                  
}                               


       
/***********************************************************************
* 名称: void TFT_test(void)
* 功能:test function ,display colour bar
* 入口参数:no
*出口参数:无
***********************************************************************/                                                                          
extern void TFT_test(void)
{
        uint16 temp,num;
        uint8 c;
        //TFT_WCmd(0,0x00,0x04);
        //TFT_WCmd(0,0x01,0x07);
        //TFT_WCmd(0,0x02,0);
        //TFT_WCmd(1,0x03,0);
        //TFT_WCmd(0,0x04,0xEF);
        //TFT_WCmd(1,0x05,0x013F);
        //TFT_WCmd(0,0x06,0x00);
        //TFT_WCmd(1,0x07,0x0000);
        //TFT_WCmd(0,0x08,0xEF);
        //TFT_WCmd(1,0x09,0x013F);       
         //TFT_WCmd(0,0x03,0);                       
        //TFT_WCmd(1,0x02,0);                       
       
        TFT_WReg(0x0E);
        for(c=0;c<8;c++)
        {
          temp=color[c];                                  //8种颜色
         for(num=40*240;num>0;num--)
          {
                  TFT_WData16(temp);
          }
        }
                                                                  
}

/***********************************************************************
* 名称: void GUI_Point(uint8 x,uint16 y,uint16 colour)
* 功能:display in special coordinate
* 入口参数x:                x coordinate 0--239
                     y:                y coordinate 0--319
*出口参数:无
***********************************************************************/       
void GUI_Point(uint8 x,uint16 y,uint16 colour)       
{
  
   
   TFT_WCmd(0,0x02,x);                                          //start point's x,the x coordinate<=239,the type  is 8 bits
   TFT_WCmd(1,0x03,y);                                    //start point's y,the y coordinate<=319,the type  is 16 bits
   

   x=x+1;
   if(x>239)x=239;
    TFT_WCmd(0,0x04,x);                                        //set end point's x coordinate       
   
    y=y+1;
   
   if(y>319)y=319;
   TFT_WCmd(1,0x05,y);                              //set end point's y coordinate
       
   TFT_WReg(0x0e);                                        //set register
   
   TFT_WData16(colour);
  

}

/****************************************************************************
* 名称:void  GUI_HLine(uint8 x0,  uint8 x1,uint8 y)
* 功能:画水平线。
* 入口参数:x0                水平线起点所在列的位置                    
*                     x1                 水平线终点所在列的位置
*                       y                         水平线起点所在行的位置
* 出口参数:无
****************************************************************************/
void  GUI_HLine(uint8 x0,  uint8 x1,uint16 y,uint16 colour)
{  
        uint8  bak;

           if(x0>x1)                                                                         // 对x0、x1大小进行排列,以便画图
           {
                    bak = x1;
                      x1 = x0;
                      x0 = bak;
           }
   
           do
           {
                    GUI_Point(x0, y,colour);                // 逐点显示,描出垂直线
              x0++;
           }while(x1>=x0);
}
/****************************************************************************
* 名称:void  GUI_VLine(uint16 y0,  uint16 y1,uint8 x,uint16 colour)
* 功能:画垂直线。
* 入口参数:y0                垂直线起点所在行的位置                    
*                     y1                 水平线终点所在行的位置
*                       x                水平线起点所在列的位置
* 出口参数:无
****************************************************************************/
void  GUI_VLine(uint16 y0,  uint16 y1,uint8 x,uint16 colour)
{  
        uint16  bak;

           if(y0>y1)                                                                         // 对y0、y1大小进行排列,以便画图
           {
                    bak = y1;
                      y1 = y0;
                      y0 = bak;
           }
   
           do
           {
                    GUI_Point(x, y0,colour);                // 逐点显示,描出垂直线
              y0++;
           }while(y1>=y0);
}
/****************************************************************************
* 名称:void  TFT_Colorfyl(uint16 colour)
* 功能:彩条全屏
* 入口参数:uint16 colour:颜色
* 出口参数:无
****************************************************************************/
void  TFT_Colorful(uint16 colour)
{  
        uint16 i;
       
        for(i=0;i<320;i++)
        {
        TFT_Clear(0,i,240,1,colour);
        colour-=1234;
        }
       
}

出0入0汤圆

发表于 2009-4-21 12:36:46 | 显示全部楼层
我的lpc2103没把这屏点起来,郁闷中.....

出0入0汤圆

发表于 2009-4-21 12:55:58 | 显示全部楼层
都差不多...初始化有点不同..

        PINSEL0 &=~(3<<0);
        PINSEL0 &=~(3<<2);
        PINSEL0 &=~(3<<4);
        PINSEL1 &=~(3<<10);
        PINSEL1 &=~(3<<12);

我去看看手册..

出0入0汤圆

发表于 2009-4-21 13:15:42 | 显示全部楼层
这个复位值就是0,   不设置应该也是可以的吧..晚上带示波器看看吧.

我觉得还是延时...你的PLL是怎么设置的?

出0入0汤圆

发表于 2009-4-22 10:53:33 | 显示全部楼层
密切关注中...

出0入0汤圆

发表于 2009-4-22 11:24:32 | 显示全部楼层
楼主,牛人!

出0入0汤圆

发表于 2009-4-22 11:39:46 | 显示全部楼层
呵呵
有这么厉害的人!!

出0入0汤圆

发表于 2009-4-22 11:39:46 | 显示全部楼层
呵呵
有这么厉害的人!!

出0入0汤圆

发表于 2009-4-22 11:41:46 | 显示全部楼层
奇怪..还是没点亮...发现一个问题我的应该也是那27元的屏但我那CS是高有效,看你的程序应该是低有效..我的屏在MEGA16上点过.

出0入4汤圆

发表于 2009-4-22 13:01:49 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-4-25 00:37:44 | 显示全部楼层
哪个屏做的?
给个链接,也有兴趣搞一个

出0入0汤圆

发表于 2009-4-25 23:32:59 | 显示全部楼层
看看

出0入0汤圆

发表于 2009-4-26 00:22:55 | 显示全部楼层
很好,感谢分享!

出0入0汤圆

发表于 2009-4-30 09:42:30 | 显示全部楼层
2148有FIO的 楼主用快速IO,速度会快很多,昨天移值了个JPEG的解码库,不过是KEIL环境下的,在ADS上用不了。现在可以显示图片了,不过没有文件系统,准备加了文件系统。

出0入0汤圆

发表于 2009-5-5 08:33:52 | 显示全部楼层
刚买了个LCD  学习学习

出0入0汤圆

发表于 2009-5-5 09:36:06 | 显示全部楼层
多谢,收藏了 正准备给我老婆做个电子书

出0入0汤圆

发表于 2009-6-2 12:17:03 | 显示全部楼层
顶晚了~~~~

出0入0汤圆

发表于 2009-6-2 12:41:54 | 显示全部楼层
牛人太多了

出0入0汤圆

发表于 2009-6-2 16:10:35 | 显示全部楼层
加上JPG解码

出0入0汤圆

发表于 2009-6-2 16:29:08 | 显示全部楼层
请教一下,字库文件可不可以放在sd卡中呢? 这样是不是可以节省资源。

出0入0汤圆

发表于 2009-6-2 19:20:46 | 显示全部楼层
很好,收下后看看,谢谢!

出0入0汤圆

发表于 2009-6-6 21:44:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-7 13:31:43 | 显示全部楼层
都是牛人啊

出0入134汤圆

发表于 2009-6-11 20:35:27 | 显示全部楼层
我也准备进这个屏了

出0入0汤圆

发表于 2009-7-15 08:45:12 | 显示全部楼层
请问楼主无OS,有FATFS,做TXT电子书(带书签)怎么做?

出0入0汤圆

发表于 2009-7-15 09:04:20 | 显示全部楼层
谢谢楼主,学习下~~~

出0入0汤圆

发表于 2009-7-26 23:02:46 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-14 11:56:56 | 显示全部楼层
呵呵  现在才看到  顶一次啊

出0入0汤圆

发表于 2009-8-15 06:49:49 | 显示全部楼层
很好

出0入0汤圆

发表于 2009-8-15 19:13:24 | 显示全部楼层
我也用BMP+FATFS+SD卡做了个数码相框,现在有个小问题,BMP文件比240*320小的时候,比如238*320显示就不正常了,同样的程序改为读BIN文件可以正常显示(对LCD的操作无误),观察BMP文件的大小,发现后者比前者小1280B,按道理来说是要小1920((240*320-238*320)*3=1920)才对吧,希望大家指点一下

出0入0汤圆

发表于 2009-8-25 22:03:21 | 显示全部楼层
赞楼主
学习了

出0入0汤圆

发表于 2009-9-2 16:08:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-9 01:55:00 | 显示全部楼层
LZ的精神可嘉。我可以送LZ:grqd_xp 一张27元TFT 的PCB,你可以弄漂亮点。

出0入0汤圆

发表于 2009-9-9 08:06:29 | 显示全部楼层
不错呀,支持一个

出0入0汤圆

发表于 2009-9-9 09:19:09 | 显示全部楼层
好贴。

出0入0汤圆

发表于 2009-10-5 17:59:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-5 18:14:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-5 19:56:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-6 00:51:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-6 11:20:15 | 显示全部楼层
不错,学习一下

出0入0汤圆

发表于 2009-10-6 11:32:12 | 显示全部楼层
我也收藏了27元的TFT,,还在放在箱底。

出0入0汤圆

发表于 2009-10-6 11:51:48 | 显示全部楼层
牛人啊

出0入0汤圆

发表于 2009-10-8 17:25:57 | 显示全部楼层
顶。。。。。

出0入0汤圆

发表于 2009-10-10 10:43:02 | 显示全部楼层
先MARK

出0入0汤圆

发表于 2009-10-10 13:37:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-24 11:03:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-24 11:28:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-24 16:19:10 | 显示全部楼层
这个资料不错。

出0入0汤圆

发表于 2009-10-24 17:38:52 | 显示全部楼层
买屏去

出0入0汤圆

发表于 2009-10-27 22:32:48 | 显示全部楼层
资料不错

出0入0汤圆

发表于 2009-10-29 23:07:03 | 显示全部楼层
也想玩玩,楼主屏在哪买的给个链接,好吗?我在淘宝上怎么没找到.谢谢!!

出0入0汤圆

发表于 2009-11-15 10:10:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-15 15:00:51 | 显示全部楼层
顶了顶了

出0入0汤圆

发表于 2009-11-16 16:46:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-16 18:40:44 | 显示全部楼层
HEN HAO HEN QIANG DA

出0入0汤圆

发表于 2009-11-16 21:25:09 | 显示全部楼层
要把JPG的搞进去就好了

出0入0汤圆

发表于 2009-12-4 11:28:10 | 显示全部楼层
非常好!!

出0入0汤圆

发表于 2009-12-8 22:19:16 | 显示全部楼层
不错

出0入0汤圆

发表于 2009-12-11 13:34:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-11 14:50:17 | 显示全部楼层
强烈要求原图做参照
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 09:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表