📄 lcd.lst
字号:
C51 COMPILER V7.10 LCD 04/14/2009 23:28:41 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\lcd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\SourceFile\lcd.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lcd.lst) OBJECT(.\lcd
-.obj)
line level source
1
2 /***************************************************************************************
3 ****************************************************************************************
4 * FILE : lcd.c
5 * Description :
6 *
7 * Copyright (c) 2003~2008 by 创易电子. All Rights Reserved.
8 *
9 * History:
10 * Version Name Date Description
11 1.0 Wang Shaowei 2008/12/16 Initial Version (For DesignEasy LCM MCU board)
12 1.1 Liu Ying 2008/12/21 Comments
13 1.2 2009/03/03 240x320 LCM
14
15 ****************************************************************************************
16 ****************************************************************************************/
17
18
19 #include "lcd.h"
20
21 /*LCD初始化完后显示创易电子logo,用户程序显示全屏白色*/
22 #ifdef LOGO
23 #include "logo.h"
24 #endif
25
26
27 #define LCD_WIDTH 240
28 #define LCD_HEIGHT 320
29
30 #define LCD_FULL_SCREEN_X_START 0
31 #define LCD_FULL_SCREEN_Y_START 0
32 #define LCD_FULL_SCREEN_X_END (LCD_WIDTH-1)
33 #define LCD_FULL_SCREEN_Y_END (LCD_HEIGHT-1)
34
35
36 /*==================================================================
37 * Function : Truly_HX8347_init
38 * Description : init HX8347,
39 初始化LCD,初始化命令由LCD原厂提供,
40 有兴趣可以对照lcd driver ic看看每条命令的含义,
41 调节lcd显示效果也通过这些命令。
42 注: 这部分代码,本店不予技术支持
43 * Input Para : void
44 * Output Para : void
45 * Return Value: void
46 ==================================================================*/
47 static void Truly_HX8347_init(void)
48 {
49 1 WMLCDCOM(0x00, 0x46);WMLCDDATA(0x00, 0x91);
50 1 WMLCDCOM(0x00, 0x47);WMLCDDATA(0x00, 0x11);
51 1 WMLCDCOM(0x00, 0x48);WMLCDDATA(0x00, 0x00);
52 1 WMLCDCOM(0x00, 0x49);WMLCDDATA(0x00, 0x66);
53 1 WMLCDCOM(0x00, 0x4A);WMLCDDATA(0x00, 0x37);
54 1 WMLCDCOM(0x00, 0x4B);WMLCDDATA(0x00, 0x04);
C51 COMPILER V7.10 LCD 04/14/2009 23:28:41 PAGE 2
55 1 WMLCDCOM(0x00, 0x4C);WMLCDDATA(0x00, 0x11);
56 1 WMLCDCOM(0x00, 0x4D);WMLCDDATA(0x00, 0x77);
57 1 WMLCDCOM(0x00, 0x4E);WMLCDDATA(0x00, 0x00);
58 1 WMLCDCOM(0x00, 0x4F);WMLCDDATA(0x00, 0x1F);
59 1 WMLCDCOM(0x00, 0x50);WMLCDDATA(0x00, 0x0F);
60 1 WMLCDCOM(0x00, 0x51);WMLCDDATA(0x00, 0x00);
61 1 //240x320 window setting
62 1 WMLCDCOM(0x00, 0x02);WMLCDDATA(0x00, 0x00); // Column address start2
63 1 WMLCDCOM(0x00, 0x03);WMLCDDATA(0x00, 0x00); // Column address start1
64 1 WMLCDCOM(0x00, 0x04);WMLCDDATA(0x00, 0x00); // Column address end2
65 1 WMLCDCOM(0x00, 0x05);WMLCDDATA(0x00, 0xEF); // Column address end1
66 1 WMLCDCOM(0x00, 0x06);WMLCDDATA(0x00, 0x00); // Row address start2
67 1 WMLCDCOM(0x00, 0x07);WMLCDDATA(0x00, 0x00); // Row address start1
68 1 WMLCDCOM(0x00, 0x08);WMLCDDATA(0x00, 0x01); // Row address end2
69 1 WMLCDCOM(0x00, 0x09);WMLCDDATA(0x00, 0x3F); // Row address end1
70 1 // Display Setting
71 1 WMLCDCOM(0x00, 0x01);WMLCDDATA(0x00, 0x06); // IDMON=0, INVON=1, NORON=1, PTLON=0
72 1 WMLCDCOM(0x00, 0x16);WMLCDDATA(0x00, 0xc8); // MY=0, MX=0, MV=0, ML=1, BGR=0, TEON=0
73 1 WMLCDCOM(0x00, 0x23);WMLCDDATA(0x00, 0x95); // N_DC=1001 0101
74 1 WMLCDCOM(0x00, 0x24);WMLCDDATA(0x00, 0x95); // PI_DC=1001 0101
75 1 WMLCDCOM(0x00, 0x25);WMLCDDATA(0x00, 0xFF); // I_DC=1111 1111
76 1 WMLCDCOM(0x00, 0x27);WMLCDDATA(0x00, 0x02); // N_BP=0000 0010
77 1 WMLCDCOM(0x00, 0x28);WMLCDDATA(0x00, 0x02); // N_FP=0000 0010
78 1 WMLCDCOM(0x00, 0x29);WMLCDDATA(0x00, 0x02); // PI_BP=0000 0010
79 1 WMLCDCOM(0x00, 0x2A);WMLCDDATA(0x00, 0x02); // PI_FP=0000 0010
80 1 WMLCDCOM(0x00, 0x2C);WMLCDDATA(0x00, 0x02); // I_BP=0000 0010
81 1 WMLCDCOM(0x00, 0x2D);WMLCDDATA(0x00, 0x02); // I_FP=0000 0010
82 1 WMLCDCOM(0x00, 0x3A);WMLCDDATA(0x00, 0x01); // N_RTN=0000, N_NW=001
83 1 WMLCDCOM(0x00, 0x3B);WMLCDDATA(0x00, 0x01); // PI_RTN=0000, PI_NW=001
84 1 WMLCDCOM(0x00, 0x3C);WMLCDDATA(0x00, 0xF0); // I_RTN=1111, I_NW=000
85 1 WMLCDCOM(0x00, 0x3D);WMLCDDATA(0x00, 0x00); // DIV=00
86 1 uty_delay(2000);
87 1 WMLCDCOM(0x00, 0x35);WMLCDDATA(0x00, 0x38); // EQS=38h
88 1 WMLCDCOM(0x00, 0x36);WMLCDDATA(0x00, 0x78); // EQP=78h
89 1 WMLCDCOM(0x00, 0x3E);WMLCDDATA(0x00, 0x38); // SON=38h
90 1 WMLCDCOM(0x00, 0x40);WMLCDDATA(0x00, 0x0F); // GDON=0Fh
91 1 WMLCDCOM(0x00, 0x41);WMLCDDATA(0x00, 0xF0); // GDOFF
92 1 // Power Supply Setting
93 1 WMLCDCOM(0x00, 0x19);WMLCDDATA(0x00, 0x47); // CADJ=0100, CUADJ=100, OSD_EN=1 ,60Hz
94 1 WMLCDCOM(0x00, 0x93);WMLCDDATA(0x00, 0x0F); // RADJ=1111, 100%
95 1 uty_delay(1000);
96 1 WMLCDCOM(0x00, 0x20);WMLCDDATA(0x00, 0x40); // BT=0100
97 1 WMLCDCOM(0x00, 0x1D);WMLCDDATA(0x00, 0x07); // VC1=111
98 1 WMLCDCOM(0x00, 0x1E);WMLCDDATA(0x00, 0x00); // VC3=000
99 1 WMLCDCOM(0x00, 0x1F);WMLCDDATA(0x00, 0x03); // VRH=0011
100 1 WMLCDCOM(0x00, 0x44);WMLCDDATA(0x00, 0x50); // VCM=101 0000
101 1 WMLCDCOM(0x00, 0x45);WMLCDDATA(0x00, 0x13); // VDV=1 0001
102 1 uty_delay(1000);
103 1 WMLCDCOM(0x00, 0x1C);WMLCDDATA(0x00, 0x04); // AP=100
104 1 uty_delay(2000);
105 1 WMLCDCOM(0x00, 0x43);WMLCDDATA(0x00, 0x80); //set VCOMG=1
106 1 uty_delay(500);
107 1 WMLCDCOM(0x00, 0x1B);WMLCDDATA(0x00, 0x08); // GASENB=0, PON=0, DK=1, XDK=0, VLCD_TRI=0, STB=0
108 1 uty_delay(4000);
109 1 WMLCDCOM(0x00, 0x1B);WMLCDDATA(0x00, 0x10); // GASENB=0, PON=1, DK=0, XDK=0, VLCD_TRI=0, STB=0
110 1 uty_delay(4000);
111 1 // Display ON Setting
112 1 WMLCDCOM(0x00, 0x90);WMLCDDATA(0x00, 0x7F); // SAP=0111 1111
113 1 WMLCDCOM(0x00, 0x26);WMLCDDATA(0x00, 0x04); //GON=0, DTE=0, D=01
114 1 uty_delay(5000);
115 1 WMLCDCOM(0x00, 0x26);WMLCDDATA(0x00, 0x24); //GON=1, DTE=0, D=01
116 1 uty_delay(5000);
C51 COMPILER V7.10 LCD 04/14/2009 23:28:41 PAGE 3
117 1 WMLCDCOM(0x00, 0x26);WMLCDDATA(0x00, 0x2C); //GON=1, DTE=0, D=11
118 1 uty_delay(5000);
119 1 WMLCDCOM(0x00, 0x26);WMLCDDATA(0x00, 0x3C); //GON=1, DTE=1, D=11
120 1 uty_delay(5000);
121 1 WMLCDCOM(0x00, 0x22); //WRITE DATA TO GRAM
122 1 }
123
124
125 /*==================================================================
126 * Function : Display_Logo
127 * Description : 显示全屏红色(0xF800),
128 若定义了LOGO,则在屏中间显示创易电子logo
129 * Input Para : void
130 * Output Para : void
131 * Return Value: void
132 ==================================================================*/
133 static void Display_Logo(void)
134 {
135 1 U8 code * data pPoint;
136 1 U8 t1, t2;
137 1 U16 X,Y;
138 1
139 1 lcd_set_write_area(LCD_FULL_SCREEN_X_START, LCD_FULL_SCREEN_Y_START, LCD_FULL_SCREEN_X_END, LCD_FULL_SCRE
-EN_Y_END);
140 1
141 1 for(X = 0; X < LCD_WIDTH; X++)
142 1 {
143 2 for(Y = 0; Y < LCD_HEIGHT; Y++)
144 2 {
145 3 WMLCDDATA(0xF8, 0x00);
146 3
147 3 }
148 2 }
149 1
150 1 #ifdef LOGO
151 1 lcd_set_write_area(32, 105, 207, 214);
152 1 pPoint = gImage_Logo;
153 1 for(Y = 105; Y < 215; Y++)
154 1 {
155 2 for(X = 32; X < 208; X++)
156 2 {
157 3 t1 = *pPoint ++;
158 3 t2 = *pPoint ++;
159 3 WMLCDDATA(t1, t2);
160 3 }
161 2 }
162 1 #endif
163 1 }
164
165
166
167
168 /*==================================================================
169 * Function : lcd_init
170 * Description : 初始化lcd,在使用lcd之前必须调用
171 * Input Para : void
172 * Output Para : void
173 * Return Value: void
174 ==================================================================*/
175 void lcd_init(void)
176 {
177 1 /*************************************************************************/
C51 COMPILER V7.10 LCD 04/14/2009 23:28:41 PAGE 4
178 1 // 以下部分需根据自己的单片机或者ARM系统相应配置
179 1
180 1 /*配置GPIO定义*/
181 1 P1M0 = 0x03;
182 1 P1M1 = 0x00;
183 1
184 1 /*配置总线速度*/
185 1 BUS_SPEED = 0x01;
186 1
187 1 /*外部RAM使能,一般单片机都需要把外部ram总线打开,否则外部总线无效*/
188 1 SETBIT(AUXR, 1);
189 1
190 1
191 1 /*************************************************************************/
192 1 //以下部分为LCD硬件复位,非常重要
193 1 //注意LCD_nRST的定义需要根据各自的系统配置
194 1
195 1 /*复位*/
196 1 LCD_nRST = 1;
197 1 LCD_nRST = 0;
198 1 uty_delay(0xF000);
199 1 LCD_nRST = 1;
200 1
201 1 /*延时,这个是这个芯片的特性,必须要*/
202 1 uty_delay(0x1000);
203 1
204 1
205 1 /*************************************************************************/
206 1 //开背光,否则无法显示
207 1 //注意BL_EN的定义需要根据各自的系统配置
208 1 BL_EN =1;
209 1
210 1
211 1 /*************************************************************************/
212 1 //初始化LCD
213 1 //注意其中的WMLCDCOM、WMLCDDATA需要根据各自系统配置
214 1 //uty_delay为各个系统的delay函数
215 1 Truly_HX8347_init();
216 1
217 1
218 1 /*************************************************************************/
219 1 //初始化完成之后就可以刷屏了
220 1 Display_Logo();
221 1 }
222
223
224 /*==================================================================
225 * Function : lcd_set_write_area
226 * Description : 设置lcd memory write的区域
227 * Input Para : U16 StartX, U16 StartY,U16 EndX, U16 EndY
228 * Output Para : void
229 * Return Value: void
230 ==================================================================*/
231 void lcd_set_write_area(U16 StartX, U16 StartY,U16 EndX, U16 EndY)
232 {
233 1 WMLCDCOM(0x00, 0x02);
234 1 WMLCDDATA(0x00, H_U16(StartX));
235 1 WMLCDCOM(0x00,0x03);
236 1 WMLCDDATA(0x00, L_U16(StartX));
237 1 WMLCDCOM(0x00, 0x04);
238 1 WMLCDDATA(0x00, H_U16(EndX));
239 1 WMLCDCOM(0x00, 0x05);
C51 COMPILER V7.10 LCD 04/14/2009 23:28:41 PAGE 5
240 1 WMLCDDATA(0x00, L_U16(EndX));
241 1 WMLCDCOM(0x00, 0x06);
242 1 WMLCDDATA(0x00, H_U16(StartY));
243 1 WMLCDCOM(0x00, 0x07);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -