搜索
bottom↓
回复: 28

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

[复制链接]

出0入0汤圆

发表于 2010-10-2 19:30:14 | 显示全部楼层 |阅读模式
MEGA16L单片机驱动2.4寸tft,控制芯片为ILI9325,谁给一个程序吧。做了几天了都没做出来,特急,那位朋友和我一样是做单片机控制tft显示图形的,或者已做过了,探讨一下

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 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[3:0]
        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[3:0], AP, DSTB, SLP, STB
        LCD_Write_Com(0x00,0x11); LCD_Write_Data(0x00,0x07); // DC1[2:0], DC0[2:0], VC[2:0]
        LCD_Write_Com(0x00,0x12); LCD_Write_Data(0x00,0x00); // VREG1OUT voltage
        LCD_Write_Com(0x00,0x13); LCD_Write_Data(0x00,0x00); // VDV[4:0] 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[3:0], AP, DSTB, SLP, STB
        LCD_Write_Com(0x00,0x11); LCD_Write_Data(0x02,0x27); // DC1[2:0], DC0[2:0], VC[2:0]
        _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[4:0] for VCOM amplitude  1A00
        LCD_Write_Com(0x00,0x29); LCD_Write_Data(0x00,0x27); //0x0012 //001a  Set VCM[5:0] for VCOMH  //0x0025  0034
        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);
        }
}

出0入0汤圆

发表于 2010-10-3 02:37:33 | 显示全部楼层
如果用PORTC了别忘了禁用JTAG,好多人卡在这里了。
坛子里的程序大把大把,能搜到。改一下端口基本都好使

出0入0汤圆

发表于 2010-10-3 02:41:12 | 显示全部楼层
这是我以前做过的。初始化成功后就是定义区域然后写像素了。基本就是这些。

(原文件名:ourdev_575061.jpg)

出0入0汤圆

 楼主| 发表于 2010-10-3 10:09:59 | 显示全部楼层
有没有ILI9325的中文资料,网上搜到的全都是英文的,看不懂,我主要是想看懂初始化tft的细节,深入研究一下

出0入0汤圆

 楼主| 发表于 2010-10-3 13:32:40 | 显示全部楼层
回复【1楼】zywh
-----------------------------------------------------------------------

做出来了,太感谢你了  

出0入0汤圆

发表于 2010-10-3 16:06:46 | 显示全部楼层
这些资料没多少是英文的。你找一些关键的就行了,比如扫描方向等,看图就明白了

出0入0汤圆

 楼主| 发表于 2010-10-3 21:11:06 | 显示全部楼层
找到了一部分中文翻译,剩下的麻烦大家再找下

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

出0入0汤圆

发表于 2010-10-4 21:51:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-4 22:09:23 | 显示全部楼层
回复【3楼】turf456  
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-10-4 22:25:05 | 显示全部楼层
LZ做的不错,但是显示那样的图片就是大错特错了!至少是苍老师的才行啊!

出0入0汤圆

 楼主| 发表于 2010-10-4 22:38:07 | 显示全部楼层
回复【9楼】zywh
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-10-5 00:16:08 | 显示全部楼层
我用的M128做的  读SD卡里的二进制文件显示,好像坛子里有做直接读bmp文件的 文件系统,可以参阅

出0入0汤圆

发表于 2010-10-5 01:45:20 | 显示全部楼层
回复【9楼】zywh
回复【3楼】turf456   
-----------------------------------------------------------------------
好像你的屏幕跟我的是一样的哦。。。是不是都是淘宝买的58块钱的啊???
请问显示一张图片。。。单片机的内存太小。。。是不是得通过sd卡读取啊????
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 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文件系统,看懂容易写起来超级费脑细胞

出0入0汤圆

发表于 2010-10-5 15:57:42 | 显示全部楼层
回复【14楼】turf456  
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-10-5 16:03:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-7 18:18:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-1 01:56:32 | 显示全部楼层
天了,太难了,我也想学这个,但现在还一头乌水。。。。只看明白了你作品中的图片!!

出0入0汤圆

发表于 2011-6-1 13:28:31 | 显示全部楼层
MARK
看到3楼,我有些想吐了

出0入0汤圆

发表于 2011-6-1 15:44:31 | 显示全部楼层
记录下

出0入0汤圆

发表于 2011-7-5 14:46:25 | 显示全部楼层
谢谢,学习了,原来是我的CS信号有问题!

出0入0汤圆

发表于 2011-7-7 14:13:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-9 16:08:31 | 显示全部楼层
回复【21楼】laohuang868
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2011-10-21 20:31:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-22 10:35:31 | 显示全部楼层
ILI9325+M16+IAR用起来很爽的

出0入0汤圆

发表于 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[3:0]
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[3:0], 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[2:0], DC0[2:0], VC[2:0]
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[4:0] 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

出0入0汤圆

发表于 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)。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 05:17

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

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