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

📄 ad7109.lst

📁 这是8051弹片机驱动AD芯片ICL7109的源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 308   1              lcd_wrc(0x30);
 309   1              lcd_wrc(0x01);
 310   1              lcd_wrc(0x06);
 311   1              lcd_wrc(0x0c);
 312   1              delay(100);
 313   1      }       
 314          void lcd_wrc(uchar com)
 315          {
 316   1              lcd_checkbusy();
 317   1              rs = 0;
 318   1              rw = 0;
 319   1              e = 1;
 320   1              P0 = com;       
 321   1              P0 = com;
 322   1              delay(10);
 323   1              e = 0;
 324   1      }
 325          
 326          void lcd_wrd(uchar dat)
 327          {
 328   1              lcd_checkbusy();
 329   1              rs = 1;
 330   1              rw = 0;
 331   1              e = 1;
 332   1              P0 = dat;
 333   1              P0 = dat;
 334   1              delay(5);
 335   1              e = 0;
 336   1      }
 337          void lcd_checkbusy()
 338          {
 339   1              uchar busy;
 340   1              P0 = 0XFF;
 341   1              busy = P0;
 342   1              if(busy>0x7f)
 343   1              {
 344   2                      rs = 0;
 345   2                      rw = 1;
 346   2                      e = 1;
 347   2                      busy = P0;
 348   2                      e = 0;
 349   2                      delay(10);
 350   2              }
 351   1      }
 352          uchar lcd_rdd();
 353          void delay(unsigned int n)
 354          {
 355   1              while(n--);
 356   1      }
 357          void lcd_on()
 358          {
 359   1              lcd_deng = 0;
 360   1      }
 361          void lcd_off()
 362          {
 363   1              lcd_deng = 1;
 364   1      }
C51 COMPILER V7.07   AD7109                                                                02/27/2007 10:02:55 PAGE 7   

 365          uchar lcd_read_ac()
 366          {
 367   1              uchar dat;
 368   1      //      P0 = 0X00;
 369   1              rs = 0;
 370   1              rw = 1;
 371   1              e = 1;
 372   1              dat = P0;
 373   1              dat = P0;
 374   1              e = 0;
 375   1              return(dat&0x7f);
 376   1      }
 377          void lcd_dis_num(uint dat)
 378          {
 379   1          uint a=0;
 380   1          dat =dat%10000;
 381   1          a =dat/1000;
 382   1          lcd_wrd(0x30+a);
 383   1          dat =dat%1000;
 384   1          a =dat/100;
 385   1          lcd_wrd(0x30+a);
 386   1          dat =dat%100;
 387   1          a=dat/10;
 388   1          lcd_wrd(0x30+a);
 389   1          dat =dat%10;
 390   1          lcd_wrd(0x30+dat);
 391   1      }
 392          void lcd_dis_ch(uchar h,uchar l)
 393          {
 394   1          lcd_wrd(h);
 395   1          lcd_wrd(l);
 396   1      }
 397          
 398          void lcd_add(uchar h,uchar l)       //定位地址
 399          {
 400   1        l--;
 401   1        switch(h)
 402   1        {
 403   2          case 1:
 404   2          {
 405   3            lcd_wrc(0x80+l);
 406   3            break;
 407   3          }
 408   2          case 2:
 409   2          {
 410   3            lcd_wrc(0x90+l);
 411   3            break;
 412   3          }
 413   2          case 3:
 414   2          {
 415   3            lcd_wrc(0x88+l);
 416   3            break;
 417   3          }
 418   2          case 4:
 419   2          {
 420   3            lcd_wrc(0x98+l);
 421   3            break;
 422   3          }
 423   2        }
 424   1      }
 425          
 426          
C51 COMPILER V7.07   AD7109                                                                02/27/2007 10:02:55 PAGE 8   

 427          unsigned char key_data()      //判断键值
 428          {
 429   1              uchar a=0,b=0,c=0,d=0,i=0;
 430   1              a = 0xef;
 431   1              for(i = 0;i<4;i++)      //读行
 432   1              {
 433   2                  P1 = a;
 434   2                      delay(10);
 435   2                  b = P1;
 436   2                      b = b&0x0f;
 437   2      //      b = b>>4;
 438   2                  if(b!=0x0F)   //表示有键按下
 439   2              {
 440   3                              delay(200);   //软件延时   确认有键按下
 441   3                              b = P1&0X0F;
 442   3      //              b = b>>4;
 443   3                      if(b != 0x0F)
 444   3                      {  
 445   4      //                      return b;
 446   4      
 447   4                                      c=b;
 448   4                              if(c==0X07)
 449   4                              {
 450   5                                      d=i*4+3;
 451   5                              }
 452   4                              else if(c==0X0B)
 453   4                              {
 454   5                                      d=i*4+2;
 455   5                              }
 456   4                              else if(c==0X0D)
 457   4                              {
 458   5                                      d=i*4+1;
 459   5                              }
 460   4                              else if(c==0X0E)
 461   4                              {
 462   5                                      d=i*4;
 463   5                              }
 464   4                                  break;
 465   4                              }
 466   3                      }
 467   2              else
 468   2                  {
 469   3                      a = a<<1;
 470   3                              a = a+0x01;
 471   3                      if(a==0xFF)
 472   3                      {
 473   4      //                      return 0x0f;
 474   4                                      d = 0x0f+1;
 475   4                                      break;
 476   4                      }
 477   3              }
 478   2              }
 479   1      //      d=d-1;
 480   1              return d;
 481   1      
 482   1      
 483   1      
 484   1      }
 485          
 486          
 487          /*******************************************************************
 488                               起动总线函数               
C51 COMPILER V7.07   AD7109                                                                02/27/2007 10:02:55 PAGE 9   

 489          函数原型: void  Start_I2c();  
 490          功能:       启动I2C总线,即发送I2C起始条件.
 491            
 492          ********************************************************************/
 493          
 494          void Start_I2c()                //起动总线函数
 495          {
 496   1              SDA=1;   //发送起始条件的数据信号
 497   1              _Nop();
 498   1              SCL=1;
 499   1              _Nop();    //起始条件建立时间大于4.7us,延时
 500   1              _Nop();
 501   1              _Nop();
 502   1              _Nop();
 503   1              _Nop();    
 504   1              SDA=0;   //发送起始信号
 505   1              _Nop();    // 起始条件锁定时间大于4
 506   1              _Nop();
 507   1              _Nop();
 508   1              _Nop();
 509   1              _Nop();       
 510   1              SCL=0;   //钳住I2C总线,准备发送或接收数据 
 511   1              _Nop();
 512   1              _Nop();
 513   1      }
 514          
 515          
 516          
 517          /*******************************************************************
 518                                结束总线函数               
 519          函数原型: void  Stop_I2c();  
 520          功能:       结束I2C总线,即发送I2C结束条件.
 521            
 522          ********************************************************************/
 523          void Stop_I2c()         //结束总线函数
 524          {
 525   1              SDA=0;  /*发送结束条件的数据信号*/
 526   1              _Nop();   /*发送结束条件的时钟信号*/
 527   1              SCL=1;  /*结束条件建立时间大于4*/
 528   1              _Nop();
 529   1              _Nop();
 530   1              _Nop();
 531   1              _Nop();
 532   1              _Nop();
 533   1              SDA=1;  /*发送I2C总线结束信号*/
 534   1              _Nop();
 535   1              _Nop();
 536   1              _Nop();
 537   1              _Nop();
 538   1      }
 539          
 540          
 541          
 542          
 543          /*******************************************************************
 544                           字节数据传送函数               
 545          函数原型: void  SendByte(uchar c);
 546          功能:  将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
 547               此状态位进行操作.(不应答或非应答都使ack=0 假)     
 548               发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
 549          ********************************************************************/
 550          void  SendByte(uchar c)         //字节数据传送函数send
C51 COMPILER V7.07   AD7109                                                                02/27/2007 10:02:55 PAGE 10  

 551          {
 552   1              uchar BitCnt;
 553   1              for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
 554   1          {
 555   2              if((c<<BitCnt)&0x80)SDA=1;   /*判断发送位*/
 556   2              else  SDA=0;                
 557   2              _Nop();
 558   2              SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
 559   2              _Nop(); 
 560   2              _Nop();               /*保证时钟高电平周期大于4*/
 561   2              _Nop();
 562   2              _Nop();
 563   2              _Nop();  
 564   2              SCL=0; 
 565   2          }
 566   1          _Nop();
 567   1          _Nop();
 568   1          SDA=1;               /*8位发送完后释放数据线,准备接收应答位*/
 569   1          _Nop();
 570   1          _Nop();   
 571   1          SCL=1;
 572   1          _Nop();
 573   1          _Nop();
 574   1          _Nop();
 575   1          if(SDA==1)ack=0;     
 576   1          else ack=1;        /*判断是否接收到应答信号*/
 577   1          SCL=0;
 578   1          _Nop();
 579   1          _Nop();
 580   1      }
 581          
 582          
 583          
 584          
 585          
 586          
 587          /*******************************************************************
 588                           字节数据传送函数               
 589          函数原型: uchar  RcvByte();
 590          功能:  用来接收从器件传来的数据,并判断总线错误(不发应答信号),
 591               发完后请用应答函数。  
 592          ********************************************************************/   
 593          uchar  RcvByte()                //字节数据传送函数 receive
 594          {
 595   1              uchar retc;
 596   1              uchar BitCnt;
 597   1          retc=0; 
 598   1              SDA=1;             /*置数据线为输入方式*/
 599   1              for(BitCnt=0;BitCnt<8;BitCnt++)
 600   1          {
 601   2              _Nop();           
 602   2              SCL=0;       /*置时钟线为低,准备接收数据位*/
 603   2              _Nop();
 604   2              _Nop();         /*时钟低电平周期大于4.7μs*/
 605   2              _Nop();
 606   2              _Nop();
 607   2              _Nop();
 608   2              SCL=1;       /*置时钟线为高使数据线上数据有效*/
 609   2              _Nop();
 610   2              _Nop();
 611   2              retc=retc<<1;
 612   2              if(SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */
C51 COMPILER V7.07   AD7109                                                                02/27/2007 10:02:55 PAGE 11  

 613   2              _Nop();
 614   2              _Nop(); 
 615   2              }
 616   1              SCL=0;    
 617   1              _Nop();
 618   1              _Nop();
 619   1              return(retc);
 620   1      }
 621          
 622          
 623          
 624          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -