📄 jiankong.lst
字号:
262 3 SAAreg[11] += 1;
263 3 ConfigSAA7111A();
264 3 //write frontcolor(blue)
265 3 WriteSingleDataToLcd(4, 0x03, 1);
266 3 Write3Digit(200, 220, SAAreg[11]);
267 3 break;
268 3 case 6://对比度减小
269 3 //write frontcolor(black)
270 3 WriteSingleDataToLcd(4, 0x00, 0);
271 3 Write3Digit(200, 220, SAAreg[11]);
272 3 if(SAAreg[11] > 10)
273 3 SAAreg[11] -= 1;
274 3 ConfigSAA7111A();
275 3 //write frontcolor(blue)
276 3 WriteSingleDataToLcd(4, 0x03, 1);
277 3 Write3Digit(200, 220, SAAreg[11]);
278 3 break;
279 3 default:
280 3 break;
281 3 }
282 2 flag = 0;
283 2
284 2 for(t = 0; t < 30000; t ++)
285 2 ;
286 2 }
287 1 }
288
289
290 //////////////////////////////////////////////////////////////////////////////////////////////////////////
291 //Function Define
292 /////////////////////////////////////////////////////////////////////////////////////////////////////////
293 //配置SAA7111A
294 void ConfigSAA7111A()
295 {
296 1 int t = 0;
297 1 //start I2C
C51 COMPILER V7.06 JIANKONG 05/07/2005 20:29:54 PAGE 6
298 1 Start_I2c();
299 1 //Slave address
300 1 SendByte(0x48);
301 1 if(ack == 1)
302 1 {
303 2 //Subaddress
304 2 SendByte(0);
305 2 if(ack == 1)
306 2 {
307 3 for(t = 0; t < 19; t ++)
308 3 {
309 4 SendByte(SAAreg[t]);
310 4 if(ack != 1)
311 4 break;
312 4 }
313 3 }
314 2 }
315 1 //stop
316 1 Stop_I2c();
317 1
318 1 }
319
320 //Display Ctrl
321 void InitLcd()
322 {
323 1 DISPLAY_CS = 0x0;
324 1 }
325
326 void ControlLcd(uchar clr, uchar xinc, uchar single)
327 {
328 1 DISPLAY_A0 = 1;
329 1 DISPLAY_A1 = 1;
330 1 DISPLAY_A2 = 1;
331 1
332 1 DISPLAY_D7 = clr; //CLR: 0-menu and Video; 1-only video
333 1 DISPLAY_D6 = 0; //0(reversed)
334 1 DISPLAY_D5 = 0; //IP
335 1 DISPLAY_D4 = 0; //P
336 1 DISPLAY_D3 = 0; //YINC
337 1 DISPLAY_D2 = xinc; //XINC: 0-disable; 1-enable
338 1 DISPLAY_D1 = 0; //
339 1 DISPLAY_D0 = single; //WRITE0: 0-single write; 1-multi write
340 1
341 1 DISPLAY_WR = 0x0;
342 1 DISPLAY_WR = 0x1;
343 1 }
344 //void WriteAddrToLcd(uchar type, uchar dataA); //type: Xlow-0; Xhigh-1; Ylow-2; Yhigh-3
345 void WriteAddrToLcd(uchar type, uchar dataA)
346 {
347 1 DISPLAY_A0 = type&0x01;
348 1 DISPLAY_A1 = type&0x02;
349 1 DISPLAY_A2 = type&0x04;
350 1
351 1 DISPLAY_D7 = dataA&0x80;
352 1 DISPLAY_D6 = dataA&0x40;
353 1 DISPLAY_D5 = dataA&0x20;
354 1 DISPLAY_D4 = dataA&0x10;
355 1 DISPLAY_D3 = dataA&0x08;
356 1 DISPLAY_D2 = dataA&0x04;
357 1 DISPLAY_D1 = dataA&0x02;
358 1 DISPLAY_D0 = dataA&0x01;
359 1
C51 COMPILER V7.06 JIANKONG 05/07/2005 20:29:54 PAGE 7
360 1 DISPLAY_WR = 0x0;
361 1 DISPLAY_WR = 0x1;
362 1 }
363
364 //void WriteDataToLcd(uchar type, uchar dataA, uchar iFb); //type: data-6; FrontColor-4; IFb: Word-1; Vide
-o and Word-0
365 void WriteSingleDataToLcd(uchar type, uchar dataA, uchar iFb)
366 {
367 1 DISPLAY_A0 = type&0x01;
368 1 DISPLAY_A1 = type&0x02;
369 1 DISPLAY_A2 = type&0x04;
370 1
371 1
372 1 DISPLAY_D7 = iFb;
373 1 DISPLAY_D6 = dataA&0x40;
374 1 DISPLAY_D5 = dataA&0x20;
375 1 DISPLAY_D4 = dataA&0x10;
376 1 DISPLAY_D3 = dataA&0x08;
377 1 DISPLAY_D2 = dataA&0x04;
378 1 DISPLAY_D1 = dataA&0x02;
379 1 DISPLAY_D0 = dataA&0x01;
380 1
381 1 DISPLAY_WR = 0x0;
382 1 DISPLAY_WR = 0x1;
383 1
384 1 }
385
386 //void WriteDataToLcd(uchar type, uchar dataA); //type: data-6;
387 void WriteMultiDataToLcd(uchar type, uchar dataA)
388 {
389 1 DISPLAY_A0 = type&0x01;
390 1 DISPLAY_A1 = type&0x02;
391 1 DISPLAY_A2 = type&0x04;
392 1
393 1
394 1 DISPLAY_D7 = dataA&0x80;
395 1 DISPLAY_D6 = dataA&0x40;
396 1 DISPLAY_D5 = dataA&0x20;
397 1 DISPLAY_D4 = dataA&0x10;
398 1 DISPLAY_D3 = dataA&0x08;
399 1 DISPLAY_D2 = dataA&0x04;
400 1 DISPLAY_D1 = dataA&0x02;
401 1 DISPLAY_D0 = dataA&0x01;
402 1
403 1 DISPLAY_WR = 0x0;
404 1 DISPLAY_WR = 0x1;
405 1
406 1 }
407
408 void ClearScreen() //Clear Screen
409 {
410 1 uint i, j;
411 1 uchar y = 0, yHigh = 0;
412 1 for(i = 0; i < 480; i ++)
413 1 {
414 2 WriteAddrToLcd(0, 0);
415 2 WriteAddrToLcd(1, 0);
416 2 WriteAddrToLcd(2, y);
417 2 WriteAddrToLcd(3, yHigh);
418 2 //multiWrite
419 2 for(j = 0; j < 80; j ++)
420 2 WriteMultiDataToLcd(6, 0xFF);
C51 COMPILER V7.06 JIANKONG 05/07/2005 20:29:54 PAGE 8
421 2
422 2 if(y == 255)
423 2 {
424 3 y = 0;
425 3 yHigh = 1;
426 3 }
427 2 else
428 2 y ++;
429 2 }
430 1 }
431
432 void SetPosXY(uint x, uint y) //Set position
433 {
434 1 WriteAddrToLcd(0, x&0x00ff);
435 1 WriteAddrToLcd(1, (x&0x0300) >> 8);
436 1 WriteAddrToLcd(2, y&0x00ff);
437 1 WriteAddrToLcd(3, (y&0x0100) >> 8);
438 1 }
439
440 void WriteMultiWord(uint x, uint y, uint xNum, uint yNum, uchar *pData) //write word at Screen
441 {
442 1 uint i, j;
443 1 //
444 1 for(i = 0; i < yNum; i ++)
445 1 {
446 2 //write addr
447 2 SetPosXY(x, y);
448 2 for(j = 0; j < xNum; j ++)
449 2 WriteMultiDataToLcd(6, pData[i*xNum + j]);
450 2 y ++;
451 2 }
452 1 }
453
454 void Write3Digit(uint x, uint y, uchar num) //write word at Screen
455 {
456 1 uchar i, digit, posX = x, posY = y;
457 1 //
458 1 digit = num/100;
459 1 for(i = 0; i < 15; i ++)
460 1 {
461 2 //write addr
462 2 SetPosXY(posX, posY);
463 2 WriteMultiDataToLcd(6, CodeNum[digit*15 + i]);
464 2 posY ++;
465 2 }
466 1
467 1 posY = y;
468 1 posX = x + 10;
469 1 digit = (num%100)/10;
470 1 for(i = 0; i < 15; i ++)
471 1 {
472 2 //write addr
473 2 SetPosXY(posX, posY);
474 2 WriteMultiDataToLcd(6, CodeNum[digit*15 + i]);
475 2 posY ++;
476 2 }
477 1 posY = y;
478 1 posX = x + 20;
479 1 digit = (num%100)%10;
480 1 for(i = 0; i < 15; i ++)
481 1 {
482 2 //write addr
C51 COMPILER V7.06 JIANKONG 05/07/2005 20:29:54 PAGE 9
483 2 SetPosXY(posX, posY);
484 2 WriteMultiDataToLcd(6, CodeNum[digit*15 + i]);
485 2 posY ++;
486 2 }
487 1
488 1 }
489 //////////////////////////////////////////////////////////////////////////////////////////////////////////
-/////
490 //I2C
491 ////////////////////////////////////////////////////////////////////
492 //起动总线函数原型: void Start_I2c()
493 //功能: 启动I2C总线,即发送I2C起始条件
494 ////////////////////////////////////////////////////////////////////
495
496 void Start_I2c()
497 {
498 1 SDA=1; //发送起始条件的数据信号
499 1 _Nop();
500 1 SCL=1;
501 1 _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); //起始条件建立时间大于4.7us,延时
502 1 SDA=0; //发送起始信号
503 1 _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); // 起始条件锁定时间大于4μs
504 1 SCL=0; //钳住I2C总线,准备发送或接收数据
505 1 _Nop(); _Nop();
506 1 }
507
508 //////////////////////////////////////////////////////////////////////
509 //结束总线函数原型: void Stop_I2c();
510 //功能: 结束I2C总线,即发送I2C结束条件
511 ///////////////////////////////////////////////////////////////////////
512
513 void Stop_I2c()
514 {
515 1 SDA=0; //发送结束条件的数据信号
516 1 _Nop();
517 1 SCL=1; //发送结束条件的时钟信号
518 1 _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); //结束条件建立时间大于4μs
519 1 SDA=1; //发送I2C总线结束信号
520 1 _Nop(); _Nop(); _Nop(); _Nop(); _Nop();
521 1 }
522
523 /////////////////////////////////////////////////////////////////////
524 //字节数据传送函数原型: void SendByte(uchar c);
525 //功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
526 // 此状态位进行操作.(不应答或非应答都使ack=0 假)
527 // 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
528 //////////////////////////////////////////////////////////////////////
529 void SendByte(uchar c)
530 {
531 1 uchar BitCnt;
532 1 for(BitCnt=0;BitCnt<8;BitCnt++) //要传送的数据长度为8位
533 1 {
534 2 if((c<<BitCnt)&0x80) SDA=1; //判断发送位
535 2 else SDA=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -