📄 main_lcd.lst
字号:
C51 COMPILER V7.06 MAIN_LCD 05/09/2007 10:46:29 PAGE 5
235 1 P0=x; //数据送到P0口
236 1
237 1 CSA = 1;
238 1 CSB = 0;
239 1 DI = 0;
240 1 lck = 0;
241 1 P1 = 0xff;
242 1 lck = 1;//使能LCD,把数据打入LCD
243 1 delay(3);
244 1 lck = 0;
245 1 P1 = 0xef;
246 1 lck = 1;
247 1
248 1 }
249
250
251 /*************定位*****************/
252 void Locatexy(uchar row,uchar col)
253 {
254 1 uchar x, y, right;
255 1 switch(col&0xc0)
256 1 {
257 2 case 0:{//右半屏
258 3 RW = 1;//R/W=1(读)
259 3 CSA = 1;
260 3 CSB = 0;
261 3 DI = 0;//命令操作
262 3 lck = 0;
263 3 P1 = 0xff;
264 3 lck = 1;; //使能LCD
265 3 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
266 3 lck = 0;
267 3 P1 = 0xef;
268 3 lck = 1;
269 3 right = 1;break;}//置右半屏标志
270 2 case 0x40:{//左半屏
271 3
272 3 RW = 1;//R/W=1读
273 3 CSA = 0;
274 3 CSB = 1;
275 3 DI = 0;//命令操作
276 3 lck = 0;
277 3 P1 = 0xff;
278 3 lck = 1;//使能LCD
279 3 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
280 3 lck = 0;
281 3 P1 = 0xef;
282 3 lck = 1;
283 3 right = 0;break;}//置左半屏标志
284 2 }
285 1 x=col&0x3f|SETX;//把列数据变成行命令
286 1 y=row&0x07|SETY;//把行数据变成行命令
287 1 /**********************************/
288 1 lck = 0;
289 1 P1 = 0xff;
290 1 lck = 1;//判断忙标志
291 1 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
292 1 lck = 0;
293 1 P1 = 0xef;
294 1 lck = 1;
295 1 /*********以上为判断忙标志********/
296 1 /*********************************/
C51 COMPILER V7.06 MAIN_LCD 05/09/2007 10:46:29 PAGE 6
297 1 RW = 0;//R/W=0写
298 1
299 1 P0 = y;//行数据送到P0口
300 1
301 1 lck = 0;
302 1 P1 = 0xff;
303 1 lck = 1;//使能LCD,把数据打入LCD
304 1 delay(3);
305 1 lck = 0;
306 1 P1 = 0xef;
307 1 lck = 1;
308 1 /**********以上为送行命令***********/
309 1 RW =1;//R/W=1读
310 1 lck = 0;
311 1 P1 = 0xff;
312 1 lck = 1;//使能LCD,准备读忙标志
313 1 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
314 1 lck = 0;
315 1 P1 = 0xef;
316 1 lck = 1;
317 1 /*********以上为判断忙标志********/
318 1 RW = 0;//R/W=0写
319 1
320 1 P0 = x;//列数据送P0口
321 1
322 1 lck = 0;
323 1 P1 = 0xff;
324 1 lck = 1;//使能LCD,把数据打入LCD
325 1 delay(3);
326 1 lck = 0;
327 1 P1 = 0xef;
328 1 lck = 1;
329 1 /**********以上为送列命令***********/
330 1 if(right)
331 1 statu = 1;//置右半区标志
332 1 else
333 1 statu = 0;//置左半区标志
334 1 }
335
336
337 /**************数据写输出***************/
338 void Wrdata(uchar x,uchar row,uchar col)
339 {
340 1 Locatexy(row,col);//定位显示位置
341 1 RW = 0;//R/W=0
342 1 DI = 1;//数据操作
343 1 lck = 0;
344 1 P1 = 0xef;
345 1 lck = 1;;//不使能LCD
346 1 if(statu){//根据状态确定是左半屏还是右半屏
347 2 CSA= 1;
348 2 CSB= 0;
349 2 }else{
350 2 CSA=0;
351 2 CSB=1;
352 2 }
353 1
354 1 P0 = x;//送显示数据
355 1
356 1 lck = 0;
357 1 P1 = 0xff;
358 1 lck = 1; //使能LCD,把P0数据打入LCD
C51 COMPILER V7.06 MAIN_LCD 05/09/2007 10:46:29 PAGE 7
359 1 delay(3);
360 1 lck = 0;
361 1 P1 = 0xef;
362 1 lck = 1;
363 1 }
364
365
366
367
368 /******************************************图形输出*********************************/
369 void Putpicture(void)
370 {
371 1 unsigned char i,j,row, col ;
372 1 unsigned int x;
373 1 row = 0; col=0;
374 1 for(j=0;j<128;j++){
375 2 x=j*0x08;
376 2 for(i=0;i<8;i++)
377 2 {
378 3 cbyte=picture[x++];
379 3 Wrdata(cbyte,row,col);
380 3 row++;
381 3 }
382 2 row=0;
383 2 col++;
384 2 }
385 1
386 1 }
387
388 /****************************************半角数据点阵输出******************************/
389 void Puthalf(uchar *strch,uchar row,uchar col)
390 {
391 1 uchar i,bakerx;
392 1 bakerx = row;
393 1 for(i=0;i<16;i++)//上半字输出
394 1 {
395 2 cbyte=strch[i];
396 2 Wrdata(cbyte,bakerx,col);
397 2
398 2 cbyte=strch[i+1];
399 2 Wrdata(cbyte,bakerx+1,col);
400 2 col++;
401 2 i++;
402 2 }
403 1 }
404
405
406 /***************************************字符型点阵行--》列转换************************/
407 void VtoH8x16change(uchar *hzbuf)
408 { uchar i,j,k, cash[16];
409 1 uchar newbyte, savebit[8];
410 1 for(k=0;k<16;k++){
411 2 newbyte = 0;
412 2 for(i=0;i<8;i++){
413 3 savebit[i]=hzbuf[i] & 0x80;
414 3 }
415 2 for(j=0;j<8;j++){
416 3 savebit[j] = savebit[j] >> (7-j);
417 3 newbyte = newbyte | savebit[j];
418 3 }
419 2 cash[k] = newbyte;
420 2 newbyte = 0;
C51 COMPILER V7.06 MAIN_LCD 05/09/2007 10:46:29 PAGE 8
421 2 for(i=8;i<16;i++){
422 3 savebit[i-8]=hzbuf[i] & 0x80;
423 3 }
424 2 for(j=0;j<8;j++){
425 3 savebit[j] = savebit[j] >> (7-j);
426 3 newbyte = newbyte |savebit[j];
427 3 }
428 2 cash[k+1] = newbyte;
429 2 for(j=0;j<16;j++){
430 3 hzbuf[j] = hzbuf[j] <<1;
431 3 }
432 2 k++;
433 2 }
434 1 for(i=0;i<16;i++)
435 1 hzbuf[i] = cash[i];
436 1 }
437
438
439 /*************************************显示英文和符号字符*******************************/
440 void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag)
441 {
442 1 uchar ucXArray[16],i;
443 1
444 1 if(flag){ // 反白显示英文
445 2 for(i = 0; i < 16; i++)
446 2 ucXArray[i] = ~ch[i];
447 2 }else{
448 2 for(i = 0; i < 16; i++)
449 2 ucXArray[i] = ch[i];
450 2 }
451 1 VtoH8x16change(ucXArray);
452 1 Puthalf(ucXArray,row,col);
453 1 }
454
455 /******************************************显示中英文字符串************************************/
456 void vWrite8x16String(uchar *str,uchar row, uchar col, bit flag)
457 {
458 1 unsigned char i, j,thiscol;
459 1 j = strlen(str);
460 1 for(i = 0; i < j; i++)
461 1 { thiscol = (i % 16) * 8 + col;//计算列地址
462 2 if(str[i] < 0xa1)//当前显示内容为英文字符
463 2 vWrite8x16Character(&char_Table[str[i]-0x20][0],row,thiscol,flag);
464 2 }
465 1 }
466
467 /**************************************结束*************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1569 ----
CONSTANT SIZE = 57 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 77
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -