📄 lcmtemp.lst
字号:
238 {
239 1 LCM1602_DATA=0xFF;
240 1 LCM1602_RS=0;
241 1 LCM1602_RW=1;
C51 COMPILER V8.02 LCMTEMP 08/11/2007 11:03:53 PAGE 5
242 1 LCM1602_E=0;
243 1 LCM1602_E=0;
244 1 LCM1602_E=1;
245 1 while(LCM1602_DATA&busy); //检测忙信号
246 1 }
247
248 /*==============================================================*/
249 /* LCM初始化 */
250 /*==============================================================*/
251 void initialize_1602(void)
252 {
253 1 write_1602_command(0x38,0); //三次显示模式设置,不检测忙信号
254 1 delay1602(10);
255 1 write_1602_command(0x38,0);
256 1 delay1602(10);
257 1 write_1602_command(0x38,0);
258 1 delay1602(10);
259 1 write_1602_command(0x38,1); //显示模式设置,开始要求每次检测忙信号
260 1 write_1602_command(0x08,1); //关闭显示
261 1 write_1602_command(0x01,1); //显示清屏
262 1 write_1602_command(0x06,1); // 显示光标移动设置
263 1 write_1602_command(0x0C,1); // 显示开及光标设置
264 1 }
265
266 /*==================================================================================*/
267 /* 按指定位置显示一个字符 */
268 /*==================================================================================*/
269 void display_1602_onechar(unsigned char x, unsigned char y, unsigned char d)
270 //x表示列、y 表示行
271 {
272 1 y &= 0x1;
273 1 x &= 0xF; //限制x不能大于15,y不能大于1
274 1 if (y) x |= 0x40; //当要显示第二行时地址码+0x40;
275 1 x |= 0x80; // 算出指令码
276 1 write_1602_command(x,0); //这里不检测忙信号,发送地址码
277 1 write_1602_data(d);
278 1 }
279
280 /*================================================================================*/
281 /* 按指定位置显示一串字符 */
282 /*================================================================================*/
283 void display_1602_listchar(unsigned char x, unsigned char y, unsigned char *d)
284 {
285 1 unsigned char ListLength;
286 1 ListLength=0;
287 1 y &= 0x1;
288 1 x &= 0xF; //限制x不能大于15,y不能大于1
289 1 while (d[ListLength]>=0x20&&ListLength<16) //若到达字串尾则退出
290 1 {
291 2 if (x <= 0xF) //x坐标应小于0xF(15)
292 2 {
293 3 display_1602_onechar(x, y, d[ListLength]); //显示单个字符
294 3 x++;
295 3 }
296 2 ListLength++;
297 2 }
298 1 }
299
300 //===============光标开关==================
301 /*void cursor_1602(unsigned char work)
302 {
303 if(work==1)write_1602_command(0x0f,1);
C51 COMPILER V8.02 LCMTEMP 08/11/2007 11:03:53 PAGE 6
304 else if(work==0)write_1602_command(0x0c,1);
305 }
306 */
307 //=========================================
308
309 //================清屏=====================
310 /*void clear_1602()
311 {
312 write_1602_command(0x01,0);
313 }
314 */
315
316 //=========================================
317
318 //==============延时=======================
319 void delay1602(unsigned char t)
320 {
321 1 unsigned int i,j;
322 1 for(i=0;i<t;i++)
323 1 for(j=0;j<200;j++);
324 1 }
325 //=========================================
326
327 /*========================================================================================================
-==============*/
328 /* 在指定的位置显示数字num
- */
329 /*========================================================================================================
-==============*/
330 /*void display_1602_num(unsigned char x,unsigned char y,long int num)
331 {
332 long int n=num; //复制num以便操作
333 unsigned char cnum[]={' ',' ',' '}; //字符串cnum用于存放num各位数字的
334 char i,l;
335 if(num<0)n=-num; //若num<0,n取反
336 while(1) //计算数字长度l
337 {
338 if(n>0){n/=10;l++;}
339 else break;
340 }
341 if(num>=0)n=num;
342 else n=-num;
343 if(num<0){cnum[x]='-';x++;} //若num<0,则在x处写入负号,然后在x+1处显示数字
344 for(i=l-1;i>=0;i--) //num各位数存入cnum,最高位放在cnum[x];
345 {
346 cnum[x+i]=n%10+48;
347 n/=10;
348 }
349 display_1602_listchar(0,y,cnum); //显示num
350 } */
351 /*========================================================================================================
-===============*/
352
353
354 /*===========================================================================*/
355 /*函数功能:循环左(右)移动屏幕上的所有字符 */
356 /*参数说明:time为每移动一格时所需要的时间,direction为移动方向:0为左移,1为右移*/
357 /*===========================================================================*/
358 /*void movesreen_1602_rl(unsigned int time,unsigned char direction)
359 {
360 unsigned int i=0;
361 for(i=0;i<16;i++)
C51 COMPILER V8.02 LCMTEMP 08/11/2007 11:03:53 PAGE 7
362 {
363 if(direction==0)
364 write_1602_command(0x18,1);
365 else if(direction==1)
366 write_1602_command(0x1c,1);
367 for(i=0;i<time;i++)
368 delay1602(10);
369 }
370 }
371
372 /*======================================================================*/
373 /* 以左移动的方式在第一行显示长于16字节的字符串 */
374 /*======================================================================*/
375 /*void movedata_1602_left(unsigned char *d)
376 {
377 unsigned int i=0,j=0,k=15,x=0,L=0;
378 for(;j<15;j++)
379 {
380 for(i=0;i<=j;i++)
381 {
382 display_1602_onechar(15-j+i,0,d[i]);
383 }
384 delay1602(100);
385 }
386 i=0;
387 while(d[i+15]>=0x20) //若到达字串尾则退出,后16字符交给下一个循环处理
388 {
389 for(x=0;x<16;x++,L++)
390 display_1602_onechar(x, 0, d[L+i]); //显示单个字符
391 delay1602(100);
392 L-=16;
393 i++;
394 };
395 for(i=0;i<16;i++)//处理剩下的16个字符
396 {
397 write_1602_command(0x18,1);
398 delay1602(100);
399 }
400 }
401
402 /*=======================================*/
403 /* 以逐行上移的方式显示文章 */
404 /*=======================================*/
405 /*void movedata_1602_up(unsigned char *d)
406 {
407 unsigned int i=0,j=0,k=0,work=0;
408 unsigned char Data1[16],Data2[16];
409 for(j=0;work==0;j+=16)
410 {
411 for(i=0;i<16;i++)
412 {
413 Data1[i]=d[i+j];
414 Data2[i]=d[i+16+j];
415 if(work)Data2[i]=' ';
416 if(Data2[i]<0x20){work=1;Data2[i]=' ';}
417 //最后一行没有字符的地方填满空格
418 }
419
420 display_1602_listchar(0,0,Data1);
421 display_1602_listchar(0,1,Data2);
422 for(k=0;k<5;k++)delay1602(100);
423 }
C51 COMPILER V8.02 LCMTEMP 08/11/2007 11:03:53 PAGE 8
424 display_1602_listchar(0,0,Data2);
425 display_1602_listchar(0,1," ");
426 for(k=0;k<5;k++)delay1602(100);
427 write_1602_command(0x01,1);//显示完最后一行后清0
428 }
429
430
431 /*================================================*/
432 /* 以翻页的方式显示文章 */
433 /*================================================*/
434 /*void turnpage_1602(unsigned char *d)
435 {
436 unsigned int i=0,j=0,k=0,work=0;
437 unsigned char Data1[16],Data2[16];
438 for(j=0;work==0;j+=32)
439 {
440 for(i=0;i<16;i++)
441 {
442 Data1[i]=d[i+j];
443 Data2[i]=d[i+16+j];
444 if(work==1)Data2[i]=' ';
445 if(work==2)Data1[i]=' ';
446 if(Data2[i]<0x20){work=1;Data2[i]=' ';}
447 if(Data1[i]<0x20){work=2;Data1[i]=' ';}
448 }
449 display_1602_listchar(0,0,Data1);
450 display_1602_listchar(0,1,Data2);
451 for(k=0;k<5;k++)delay1602(100);
452 }
453 write_1602_command(0x01,1);//显示完最后一行后清0
454 }
455 */
456
457
458
459
460
461
462
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 613 ----
CONSTANT SIZE = 30 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 9
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -