📄 lcd.lst
字号:
C51 COMPILER V9.00 LCD 08/26/2012 13:41:40 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: E:\ruanjian\Keil uVision4\C51\BIN\C51.EXE LCD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include "TM128128_LCD.H"
*** WARNING C312 IN LINE 122 OF TM128128_LCD.H: misplaced endif control
3 #include "LCD_dis.H"
*** WARNING C312 IN LINE 20 OF LCD_dis.H: misplaced endif control
4 #include "LCD.H"
*** WARNING C312 IN LINE 100 OF LCD_type.H: misplaced endif control
*** WARNING C312 IN LINE 34 OF LCD.H: misplaced endif control
5 #include "LCD_type.H"
6
7 #define LCDCOM 0
8 #define LCDDAT 1
9
10 sbit LED_RD = P2^5;
11 sbit LED_CS = P2^7;
12 sbit LED_WR = P2^4;
13 sbit LED_A0 = P2^3;
14 sbit REST = P2^6;
15
16 void delay(INT16U a)
17 {
18 1 INT16U i, j;
19 1 for(i = 0; i < a; i++)
20 1 for(j = 0; j < 114; j++);
21 1 }
22 /*======================================================
23 彩屏读/写命令/数据
24 =======================================================*/
25 void LCDWR( INT8U cmd_dt, INT8U value )
26 {
27 1 LED_RD = 1;
28 1 LED_CS = 1;
29 1 LED_WR = 1;
30 1 if(cmd_dt)
31 1 {
32 2 LED_A0 = 1;
33 2 }
34 1 else
35 1 {
36 2 LED_A0 = 0;
37 2 }
38 1 P0 = value;
39 1 LED_CS = 0;
40 1 LED_WR = 0;
41 1 LED_WR = 1;
42 1 LED_CS = 1;
43 1 }
44 /*======================================================
45 LCD初始化
46 =======================================================*/
47 void LCD_Init()
48 {
49 1
50 1 /* LCDWR(LCDCOM, SOFT_RESET); //恢复出厂设置
51 1 delay(150);
C51 COMPILER V9.00 LCD 08/26/2012 13:41:40 PAGE 2
52 1 LCDWR(LCDCOM, SLEEP_OUT);
53 1 LCDWR(LCDCOM, DISPLAY_ON);
54 1 LCDWR(LCDCOM, NORMAL_MODE_ON);//全屏显示
55 1 LCDWR(LCDCOM, INVERSION_OFF);
56 1 LCDWR(LCDCOM, PIXELS_OFF);
57 1 LCDWR(LCDCOM, SET_CONTRAST);
58 1 LCDWR(LCDDAT, 0x07);
59 1 LCDWR(LCDCOM, MEM_CONTROL); //寄存器应用控制
60 1 LCDWR(LCDDAT, 0x00);
61 1 LCDWR(LCDCOM, SET_X_ADDR);
62 1 LCDWR(LCDDAT, 0x00);
63 1 LCDWR(LCDDAT, 0x00);
64 1 LCDWR(LCDDAT, 0x00);
65 1 LCDWR(LCDDAT, 0x7f);
66 1 LCDWR(LCDCOM, SET_Y_ADDR);
67 1 LCDWR(LCDDAT, 0x00);
68 1 LCDWR(LCDDAT, 0x00);
69 1 LCDWR(LCDDAT, 0x00);
70 1 LCDWR(LCDDAT, 0x9f);
71 1 LCDWR(LCDCOM, PARTIAL_AREA);
72 1 LCDWR(LCDDAT, 0x00);
73 1 LCDWR(LCDDAT, 0x00);
74 1 LCDWR(LCDDAT, 0xaa);
75 1 LCDWR(LCDDAT, 0xaa);
76 1 LCDWR(LCDCOM, COLOR_INTERFACE);
77 1 // LCDWR(LCDDAT, COLOR_16_BIT); */
78 1
79 1 // LCDWR(DATE, 0x9f);
80 1 // LCDWR(COM, 0xe0); //eeprom读写模式
81 1 // LCDWR(DATE, 0x00); //读otp模式读eeprom
82 1 // LCDWR(COM, 0x10); //写eeprom
83 1 // LCDWR(COM, 0xe1); //退出读写控制模式
84 1 // LCDWR(COM, 0xe2); //写eeprom
85 1 // LCDWR(COM, 0xe3); //读eeprom
86 1 // LCDWR(COM, DISPLAY_OFF); //关闭显示
87 1 LCDWR( LCDCOM, 0x01);//software reset
88 1 delay(150); //delay 150ms
89 1 LCDWR( LCDCOM, 0x11);//software reset
90 1
91 1 LCDWR( LCDCOM,0x26); // Auto load set
92 1 LCDWR ( LCDDAT,0x04);//auto load disable//0x9f
93 1 LCDWR( LCDCOM,0xf2); //EE read/write mode
94 1 LCDWR ( LCDDAT,0x00); //set read mode
95 1 LCDWR( LCDCOM,0xb1);
96 1 LCDWR ( LCDDAT,0x08);
97 1 LCDWR ( LCDDAT,0x14);
98 1 LCDWR( LCDCOM,0xc0);
99 1 LCDWR ( LCDDAT,0x0a);
100 1 LCDWR ( LCDDAT,0x05);
101 1 LCDWR( LCDCOM,0xc1);
102 1 LCDWR ( LCDDAT,0x02);
103 1 LCDWR( LCDCOM,0xec);
104 1 LCDWR ( LCDDAT,0x44);
105 1 LCDWR ( LCDDAT,0x52);
106 1 LCDWR( LCDCOM,0xc7);
107 1 LCDWR ( LCDDAT,0xbf);
108 1
109 1 //////////
110 1
111 1
112 1 LCDWR( LCDCOM,0x2a); //display off
113 1 LCDWR ( LCDDAT,0x00);
C51 COMPILER V9.00 LCD 08/26/2012 13:41:40 PAGE 3
114 1 LCDWR ( LCDDAT,0x00);
115 1 LCDWR ( LCDDAT,0x00);
116 1 LCDWR ( LCDDAT,0x7f);
117 1 LCDWR( LCDCOM,0x2b); //sleep out
118 1 LCDWR ( LCDDAT,0x00);
119 1 LCDWR ( LCDDAT,0x00);
120 1 LCDWR ( LCDDAT,0x00);
121 1 LCDWR ( LCDDAT,0x7f);
122 1 LCDWR( LCDCOM,0x36);
123 1 LCDWR ( LCDDAT,0xc8);
124 1 LCDWR( LCDCOM,0x3a);
125 1 LCDWR ( LCDDAT,0x55);
126 1
127 1 //////////////////////////////////////////////////////
128 1 /////VOP set///////////
129 1 LCDWR( LCDCOM,0xf2); //vo voltage set
130 1 LCDWR ( LCDDAT,0x01);///////////f5///// 08//00
131 1
132 1 LCDWR( LCDCOM,0xe0); //write contrast for mobile
133 1 LCDWR ( LCDDAT,0x3f);
134 1 LCDWR ( LCDDAT,0x1b);
135 1 LCDWR ( LCDDAT,0x19);
136 1 LCDWR ( LCDDAT,0x27);
137 1 LCDWR ( LCDDAT,0x1f);
138 1
139 1 LCDWR ( LCDDAT,0x0d);
140 1 LCDWR ( LCDDAT,0x45);
141 1 LCDWR ( LCDDAT,0xb8);
142 1 LCDWR ( LCDDAT,0x30);
143 1
144 1 LCDWR ( LCDDAT,0x17);
145 1 LCDWR ( LCDDAT,0x0f);
146 1 LCDWR ( LCDDAT,0x05);
147 1 LCDWR ( LCDDAT,0x13);
148 1
149 1 LCDWR ( LCDDAT,0x02);
150 1 LCDWR ( LCDDAT,0x00);
151 1
152 1 //-----------OTPB SET----------------------//
153 1 LCDWR( LCDCOM,0xe1);// bias set
154 1 LCDWR ( LCDDAT,0x00); //1/12
155 1 LCDWR ( LCDDAT,0x24);
156 1
157 1 LCDWR ( LCDDAT,0x26);
158 1 LCDWR ( LCDDAT,0x08);
159 1 LCDWR ( LCDDAT,0x10);
160 1 LCDWR ( LCDDAT,0x12);
161 1
162 1 LCDWR ( LCDDAT,0x3a);
163 1 LCDWR ( LCDDAT,0x74);
164 1 LCDWR ( LCDDAT,0x4f);
165 1 LCDWR ( LCDDAT,0x08);
166 1
167 1 LCDWR ( LCDDAT,0x20);
168 1 LCDWR ( LCDDAT,0x2a);
169 1 LCDWR ( LCDDAT,0x3c);
170 1 LCDWR ( LCDDAT,0x3d);
171 1 LCDWR ( LCDDAT,0x3f);
172 1 delay(150);
173 1 LCDWR( LCDCOM,0x29); //booster set
174 1 delay(150);
175 1 LCDWR( LCDCOM,0x2c);
C51 COMPILER V9.00 LCD 08/26/2012 13:41:40 PAGE 4
176 1 }
177
178 /*======================================================
179 设置显示范围
180 =======================================================*/
181 void LCDSetArea( INT16U x1, INT16U y1, INT16U x2, INT16U y2 )
182 {
183 1 x1+=2;
184 1 x2+=2;
185 1 y1+=3;
186 1 y2+=3;
187 1
188 1 LCDWR ( LCDCOM, 0x2A);
189 1 LCDWR ( LCDDAT, x1>>8);
190 1 LCDWR ( LCDDAT, x1);
191 1 LCDWR ( LCDDAT, x2>>8);
192 1 LCDWR ( LCDDAT, x2 + 0);
193 1
194 1 LCDWR ( LCDCOM, 0x2B);
195 1 LCDWR ( LCDDAT, y1>>8);
196 1 LCDWR ( LCDDAT, y1);
197 1 LCDWR ( LCDDAT, y2>>8);
198 1 LCDWR ( LCDDAT, y2);
199 1 LCDWR ( LCDCOM, 0x2C);
200 1 }
201 /*======================================================
202 画一个特殊的范围
203 =======================================================*/
204 void LCDDrawDollop( DOLLOP* dollop )
205 {
206 1 INT8U x,y;
207 1
208 1 LCDSetArea(dollop->xs, dollop->ys, dollop->xe, dollop->ye); //Set a area at the screen
209 1 for( x = 0; x < dollop->xe - dollop->xs + 1; x ++ ) //Display rows
210 1 {
211 2 for( y = 0; y < dollop->ye - dollop->ys + 1; y ++ ) //Display columns
212 2 {
213 3 LCDWR( LCDDAT, dollop->Color>>8 );
214 3 LCDWR( LCDDAT, dollop->Color );
215 3 }
216 2 }
217 1 }
218 /*======================================================
219 画点
220 =======================================================*/
221 void LCDDrawPoint( POINT* pPoint ) //画点
222 {
223 1 LCDSetArea( pPoint->x, pPoint->y, pPoint->x, pPoint->y );
224 1 LCDWR ( LCDDAT, ( pPoint->Color >> 8 ) & 0xff );
225 1 LCDWR ( LCDDAT, pPoint->Color & 0xff );
226 1 }
227
228 /*======================================================
229 画直线
230 =======================================================*/
231 void LCDDrawHRLine( LINE* pLine ) //画直线
232 {
233 1 INT8U x0, x1, y0, y1;
234 1 if( pLine->xs != pLine->xe && pLine->ys != pLine->ye ) return;
235 1 if( pLine->ys > pLine->ye )
236 1 {
237 2 y0 = pLine->ye;
C51 COMPILER V9.00 LCD 08/26/2012 13:41:40 PAGE 5
238 2 y1 = pLine->ys;
239 2 }
240 1 else
241 1 {
242 2 y0 = pLine->ys;
243 2 y1 = pLine->ye;
244 2 }
245 1 if( pLine->xs > pLine->xe )
246 1 {
247 2 x0 = pLine->xe;
248 2 x1 = pLine->xs;
249 2 }
250 1 else
251 1 {
252 2 x0 = pLine->xs;
253 2 x1 = pLine->xe;
254 2 }
255 1 LCDSetArea( x0, y0, x1, y1 );
256 1 x0 = x1 - x0;
257 1 if( x0 == 0 ) x0 = y1 - y0;
258 1 for( y0 = 0; y0 < x0; y0 ++ )
259 1 {
260 2 LCDWR( LCDDAT, pLine->Color >> 8 );
261 2 LCDWR( LCDDAT, pLine->Color );
262 2 }
263 1 }
264
265 /*======================================================
266 画一个特殊的
267 =======================================================*/
268 void PrintBitBlock( BitBlock *pBitBlock )
269 {
270 1 INT8U Row, Column;
271 1 INT32U BytesAbs;
272 1 INT8U RowBytes;
273 1
274 1 LCDSetArea( pBitBlock->xs, pBitBlock->ys,
275 1 pBitBlock->xs + pBitBlock->Width - 1, pBitBlock->ys + pBitBlock->Height - 1 );
276 1
277 1 RowBytes = pBitBlock->Width >> 3;
278 1 if( pBitBlock->Width & 0x07 )
279 1 {
280 2 RowBytes ++;
281 2 }
282 1 for( Row = 0; Row < pBitBlock->Height; Row ++ )
283 1 {
284 2 for( Column = 0; Column < pBitBlock->Width; Column ++ )
285 2 {
286 3 BytesAbs = Row * RowBytes + ( Column >> 3 ) ;
287 3 if( *( pBitBlock->pData + BytesAbs ) & ( 1<<( Column & 0x07 )) )
288 3 {
289 4 LCDWR( LCDDAT, pBitBlock->Color >> 8 );
290 4 LCDWR( LCDDAT, pBitBlock->Color );
291 4 }
292 3 else
293 3 {
294 4 LCDWR( LCDDAT, pBitBlock->BackColor >> 8 );
295 4 LCDWR( LCDDAT, pBitBlock->BackColor );
296 4 }
297 3 }
298 2 }
299 1 }
C51 COMPILER V9.00 LCD 08/26/2012 13:41:40 PAGE 6
300 /*
301
302 /*======================================================
303 显示图像
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -