zhou__mi 发表于 2009-7-11 12:36:18

MCS-51单片机装备 2.4英寸 TFT LCD 触摸屏

2.4英寸 TFT LCD 买的是 34元的 + 2元的转接板;PCB是自己设计做的;再配上触摸屏及控制器IC。MCS-51单片机用的是STC11L60XE 。

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460251.jpg
显示效果1.jpg (原文件名:显示效果1.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460252.jpg
显示效果2.jpg (原文件名:显示效果2.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460253.jpg
触摸显示.jpg(原文件名:显示效果4.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460254.jpg
全部元件 (原文件名:全部元件.jpg)
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460255.jpg
焊接组装1.jpg (原文件名:焊接组装1.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460256.jpg
焊接组装2.jpg (原文件名:焊接组装2.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460257.jpg
焊接组装3.jpg (原文件名:焊接组装4.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460258.jpg
焊接组装4.jpg (原文件名:焊接组装5.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460259.jpg
焊接组装5.jpg (原文件名:焊接组装6.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460260.jpg
焊接组装6.jpg (原文件名:焊接组装7.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460261.jpg
焊接组装7.jpg (原文件名:焊接组装8.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460262.jpg
焊接组装8.jpg (原文件名:焊接组装9.jpg)

honami520 发表于 2009-7-11 13:23:11

看上去很漂亮啊!呵呵!!!!!!!!!!!!!!!!!!那个34的TFT我也收藏了在,可惜没有时间玩,就没买!

zhou__mi 发表于 2009-7-11 13:26:19

有空将触摸程序调试好。

wfbaaa 发表于 2009-7-11 14:47:07

挺好的,没用啊

powerg7 发表于 2009-7-11 14:51:43

51还是很慢啊

zhou__mi 发表于 2009-7-11 15:03:02

MCS-51单片机用的是STC11L60XE,运行速度是传统51的8-12倍。我使用33MHz晶振时,模拟ISP操作VS1003B 和SD卡,可以流畅播放192kbps 44kHz的MP3歌曲。显示图片、文字速度也很快。显示上图的文字时我用的11.0592M,为了显示一个看一个字,每个字显示后面加了2ms延时。
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460289.jpg
(原文件名:AS-04 MP3播放 1.jpg)

liuhengming 发表于 2009-7-11 15:13:47

这个51不是很慢的 和AVR一样也是单周期的指令

micy 发表于 2009-7-11 16:43:10

楼主 还有没有多的PCB啊?

xiaobendan 发表于 2009-7-11 16:54:15

这个还真是不错

dlbfp001 发表于 2009-7-11 17:48:57

TFT是在哪买的?

zhou__mi 发表于 2009-7-11 21:29:52

楼主 还有没有多的PCB啊?
PCB多余转让或易货交换:
http://item.taobao.com/auction/item_detail.jhtml?item_id=27a335693e8338ba7aebe3a6df136539&x_id=0db2

TFT是在哪买的?
TFT快卖完了:
http://item.taobao.com/auction/item_detail-db2-2cf2178c23c9cc37cc42ee7f9aefc99e.htm

fy024 发表于 2009-7-11 21:34:46

mark

zhou__mi 发表于 2009-7-14 18:45:48

触摸屏显示效果(有人提出,做个产品,小朋友可以写字画漫画。看看是不是有雏形了!):
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_461328.jpg
(原文件名:显示效果5.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_461329.jpg
(原文件名:显示效果6.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_461330.jpg
(原文件名:显示效果7.jpg)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_461331.jpg
(原文件名:显示效果8.jpg)

今天触摸屏调试时发现X-、 Y+设计时调了,PCB上要更改。
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_461325.JPG
(原文件名:触摸更正2.JPG)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_461326.JPG
(原文件名:触摸更正6.JPG)

http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_461327.JPG
(原文件名:触摸更正7.JPG)

warmonkey 发表于 2009-7-15 11:33:12

做的很不错
可否上传源码?

cinderellah 发表于 2009-7-15 11:42:09

mrak

lixiangwen 发表于 2009-7-15 13:54:44

能上些资料不?? ~~mark~~~

HTT007 发表于 2009-7-15 14:39:31

好羡慕啊,顶》》》》》》》

zhou__mi 发表于 2009-7-15 22:58:15

程序在“AS-04单片机实验开发板”上硬件(STC11L60XE 11.0592MHz)实验调试通过。
(AS-04 MCU StudyBoard + LCD1602 + 2.4 TFT LCD touch panel + OLED + VS1003B MP3)

/*----------------------------------------------------------------------------------------------
TFT LCD实验01:        显示彩条、单色彩色、小图片的测试
Cx51语言程序,文件名:main.c等       
程序在“AS-04单片机实验开发板”上硬件(STC11L60XE 11.0592MHz)实验调试通过。
(AS-04 MCU StudyBoard + LCD1602 + 2.4 TFT LCD touch panel + OLED + VS1003B MP3)
电子科技大学成都学院 周密,20090714。QQ1881003,http://shop34222612.taobao.com/       
-----------------------------------------------------------------------------------------------*/

由于时间问题,没有自己编程写程序(有空还是应该自己写),不是原创;PCB设计和硬件焊接组装是原创。
特此声明!如果网友认为侵权,请联系我(QQ 1881003)!

致谢:
LCD程序根据LCD屏店主提供的以及其他网友的程序移植修改;
触摸屏手写程序根据网友“正点原子@SCUT”的STM32程序移植修改;
OLED程序根据网友“草真多”的AVR程序移植修改。

这里顺便说一句,移植修改程序,有时候比自己编写还费神费事哦!

程序和原理图如下:

(为了方便初学单片机的网友,这里是Keil 工程文件,可以直接使用点击此处下载 ourdev_461600.rar(文件大小:65K) (原文件名:LTM024D250 UH7843SSTC11L60XE 11.0592MHz -1.rar) )

注意UH7843的 3、4要交换,最好将2、5也交换,调试时才发现的,开板前检查了N次,都没发现。一定要先做几个样品才是,但为了省钱就没有。
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_461605.JPG
(原文件名:TFT sch.JPG)

zhou__mi 发表于 2009-7-15 23:14:41

/*-----------------------------------------------------------------------------------------------
TFT LCD实验01:        显示彩条、单色彩色、小图片的测试
Cx51语言程序,文件名:main.c等       
程序在“AS-04单片机实验开发板”上硬件(STC11L60XE 11.0592MHz)实验调试通过。
(AS-04 MCU StudyBoard + LCD1602 + 2.4 TFT LCD touch panel + OLED + VS1003B MP3)
电子科技大学成都学院 周密,20090714。QQ1881003,http://shop34222612.taobao.com/       
-----------------------------------------------------------------------------------------------*/

#include "define.h"
#include "lcd.h"

void main(void)
{
        MUC_Init();
       
                LCD_Init();
                //LCD_ON = 1;
                while(1)
                {
                LCD_test();
                }
}

zhou__mi 发表于 2009-7-15 23:15:02

/*-------------------------               
       VCC        22        --|       |--1        GND
       VCC        21        --|       |--2        GND
       VCC        20        --|       |--3        GND       
        VCCIO        19        --|       |--4        #RST
        VCCIO        18        --|       |--5        NC
          D0        17        --|       |--6        #RD
          D1        16        --|       |--7        #WR
          D2        15        --|       |--8        #CS
          D3        14        --|       |--9        RS
          D4        13        --|       |--10        D7
          D5        12        --|       |--11        D6
                          
VCC        :2.6~3.3V
VCCIO        :1.6~3.3V
-------------------------*/

#include "lcd.h"
#include "define.h"

uint color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f};


void delay_us(uchar t)                //延时函数t=1时为1us延时程序
{       
        {       
                for(t=0;t<1;t++)    //125应根据实验进行补偿调整为123(11.0592MHz)
                {;}       
        }
}



void delay_ms(uint t)                  //延时函数t=1时为1ms延时程序
{
        ucharj=0;                    //根据汇编代码分析表明,用j进行的内部循环大约延时8us(12MHz)
        while(t--)
        {       
                for(j=0;j<113;j++)    //125应根据实验进行补偿调整为123(11.0592MHz)
                {;}       
        }
}



void MUC_Init()
{
                P0=0xff;
    P1=0xff;
           P2=0xff;
           P3=0xff;
}

//写寄存器地址函数
void LCD_WR_REG(uchar index)
{
//        delay_us(10);
        LCD_RS = 0;
        LCD_CS = 0;
        DATA = index;
        LCD_WR = 0;
        LCD_WR = 1;
        LCD_CS = 1;
        LCD_RS = 0;
}

//写8位数据函数
void LCD_WR_DATA8(uchar pd)
{
//        delay_us(10);

        LCD_RS = 1;
        LCD_CS = 0;
        DATA = pd;
        LCD_WR = 0;
        LCD_WR = 1;
        LCD_CS = 1;
        LCD_RS = 0;
}

//写寄存器数据函数
//输入:dbw 数据位数,1为16位,0为8位。
void LCD_WR_CMD(uchar dbw,uchar index,uint val)
{
        LCD_RS = 0;
        LCD_CS = 0;
        DATA = index;
        LCD_WR = 0;
        LCD_WR = 1;
        LCD_CS = 1;
        LCD_RS = 0;

        delay_us(1);

        if(dbw)
        {
                LCD_RS = 1;
                LCD_CS = 0;
                DATA = (uchar)(val>>8);
                LCD_WR = 0;
                LCD_WR = 1;
                LCD_CS = 1;
                LCD_RS = 0;
        }
        delay_us(1);

        LCD_RS = 1;
        LCD_CS = 0;
        DATA = (uchar)val;
        LCD_WR = 0;
        LCD_WR = 1;
        LCD_CS = 1;
        LCD_RS = 0;
}

/*

//读16位寄存器数据函数
//输入:index 寄存器地址
//输出:
unsigned int LCD_RD_REG16(uchar index)
{
        unsigned int pd;

        LCD_RS = 0;
        _nop_();
        _nop_();
        LCD_CS = 0;
        _nop_();
        _nop_();
        DATA = index;
        _nop_();
        _nop_();
        LCD_WR = 0;
        _nop_();
        _nop_();
        LCD_WR = 1;
        _nop_();
        _nop_();
        LCD_CS = 1;
        _nop_();
        _nop_();
        LCD_RS = 0;
        _nop_();
        _nop_();

        LCD_RS = 1;
        _nop_();
        _nop_();
        LCD_CS = 0;
        //OEB = 0x00;
        DATA = 0xFF;
        LCD_RD = 0;
        _nop_();
        _nop_();
        LCD_RD = 1;
        pd = DATA;
        LCD_CS = 1;
        LCD_RS = 0;
       
        pd = pd<<8;

        LCD_RS = 1;
        _nop_();
        _nop_();
        LCD_CS = 0;
        _nop_();
        _nop_();
        LCD_RD = 0;
        _nop_();
        _nop_();
        LCD_RD = 1;
        pd = pd + DATA;
        LCD_CS = 1;
        LCD_RS = 0;
        return pd;
}

*/

//写16位数据函数
void LCD_WR_Data(uint val)
{
        //LCD_RS = 1;
        LCD_CS = 0;
        DATA = (uchar)(val>>8);
        LCD_WR = 0;
        LCD_WR = 1;
        DATA = (uchar)val;
        LCD_WR = 0;
        LCD_WR = 1;
        LCD_CS = 1;
        //LCD_RS = 0;
}

//初始化函数
void LCD_Init()
{
        delay_ms(20000);
        LCD_RST = 0;
        delay_ms(1000);
        LCD_RST = 1;
        delay_ms(1000);

        //initializing funciton 1
        delay_us(10);
        LCD_WR_REG(0xA1);
        delay_us(16);
        LCD_WR_DATA8(0x00);
        delay_us(90);
        LCD_WR_REG(0xA0);
        delay_us(10);
        LCD_WR_DATA8(0x00);
        delay_us(10);
        LCD_WR_CMD(0,0x70,0xC8);

        delay_ms(20);
       
        LCD_WR_CMD(0,0x72,0xA3);
        delay_us(10);
        LCD_WR_CMD(0,0x73,0x04);
        delay_us(10);
        LCD_WR_CMD(0,0x75,0x45);
        delay_us(10);
        LCD_WR_CMD(0,0x76,0x23);
        delay_us(10);
        LCD_WR_CMD(0,0x77,0x08);
        delay_us(10);
        LCD_WR_CMD(0,0x78,0x08);
        delay_us(10);
        LCD_WR_CMD(0,0x79,0x00);
        delay_us(10);
        LCD_WR_CMD(0,0x7F,0xF0);
        delay_us(10);

        LCD_WR_CMD(0,0x71,0x81);        //

        delay_ms(2);

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

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

        delay_us(400);
        LCD_WR_CMD(0,0x85,0x74);
        delay_us(40);

        LCD_WR_CMD(0,0x00,0x04);        //扫描方向控制
        delay_us(10);
        LCD_WR_CMD(0,0x01,0x07);        //扫描方向控制
        delay_us(10);

        LCD_WR_CMD(0,0x02,0x00);        //X
        LCD_WR_CMD(1,0x03,0x0000);        //Y

        //面板大小设置
        LCD_WR_CMD(0,0x04,0xEF);        //结束列数(0~239)       
        LCD_WR_CMD(1,0x05,0x013F);        //结束行数(0~319)

        //窗口设置
        LCD_WR_CMD(0,0x06,0x00);        //水平起始位置
        LCD_WR_CMD(1,0x07,0x0000);        //垂直起始位置
        LCD_WR_CMD(0,0x08,0xEF);        //水平结束位置
        LCD_WR_CMD(1,0x09,0x013F);        //垂直结束位置

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

//演示程序
void LCD_test()
{
        uint temp,num;
        unsigned int *p;
        uchar n,c,g;

//        LCD_WR_CMD(0,0x00,0x20);          //改变垂直方向显示
//        LCD_WR_CMD(0,0x01,0x07);          //改变垂直方向显示
        LCD_WR_CMD(0,0x02,0x00);          //X
        LCD_WR_CMD(1,0x03,0x0000);//Y
        LCD_WR_CMD(0,0x04,0xEF);          //结束列数(0~239)       
        LCD_WR_CMD(1,0x05,0x013F);//结束行数(0~319)

        //显示彩条       
        LCD_WR_REG(0x0E);
        LCD_RS = 1;
        for(n=0;n<8;n++)
       {
          temp=color;
                        for(num=40*240;num>0;num--)
          LCD_WR_Data(temp);
                        delay_ms(1);
       }
        delay_ms(100);

        //显示单色彩色
        for(c=0;c<8;c++)
        {
                temp = color;
                LCD_WR_CMD(0,0x2,0);      //0-239
                LCD_WR_CMD(1,0x3,0);      //0-319
               
                LCD_WR_REG(0x0E);
                LCD_RS = 1;
                for(n=0;n<240;n++)
                {
                                for(num=0;num<320;num++)
                          LCD_WR_Data(temp);
                                delay_ms(1);       
               }
           delay_ms(100);
        }


        //显示小QQ图标
           for(g=0;g<8;g++)
        {
                for(c=0;c<6;c++)
                {
                        LCD_WR_CMD(0,0x02,c*40);
                        LCD_WR_CMD(1,0x03,g*40);
                        LCD_WR_CMD(0,0x04,c*40+39);
                        LCD_WR_CMD(1,0x05,g*40+39);

                        //LCD_WR_CMD(0,0x00,0x64);
                        LCD_WR_REG(0x0E);
                        LCD_RS = 1;
                        p = gImage_qqp;
                           for(num=0;num<1600;num++)        //
                        {               
                                LCD_WR_Data(*p++);
                                        //delay_ms(1);
                        }              
                }
        }
        delay_ms(100);
}

zhou__mi 发表于 2009-7-16 12:26:16

昨天调成功的OLED
http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_461706.jpg
(原文件名:旋转 0715_110716.jpg)

oldfang 发表于 2009-7-16 12:54:57

MARK

yanxiao1227 发表于 2009-7-17 12:49:05

LZ 很猛,那个触摸屏那么便宜啊??
有时间我也做下。

xixiangfeng 发表于 2009-7-19 20:33:29

楼主的TFT和VS1003模块很好,我经过半天努力就把TFT完全焊接并演示成功了!

ytian37-m 发表于 2009-7-22 19:32:50

真是不错呀!!!

touch_mcu 发表于 2009-7-26 15:39:32

记下,

csclz 发表于 2009-7-26 17:11:06

不错

ggyyll8683 发表于 2009-7-26 17:25:23

很强啊

clever0725 发表于 2009-7-26 19:32:53

爱消失在7月末

wajlh 发表于 2009-7-26 19:48:47

make

AVR20091915 发表于 2009-7-28 17:06:51

#include<avr/io.h>

unsigned long int color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f};

//数据控制总线   
#define          CS_H          PORTD |= (1<<2)
#define   CS_L    PORTD &=~(1<<2)

#define          RS_H    PORTD |= (1<<3)
#define          RS_L          PORTD &=~(1<<3)

#define          RD_H   PORTD |= (1<<5)
#define          RD_L          PORTD &=~(1<<5)

#define          WR_H    PORTD |= (1<<4)
#define          WR_L    PORTD &=~(1<<4)
       
#define          RST_H   PORTD |= (1<<6)
#define          RST_L   PORTD &=~(1<<6)
extern unsigned charhao[];
#define   DATA    PORTC
//写寄存器地址函数
void LCD_WR_REG(unsigned char index)
{
//        delay_us(10);
        RS_L;
        delay_us(20);
        CS_L;
        delay_us(20);
        DATA = index;
        WR_L;
        delay_us(20);
        WR_H;
        delay_us(20);
        CS_H;
        delay_us(20);
        RS_L;
        delay_us(20);
}

//写8位数据函数
void LCD_WR_DATA8(unsigned char pd)
{
//        delay_us(10);

        RS_H;
        delay_us(20);
        CS_L;
        delay_us(20);
        DATA = pd;
        WR_L;
        delay_us(20);
        WR_H;
        delay_us(20);
        CS_H;
        delay_us(20);
        RS_L;
        delay_us(20);
}

//写寄存器数据函数
//输入:dbw 数据位数,1为16位,0为8位。
void LCD_WR_CMD(unsigned char dbw,unsigned char index,unsigned int val)
{
        RS_L;
        delay_us(20);
        CS_L;
        delay_us(20);
        DATA = index;
        WR_L;
        delay_us(20);
        WR_H;
        delay_us(20);
        CS_H;
        delay_us(20);
        RS_L;

        delay_us(20);

        if(dbw)
        {
                RS_H;
                delay_us(20);
                CS_L;
                delay_us(20);
                DATA = (unsigned char)(val>>8);
                WR_L;
                delay_us(20);
                WR_H;
                delay_us(20);
                CS_H;
                delay_us(20);
                RS_L;
                delay_us(20);
        }
        delay_us(20);

        RS_H;
        delay_us(20);
        CS_L;
        delay_us(20);
        DATA = (unsigned char)val;
        WR_L;
        delay_us(20);
        WR_H;
        delay_us(20);
        CS_H;
        delay_us(20);
        RS_L;
        delay_us(20);
}


//写16位数据函数
void LCD_WR_Data(unsigned int val)
{
        RS_H;
        delay_us(20);
        CS_L;
        delay_us(20);
        DATA = (unsigned char)(val>>8);
        WR_L;
        delay_us(20);
        WR_H;
        delay_us(20);
        delay_us(20);
        CS_H;
        delay_us(20);
        RS_L;
        delay_us(30);
        RS_H;
        delay_us(20);
        CS_L;
        delay_us(20);
        DATA = (unsigned char)val;
        WR_L;
        delay_us(20);
        WR_H;
        delay_us(20);
        CS_H;
        delay_us(20);
        RS_L;
}

//初始化函数
void LCD_Init()
{
        //delay_ms(20000);
        RST_L;
        delay_ms(1000);
        RST_H;
        delay_ms(1000);

        //initializing funciton 1
        delay_us(10);
        LCD_WR_REG(0xA1);
        delay_us(16);
        LCD_WR_DATA8(0x00);
        delay_us(90);
        LCD_WR_REG(0xA0);
        delay_us(10);
        LCD_WR_DATA8(0x00);
        delay_us(10);
        LCD_WR_CMD(0,0x70,0xC8);

        delay_ms(20);
       
        LCD_WR_CMD(0,0x72,0xA3);
        delay_us(10);
        LCD_WR_CMD(0,0x73,0x04);
        delay_us(10);
        LCD_WR_CMD(0,0x75,0x45);
        delay_us(10);
        LCD_WR_CMD(0,0x76,0x23);
        delay_us(10);
        LCD_WR_CMD(0,0x77,0x08);
        delay_us(10);
        LCD_WR_CMD(0,0x78,0x08);
        delay_us(10);
        LCD_WR_CMD(0,0x79,0x00);
        delay_us(10);
        LCD_WR_CMD(0,0x7F,0xF0);
        delay_us(10);

        LCD_WR_CMD(0,0x71,0x81);        //

        delay_ms(2);

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

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

        delay_us(400);
        LCD_WR_CMD(0,0x85,0x74);
        delay_us(40);

        LCD_WR_CMD(0,0x00,0x04);        //扫描方向控制
        delay_us(10);
        LCD_WR_CMD(0,0x01,0x07);        //扫描方向控制
        delay_us(10);

        LCD_WR_CMD(0,0x02,0x00);        //X
        LCD_WR_CMD(1,0x03,0x0000);        //Y

        //面板大小设置
        LCD_WR_CMD(0,0x04,0xEF);        //结束列数(0~239)       
        LCD_WR_CMD(1,0x05,0x013F);        //结束行数(0~319)

        //窗口设置
        LCD_WR_CMD(0,0x06,0x00);        //水平起始位置
        LCD_WR_CMD(1,0x07,0x0000);        //垂直起始位置
        LCD_WR_CMD(0,0x08,0xEF);        //水平结束位置
        LCD_WR_CMD(1,0x09,0x013F);        //垂直结束位置

        delay_us(10);
        LCD_WR_CMD(0,0x0A,0x00);
        delay_us(10);
        LCD_WR_CMD(0,0x0B,0x00);
        delay_us(10);
        LCD_WR_CMD(0,0x0C,0x00);
        delay_us(10);
        LCD_WR_CMD(0,0x14,0x00);
        delay_us(10);
        LCD_WR_CMD(0,0x15,0x00);
        delay_us(10);
        LCD_WR_CMD(0,0x16,0x00);
        delay_us(10);
        LCD_WR_CMD(1,0x17,0x01FF);
        delay_us(10);
        LCD_WR_CMD(1,0x18,0x01FF);
        delay_us(10);       
        LCD_WR_CMD(0,0x13,0x00);
        delay_us(10);
        LCD_WR_CMD(1,0x19,0x01FF);
        delay_us(10);
        LCD_WR_CMD(1,0x1B,0x01FF);
        delay_us(10);
        LCD_WR_CMD(1,0x1C,0x01FF);
        delay_us(10);
        LCD_WR_CMD(1,0x1A,0x01FF);       
        delay_us(10);
        LCD_WR_CMD(0,0x1D,0x0E);
        delay_us(10);
        LCD_WR_CMD(0,0x10,0x06);                //开显示
        LCD_WR_REG(0x0E);
        delay_us(100);
}
//*******************************演示程序********************************

void LCD_test()
{
        unsigned int temp,num,s;
        unsigned char n;
       
        LCD_WR_CMD(0,0x02,0x00);   //X方向开始点
        LCD_WR_CMD(1,0x03,0x0000);   //Y方向开始点
        LCD_WR_CMD(0,0x04,0xEF);   //X方向结束点
        LCD_WR_CMD(1,0x05,0x013F);   //Y方向结束点
       
        LCD_WR_REG(0x0E);            //写数据命令控制
        CS_L;
        RS_H;
        for(n=8;n>0;n--)
        {
          temp=color;
                for(num=20*240;num>0;num--)
                LCD_WR_Data(temp);
        }
        for(n=8;n>0;n--)
        {
        LCD_WR_CMD(0,0x02,0x00);
        LCD_WR_CMD(1,0x03,0x0000);
        LCD_WR_CMD(0,0x04,0xEF);
        LCD_WR_CMD(1,0x05,0x013F);
       
        LCD_WR_REG(0x0E);
        CS_L;
        RS_H;
          temp=color;
                for(s=0;s<240;s++);
                for(num=0;num<320;num++)
                LCD_WR_Data(temp);
        }
        CS_H;
}

zhou__mi 发表于 2009-7-28 17:34:28

//写寄存器地址函数
void LCD_WR_REG(unsigned char index)
{
//      delay_us(10);
      RS_L;
      delay_us(20);
      CS_L;
      delay_us(20);
      DATA = index;
      WR_L;
      delay_us(20);
      WR_H;
      delay_us(20);
      CS_H;
      delay_us(20);
      RS_L;
      delay_us(20);
}

//写8位数据函数
void LCD_WR_DATA8(unsigned char pd)
{
//      delay_us(10);

      RS_H;
      delay_us(20);
      CS_L;
      delay_us(20);
      DATA = pd;
      WR_L;
      delay_us(20);
      WR_H;
      delay_us(20);
      CS_H;
      delay_us(20);
      RS_L;
      delay_us(20);
}

//写寄存器数据函数
//输入:dbw 数据位数,1为16位,0为8位。
void LCD_WR_CMD(unsigned char dbw,unsigned char index,unsigned int val)
{
      RS_L;
      delay_us(20);
      CS_L;
      delay_us(20);
      DATA = index;
      WR_L;
      delay_us(20);
      WR_H;
      delay_us(20);
      CS_H;
      delay_us(20);
      RS_L;

      delay_us(20);

      if(dbw)
      {
                RS_L;
                delay_us(20);
                CS_L;
                delay_us(20);
                DATA = (unsigned char)(val>>8);
                WR_L;
                delay_us(20);
                WR_H;
                delay_us(20);
                CS_H;
                delay_us(20);
                RS_L;
                delay_us(20);
      }
      delay_us(20);

      RS_L;
      delay_us(20);
      CS_L;
      delay_us(20);
      DATA = (unsigned char)val;
      WR_L;
      delay_us(20);
      WR_H;
      delay_us(20);
      CS_H;
      delay_us(20);
      RS_L;
      delay_us(20);
}


//写16位数据函数
void LCD_WR_Data(unsigned int val)
{
      RS_H;
      delay_us(20);
      CS_L;
      delay_us(20);
      DATA = (unsigned char)(val>>8);
      WR_L;
      delay_us(20);
      WR_H;
      delay_us(20);
      delay_us(20);
      CS_H;
      delay_us(20);
      RS_L;
      delay_us(30);

      RS_H;
      delay_us(20);
      CS_L;
      delay_us(20);
      DATA = (unsigned char)val;
      WR_L;
      delay_us(20);
      WR_H;
      delay_us(20);
      CS_H;
      delay_us(20);
      RS_L;
}

去掉延时

zhou__mi 发表于 2009-7-30 13:24:22

1、如果使用以前网上流传的程序,678脚是错误的。2、电源要处理


http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_465883.JPG
(原文件名:引脚更正.JPG)

http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_465884.JPG
(原文件名:电源处理.JPG)
/******************************
//RS指令选择:0 命令   1 数据
//RS------PC3
******************************/
#define   LCD_RS_H           PORTC |= 1<<3
#define   LCD_RS_L   PORTC &= ~(1<<3)

/*****************************
//写控制信号
//WR-----PC4                                             (改接我的TFT LCD板的CS)
******************************/
#define   LCD_WR_H   PORTC |= 1<<4
#define   LCD_WR_L   PORTC &= ~(1<<4)

/******************************
//读控制信号
//RD-----PC5                                             (改接我的TFT LCD板的WR)
******************************/
#define   LCD_RD_H   PORTC |= 1<<5
#define   LCD_RD_L   PORTC &= ~(1<<5)                  

/******************************
//CS片选信号:0 无效   1 有效
//CS-----PC6                                             (改接我的TFT LCD板的RD)
*******************************/
#define   LCD_CS_H   PORTC |= 1<<6
#define   LCD_CS_L   PORTC &= ~(1<<6)

/******************************
//LCD复位:0 复位    1正常
//RST----PC7
******************************/
#define   LCD_RST_H    PORTC |= 1<<7
#define   LCD_RST_L    PORTC &= ~(1<<7)

/*************************
       数据输出口
**************************/
#define DATAPORTA

tianqing324 发表于 2009-11-9 08:23:52

请问 lz有 3.5寸的手机屏资料吗 ?排线编号是TFT8K0940FPC,谢谢

MiniLight 发表于 2009-11-14 21:19:47

想知道TFT是在什么地方买到的```

tear086 发表于 2009-11-15 12:43:29

mark

wxdl 发表于 2009-11-15 22:48:31

很不错

liangxiao 发表于 2009-11-28 16:09:12

好酷阿!!!

Huaan 发表于 2009-11-28 16:39:06

【32楼】 zhou__mi
积分:74
派别:
等级:------
来自:
        1、如果使用以前网上流传的程序,678脚是错误的。2、电源要处理

你确定678脚是错误的吗?

haitao178 发表于 2009-12-10 16:25:31

mark

zjn8888 发表于 2009-12-10 17:06:03

nbanba 发表于 2010-1-12 10:07:22

MARK

iverkon 发表于 2010-1-12 15:49:40

hwdpaley 发表于 2010-1-12 16:26:45

楼主强啊!

elecfun 发表于 2010-1-12 18:26:11

呵呵好东西啊买了3块虽然一起买了转接板,但还是不方便,一直想做个这样的转接板,没想到楼主已经做了
不知道楼主现在还有没有转接板,要是有触摸板和IC的话那就更好了。

librae8226 发表于 2010-1-14 00:23:57

很爽啊~

hamipeter 发表于 2010-2-18 00:20:26

赞一个

damoplus 发表于 2010-2-18 00:54:45

赞一个

vermon 发表于 2010-2-18 10:45:40

楼主也是成都的?

tonydh 发表于 2010-2-18 23:13:15

这个必须顶,学习

yusufu 发表于 2010-2-18 23:48:56

顶一个

zengyi703 发表于 2010-2-19 09:10:31

mark

boy364100 发表于 2010-2-19 09:19:03

起得比鸡早。呵呵~

ju748 发表于 2010-2-19 15:24:14

记号记号

wugaohui04 发表于 2010-3-4 15:40:44

mark

woshicainiao 发表于 2010-3-4 18:36:18

MARK,学习

lostmj 发表于 2010-3-4 18:44:34

mark

guozii 发表于 2010-3-8 01:44:03

强银!!

sunliezhi 发表于 2010-3-9 12:09:46

【10楼】 zhou__mi :
PCB多余转让或易货交换:
http://item.taobao.com/auction/item_detail.jhtml?item_id=27a335693e8338ba7aebe3a6df136539&x_id=0db2
里面说全套散件58元,到你的店铺一看却是100元了?

lantian0099 发表于 2010-3-17 14:58:48

mark

LewisJason 发表于 2010-4-10 00:13:44

mark

chenfzg 发表于 2010-4-10 00:41:09

好东西,收藏了!

hpdell 发表于 2010-6-12 16:41:11

不知道哪里有卖的

zhou__mi 发表于 2010-8-19 12:03:30

回复【63楼】hpdell
-----------------------------------------------------------------------

http://item.taobao.com/auction/item_detail.jhtml?item_id=dc1631b1ad8a2cc34d9972a5e656c821&x_id=0db2&received_or_posted=0&buyer_or_seller=0

dengxiaofeng 发表于 2010-8-19 16:57:10

不错的东西呀

cuikai12345 发表于 2010-8-19 21:19:57

mark

trucy 发表于 2010-8-20 16:32:02

回复【12楼】zhou__mi
------------------------------------------------------------------


能不能贡献触摸的调试工程文件
谢谢

trucy2010@163.com

leafjunwing 发表于 2010-9-8 08:46:03

mark

poet_lee 发表于 2010-9-9 17:12:23

mark~

zqd311107 发表于 2010-9-9 18:27:16

很好的资料,谢谢

harng 发表于 2010-10-11 11:51:25

mark

wangma 发表于 2010-10-11 13:09:04

赞一个,呵呵

biguozi 发表于 2010-10-11 14:59:43

马克

aeiowx 发表于 2010-10-13 15:57:37

mark

xunke 发表于 2010-10-13 16:59:44

强!

delconomico 发表于 2010-10-21 15:59:34

mark

chenfzg 发表于 2010-10-28 13:14:58

好,记号!

fresher 发表于 2011-6-8 10:22:49

收藏了,厉害啊。

jayzah 发表于 2011-6-17 21:07:52

mark

YJ13480044 发表于 2011-7-4 18:23:00

很强大支持下先

WinLiu 发表于 2011-10-19 00:05:41

mark

l09046162 发表于 2011-10-19 08:33:44

mark!!!!

duozcg 发表于 2011-10-19 08:36:54

STC的单片机用久了,引脚容易氧化,不知道是不是没做好防潮

delta8921 发表于 2011-10-19 22:20:46

mark

yuexian85 发表于 2011-10-20 10:33:14

真是羡慕你们这些技术强人啊

mjm2130354 发表于 2012-8-24 17:14:56

请问LZ有没有AVR的LCD TFT驱动例程,我是一个学生级初学者,弄了好久都没搞出来啊

xujielong 发表于 2012-8-27 13:34:02

{:handshake:}

linucos 发表于 2012-8-27 14:03:10

不错不错,学习学习!我还在倒腾12864呢~
页: [1]
查看完整版本: MCS-51单片机装备 2.4英寸 TFT LCD 触摸屏