初级会员

- 积分
- 85
- 金钱
- 85
- 注册时间
- 2012-6-13
- 在线时间
- 0 小时
|
在赠送的资料中有这样两行
delay_ms(50);
LCD_WriteReg(0x07,0x0101); //Display Contral.
delay_ms(50);
LCD_WriteReg(0x07,0x0173); //(0x0173)
而在ILI9320手册里,是这样定义的

0x0101与0x0173是不可能出来的啊!!
另外弄了一天程序,只想让LCD初始化,可以换背景颜色,终究没成功,可否看一下程序
#include <stm32f10x_lib.h>
#include <sys.h>
#include <delay.h>
#define LCD_BL PCout(10)
#define LCD_CS PCout(9)
#define LCD_RS PCout(8)
#define LCD_WR PCout(7)
#define LCD_RD PCout(6)
#define uint unsigned int
#define uchar unsigned char
//9320 LCD寄存器
#define R0 0x00
#define R1 0x01
#define R2 0x02
#define R3 0x03
#define R4 0x04
#define R5 0x05
#define R6 0x06
#define R7 0x07
#define R8 0x08
#define R9 0x09
#define R0A 0x0A
#define R0C 0x0C
#define R0D 0x0D
#define R0E 0x0E
#define R0F 0x0F
#define R10 0x10
#define R11 0x11
#define R12 0x12
#define R13 0x13
#define R14 0x14
#define R15 0x15
#define R16 0x16
#define R17 0x17
#define R18 0x18
#define R19 0x19
#define R1A 0x1A
#define R1B 0x1B
#define R1C 0x1C
#define R1D 0x1D
#define R1E 0x1E
#define R1F 0x1F
#define R20 0x20
#define R21 0x21
#define R22 0x22
#define R24 0x24
#define R25 0x25
#define R28 0x28
#define R29 0x29
#define R2B 0x2B
#define R2D 0x2D
#define R30 0x30
#define R31 0x31
#define R32 0x32
#define R33 0x33
#define R34 0x34
#define R35 0x35
#define R36 0x36
#define R37 0x37
#define R38 0x38
#define R39 0x39
#define R3B 0x3B
#define R3C 0x3C
#define R3D 0x3D
#define R3E 0x3E
#define R3F 0x3F
#define R40 0x40
#define R41 0x41
#define R42 0x42
#define R43 0x43
#define R44 0x44
#define R45 0x45
#define R46 0x46
#define R47 0x47
#define R48 0x48
#define R49 0x49
#define R4A 0x4A
#define R4B 0x4B
#define R4C 0x4C
#define R4D 0x4D
#define R4E 0x4E
#define R4F 0x4F
#define R50 0x50
#define R51 0x51
#define R52 0x52
#define R53 0x53
#define R60 0x60
#define R61 0x61
#define R6A 0x6A
#define R76 0x76
#define R80 0x80
#define R81 0x81
#define R82 0x82
#define R83 0x83
#define R84 0x84
#define R85 0x85
#define R86 0x86
#define R87 0x87
#define R88 0x88
#define R89 0x89
#define R8B 0x8B
#define R8C 0x8C
#define R8D 0x8D
#define R8F 0x8F
#define R90 0x90
#define R91 0x91
#define R92 0x92
#define R93 0x93
#define R94 0x94
#define R95 0x95
#define R96 0x96
#define R97 0x97
#define R98 0x98
#define R99 0x99
#define R9A 0x9A
#define R9D 0x9D
#define RC0 0xC0
#define RC1 0xC1
#define RE5 0xE5
//画笔颜色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色
//GUI颜色
#define DARKBLUE 0X01CF //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458 //灰蓝色
//以上三色为PANEL的颜色
#define LIGHTGREEN 0X841F //浅绿色
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色
#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色)
void write_reg(uchar x)//写入八位寄存器
{
LCD_CS=0; //PCout(9)
LCD_RS=0; //PCout(8)
LCD_WR=1; //PCout(7)
GPIOB->ODR=x;
LCD_WR=0;
LCD_WR=1;
LCD_RS=1;
}
void write_dat(uint x) //先写寄存器,再写16位数据
{
LCD_CS=0;
LCD_RS=1;
LCD_WR=1;
GPIOB->ODR=x;
LCD_WR=0;
LCD_WR=1;
LCD_CS=1;
}
void write_reg_dat(uchar reg,uint dat)
{
write_reg(reg);
write_dat(dat);
}
read_reg(uchar x)
{
uchar dat;
write_reg(x);
GPIOB->CRL=0X88888888;//设置PB0~PB7为输入模式
GPIOB->CRH=0X33333333;//设置PB8~PB15为输入模式
GPIOB->ODR=0XFFFF;//设置为上拉
LCD_CS=0;
LCD_RS=1;
LCD_WR=1;
LCD_RD=1;
LCD_RD=0;
delay_us(100);
dat=GPIOB->IDR;
LCD_RD=1;
LCD_CS=1;
GPIOB->CRL=0X33333333;//设置PB0~PB7为通用推挽输出模式
GPIOB->CRH=0X33333333;//设置PB8~PB15为通用推挽输出模式
GPIOB->ODR=0XFFFF;//设置为输出高
return dat;
}
void LCD_SetCrusor(uint x,uint y)
{
write_reg_dat(R20,x);
write_reg_dat(R21,y);
}
void LCD_clear(uint color)
{ unsigned long i;
LCD_SetCrusor(0x0000,0x0000);
write_reg(R22);
for(i=0;i<76800;i++)
write_dat(color);
}
main()
{
Stm32_Clock_Init(9);
delay_init(72);
RCC->APB2ENR|=1<<3;//使能PORT B时钟
RCC->APB2ENR|=1<<4;//使能PORT C时钟
RCC->APB2ENR|=1<<0; //开启辅助时钟
JTAG_Set(SWD_ENABLE); //开启SWD
GPIOB->CRL=0X33333333;//设置PB0~PB7为通用推挽输出模式
GPIOB->CRH=0X33333333;//设置PB8~PB15为通用推挽输出模式
GPIOB->ODR=0X0000;//设置为输出低
GPIOC->CRL=0X33333333;//设置PC0~PC7为通用推挽输出模式
GPIOC->CRH=0X33333333;//设置PC8~PC15为通用推挽输出模式
GPIOC->ODR=0X0000;//设置为输出低
LCD_BL=1;//点亮背光
//-----------以下为LCD初始化函数-------------------------------//
delay_ms(50); // delay 50 ms
write_reg_dat(R0,0x0001); //晶振振荡
delay_ms(50);//等候20ms
write_reg_dat(R1,0x0100); //S1-S720
write_reg_dat(R2,0x0700);//LCD Driving Wave Control (R02h)
write_reg_dat(R3,0x1030);//65536 colors
write_reg_dat(R4,0x0000);//Resizing Control Register
write_reg_dat(R8,0x0303);//Number of lines for Front/back Porch 3 lines
write_reg_dat(R9,0x0000);//
write_reg_dat(R0A,0x0000);//
write_reg_dat(R0C,0x0001);// 16 BIT interface
write_reg_dat(R0D,0x0000);//a high-active pulse FMARK is output at the start of back porch period for one display line
write_reg_dat(R0F,0x0000);//EPL = “1” The data DB17-0 is written when ENABLE = “1”.
delay_ms(50);
write_reg_dat(R7,0x323B);//Display Control 1 (R07h)
delay_ms(50);
write_reg_dat(R10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4));//SAP=1,and set the SAP=1, after starting up the LCD power supply circuit.
write_reg_dat(R11,0x0007);//power control 2,Step-up circuit1:Fosc .Step-up circuit2:Fosc / 16
write_reg_dat(R12,(1<<8)|(1<<4)|(0<<0));//power control 3,VciLVL x 1.90,VGL output is disable
write_reg_dat(R13,0x1000);//Power Control 4 (R13h),Vcom amplitude=5.54V less than 6V.
write_reg_dat(R29,0x0010);//Power Control 7 (R29h)Set the internal VcomH voltage. Vcom amplitude=5.54V less than 6V. 3.3*1.9*0.85=5.32V
write_reg_dat(R2B,(1<<14)|(1<<4));//Frame Rate=80Hz
write_reg_dat(R50,0x0000);//define Horizontal and Vertical RAM Address Position
write_reg_dat(R51,0xEF);
write_reg_dat(R52,0x0000);
write_reg_dat(R53,0x013F);
write_reg_dat(R60,0x2700);//define 320 lines
write_reg_dat(R61,0x0000);//V0~V60
write_reg_dat(R6A,0x0000);//V0~V60
write_reg_dat(R80,0x0000);//Partial Image 1 Display Position (R80h)
write_reg_dat(R81,0x0000); //Partial Image 1 RAM Start/End Address
write_reg_dat(R82,0x0000);
write_reg_dat(R83,0x0000);
write_reg_dat(R84,0x0000);
write_reg_dat(R85,0x0000);
write_reg_dat(R90,0x0000);
write_reg_dat(R92,0x0000);
write_reg_dat(R93,0x0001);
write_reg_dat(R95,0x0110);
write_reg_dat(R97,0x0001);
write_reg_dat(R98,0x0001);
write_reg_dat(R7,0x323B);//Display Control 1 (R07h)
while(1)
{
LCD_clear(RED);
}
}
|
|