|
![](static/image/common/ico_lz.png)
楼主 |
发表于 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延时程序
{
uchar j=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[n];
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[c];
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);
} |
|