e1909 发表于 2010-10-2 19:30:14

MEGA16L单片机驱动2.4寸tft,控制芯片为ILI9325

MEGA16L单片机驱动2.4寸tft,控制芯片为ILI9325,谁给一个程序吧。做了几天了都没做出来,特急,那位朋友和我一样是做单片机控制tft显示图形的,或者已做过了,探讨一下

zywh 发表于 2010-10-2 23:06:48

我现在还只能让它显示红、绿、蓝.....只能知道大概的原理....给你看我最近写的程序...
好像如果要显示一张图片的话。。。m16的flash太小了。。。得装SD卡才行哦。。。


#include <avr/io.h>
#define F_CPU 11000000
#include <util/delay.h>

#define Bus_16                        //16位数据模式,如果使用8位模式,请注释词句,如果使用16位模式,请打开词句
#define LCD_DataPORT_H        PORTC                //高8位数据口,8位模式下只使用高8位
#define LCD_DataPIN_H        PINC
#define LCD_DataDDR_H        DDRC
#define LCD_DataPORT_L        PORTA                //低8位数据口,8位模式下低8位可以不接线,请确认PA口已经上拉10K电阻,不宜太小,最小4.7K,推荐10K
#define LCD_DataPIN_L        PINA
#define LCD_DataDDR_L        DDRA

#define LCD_CTRL                PORTD
#define LCD_CTRL_DDR        DDRD
#define LCD_RS                        PD2                //
#define LCD_WR                        PD3
#define LCD_RD                        PD4
#define LCD_CS                        PD0
#define LCD_REST                PD1

#define RS_0                        (LCD_CTRL &= ~(1 << LCD_RS))
#define RS_1                        (LCD_CTRL |= (1 << LCD_RS))

#define WR_0                        (LCD_CTRL &= ~(1 << LCD_WR))
#define WR_1                        (LCD_CTRL |= (1 << LCD_WR))

#define RD_0                        (LCD_CTRL &= ~(1 << LCD_RD))
#define RD_1                        (LCD_CTRL |= (1 << LCD_RD))

#define CS_0                        (LCD_CTRL &= ~(1 << LCD_CS))
#define CS_1                        (LCD_CTRL |= (1 << LCD_CS))

#define REST_0                        (LCD_CTRL &= ~(1 << LCD_REST))
#define REST_1                        (LCD_CTRL |= (1 << LCD_REST))

#define busy_time                5                        //延时时间

#ifdef        Bus_16                        //条件编译-16位数据模式

void LCD_Port_Init(void)                        //LCD端口初始化
{
        LCD_DataDDR_H = 0xff;                //方向为输出
        LCD_DataDDR_L = 0xff;                //方向为输出
        LCD_CTRL_DDR |= (1 << LCD_RS) | (1 << LCD_WR) | (1 << LCD_RD) | (1 << LCD_CS) | (1 << LCD_REST);                //方向输出
       
}

void LCD_Writ_Bus(char VH, char VL)                //并行数据写入函数
{
        LCD_DataPORT_H = VH;
        LCD_DataPORT_L = VL;
        WR_0;
        WR_1;
}
#else                                        //条件编译-8位数据模式
void LCD_Writ_Bus(char VH, char VL)                //并行数据写入函数
{
        LCD_DataPORT_H = VH;
        WR_0;
        WR_1;
        LCD_DataPORT_H = VL;
        WR_0;
        WR_1;
}
#endif

void LCD_Write_Com(char VH,char VL)                        //发送命令
{
        RS_0;
        LCD_Writ_Bus(VH, VL);
}

void LCD_Write_Data(char VH, char VL)                //发送数据
{
        RS_1;
        LCD_Writ_Bus(VH, VL);
}

void Address_set(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2)
{
        LCD_Write_Com(0x00, 0x20); LCD_Write_Data(x1 >> 8, x1);                //设置X坐标位置
        LCD_Write_Com(0x00, 0x21); LCD_Write_Data(y1 >> 8, y1);                //设置Y坐标位置
        LCD_Write_Com(0x00, 0x50); LCD_Write_Data(x1 >> 8, x1);                //开始X
        LCD_Write_Com(0x00, 0x52); LCD_Write_Data(y1 >> 8, y1);                //开始Y
        LCD_Write_Com(0x00, 0x51); LCD_Write_Data(x2 >> 8, x2);                //结束X
        LCD_Write_Com(0x00, 0x53); LCD_Write_Data(y2 >> 8, y2);                //结束Y
        LCD_Write_Com(0x00, 0x22);
}

void LCD_Init(void)
{
        REST_1;
        _delay_ms(busy_time);
        REST_0;
        _delay_ms(busy_time);
        REST_1;
        CS_1;
        RD_1;
        WR_1;
        _delay_ms(busy_time);

        CS_0;                //打开片选使能

        //************* Start Initial Sequence **********//
        LCD_Write_Com(0x00,0xE5); LCD_Write_Data(0x78,0xF0); // set SRAM internal timing
        LCD_Write_Com(0x00,0x01); LCD_Write_Data(0x01,0x00); // set SS and SM bit
        LCD_Write_Com(0x00,0x02); LCD_Write_Data(0x07,0x00); // set 1 line inversion
        LCD_Write_Com(0x00,0x03); LCD_Write_Data(0x10,0x30); // set GRAM write direction and BGR=1.
        LCD_Write_Com(0x00,0x04); LCD_Write_Data(0x00,0x00); // Resize register
        LCD_Write_Com(0x00,0x08); LCD_Write_Data(0x02,0x07); // set the back porch and front porch
        LCD_Write_Com(0x00,0x09); LCD_Write_Data(0x00,0x00); // set non-display area refresh cycle ISC
        LCD_Write_Com(0x00,0x0A); LCD_Write_Data(0x00,0x00); // FMARK function
        LCD_Write_Com(0x00,0x0C); LCD_Write_Data(0x00,0x00); // RGB interface setting
        LCD_Write_Com(0x00,0x0D); LCD_Write_Data(0x00,0x00); // Frame marker Position
        LCD_Write_Com(0x00,0x0F); LCD_Write_Data(0x00,0x00); // RGB interface polarity
        //*************Power On sequence ****************//
        LCD_Write_Com(0x00,0x10); LCD_Write_Data(0x00,0x00); // SAP, BT, AP, DSTB, SLP, STB
        LCD_Write_Com(0x00,0x11); LCD_Write_Data(0x00,0x07); // DC1, DC0, VC
        LCD_Write_Com(0x00,0x12); LCD_Write_Data(0x00,0x00); // VREG1OUT voltage
        LCD_Write_Com(0x00,0x13); LCD_Write_Data(0x00,0x00); // VDV for VCOM amplitude
        LCD_Write_Com(0x00,0x07); LCD_Write_Data(0x00,0x01);
        _delay_ms(50); // Dis-charge capacitor power voltage
        LCD_Write_Com(0x00,0x10); LCD_Write_Data(0x10,0x90); // 1490//SAP, BT, AP, DSTB, SLP, STB
        LCD_Write_Com(0x00,0x11); LCD_Write_Data(0x02,0x27); // DC1, DC0, VC
        _delay_ms(50); // Delay 50ms
        LCD_Write_Com(0x00,0x12); LCD_Write_Data(0x00,0x1F); //001C// Internal reference voltage= Vci;
        _delay_ms(50); // Delay 50ms
        LCD_Write_Com(0x00,0x13); LCD_Write_Data(0x15,0x00); //0x1000//1400   Set VDV for VCOM amplitude1A00
        LCD_Write_Com(0x00,0x29); LCD_Write_Data(0x00,0x27); //0x0012 //001aSet VCM for VCOMH//0x00250034
        LCD_Write_Com(0x00,0x2B); LCD_Write_Data(0x00,0x0D); // Set Frame Rate   000C
        _delay_ms(50); // Delay 50ms
        LCD_Write_Com(0x00,0x20); LCD_Write_Data(0x00,0x00); // GRAM horizontal Address
        LCD_Write_Com(0x00,0x21); LCD_Write_Data(0x00,0x00); // GRAM Vertical Address
        // ----------- Adjust the Gamma Curve ----------//
        LCD_Write_Com(0x00,0x30); LCD_Write_Data(0x00,0x00);
        LCD_Write_Com(0x00,0x31); LCD_Write_Data(0x07,0x07);
        LCD_Write_Com(0x00,0x32); LCD_Write_Data(0x03,0x07);
        LCD_Write_Com(0x00,0x35); LCD_Write_Data(0x02,0x00);
        LCD_Write_Com(0x00,0x36); LCD_Write_Data(0x00,0x08);//0207
        LCD_Write_Com(0x00,0x37); LCD_Write_Data(0x00,0x04);//0306
        LCD_Write_Com(0x00,0x38); LCD_Write_Data(0x00,0x00);//0102
        LCD_Write_Com(0x00,0x39); LCD_Write_Data(0x07,0x07);//0707
        LCD_Write_Com(0x00,0x3C); LCD_Write_Data(0x00,0x02);//0702
        LCD_Write_Com(0x00,0x3D); LCD_Write_Data(0x1D,0x04);//1604
       
        //------------------ Set GRAM area ---------------//
        LCD_Write_Com(0x00,0x50); LCD_Write_Data(0x00,0x00); // Horizontal GRAM Start Address
        LCD_Write_Com(0x00,0x51); LCD_Write_Data(0x00,0xEF); // Horizontal GRAM End Address
        LCD_Write_Com(0x00,0x52); LCD_Write_Data(0x00,0x00); // Vertical GRAM Start Address
        LCD_Write_Com(0x00,0x53); LCD_Write_Data(0x01,0x3F); // Vertical GRAM Start Address
        LCD_Write_Com(0x00,0x60); LCD_Write_Data(0xA7,0x00); // Gate Scan Line
        LCD_Write_Com(0x00,0x61); LCD_Write_Data(0x00,0x01); // NDL,VLE, REV
        LCD_Write_Com(0x00,0x6A); LCD_Write_Data(0x00,0x00); // set scrolling line
        //-------------- Partial Display Control ---------//
        LCD_Write_Com(0x00,0x80); LCD_Write_Data(0x00,0x00);
        LCD_Write_Com(0x00,0x81); LCD_Write_Data(0x00,0x00);
        LCD_Write_Com(0x00,0x82); LCD_Write_Data(0x00,0x00);
        LCD_Write_Com(0x00,0x83); LCD_Write_Data(0x00,0x00);
        LCD_Write_Com(0x00,0x84); LCD_Write_Data(0x00,0x00);
        LCD_Write_Com(0x00,0x85); LCD_Write_Data(0x00,0x00);
        //-------------- Panel Control -------------------//
        LCD_Write_Com(0x00,0x90); LCD_Write_Data(0x00,0x10);
        LCD_Write_Com(0x00,0x92); LCD_Write_Data(0x06,0x00);
        LCD_Write_Com(0x00,0x07); LCD_Write_Data(0x01,0x33); // 262K color and display ON
       
        CS_1;                //关闭片选使能
}

void Pant(char VH, char VL)
{
        int i, j;
        CS_0;                //打开片选使能
        Address_set(0,0,240,320);
        for(i = 0; i < 320; i++)
        {
                for (j = 0; j < 240; j++)
                {
                        LCD_Write_Data(VH, VL);
                }
        }
        CS_1;                //关闭片选使能
}


int main(void)
{
        LCD_Port_Init();        //TFT端口初始化
        LCD_Init();                        //TFT初始化
        Pant(0xff, 0xff);        //TFT清屏
        while(1)
        {
                Pant(0xF8, 0x00);        //红色
                _delay_ms(2000);
                Pant(0x07, 0xE0);        //红色
                _delay_ms(2000);
                Pant(0x00, 0x1F);        //红色
                _delay_ms(2000);
        }
}

turf456 发表于 2010-10-3 02:37:33

如果用PORTC了别忘了禁用JTAG,好多人卡在这里了。
坛子里的程序大把大把,能搜到。改一下端口基本都好使

turf456 发表于 2010-10-3 02:41:12

这是我以前做过的。初始化成功后就是定义区域然后写像素了。基本就是这些。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_587232U0YT8U.jpg
(原文件名:ourdev_575061.jpg)

e1909 发表于 2010-10-3 10:09:59

有没有ILI9325的中文资料,网上搜到的全都是英文的,看不懂,我主要是想看懂初始化tft的细节,深入研究一下

e1909 发表于 2010-10-3 13:32:40

回复【1楼】zywh
-----------------------------------------------------------------------

做出来了,太感谢你了./emotion/em020.gif ./emotion/em020.gif

turf456 发表于 2010-10-3 16:06:46

这些资料没多少是英文的。你找一些关键的就行了,比如扫描方向等,看图就明白了

e1909 发表于 2010-10-3 21:11:06

找到了一部分中文翻译,剩下的麻烦大家再找下

点击此处下载 ourdev_587362FP3A29.rar(文件大小:2.33M) (原文件名:ILI9325.rar)

adai 发表于 2010-10-4 21:51:15

mark

zywh 发表于 2010-10-4 22:09:23

回复【3楼】turf456
-----------------------------------------------------------------------

好像你的屏幕跟我的是一样的哦。。。是不是都是淘宝买的58块钱的啊???
请问显示一张图片。。。单片机的内存太小。。。是不是得通过sd卡读取啊????

XA144F 发表于 2010-10-4 22:25:05

LZ做的不错,但是显示那样的图片就是大错特错了!至少是苍老师的才行啊!

e1909 发表于 2010-10-4 22:38:07

回复【9楼】zywh
-----------------------------------------------------------------------

我买的是35元的屏,2.4寸,只是一个单屏,没带触摸屏控制芯片和tf卡插口,我用的是mega16芯片控制,ram为1k字节,一幅240X320大小的图片大小为240*320*2=150k字节(一个像素为两个字节),远远不够显示一幅图片,所以必需要用tf卡,我这几天正在研究用tf卡显示图片,研究了几天了,还挺麻烦,不过在屏幕上显示各种颜色还是挺简单的,你可以先试试

fengyuganyu 发表于 2010-10-5 00:16:08

我用的M128做的读SD卡里的二进制文件显示,好像坛子里有做直接读bmp文件的 文件系统,可以参阅

turf456 发表于 2010-10-5 01:45:20

回复【9楼】zywh
回复【3楼】turf456   
-----------------------------------------------------------------------
好像你的屏幕跟我的是一样的哦。。。是不是都是淘宝买的58块钱的啊???
请问显示一张图片。。。单片机的内存太小。。。是不是得通过sd卡读取啊????
-----------------------------------------------------------------------

必须用sd卡,一张16位的320*240的bmp图片时160K。

turf456 发表于 2010-10-5 01:47:09

回复【11楼】e1909
回复【9楼】zywh
-----------------------------------------------------------------------
我买的是35元的屏,2.4寸,只是一个单屏,没带触摸屏控制芯片和tf卡插口,我用的是mega16芯片控制,ram为1k字节,一幅240x320大小的图片大小为240*320*2=150k字节(一个像素为两个字节),远远不够显示一幅图片,所以必需要用tf卡,我这几天正在研究用tf卡显示图片,研究了几天了,还挺麻烦,不过在屏幕上显示各种颜色还是挺简单的,你可以先试试
-----------------------------------------------------------------------

加油吧,我研究SD卡都快哭了才成功的。
还有fat32文件系统,看懂容易写起来超级费脑细胞

zywh 发表于 2010-10-5 15:57:42

回复【14楼】turf456
-----------------------------------------------------------------------

正在看振南的sd卡的视频教程。。。呵呵。。。。我也要加油学习咯。。。哈哈。。。

gxy508 发表于 2010-10-5 16:03:57

mark

cuikai12345 发表于 2010-10-7 18:18:12

mark

aajie777 发表于 2010-11-1 01:56:32

天了,太难了,我也想学这个,但现在还一头乌水。。。。只看明白了你作品中的图片!!

lanbin 发表于 2011-6-1 13:28:31

MARK
看到3楼,我有些想吐了

chenxingye 发表于 2011-6-1 15:44:31

记录下

laohuang868 发表于 2011-7-5 14:46:25

谢谢,学习了,原来是我的CS信号有问题!

ccmj4708 发表于 2011-7-7 14:13:02

mark

lyi619 发表于 2011-8-9 16:08:31

回复【21楼】laohuang868
-----------------------------------------------------------------------

你怎么看出来哪个信号有问题的?

WinLiu 发表于 2011-10-21 20:31:43

mark

longfeix86 发表于 2011-10-22 10:35:31

ILI9325+M16+IAR用起来很爽的

mingqiang 发表于 2012-10-12 17:08:15

参照2楼的c程序,改写成了16位数据模式汇编程序的,端口有点变化,已经驱动成功。
; Target : ATMega16
; Crystal: 4.0000Mhz
; 16位数据模式,全屏循环刷成红色,绿色,蓝色。
;
.include "m16def.inc"

;-------------------I/O定义----------
.equ lcd_dataport_h =portc ;高8位数据口,8位模式下只使用高8位
.equ lcd_datapin_h=pinc
.equ lcd_dataddr_h=ddrc
.equ lcd_dataport_l =porta ;低8位数据口                        
.equ lcd_datapin_l=pina
.equ lcd_dataddr_l=ddra

.equ lcd_ctrl   =portd
.equ lcd_ctrl_ddr =ddrd
.equ lcd_rs       =pd3
.equ lcd_wr       =pd4
.equ lcd_rd       =pd5
.equ lcd_cs       =pd6
.equ lcd_rest   =pd7

;-------------------工作寄存器定义----------
.def temp0          =r16   
.def temp1          =r17
.def temp2          =r18
.def temp3          =r19
.def temp4          =r20
.def temp5          =r21
.def temp6          =r22
.def temp7          =r23
.def temp8          =r24
.def temp9          =r25
.def tempa          =r26
.def tempb          =r27

.org $0000
jmp reset      ;复位

reti         ;IRQ0 中断向量
nop            
reti         ;IRQ1 中断向量
nop            
reti         ;Time2 比较中断向量
nop
reti         ;Time2 溢出中断向量
nop
reti         ;Time1 捕捉中断向量
nop
reti         ;Time1 比较A中断向量      
nop
reti         ;Time1 比较B中断向量
nop
reti         ;Time1 溢出中断向量
nop
reti         ;Time0 溢出中断向量
nop   
reti         ;SPI 传输结束中断向量
nop
reti         ;USART RX结束中断向量
nop
reti         ;UDR 空中断向量
nop
reti         ;USART TX结束中断向量
nop
reti         ;ADC 转换结束中断向量
nop
reti         ;EEPROM就绪
nop
reti         ;模拟比较器中断向量
nop
reti         ;两线串行接口中断向量
nop
reti         ;IRQ2 中断向量
nop
reti         ;Time0 比较中断向量
nop
reti         ;SPM 就绪中断向量
nop

.org $002A
reset:
ldi temp0,low(ramend)       ;设置堆栈指针
out spl,temp0
ldi temp0,high(ramend)
out sph,temp0

rcall lcd_port_init         ;端口初始化
rcall lcd_init            ;lcd初始化

ser tempa               ;清屏
ser tempb
rcall pant

scan:
ldi tempa,0xf8            ;红色
ldi tempb,0x00
rcall pant
rcall delay_2000ms

ldi tempa,0x07            ;绿色
ldi tempb,0xe0
rcall pant
rcall delay_2000ms

ldi tempa,0x00            ;蓝色
ldi tempb,0x1f
rcall pant
rcall delay_2000ms
rjmp scan



;*************端口初始化*************
lcd_port_init:
ser temp0
out lcd_dataddr_h,temp0   ;高8位为输出
out lcd_dataddr_l,temp0   ;低8位为输出
ldi temp0,(1<<lcd_rs)|(1<<lcd_wr)|(1<<lcd_rd)|(1<<lcd_cs)|(1<<lcd_rest)
out lcd_ctrl_ddr,temp0    ;5个控制位为输出
ret

;*************16位并行数据写入函数*************
;temp0存高8位数据,temp1存低8位数据
lcd_write_bus:
out lcd_dataport_h,temp0
out lcd_dataport_l,temp1
cbi lcd_ctrl,lcd_wr       ;wr=0
sbi lcd_ctrl,lcd_wr       ;wr=1
ret

;*************发送命令*************
;temp0存高8位,temp1存低8位
lcd_write_com:
cbi lcd_ctrl,lcd_rs       ;cs=0
rcall lcd_write_bus
ret

;*************发送数据*************
;temp0存高8位,temp1存低8位
lcd_write_data:
sbi lcd_ctrl,lcd_rs       ;cs=1
rcall lcd_write_bus
ret

;*************设置X,Y坐标*************
;temp2存x1坐标高8位,temp3存x1坐标低8位,temp4存y1坐标高8位,temp5存y1坐标低8位
;temp6存x2坐标高8位,temp7存x2坐标低8位,temp8存y2坐标高8位,temp9存y2坐标低8位
address_set:
ldi temp0,0x00         ;设置X坐标位置
ldi temp1,0x20
rcall lcd_write_com
mov temp0,temp2
mov temp1,temp3
rcall lcd_write_data

ldi temp0,0x00         ;设置Y坐标位置
ldi temp1,0x21
rcall lcd_write_com
mov temp0,temp4
mov temp1,temp5
rcall lcd_write_data

ldi temp0,0x00         ;开始X
ldi temp1,0x50
rcall lcd_write_com
mov temp0,temp2
mov temp1,temp3
rcall lcd_write_data

ldi temp0,0x00         ;开始Y
ldi temp1,0x52
rcall lcd_write_com
mov temp0,temp4
mov temp1,temp5
rcall lcd_write_data

ldi temp0,0x00         ;结束X
ldi temp1,0x51
rcall lcd_write_com
mov temp0,temp6
mov temp1,temp7
rcall lcd_write_data

ldi temp0,0x00         ;结束Y
ldi temp1,0x53
rcall lcd_write_com
mov temp0,temp8
mov temp1,temp9
rcall lcd_write_data

ldi temp0,0x00         
ldi temp1,0x22
rcall lcd_write_com
ret

;*************延时5ms(temp0,temp1,temp2)*************
delay_5ms:         
ldi temp0,1
ldi temp1,0
Delay5:
subi temp0,255      ;加1操作
sbci temp1,255
cpi temp0,0x29      ;0x29
ldi temp2,0x0b      ;0x0b29 = 2857
cpc temp1,temp2
brlo Delay5         ;未达2857继续
ret

;*************延时50ms(temp0,temp1,temp2)*************
delay_50ms:         
ldi temp0,1
ldi temp1,0
Delay50:
subi temp0,255      
sbci temp1,255
cpi temp0,0x9b      
ldi temp2,0x6f      
cpc temp1,temp2
brlo Delay50         
ret

;*************延时2000ms(temp0,temp1,temp2,temp3)*************
delay_2000ms:
clr temp3
Delay2000:
rcall delay_50ms
inc temp3
cpi temp3,40
brlo Delay2000
ret
;*************LCD初始化*************
lcd_init:
sbi lcd_ctrl,lcd_rest   ;rest=1
rcall delay_5ms
cbi lcd_ctrl,lcd_rest   ;rest=0
rcall delay_5ms
sbi lcd_ctrl,lcd_rest   ;rest=1
sbi lcd_ctrl,lcd_cs   ;cs=1
sbi lcd_ctrl,lcd_rd   ;rd=1
sbi lcd_ctrl,lcd_wr   ;wr=1

rcall delay_5ms

cbi lcd_ctrl,lcd_cs   ;cs=0,打开片选使能

;--------------Start Initial Sequence--------------
ldi temp0,0x00          ;
ldi temp1,0xe5
rcall lcd_write_com
ldi temp0,0x78
ldi temp1,0xf0
rcall lcd_write_data

ldi temp0,0x00          ;set SS and SM bit
ldi temp1,0x01
rcall lcd_write_com
ldi temp0,0x01
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00          ;set 1 line inversion
ldi temp1,0x02
rcall lcd_write_com
ldi temp0,0x07
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00          ;set GRAM write direction and BGR=1
ldi temp1,0x03
rcall lcd_write_com
ldi temp0,0x10
ldi temp1,0x30
rcall lcd_write_data

ldi temp0,0x00          ;Resize register
ldi temp1,0x04
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00          ;set the back porch and front porch
ldi temp1,0x08
rcall lcd_write_com
ldi temp0,0x02
ldi temp1,0x07
rcall lcd_write_data

ldi temp0,0x00          ;set non-display area refresh cycle ISC
ldi temp1,0x09
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00          ;FMARK function
ldi temp1,0x0a
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00          ;RGB interface setting
ldi temp1,0x0c
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00          ;Frame marker Position
ldi temp1,0x0d
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00          ;RGB interface polarity
ldi temp1,0x0f
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

;--------------Power On sequence --------------
ldi temp0,0x00          ;SAP, BT, AP, DSTB, SLP, STB
ldi temp1,0x10
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00          ;DC1, DC0, VC
ldi temp1,0x11
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x07
rcall lcd_write_data

ldi temp0,0x00          ;VREG1OUT voltage
ldi temp1,0x12
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data


ldi temp0,0x00         ;VDV for VCOM amplitude
ldi temp1,0x13
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00         
ldi temp1,0x07
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x01
rcall lcd_write_data

rcall delay_50ms       ;200ms的延时
rcall delay_50ms
rcall delay_50ms
rcall delay_50ms

ldi temp0,0x00         ;
ldi temp1,0x10
rcall lcd_write_com
ldi temp0,0x10
ldi temp1,0x90
rcall lcd_write_data

ldi temp0,0x00         ;
ldi temp1,0x11
rcall lcd_write_com
ldi temp0,0x02
ldi temp1,0x27
rcall lcd_write_data

rcall delay_50ms

ldi temp0,0x00         ;
ldi temp1,0x12
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x1f
rcall lcd_write_data

rcall delay_50ms

ldi temp0,0x00
ldi temp1,0x13
rcall lcd_write_com
ldi temp0,0x15
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x29
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x27
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x2b
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x0d
rcall lcd_write_data

rcall delay_50ms

ldi temp0,0x00
ldi temp1,0x20
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x21
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

;----------- Adjust the Gamma Curve ----------
ldi temp0,0x00
ldi temp1,0x30
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x31
rcall lcd_write_com
ldi temp0,0x07
ldi temp1,0x07
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x32
rcall lcd_write_com
ldi temp0,0x03
ldi temp1,0x07
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x35
rcall lcd_write_com
ldi temp0,0x02
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x36
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x08
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x37
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x04
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x38
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x39
rcall lcd_write_com
ldi temp0,0x07
ldi temp1,0x07
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x3c
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x02
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x3d
rcall lcd_write_com
ldi temp0,0x1d
ldi temp1,0x04
rcall lcd_write_data

;------------------ Set GRAM area ---------------
ldi temp0,0x00
ldi temp1,0x50
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x51
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0xef
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x52
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x53
rcall lcd_write_com
ldi temp0,0x01
ldi temp1,0x3f
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x60
rcall lcd_write_com
ldi temp0,0xa7
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x61
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x01
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x6a
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

;-------------- Partial Display Control ---------
ldi temp0,0x00
ldi temp1,0x80
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x81
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x82
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x83
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x84
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x85
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x00
rcall lcd_write_data

;-------------- Panel Control -------------------
ldi temp0,0x00
ldi temp1,0x90
rcall lcd_write_com
ldi temp0,0x00
ldi temp1,0x10
rcall lcd_write_data

ldi temp0,0x00
ldi temp1,0x92
rcall lcd_write_com
ldi temp0,0x06
ldi temp1,0x00
rcall lcd_write_data

ldi temp0,0x00         
ldi temp1,0x07
rcall lcd_write_com
ldi temp0,0x01
ldi temp1,0x33
rcall lcd_write_data

sbi lcd_ctrl,lcd_cs      ;关闭片选使能

ret

;-------------------扫描LCD----------
;tempa,tempb
pant:
cbi lcd_ctrl,lcd_cs
ldi temp2,0
ldi temp3,0
ldi temp4,0
ldi temp5,0
ldi temp6,0
ldi temp7,240
ldi temp8,1
ldi temp9,64
rcall address_set

clr temp8
clr temp9
Yd:
clr temp2
Xd:
mov temp0,tempa
mov temp1,tempb
rcall lcd_write_data
inc temp2
cpi temp2,240
brlo Xd
adiw temp8,1
cpi temp9,1
brlo Yd
cpi temp8,64
brlo Yd
sbi lcd_ctrl,lcd_cs
ret

mingqiang 发表于 2012-10-16 16:09:27

发现了一个问题,开窗口的时候结束X不是240,而应该是239,结束Y不是320,而应该是319,当然窗口开成整屏的时候不会出错,因为屏幕本来就没有那么大。我用点阵显示8X16字符的时候,开窗口的时候开始X为0,开始Y为0,结束X为8,结束Y为16,结果显示不对,卡了我好久,最后才发觉应该是(0,0,7,15)。

zuolaosan 发表于 2012-12-18 16:56:54

请问8位控制怎么控制,
页: [1]
查看完整版本: MEGA16L单片机驱动2.4寸tft,控制芯片为ILI9325