📄 lcdlib.lst
字号:
C51 COMPILER V8.09 LCDLIB 12/12/2007 14:46:40 PAGE 4
176 WLCDCmd( CSR_RIGHT); /*光标自动向右增一*/
177 WLCDCmd( CSRW); /*设定光标位置命令*/
178 WLCDData( 0 ); /* 从0000位置开始*/
179 WLCDData( 0 );
180 WLCDCmd( MWRITE); /* 允许uPU连续地把显示数据写入显示区内命令*/
181 for(j=y1;j<y2;j++)
182 for(i=x1;i<x2;i++)
183 WLCDData(buffer[j][i]);
184 }
185 /* 清除显示区域*/
186 void LCDClear()
187 {
188
189 U16 i=32768;
190 WLCDCmd( CSR_RIGHT); /*光标自动向右增一*/
191 WLCDCmd( CSRW); /*设定光标位置命令*/
192 WLCDData( 0 ); /* 从0000位置开始*/
193 WLCDData( 0 );
194 WLCDCmd( MWRITE); /* 允许uPU连续地把显示数据写入显示区内命令*/
195 while(i--) { /*将32K显缓全部清零,即LCD不显示任何东西*/
196
197 WLCDData( 0x0 );
198 }
199 }
200 /* 液晶屏初始化*/
201 void LCDinit()
202 {
203 U16 i;
204 Delaycicle(600);//足够的时间让液晶准备好
205 WLCDCmd(SYSTEM_SET);
206 for(i=0;i<8;i++)
207 {
208
209 WLCDData(SYSTAB[i]);
210 }
211 WLCDCmd(SCROLL);
212 for(i=0;i<10;i++)
213 {
214
215 WLCDData(SCRTAB[i]);
216 }
217 WLCDCmd(HDOT_SCR);
218 WLCDData(0);
219 WLCDCmd(OVLAY);
220 WLCDData(0x1C); //设置一三区属性为图形方式,或方式合成
221 WLCDCmd(DISP_ON);
222 WLCDData(0x54); //关光标显示
223 LCDClear();
224 }
225
226 /* 液晶屏测试函数*/
227 void Lcd_test(void)
228 {
229 U8 i;
230 UINT8 data;
231 char s[]="welcom!";
232 uint32 dd[]={200,10,250,20,300,40,240,90,200,10};
233 WLCDCmd( CSR_DOWN); /*光标自动向下增一*/
234 WLCDCmd( CSRW); /*设定光标位置命令*/
235 WLCDData( 0x0 ); /* 从0000位置开始*/
236 WLCDData( 0x0 );
237 WLCDCmd( MWRITE); /* 允许uPU连续地把显示数据写入显示区内命令*/
C51 COMPILER V8.09 LCDLIB 12/12/2007 14:46:40 PAGE 5
238 for(i=0;i<16;i++)
239 {
240 data=nanjing[0][i*2];
241 WLCDData(data);
242 Delay(10);
243 //Uart_Printf("lcddata=%d;\n",RLCDData());
244 }
245 WLCDCmd( CSRW); /*设定光标位置命令*/
246 WLCDData( 0x1 ); /* 从0000位置开始*/
247 WLCDData( 0x0 );
248 WLCDCmd( MWRITE); /* 允许uPU连续地把显示数据写入显示区内命令*/
249 for(i=0;i<16;i++)
250 {
251 data=nanjing[0][i*2+1];
252 WLCDData(data);
253 Delay(10);
254 //Uart_Printf("lcddata=%d;\n",RLCDData());
255 }
256 i=0;
257 while(s[i]!='\0')
258 {
259 Lcd_printfchar(20,i,s[i]);
260 i++;
261 }
262 DrawSting16X16( 40,0, "我爱LCD!") ;
263 GUI_HLine(2,100,100,1);
264 GUI_RLine(2,100,200,1);
265 GUI_RectFill(5, 110, 100,200, 1);
266 GUI_CircleFill(200,150, 50, 1);
267 GUI_LineS(dd, 5, 1);
268 }
269
270 /* 液晶屏汉字显示函数*/
271 void Lcd_printfHZ(UINT16 row,UINT16 col, UINT16 data)
272 {
273 U8 i;
274 UINT16 j;
275 j=row*40+col;
276 WLCDCmd( CSR_DOWN); /*光标自动向下增一*/
277 WLCDCmd( CSRW); /*设定光标位置命令*/
278 WLCDData( j%256 ); /* 从0000位置开始*/
279 WLCDData( j/256 );
280 WLCDCmd( MWRITE); /* 允许uPU连续地把显示数据写入显示区内命令*/
281 for(i=0;i<16;i++)
282 {
283 WLCDData((UINT8)hanzi[data][i*2]);
284 Delay(10);
285 //Uart_Printf("lcddata=%d;\n",RLCDData());
286 }
287 WLCDCmd( CSRW); /*设定光标位置命令*/
288 WLCDData( (j%256)+1 ); /* 从0000位置开始*/
289 WLCDData( j/256 );
290 WLCDCmd( MWRITE); /* 允许uPU连续地把显示数据写入显示区内命令*/
291 for(i=0;i<16;i++)
292 {
293 WLCDData(hanzi[data][i*2+1]);
294 Delay(10);
295 //Uart_Printf("lcddata=%d;\n",RLCDData());
296 }
297 }
298 /* 液晶ASCII码显示函数*/
299
C51 COMPILER V8.09 LCDLIB 12/12/2007 14:46:40 PAGE 6
300 void Lcd_printfchar(UINT16 row,UINT16 col, UINT8 data )
301 {
302 UINT8 i;
303 UINT16 j;
304 j=row*40+col;
305 WLCDCmd( CSR_DOWN); /*光标自动向下增一*/
306 WLCDCmd( CSRW); /*设定光标位置命令*/
307 WLCDData( j%256 );
308 WLCDData( j/256 );
309 WLCDCmd( MWRITE); /* 允许uPU连续地把显示数据写入显示区内命令*/
310 for(i=0;i<16;i++)
311 {
312 WLCDData(ASCII16x8[data-0x20][i]);
313 Delay(10);
314 }
315 }
316
317 /*字符串显示输出*/
318 void DrawSting16X16( UINT16 rowfirst,UINT16 colfirst, char *p)
319 {
320 UINT16 q,qq;
321 UINT16 row,col;
322 int i;
323 row=rowfirst;
324 col=colfirst;
325 i=0;
326 while(p[i]!='\0')
327 {
328 if(p[i]&0x80)
329 {
330 q=p[i];
331 i++;
332 qq=p[i];
333 q=(q-0xB0)*94+(qq-0xA1); //取出汉字内码
334 Lcd_printfHZ(row,col,q);
335 col+=2;
336 if(col==40)
337 {
338 col=0;
339 row++;
340 }
341 }
342 else
343 {
344
345 Lcd_printfchar(row,col,p[i]); //输出单个字符
346 col++;
347 if(col==40)
348 {
349 col=0;
350 row++;
351 }
352 }
353 i++;
354 }
355 }
356
357
358
C51 COMPILATION COMPLETE. 0 WARNING(S), 4 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -