📄 lcd.lst
字号:
251 {unsigned char cur;
252 1 x=x-1;y=y-1;
253 1 if((y>=0)&&(y<8))
254 1 switch(x)
255 1 {case 0:
256 2 {
257 3 cur=y;
258 3 LCD_SETADD();
259 3 break;
260 3 }
261 2 case 1:
262 2 {
263 3 cur=16+y;
264 3 LCD_SETADD();
265 3 break;}
266 2 case 2:
267 2 {
268 3 cur=8+y;
269 3 LCD_SETADD();
270 3 break;
271 3 }
272 2 case 3:
273 2 {
274 3 cur=24+y;
275 3 LCD_SETADD();
276 3 break;
277 3 }
278 2 default:
279 2 {break;}
280 2 }
281 1 else
282 1 return ERR;
283 1 }
284
285
286 /**************************************************************************
287 ------向指定坐标位置写字符子程序-------------------------------------------------------
288 ***************************************************************************
289 说明:入口参数:坐标,坐标,字符
290 出口参数:成功与否
291 **************************************************************************/
292
293 void LCD_PutChar(unsigned char x,unsigned char y, unsigned char ch)
294 {LCD_Goto(x,y);
295 1 LCD_WriteData(ch);
296 1 }
297
298 /**************************************************************************
299 ------向LCD指定位置写汉字子程序--------------------------------------------
300 ***************************************************************************
301 说明:每次只能写一个汉字
302 入口参数:坐标,坐标,待写字符
303 出口参数:成功与否
C51 COMPILER V8.02 LCD 06/07/2008 19:32:58 PAGE 6
304 ***************************************************************************/
305 void LCD_PutHZ(unsigned char x,unsigned char y,unsigned int *ptr)
306 {
307 1 unsigned char *temp,i;
308 1 LCD_Goto(x,y);
309 1 _nop_();
310 1 temp=(unsigned char *)ptr;
311 1 for(i=0;*temp!=0;i++)
312 1 {
313 2 LCD_WriteData(*temp);
314 2 temp++;
315 2 LCD_WriteData(*temp);
316 2 temp++;
317 2 }
318 1 Delay1us(40);
319 1 }
320
321
322 /**************************************************************************
323 ------向LCD指定位置写字符串子程序------------------------------------------
324 ***************************************************************************
325 说明:入口参数:坐标,坐标,待写字符口串
326 出口参数:成功与否
327 ***************************************************************************/
328 void LCD_Printf(unsigned char x,unsigned char y,char *ptr)
329 {unsigned char i;
330 1 LCD_Goto(x,y);
331 1 _nop_();
332 1 for(i=0;*(ptr+i)!=0;i++)
333 1 LCD_WriteData(*(ptr+i));
334 1 Delay1us(40);
335 1 }
336 //********************************************************************
337 //向lcd中连续写入半角字符,主要用于十进制数值的字符显示
338 //入口参数:x坐标,y坐标,半角(数字字符)
339 //*********************************************************************
340 void LCD_PutData(unsigned char x,unsigned char y, char *ch)
341 {static char chh[2];
342 1 if (cc==0)
343 1 {LCD_Goto(x,y);
344 2 LCD_WriteData(*ch);
345 2 chh[0]=*ch;
346 2 cc=1;
347 2 }
348 1 else
349 1 {chh[1]=*ch;
350 2 cc=0;
351 2 LCD_Goto(x,y);
352 2 LCD_WriteData(*chh);
353 2 LCD_WriteData(*(chh+1));
354 2 }
355 1
356 1 }
357
358 //***********************************************
359 //显示十进制数字
360 //入口参数:坐标,坐标,显示的数据
361 //由于定义的数据的限制,十进制数据长度最长为9位
362 //****************************
363 void LCD_PutDec(unsigned char x,unsigned char y, unsigned long decdata)
364 {unsigned char dat[Declenth];
365 1 unsigned char i,j;
C51 COMPILER V8.02 LCD 06/07/2008 19:32:58 PAGE 7
366 1 for(i=0;i<Declenth;i++)
367 1 {dat[i]=decdata%10;
368 2 decdata=decdata/10;
369 2 }
370 1 for(i=Declenth;i>0;i--)
371 1 {if(dat[i-1]>0){j=i;break;}
372 2 }
373 1 for(i=Declenth;i>j;i--){LCD_PutData(x,(Declenth-i)/2+y,character+11);Delay1ms(1);
374 2 }
375 1
376 1 for(i=j;i>0;i--)
377 1 {LCD_PutData(x,(Declenth-i)/2+y,character+dat[i-1]);Delay1ms(1);
378 2 }
379 1 cc=0;
380 1
381 1 }
382 //*****************************************************************
383 //显示浮点型的十进制数值
384 //入口参数:坐标,坐标,数值
385 //整数和小数部分的长度在lcd.h文件中定义 ,由于定义的数据的限制,小数和整数的长度最长为9位
386 //N=(unsigned long)floatdata;floatdata赋予小数部分的值再将小数点移至右边;Dp=(unsigned long)floatdata;
387 //******************************************
388 void LCD_PutFloat(unsigned char x,unsigned char y, float floatdata)
389 {unsigned char datN[FloatNlenth];
390 1 unsigned char datDp[FloatDplenth];
391 1 unsigned char datNDp[FloatLenth];
392 1 unsigned char i,j;
393 1 unsigned long N;
394 1 unsigned long Dp;
395 1
396 1 N=(unsigned long)floatdata;
397 1 floatdata=floatdata-N; //取出小数部分
398 1 for(i=0;i<FloatNlenth;i++) //取出整数部分按由高到低的顺序存入datN[0]到datN[FloatNlenth-1]
399 1 {datN[FloatNlenth-i-1]=N%10;N=N/10;}
400 1
401 1 for(i=0;i<FloatDplenth;i++) //将小数数部分按由高到低的顺序存入datDp[0]到datDp[FloatDplenth-1]
402 1 {floatdata=10*floatdata;}
403 1 Dp=(unsigned long)floatdata; //Dp最多为9位
404 1 for(i=0;i<FloatDplenth;i++){datDp[FloatDplenth-i-1]=Dp%10;Dp=Dp/10;}
405 1
406 1 for(i=0;i<FloatNlenth;i++){datNDp[i]=datN[i];}//按整数 小数点 小数 的连接顺序存入datNDp数组中
407 1 datNDp[i]=10; i=i+1;
408 1 for(;i<FloatNlenth+FloatDplenth+1;i++)
409 1 {j=i-FloatNlenth-1;
410 2 datNDp[i]=datDp[j];
411 2 }
412 1
413 1 //在指定位置依次显示数字
414 1 j=0;
415 1 for(i=0;i<FloatNlenth-1;i++){if(datNDp[i]>0){j=i;break;}}
416 1 if(j>0)
417 1 {for(i=0;i<j;i++){datNDp[i]=11;}}
418 1 for(i=1;i<FloatLenth+1;i++){LCD_PutData(x,(i-1)/2+y,character+datNDp[i-1]);Delay1ms(1);}
419 1 cc=0;//cc=0初始化函数 LCD_PutData;
420 1
421 1 }
422
423
424 /**************************************************************************
425 ------图形文本方式变换子程序-----------------------------------------------
426 ***************************************************************************
427 说明:入口参数:液晶显示方式0:文本;1:图形
C51 COMPILER V8.02 LCD 06/07/2008 19:32:58 PAGE 8
428 出口参数:无
429 ***************************************************************************/
430 void LCD_ChangMode(unsigned char mode)
431 {
432 1 switch(mode)
433 1 {
434 2 case 0:
435 2 {
436 3 FUNCTION_BASIC();
437 3 LCD_DISP_ON();
438 3 break;
439 3 }
440 2 case 1:
441 2 {
442 3 LCD_CURSOR_OFF();
443 3 FUNCTION_EXTEND();
444 3 LCD_GRAPH_CLEAR();
445 3 LCD_GRAPH_ON();
446 3
447 3 break;
448 3 }
449 2 default:
450 2 break;
451 2 }
452 1 }
453
454 /************************************************************************
455 -------图形方式下坐标变换子程序------------------------------------------
456 *************************************************************************
457 说明:入口参数:坐标,坐标
458 出口参数:是否成功
459 ************************************************************************/
460 unsigned char LCD_CoorShift(unsigned char x,unsigned char y)
461 {
462 1 x=x-1;y=y-1;
463 1 x=x>>4;
464 1 if(x<0||x>8) return ERR;
465 1 if(y>=0&&y<32)
466 1 {
467 2 LCD_WriteCommand(0x80+y);
468 2 LCD_WriteCommand(0x80+x);
469 2 }
470 1 else
471 1 {
472 2 LCD_WriteCommand(0x80+y-32);
473 2 LCD_WriteCommand(0x80+x+8);
474 2 }
475 1 }
476
477 code unsigned short Position[]={0x8000,0x4000,0x2000,0x1000,
478 0x0800,0x0400,0x0200,0x0100,
479 0x0080,0x0040,0x0020,0x0010,
480 0x0008,0x0004,0x0002,0x0001
481 };
482 /************************************************************************
483 -------图形方式下画点子程序------------------------------------------
484 *************************************************************************
485 说明:入口参数:坐标,坐标
486 出口参数:无
487 ************************************************************************/
488 void LCD_PutPiex(unsigned char x,unsigned char y)
489 {unsigned short temp;
C51 COMPILER V8.02 LCD 06/07/2008 19:32:58 PAGE 9
490 1 unsigned char temp_H,temp_L;
491 1 LCD_CoorShift(x,y);
492 1 x=x-1;
493 1 x=x%16;
494 1 temp=Position[x];
495 1 temp_L=temp&0x00ff;
496 1 temp_H=(temp>>8)&0x00ff;
497 1 // temp_H|=LCD_ReadData();
498 1 // temp_L|=LCD_ReadData();
499 1 LCD_WriteData(temp_H);
500 1 LCD_WriteData(temp_L);
501 1 }
502
503
504
505
506
507
508 /************************************************************************
509 -------图形方式下打印BMP图画子程序------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -