📄 5.2.3-1.lst
字号:
229 2 x++;
230 2 col++;
231 2 if (col==LCMLIMIT){col=0;row++;row++;}; /*下一列,如果列越界换行*/
232 2 if (row>7) row=0; /*如果行越界,返回首行*/
233 2 } /*上半个字符输出结束*/
234 1 col = bakerx; /*列对齐*/
235 1 row = bakery+1; /*指向下半个字符行*/
236 1 /*下半个字符输出,8列*/
237 1 for(i=0;i<8;i++)
238 1 {
239 2 cbyte = Ezk[x]; /*取点阵码*/
240 2 Wrdata(cbyte); /*写输出一字节*/
241 2 x++;
C51 COMPILER V7.10 5_2_3_1 06/06/2004 11:46:18 PAGE 5
242 2 col++;
243 2 if (col==LCMLIMIT){col=0;row=row+2;}; /*下一列,如果列越界换行*/
244 2 if (row>7) row=1; /*如果行越界,返回首行*/
245 2 } /*下半个字符输出结束*/
246 1 row=bakery;
247 1 } /*整个字符输出结束*/
248
249 /*********************************全角字符点阵码数据输出********************************/
250 void Putcdot(Uchar Order)
251 {
252 1 Uchar i,bakerx,bakery; /*共定义3个局部变量*/
253 1 int x; /*偏移量,字符量少的可以定义为UCHAR */
254 1 bakerx = col; /*暂存x,y坐标,已备下半个字符使用*/
255 1 bakery = row;
256 1 x=Order * 0x20; /*每个字符32字节*/
257 1 /*上半个字符输出,16列*/
258 1 for(i=0;i<16;i++)
259 1 {
260 2 Wrdata(Hzk[x]); /*写输出一字节*/
261 2 x++;
262 2 col++;
263 2 if (col==LCMLIMIT){ col=0;row++;row++;} /*下一列,如果列越界换行*/
264 2 if (row>6) row=0; /*如果行越界,返回首行*/
265 2 } /*上半个字符输出结束*/
266 1 /*下半个字符输出,16列 */
267 1 col = bakerx;
268 1 row = bakery+1;
269 1 for(i=0;i<16;i++) /*下半部分*/
270 1 {
271 2 Wrdata(Hzk[x]);
272 2 x++;
273 2 col++;
274 2 if (col==LCMLIMIT){col=0;row++;row++;} /*下一列,如果列越界换行*/
275 2 if (row>7) row=1; /*如果行越界,返回首行*/
276 2 } /*下半个字符输出结束*/
277 1 row = bakery;
278 1 } /*整个字符输出结束*/
279
280 /************************************清屏,全屏幕清零***********************************/
281 void Lcmcls( void )
282 {
283 1 for(row=0;row<8;row++)
284 1 for(col=0;col<LCMLIMIT;col++) Wrdata(0);
285 1 }
286
287 /***************************从液晶片上读数据,保留在全局变量中***************************/
288 void Rddata(void)
289 {
290 1 Locatexy(); /*坐标定位,返回时保留分区状态不变*/
291 1 Elcm=1;_nop_();
292 1 Elcm=0;_nop_();
293 1 Dilcm = 1; /*数据*/
294 1 Rwlcm = 1; /*读数据*/
295 1 Datalcm=0xFF;
296 1 Elcm = 1; /*读入到LCM*/
297 1 cbyte = Datalcm; /*虚读一次*/
298 1 Elcm = 0;
299 1
300 1 Locatexy(); /*坐标定位,返回时保留分区状态不变*/
301 1 Elcm=1;nop();
302 1 Elcm=0;nop();
303 1 nop();
C51 COMPILER V7.10 5_2_3_1 06/06/2004 11:46:18 PAGE 6
304 1 Dilcm = 1; /*数据*/
305 1 Rwlcm = 1; /*读数据*/
306 1 Datalcm=0xFF;
307 1 Elcm = 1; /*读入到LCM*/
308 1 cbyte = Datalcm; /*从数据口读数据,真读*/
309 1 Elcm = 0;
310 1 }
311
312 /*************************************数据写输出/**************************************/
313 void Wrdata(Uchar X)
314 {
315 1 Locatexy(); /*坐标定位,返回时保留分区状态不变*/
316 1 Elcm=1;_nop_();
317 1 Elcm=0;_nop_();
318 1 Dilcm = 1; /*数据输出*/
319 1 Rwlcm = 0; /*写输出*/
320 1 nop();Elcm=1;
321 1 Datalcm = X; /*数据输出到数据口*/
322 1 //Elcm = 1; /*读入到LCM*/
323 1 nop();Elcm = 0;
324 1 }
325
326 /*********************************命令输出到左区控制口*********************************/
327 void WrcmdL(Uchar X)
328 {
329 1 lcdbusyL(); /*确定分区,返回时保留分区状态不变*/
330 1 Elcm=1;_nop_();
331 1 Elcm=0;_nop_();
332 1 Dilcm = 0; /*命令操作*/
333 1 Rwlcm = 0; /*写输出*/
334 1 nop();Elcm=1;
335 1 Datalcm = X; /*数据输出到数据口*/
336 1 Elcm = 0; /*读入到LCM*/
337 1 }
338
339 /********************************命令输出到中区控制口********************************/
340 void WrcmdM(Uchar X)
341 {
342 1 lcdbusyM(); /*确定分区,返回时保留分区状态不变*/
343 1 Dilcm = 0; /*命令操作*/
344 1 Rwlcm = 0; /*写输出*/
345 1 Datalcm = X; /*命令输出到数据口*/
346 1 nop();Elcm = 0; /*读入到LCM*/
347 1 }
348
349 /*********************************命令输出到右区控制口********************************/
350 void WrcmdR(Uchar X)
351 {
352 1 lcdbusyR(); /*确定分区,返回时保留分区状态不变*/
353 1 Elcm=1;_nop_();
354 1 Elcm=0;_nop_();
355 1 Dilcm = 0; /*命令操作*/
356 1 Rwlcm = 0; /*写输出*/
357 1 nop();Elcm=1;
358 1 Datalcm = X; /*命令输出到数据口*/
359 1 nop();Elcm = 0; /*读入到LCM*/
360 1 }
361
362 /************************分区操作允许等待,返回时保留分区选择状态*************************/
363 void lcdbusyL(void)
364 {
365 1 CSALCM = 0; CSBLCM = 1; /*清零CSA,CSB,选择左区*/
C51 COMPILER V7.10 5_2_3_1 06/06/2004 11:46:18 PAGE 7
366 1 wtcom(); /*等待使能*/
367 1 }
368 /*----------------------------------------------------------*/
369 void lcdbusyM(void)
370 {
371 1 CSALCM = 0; CSBLCM =1; /*置CSA为0,CSB为1,选择中区*/
372 1 wtcom(); /*等待使能*/
373 1 }
374 /*----------------------------------------------------------*/
375 void lcdbusyR(void)
376 {
377 1 CSALCM = 1; CSBLCM = 0; /*置CSA为1,CSB为0,选择右区*/
378 1 wtcom(); /*等待使能*/
379 1 }
380 /*----------------------------------------------------------*/
381 void wtcom(void)
382 {
383 1 Elcm=1;_nop_();
384 1 Elcm=0;_nop_();
385 1 Dilcm = 0; /*清零DI*/
386 1 Rwlcm = 1; /*置RW为1*/
387 1 nop();
388 1 Elcm=1;
389 1 Datalcm = 0xFF;
390 1 while(Datalcm & Lcdbusy);
391 1 Elcm = 0;
392 1 }
393
394 /******************根据设定的坐标数据,定位LCM上的下一个操作单元位置******************/
395 void Locatexy(void)
396 {
397 1 unsigned char x,y;
398 1 switch (col&0xc0) /* col与0xC0*/
399 1 { /*条件分支执行 */
400 2 case 0: {lcdbusyL();break;} /*左区*/
401 2 //case 0x40: {lcdbusyM();break;} /*中区*/
402 2 case 0x40: {lcdbusyR();break;} /*右区*/
403 2 }
404 1 x = col&0x3F|SETY; /*col.and.0x3f.or.setx*/
405 1 y = row&0x07|SETX; /*row.and.0x07.or.sety*/
406 1 wtcom(); /*等待使能*/
407 1 Elcm=1;_nop_();
408 1 Elcm=0;_nop_();
409 1 Dilcm = 0; /*清零DI */
410 1 Rwlcm = 0; /*清零RW*/
411 1 nop();Elcm=1;
412 1 Datalcm = y; /*MOV P0,Y */
413 1 Elcm = 0;
414 1
415 1 wtcom(); /*等待使能*/
416 1 Elcm=1;_nop_();
417 1 Elcm=0;_nop_();
418 1 Dilcm = 0; /*清零DI*/
419 1 Rwlcm = 0; /*清零RW*/
420 1 nop();Elcm=1;
421 1 Datalcm = x; /*MOV P0,X*/
422 1 Elcm = 0;
423 1 }
424
425 /*************************************液晶屏初始化**************************************/
426 void Lcminit(void)
427 {
C51 COMPILER V7.10 5_2_3_1 06/06/2004 11:46:18 PAGE 8
428 1 cbyte = DISPOFF; /*关闭显示屏*/
429 1 WrcmdL(cbyte);
430 1 //WrcmdM(cbyte);
431 1 WrcmdR(cbyte);
432 1 cbyte = DISPON; /*打开显示屏*/
433 1 WrcmdL(cbyte);
434 1 //WrcmdM(cbyte);
435 1 WrcmdR(cbyte);
436 1 cbyte = DISPFIRST; /*定义显示起始行为零*/
437 1 WrcmdL(cbyte);
438 1 //WrcmdM(cbyte);
439 1 WrcmdR(cbyte);
440 1 Lcmcls();
441 1 col=0; /*清屏*/
442 1 row=0;
443 1 Locatexy();
444 1 }
445 /****************************************延时*******************************************/
446 void Delay(Uchar MS)
447 {
448 1 Uchar us,usn;
449 1 while(MS!=0)
450 1 { usn = 4;
451 2 while(usn!=0)
452 2 {
453 3 us=0xf0;
454 3 while (us!=0){us--;};
455 3 usn--;
456 3 }
457 2 MS--;
458 2 }
459 1 }
460
461 /************************************定义字符串数组*************************************/
462 Uchar code STR1[]="China Mobile";
463 Uchar code STR2[]="Communications";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -