📄 st7529.lst
字号:
237 //向液晶屏EEPROM中读出数据函数
238 /********************************/
239 void Read_LCM_EEPROM( void )
240 {
241 1 Wrcmd( 0x0030 ); // Ext = 0
C51 COMPILER V8.08 ST7529 04/15/2008 16:12:18 PAGE 5
242 1 Wrcmd( 0x0007 ); // Initial code (1)
243 1 Wrdata( 0x0019 );
244 1 Wrcmd( 0x0031 ); // Ext = 1
245 1 Wrcmd( 0x00CD ); // EEPROM ON
246 1 Wrdata( 0x0000 ); // Entry "Read Mode"
247 1 Delay( 100 ); // Waite for EEPROM Operation ( 100ms )
248 1 Wrcmd( 0x00FD ); // Start EEPROM Reading Operation
249 1 Delay( 100 ); // Waite for EEPROM Operation ( 100ms )
250 1 Wrcmd( 0x00CC ); // Exist EEPORM Mode
251 1 Wrcmd( 0x0030 ); // Ext = 0
252 1 }
253 /********************************/
254 //向液晶屏EEPROM中写入数据函数
255 /********************************/
256 void Write_LCM_EEPROM( void )
257 {
258 1 Wrcmd( 0x0030 ); // Ext = 0
259 1 Wrcmd( 0x00AE ); // Display OFF
260 1 Wrcmd( 0x0007 ); // Initial code(1)
261 1 Wrdata( 0x0019 );
262 1 Wrcmd( 0x0031 ); // Ext = 1
263 1 Wrcmd( 0x00CD ); // EEPROM ON
264 1 Wrdata( 0x0020 ); // Entry "Write Mode"
265 1 Delay( 100 ); // Waite for EEPROM Operation ( 100ms )
266 1 Wrcmd( 0x00FC ); // Start EEPROM Writing Operation
267 1 Delay( 100 ); // Waite for EEPROM Operation ( 100ms )
268 1 Wrcmd( 0x00CC ); // Exist EEPROM Mode
269 1 Wrcmd( 0x0030 ); // Ext = 0
270 1 Wrcmd( 0x00AF ); // Display ON
271 1 }
272 /****************************************/
273 //写入地址函数
274 //col+end_X最大为194
275 //row+end_Y最大为91
276 /****************************************/
277 void Loadxy(unsigned char end_X,unsigned char end_Y)
278 {
279 1 unsigned char i;
280 1 Wrcmd(0X30); //EXT=0
281 1
282 1 Wrcmd(0X75); //THIRD COMMAND SET LINE ADDRESS
283 1 i=START_LINE+row;
284 1 Wrdata(i); //START LINE
285 1 i=i+end_Y-1;
286 1 Wrdata(i); //END LINE
287 1
288 1 i=col/3;
289 1 i=START_COL+i;
290 1 Wrcmd(0X15); //THIRD COMMAND SET COLUMN ADDRESS
291 1 Wrdata(i); //START COLUMN
292 1 if(end_X>2) i=(i+end_X/3);
293 1 if((end_X%3)==0) i--;
294 1 Wrdata(i); //END COLUMN
295 1 }
296 /********************************/
297 //LCD的全显点的测试程序
298 //可作为清屏函数调用。
299 //入口数ucData为点的灰度。
300 /********************************/
301 void WretPointTest(unsigned int ucData)
302 {
303 1 unsigned char i=0,j=0;
C51 COMPILER V8.08 ST7529 04/15/2008 16:12:18 PAGE 6
304 1 col=0;row=0;
305 1 Loadxy(194,91); //定义显示的坐标区域
306 1
307 1
308 1 Wrcmd(0X5C); //DATA WRITE
309 1 LCD_initWR();
310 1 for(i=0;i<MAX_ROW;i++)
311 1 {
312 2 for (j=0;j<MAX_COL_BLOCK;j++)
313 2 {
314 3 Wrcom(ucData);
315 3 }
316 2 }
317 1 }
318 /********************************/
319 //LCD的显示一个点函数
320 //在LCD的col、row位置上显示一个点。
321 //lum为这个点的亮度 为0时最暗,显示全黑色
322 /********************************/
323 void Write_point(unsigned char lum)
324 {
325 1 unsigned int ucData;
326 1 unsigned char i;
327 1 unsigned int temp=0;
328 1
329 1 Wrcmd(0X30); //EXT=0
330 1
331 1 Wrcmd(0X75); //THIRD COMMAND SET LINE ADDRESS
332 1 i=START_LINE+row;
333 1 Wrdata(i); //START LINE
334 1 Wrdata(i); //END LINE
335 1 i=col/3;
336 1 i=START_COL+i;
337 1 Wrcmd(0X15); //THIRD COMMAND SET COLUMN ADDRESS
338 1 Wrdata(i); //START COLUMN
339 1 Wrdata(i); //END COLUMN
340 1
341 1 Wrcmd(0XE0); //进入到读修改写模式
342 1 LCD_initRead(); //初始化读数据状态
343 1 LCD_dummyRead(); //假读一次
344 1 ucData=LCD_DataRead();
345 1
346 1 i = col%3;
347 1 switch(i)
348 1 {
349 2 case 0:
350 2 temp=lum<<8;
351 2 temp=temp<<3;
352 2 ucData=((ucData&0x07FF)|temp);
353 2 break;
354 2 case 1:
355 2 temp=lum<<6;
356 2 ucData=((ucData&0xF83F)|temp);
357 2 break;
358 2 case 2:
359 2 ucData=((ucData&0xFFE0)|lum);
360 2 break;
361 2 }
362 1 Wrcom(ucData);
363 1 Wrcmd(0XEE); //退出读修改写模式
364 1 }
365
C51 COMPILER V8.08 ST7529 04/15/2008 16:12:18 PAGE 7
366 /********************************/
367 //LCD的一个块中三个像素合成显示函数
368 //入口数note为图像的地址
369 /********************************/
370 unsigned char show_block(unsigned char code *note,unsigned char col_num)
371 {
372 1 unsigned int ucData;
373 1 unsigned char i;
374 1 unsigned int temp=0;
375 1
376 1 LCD_dummyRead(); //假读一次
377 1 ucData=LCD_DataRead();
378 1
379 1 i = col%3;
380 1 switch(i)
381 1 {
382 2 case 0:
383 2 temp=*note<<8;
384 2 temp=temp<<3;
385 2 switch(col_num)
386 2 {
387 3 case 1:
388 3 i=1;
389 3 ucData=((ucData&0x07FF)|temp);
390 3 break;
391 3 case 2:
392 3 note++; i=2;
393 3 temp=temp|(*note<<6);
394 3 ucData=((ucData&0x003F)|temp);
395 3 break;
396 3 default:
397 3 note++; i=3;
398 3 temp=temp|(*note<<6);
399 3 note++;
400 3 ucData=temp|*note;
401 3 break;
402 3 }
403 2 break;
404 2 case 1:
405 2 temp=*note<<6;
406 2 if(col_num<2)
407 2 {
408 3 i=1;
409 3 ucData=((ucData&0xF83F)|temp);
410 3 }
411 2 else
412 2 {
413 3 note++; i=2;
414 3 temp=temp|*note;
415 3 ucData=((ucData&0xF800)|temp);
416 3 }
417 2 break;
418 2 case 2:
419 2 i=1;
420 2 ucData=((ucData&0xFFE0)|*note);
421 2 break;
422 2 default: i=0;
423 2 break;
424 2 }
425 1 if(Reverse) ucData=~ucData; //取反,以反显
426 1 RD = 1; //读数据端置1
427 1 Wrcom(ucData);
C51 COMPILER V8.08 ST7529 04/15/2008 16:12:18 PAGE 8
428 1 return i;
429 1 }
430
431 /********************************/
432 //LCD的显示一个矩阵图像函数
433 //点阵数为从左至右、从下至上的模向扫描
434 //入口数note为图像的首地址
435 //入口数col_num、row_num为图像的宽和高 。
436 /********************************/
437 void show_photo(unsigned char code *note,unsigned char col_num,unsigned char row_num)
438 {
439 1 unsigned char i,j;
440 1 unsigned char bak_col;
441 1 unsigned char a;
442 1 Loadxy(col_num,row_num); //写入图像的显示区域
443 1 Wrcmd(0XE0); //进入到读修改写模式
444 1 LCD_initRead(); //初始化读数据状态
445 1
446 1 bak_col=col;
447 1 for(i=0;i<row_num;i++)
448 1 {
449 2 col=bak_col; j=col_num;
450 2 while (j!=0)
451 2 {
452 3 a=show_block(note,j);
453 3 note=note+a;
454 3 j=j-a; col=col+a;
455 3 }
456 2 }
457 1 Wrcmd(0XEE); //退出读修改写模式
458 1 }
459 /********************************/
460 //LCD的显示一个点阵字符函数。
461 //字模数据为从左至右、从上至下的模向扫描模式
462 //字符点阵数为从左至右、从下至上的模向扫描
463 //入口数note为字符的首地址
464 //入口数col_num、row_num为字符的宽和高 。
465 //入口数lum为字符显示的亮度 ,为0时,最黑
466 /********************************/
467 void show_note(unsigned char code *note,unsigned char col_num,unsigned char row_num,unsigned char lum)
468 {
469 1 unsigned char i,j;
470 1 unsigned char bak_col;
471 1 unsigned char a,k;
472 1 unsigned int ucData;
473 1 unsigned int temp1,temp2;
474 1 temp1=lum<<8;
475 1 temp1=temp1<<3;
476 1 temp2=lum<<6;
477 1
478 1 k=col_num/8;
479 1 if((col_num%8)!=0) k++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -