📄 lcd12864.lst
字号:
224 3 lck = 1;
225 3 right = 1;break;}//置右半屏标志
226 2 case 0x40:{//左半屏
227 3
228 3 RW = 1;//R/W=1读
229 3 CSA = 0;
230 3 CSB = 1;
231 3 DI = 0;//命令操作
232 3 lck = 0;
233 3 P1 = 0xff;
234 3 lck = 1;//使能LCD
C51 COMPILER V7.06 LCD12864 05/31/2007 14:34:54 PAGE 5
235 3 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
236 3 lck = 0;
237 3 P1 = 0xef;
238 3 lck = 1;
239 3 right = 0;break;}//置左半屏标志
240 2 }
241 1 x=col&0x3f|SETX;//把列数据变成行命令
242 1 y=row&0x07|SETY;//把行数据变成行命令
243 1 /**********************************/
244 1 lck = 0;
245 1 P1 = 0xff;
246 1 lck = 1;//判断忙标志
247 1 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
248 1 lck = 0;
249 1 P1 = 0xef;
250 1 lck = 1;
251 1 /*********以上为判断忙标志********/
252 1 /*********************************/
253 1 RW = 0;//R/W=0写
254 1
255 1 P0 = y;//行数据送到P0口
256 1
257 1 lck = 0;
258 1 P1 = 0xff;
259 1 lck = 1;//使能LCD,把数据打入LCD
260 1 delay(3);
261 1 lck = 0;
262 1 P1 = 0xef;
263 1 lck = 1;
264 1 /**********以上为送行命令***********/
265 1 RW =1;//R/W=1读
266 1 lck = 0;
267 1 P1 = 0xff;
268 1 lck = 1;//使能LCD,准备读忙标志
269 1 while(P0 & LCDBUZY);//最高位为1,表示忙,则循环
270 1 lck = 0;
271 1 P1 = 0xef;
272 1 lck = 1;
273 1 /*********以上为判断忙标志********/
274 1 RW = 0;//R/W=0写
275 1
276 1 P0 = x;//列数据送P0口
277 1
278 1 lck = 0;
279 1 P1 = 0xff;
280 1 lck = 1;//使能LCD,把数据打入LCD
281 1 delay(3);
282 1 lck = 0;
283 1 P1 = 0xef;
284 1 lck = 1;
285 1 /**********以上为送列命令***********/
286 1 if(right)
287 1 statu = 1;//置右半区标志
288 1 else
289 1 statu = 0;//置左半区标志
290 1 }
291
292
293 /**************数据写输出***************/
294 void Wrdata(uchar x,uchar row,uchar col)
295 {
296 1 Locatexy(row,col);//定位显示位置
C51 COMPILER V7.06 LCD12864 05/31/2007 14:34:54 PAGE 6
297 1 RW = 0;//R/W=0
298 1 DI = 1;//数据操作
299 1 lck = 0;
300 1 P1 = 0xef;
301 1 lck = 1;;//不使能LCD
302 1 if(statu){//根据状态确定是左半屏还是右半屏
303 2 CSA= 1;
304 2 CSB= 0;
305 2 }else{
306 2 CSA=0;
307 2 CSB=1;
308 2 }
309 1
310 1 P0 = x;//送显示数据
311 1
312 1 lck = 0;
313 1 P1 = 0xff;
314 1 lck = 1; //使能LCD,把P0数据打入LCD
315 1 delay(3);
316 1 lck = 0;
317 1 P1 = 0xef;
318 1 lck = 1;
319 1 }
320
321
322
323 /****************图形输出******************/
324 void Putpicture(uchar flag)
325 {
326 1 unsigned char i,j,row, col ;
327 1 unsigned int x;
328 1 row = 0; col=0;
329 1 for(j=0;j<128;j++){
330 2 x=j*0x08;
331 2 for(i=0;i<8;i++)
332 2 { if(flag)
333 3 cbyte=picture1[x++];
334 3 else
335 3 cbyte=picture2[x++];
336 3 Wrdata(cbyte,row,col);
337 3 row++;
338 3 }
339 2 row=0;
340 2 col++;
341 2 }
342 1
343 1 }
344
345 /***************半角数据点阵输出*******************/
346 void Puthalf(uchar *strch,uchar row,uchar col)
347 {
348 1 uchar i,bakerx;
349 1 bakerx = row;
350 1 for(i=0;i<16;i++)//上半字输出
351 1 {
352 2 cbyte=strch[i];
353 2 Wrdata(cbyte,bakerx,col);
354 2
355 2 cbyte=strch[i+1];
356 2 Wrdata(cbyte,bakerx+1,col);
357 2 col++;
358 2 i++;
C51 COMPILER V7.06 LCD12864 05/31/2007 14:34:54 PAGE 7
359 2 }
360 1 }
361
362
363 /************汉字输出******************/
364 /*void Puthz(uchar *str,uchar row,uchar col)
365 {
366 uchar i,bakerx;
367 bakerx=row;
368 for(i=0;i<32;i++)
369 {
370 cbyte=str[i];
371 Wrdata(cbyte,row,col); //上半字节输出
372 i++;
373 row=bakerx+1;
374 cbyte=str[i];
375 Wrdata(cbyte,row,col); //下半字节输出
376
377 row=bakerx;
378 col=col+1;
379 }
380 }
381
382 */
383 /***********************字符型点阵行--》列转换********************/
384 void VtoH8x16change(uchar *hzbuf)
385 { uchar i,j,k, cash[16];
386 1 uchar newbyte, savebit[8];
387 1 for(k=0;k<16;k++){
388 2 newbyte = 0;
389 2 for(i=0;i<8;i++){
390 3 savebit[i]=hzbuf[i] & 0x80;
391 3 }
392 2 for(j=0;j<8;j++){
393 3 savebit[j] = savebit[j] >> (7-j);
394 3 newbyte = newbyte | savebit[j];
395 3 }
396 2 cash[k] = newbyte;
397 2 newbyte = 0;
398 2 for(i=8;i<16;i++){
399 3 savebit[i-8]=hzbuf[i] & 0x80;
400 3 }
401 2 for(j=0;j<8;j++){
402 3 savebit[j] = savebit[j] >> (7-j);
403 3 newbyte = newbyte |savebit[j];
404 3 }
405 2 cash[k+1] = newbyte;
406 2 for(j=0;j<16;j++){
407 3 hzbuf[j] = hzbuf[j] <<1;
408 3 }
409 2 k++;
410 2 }
411 1 for(i=0;i<16;i++)
412 1 hzbuf[i] = cash[i];
413 1 }
414
415
416 /************************显示英文和符号字符********************/
417 void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag)
418 {
419 1 uchar ucXArray[16],i;
420 1
C51 COMPILER V7.06 LCD12864 05/31/2007 14:34:54 PAGE 8
421 1 if(flag){ // 反白显示英文
422 2 for(i = 0; i < 16; i++)
423 2 ucXArray[i] = ~ch[i];
424 2 }else{
425 2 for(i = 0; i < 16; i++)
426 2 ucXArray[i] = ch[i];
427 2 }
428 1 VtoH8x16change(ucXArray);
429 1 Puthalf(ucXArray,row,col);
430 1 }
431
432 /*************************显示英文字符串**********************/
433 void vWrite8x16String(uchar *str,uchar row, uchar col, bit flag)
434 {
435 1 unsigned char i, j,thiscol;
436 1 j = strlen(str);
437 1 for(i = 0; i < j; i++)
438 1 { thiscol = (i % 16) * 8 + col;//计算列地址
439 2 if(str[i] < 0xa1)//当前显示内容为英文字符
440 2 vWrite8x16Character(&char_Table[str[i]-0x20][0],row,thiscol,flag);
441 2 }
442 1 }
443
444
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1210 ----
CONSTANT SIZE = 60 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 75
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 + -