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

📄 7290_2.lst

📁 用89s52,访问ZLG7290(LED数码显示)
💻 LST
📖 第 1 页 / 共 4 页
字号:
 712   1          {
 713   2                  Speak = False;
 714   2                      if (f) delay3(200); else delay3(100);
 715   2                      Speak = True;
 716   2                      if (i>0) delay3(100);
 717   2              }
 718   1      }
 719          void Watch(void)
 720          {
 721   1             WDTRST       = 0x1e;
 722   1                 WDTRST       = 0xe1;
 723   1      }
 724          uchar  Zlg_read(uchar i)
 725          {
 726   1          uchar x;
 727   1              start();                        /*   开始   */
 728   1          shift8(0x70);                     /* 写控制码 */
 729   1          ack();
 730   1              shift8(i);                      /* 发地址 */
 731   1          ack();                          /*  应答  */
 732   1              start();
 733   1              shift8(0x71);
 734   1          ack();
 735   1      
C51 COMPILER V7.09   7290_2                                                                08/25/2004 15:37:04 PAGE 13  

 736   1              SDA = True; delay(1);
 737   1          for (x=0; x<8; x++)             /* 读数据 */
 738   1              {
 739   2                   AD = AD * 2;
 740   2                       SCL = True;  delay(1); 
 741   2               AD_0 = SDA;
 742   2                       SCL = False; delay(1);
 743   2              }
 744   1          stop();
 745   1          return(AD);
 746   1      }
 747          void Zlg_write(uchar *p)
 748          {
 749   1           start();
 750   1           shift8(0x70);//SendByte(0x70);
 751   1               ack();
 752   1               Watch();
 753   1           shift8(*p++);//SendByte(address);
 754   1               ack();
 755   1               shift8(*p++);//SendByte(i);
 756   1               ack();
 757   1           shift8(*p);
 758   1               ack();
 759   1               stop();
 760   1      }
 761          void Zlg_writebyte(uchar address,uchar i)
 762          {
 763   1           start();
 764   1           shift8(0x70);
 765   1               ack();
 766   1               Watch();
 767   1           shift8(address);
 768   1               ack();
 769   1               shift8(i);
 770   1               ack();
 771   1               stop();
 772   1      }
 773          void delay(uchar i)
 774          { 
 775   1          while (i > 0)
 776   1              {
 777   2                 i--;
 778   2              }
 779   1          Watch();
 780   1      }
 781          void shift8(uchar ch)
 782          {
 783   1              uchar i=8;
 784   1              
 785   1              SCL=0;
 786   1              delay_nop(); 
 787   1              while(i--)
 788   1              {
 789   2                      SDA=(bit)(ch&0x80);
 790   2                      _nop_();_nop_();_nop_();
 791   2                      ch<<=1;
 792   2                      SCL=1;
 793   2                      _nop_();_nop_();_nop_();_nop_();_nop_();
 794   2                      SCL=0;
 795   2                      _nop_();_nop_();        
 796   2              }
 797   1      }
C51 COMPILER V7.09   7290_2                                                                08/25/2004 15:37:04 PAGE 14  

 798          /*void shift8(uchar a)
 799          {
 800              uchar i;
 801                  AD = a;
 802                  Watch();
 803                  for (i=0; i<8; i++)
 804                  {
 805                       SDA = AD_7;  delay_nop(); 
 806                   SCL = True;  delay_nop(); 
 807                           SCL = False; delay_nop(); 
 808                           AD = AD * 2;
 809              }
 810          }*/
 811          void start()
 812          {
 813   1          
 814   1        SDA=1;   /*发送起始条件的数据信号*/
 815   1        _nop_();
 816   1        _nop_();
 817   1        _nop_();
 818   1        SCL=1;
 819   1        _nop_();    /*起始条件建立时间大于4.7us,延时*/
 820   1        _nop_();
 821   1        _nop_();
 822   1        _nop_();
 823   1        _nop_();    
 824   1        _nop_();
 825   1        SDA=0;   /*发送起始信号*/
 826   1        _nop_();    /* 起始条件锁定时间大于4μs*/
 827   1        _nop_();
 828   1        _nop_();
 829   1        _nop_();
 830   1        _nop_();
 831   1        _nop_();     
 832   1        SCL=0;   /*钳住I2C总线,准备发送或接收数据 */
 833   1        _nop_();
 834   1        _nop_();
 835   1        _nop_();
 836   1            //SDA = True;  delay_nop();          
 837   1            //SCL = True;  delay_nop();         
 838   1            //SDA = False; delay_nop(); 
 839   1                //SCL = False; delay_nop(); 
 840   1      }
 841          
 842          void ack(void)
 843          {
 844   1              SDA=1;
 845   1              SCL=0;
 846   1              _nop_();_nop_();          
 847   1              SCL=1;
 848   1              _nop_();_nop_();_nop_();_nop_();_nop_();    
 849   1              //while(SDA){;}   //This may make the CPU crash. 04-3-18 17:16
 850   1              SCL=0;
 851   1              _nop_();_nop_();    
 852   1      }
 853          
 854          
 855          /*-----------------------------------------------
 856          调用方式:void no_ack(void)
 857          函数说明:无需应答位,在读程序中用到
 858          -----------------------------------------------*/
 859          void no_ack(void)
C51 COMPILER V7.09   7290_2                                                                08/25/2004 15:37:04 PAGE 15  

 860          {
 861   1              SDA=1;
 862   1              delay_nop();          
 863   1              SCL=1;
 864   1              delay_nop();          
 865   1              //while(SDA){;}  //This may make the CPU crash. 04-3-18 17:16
 866   1              SCL=0;
 867   1              delay_nop();          
 868   1      }
 869          void stop()
 870          {
 871   1        SDA=0;  /*发送结束条件的数据信号*/
 872   1        _nop_();   /*发送结束条件的时钟信号*/
 873   1        _nop_();
 874   1        SCL=1;  /*结束条件建立时间大于4μs*/
 875   1        _nop_();
 876   1        _nop_();
 877   1        _nop_();
 878   1        _nop_();
 879   1        _nop_();
 880   1        _nop_();
 881   1        SDA=1;  /*发送I2C总线结束信号*/
 882   1        _nop_();
 883   1        _nop_();
 884   1        _nop_();
 885   1        _nop_();
 886   1        _nop_();
 887   1            //SDA = False; delay_nop();   /*  停止  */
 888   1                //SCL = True;  delay_nop();
 889   1            //SDA = True;  delay_nop();
 890   1      }
 891          void  SendByte(uchar c)
 892          {
 893   1       uchar BitCnt;
 894   1       
 895   1       for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
 896   1          {
 897   2           if((c<<BitCnt)&0x80) SDA=1;   /*判断发送位*/
 898   2             else  SDA=0;                
 899   2           _nop_();
 900   2               _nop_();
 901   2               _nop_();
 902   2           SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
 903   2            _nop_(); 
 904   2            _nop_();               /*保证时钟高电平周期大于4μs*/
 905   2            _nop_();
 906   2            _nop_();
 907   2            _nop_();         
 908   2           SCL=0; 
 909   2          }
 910   1          
 911   1          _nop_();
 912   1          _nop_();
 913   1              _nop_();
 914   1          SDA=1;               /*8位发送完后释放数据线,准备接收应答位*/
 915   1          _nop_();
 916   1          _nop_();   
 917   1              _nop_();
 918   1          SCL=1;
 919   1          _nop_();
 920   1          _nop_();
 921   1          _nop_();
C51 COMPILER V7.09   7290_2                                                                08/25/2004 15:37:04 PAGE 16  

 922   1              if(SDA==1) YesNo_ack=0;     
 923   1             else YesNo_ack=1;        /*判断是否接收到应答信号*/
 924   1          SCL=0;
 925   1          _nop_();
 926   1          _nop_();
 927   1              _nop_();
 928   1      }
 929          void delay_nop()
 930          {
 931   1          _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 932   1              _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 933   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2329    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12      41
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2      10
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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