⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiankong.lst

📁 通过单片机控制SAA7111A来显示监控图像
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -