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

📄 zlg7290.lst

📁 C8051F226单片机的初始化
💻 LST
字号:
C51 COMPILER V7.50   ZLG7290                                                               09/18/2008 15:29:04 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE ZLG7290
OBJECT MODULE PLACED IN ZLG7290.OBJ
COMPILER INVOKED BY: D:\Keil C51\C51\BIN\C51.EXE ZLG7290.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //********************************************************************
   2          //文件名:ZLG7290.c
   3          //创建人: ZFZ
   4          //建立时间: 2008-6-6
   5          //版本描 述: STIV8.0.0
   6          //功能描述:键盘管理芯片ZLG7290的标准80C51驱动程序C文件
   7          //备注:
   8          //******************************************************************
   9          #include <C8051F340.h>
  10          #include "ZLG7290.h"
  11           
  12          
  13          /*---------------------------------------------
  14          函数名:ZLG7290_Delay
  15          功  能:延时
  16          参  数:uint x
  17          返回值:无
  18          修改记录
  19          ----------------------------------------------
  20          日期     作者      内容
  21          
  22          ---------------------------------------------*/
  23          void ZLG7290_Delay(unsigned int x)
  24          {
  25   1       //unsigned int i;
  26   1      
  27   1       //for(i=0;i<x;i++);
  28   1       while ( --x != 0 );
  29   1      }
  30          
  31          void I2C_Init(void)
  32          {
  33   1       SCL_SET();
  34   1       ZLG7290_Delay(200);
  35   1       SDA_SET(); 
  36   1       ZLG7290_Delay(200);
  37   1      }
  38          
  39          
  40          /*---------------------------------------------
  41          函数名:ZLG7290_Start
  42          功  能:起始条件
  43          参  数:无
  44          返回值:无
  45          修改记录
  46          ----------------------------------------------
  47          日期     作者      内容
  48          
  49          ---------------------------------------------*/
  50          void ZLG7290_Start(void)
  51          {
  52   1       SDA_SET();              //SCL为高时,SDA的下降延开始
  53   1       ZLG7290_Delay(200);
  54   1       //_nop_();
  55   1       SCL_SET();
C51 COMPILER V7.50   ZLG7290                                                               09/18/2008 15:29:04 PAGE 2   

  56   1       //while((P4 & ZLG7290_SCL)==0)
  57   1       while(ZLG7290_SCL == 0)
  58   1       {;}
  59   1       //_nop_();
  60   1       //_nop_();
  61   1       //_nop_();
  62   1       //_nop_();
  63   1       //_nop_();
  64   1       ZLG7290_Delay(200);
  65   1       SDA_CLR();
  66   1       //_nop_();
  67   1       //_nop_();
  68   1       //_nop_();
  69   1       //_nop_();
  70   1       //_nop_();
  71   1       //_nop_();
  72   1       ZLG7290_Delay(200);
  73   1       SCL_CLR();
  74   1       //_nop_();
  75   1       //_nop_();
  76   1       ZLG7290_Delay(200);
  77   1      }
  78          
  79          /*---------------------------------------------
  80          函数名:ZLG7290_Stop
  81          功  能:停止条件
  82          参  数:无
  83          返回值:无
  84          修改记录
  85          ----------------------------------------------
  86          日期     作者      内容
  87          
  88          ---------------------------------------------*/
  89          void ZLG7290_Stop(void)
  90          {
  91   1       SDA_CLR();          //SCL为高时,SDA的上升延停止
  92   1       ZLG7290_Delay(200);
  93   1       SCL_SET();
  94   1       //while((P4 & ZLG7290_SCL)==0)
  95   1       while(ZLG7290_SCL == 0)
  96   1       {;}
  97   1       //_nop_();
  98   1       //_nop_();
  99   1       //_nop_();
 100   1       //_nop_();
 101   1       //_nop_();
 102   1       ZLG7290_Delay(200);
 103   1       SDA_SET();
 104   1       //_nop_();
 105   1       //_nop_();
 106   1       //_nop_();
 107   1       //_nop_();
 108   1       //_nop_();
 109   1       ZLG7290_Delay(200);
 110   1      }
 111          
 112          /*---------------------------------------------
 113          函数名:ZLG7290_Wrbyt
 114          功  能:写一个字节函数
 115          参  数:unsigned char shu 
 116          返回值:无
 117          修改记录
C51 COMPILER V7.50   ZLG7290                                                               09/18/2008 15:29:04 PAGE 3   

 118          ----------------------------------------------
 119          日期     作者      内容
 120          
 121          ---------------------------------------------*/
 122          void ZLG7290_Wrbyt(unsigned char shu)
 123          {
 124   1       unsigned char i;
 125   1      
 126   1       for(i=0;i<8;i++)
 127   1       {
 128   2        if((shu & 0x80)>0)
 129   2        {
 130   3         SDA_SET();
 131   3        }
 132   2        else
 133   2        {
 134   3         SDA_CLR();
 135   3        }
 136   2        //ZLG7290_Delay(200);
 137   2       //_nop_();
 138   2        SCL_SET();
 139   2        //_nop_();
 140   2        //_nop_();
 141   2        //_nop_();
 142   2        //_nop_();
 143   2        //_nop_();
 144   2        ZLG7290_Delay(200);
 145   2        SCL_CLR();                  //SDA上的数据只有在SCL为低时才能改变
 146   2        ZLG7290_Delay(200);
 147   2        //_nop_();
 148   2        shu <<= 1;                  //数据左移一位
 149   2       }
 150   1      }
 151          
 152          /*---------------------------------------------
 153          函数名:ZLG7290_Rdbyt
 154          功  能:读一个字节
 155          参  数:无
 156          返回值:unsigned char nn  
 157          修改记录
 158          ----------------------------------------------
 159          日期     作者      内容
 160          
 161          ---------------------------------------------*/
 162          unsigned char ZLG7290_Rdbyt(void)
 163          {
 164   1       unsigned char nn=0xff;
 165   1       unsigned char j;
 166   1       SDA_SET();  //置数据线为输入方式
 167   1      
 168   1       for(j=0;j<8;j++)
 169   1       {
 170   2        //SCL_CLR(); 
 171   2        //_nop_();
 172   2        //_nop_();
 173   2        //_nop_();
 174   2        //_nop_();
 175   2        //_nop_();
 176   2        //ZLG7290_Delay(200);
 177   2        SCL_SET();
 178   2        ZLG7290_Delay(200);
 179   2        //if((P4 & ZLG7290_SDA)==0)
C51 COMPILER V7.50   ZLG7290                                                               09/18/2008 15:29:04 PAGE 4   

 180   2        if(ZLG7290_SDA == 0)
 181   2        {
 182   3         nn<<=1;
 183   3         nn=(nn&0xfe);
 184   3         SCL_CLR(); 
 185   3         ZLG7290_Delay(200);
 186   3        }
 187   2        else
 188   2        {
 189   3         nn<<=1;
 190   3         nn=(nn|0x01);
 191   3         SCL_CLR();
 192   3         ZLG7290_Delay(200); 
 193   3        }
 194   2       }
 195   1       //SCL_CLR(); 
 196   1       //ZLG7290_Delay(200);
 197   1      
 198   1       return(nn);
 199   1      }
 200          
 201          
 202          /*---------------------------------------------
 203          函数名:ZLG7290_ACK
 204          功  能:产生应答信号
 205          参  数:无
 206          返回值:无
 207          修改记录
 208          ----------------------------------------------
 209          日期     作者      内容
 210          
 211          ---------------------------------------------*/
 212          void ZLG7290_ACK(void)
 213          {
 214   1       SDA_CLR();
 215   1       ZLG7290_Delay(200);
 216   1       SCL_SET();
 217   1       ZLG7290_Delay(200);
 218   1       //_nop_();
 219   1       //_nop_();
 220   1       //_nop_();
 221   1       //_nop_();
 222   1       //_nop_();
 223   1       //_nop_();
 224   1       SCL_CLR();
 225   1       ZLG7290_Delay(200);
 226   1       SDA_SET();
 227   1      }
 228          
 229          /*---------------------------------------------
 230          函数名:ZLG7290_NACK
 231          功  能:产生非应答信号
 232          参  数:无
 233          返回值:无
 234          修改记录
 235          ----------------------------------------------
 236          日期     作者      内容
 237          
 238          ---------------------------------------------*/
 239          void ZLG7290_NACK(void)
 240          {
 241   1       SDA_SET();
C51 COMPILER V7.50   ZLG7290                                                               09/18/2008 15:29:04 PAGE 5   

 242   1       ZLG7290_Delay(200);
 243   1       SCL_SET();
 244   1       //_nop_();
 245   1       //_nop_();
 246   1       //_nop_();
 247   1       //_nop_();
 248   1       //_nop_();
 249   1       //_nop_();
 250   1       ZLG7290_Delay(200);
 251   1       SCL_CLR();
 252   1       ZLG7290_Delay(200);
 253   1       SDA_CLR();
 254   1      }
 255           
 256          /*---------------------------------------------
 257          函数名:Check_ACK
 258          功  能:检查返回应答信号
 259          参  数:无
 260          返回值:F0(0或1)
 261          修改记录
 262          ----------------------------------------------
 263          日期     作者      内容
 264          
 265          ---------------------------------------------*/
 266          bit Check_ACK(void)
 267          {
 268   1       bit F0;
 269   1       //_nop_();
 270   1       //_nop_();
 271   1       //_nop_();
 272   1       //ZLG7290_Delay(200);
 273   1       SDA_SET();
 274   1       //_nop_();
 275   1       //_nop_();
 276   1       //_nop_();
 277   1       ZLG7290_Delay(200);
 278   1       SCL_SET();
 279   1       //_nop_();
 280   1       //_nop_();
 281   1       //_nop_();
 282   1       //_nop_();
 283   1       //_nop_();
 284   1       //_nop_();
 285   1       ZLG7290_Delay(200);
 286   1       //F0 = (P4 & ZLG7290_SDA) >> 4;
 287   1       F0 = ZLG7290_SDA;
 288   1       SCL_CLR();
 289   1       //_nop_();
 290   1       //_nop_();
 291   1       //_nop_();
 292   1       //_nop_();
 293   1       //_nop_();
 294   1       //_nop_();
 295   1       //_nop_();
 296   1       ZLG7290_Delay(200);
 297   1      
 298   1       return(F0);
 299   1      }
 300          
 301          /*---------------------------------------------
 302          函数名:ZLG7290_ReadReg
 303          功  能:读7290寄存器
C51 COMPILER V7.50   ZLG7290                                                               09/18/2008 15:29:04 PAGE 6   

 304          参  数:unsigned char SubAddr
 305          返回值:寄存器值
 306          修改记录
 307          ----------------------------------------------
 308          日期     作者      内容
 309          
 310          ---------------------------------------------*/
 311          unsigned char ZLG7290_ReadReg(unsigned char SubAddr)
 312          {
 313   1       unsigned char regvalue = 0;
 314   1       bit cflag=0;
 315   1       
 316   1       ZLG7290_Start();
 317   1       ZLG7290_Wrbyt(ZLG7290_I2C_ADDR);   
 318   1       cflag = Check_ACK();
 319   1       ZLG7290_Wrbyt(SubAddr);   
 320   1       cflag = Check_ACK();
 321   1       ZLG7290_Start();
 322   1       ZLG7290_Wrbyt(ZLG7290_I2C_ADDR + 1);   
 323   1       cflag = Check_ACK();
 324   1       regvalue = ZLG7290_Rdbyt();
 325   1       
 326   1       ZLG7290_NACK();
 327   1       //ZLG7290_Delay(100);  
 328   1       ZLG7290_Stop();
 329   1       ZLG7290_Delay(2000);
 330   1      
 331   1       return(regvalue);
 332   1      }
 333          
 334          /*---------------------------------------------
 335          函数名:ZLG7290_WriteReg
 336          功  能:写7290寄存器
 337          参  数:unsigned char SubAddr,unsigned char value
 338          返回值:无
 339          修改记录
 340          ----------------------------------------------
 341          日期     作者      内容
 342          
 343          ---------------------------------------------*/
 344          void ZLG7290_WriteReg(unsigned char SubAddr,unsigned char value)
 345          {
 346   1       bit cflag=0;
 347   1      
 348   1       ZLG7290_Start();         //开始
 349   1       ZLG7290_Wrbyt(ZLG7290_I2C_ADDR);     
 350   1       cflag=Check_ACK();
 351   1       ZLG7290_Wrbyt(SubAddr);
 352   1       cflag=Check_ACK();
 353   1       
 354   1       ZLG7290_Wrbyt(value);
 355   1       cflag=Check_ACK();      //接收应答信号
 356   1        
 357   1       //ZLG7290_Delay(200);  //延时
 358   1       ZLG7290_Stop();      //停止
 359   1       ZLG7290_Delay(2000); //延时
 360   1      }
 361          
 362          /*---------------------------------------------
 363          函数名:ZLG7290_WriteCmd
 364          功  能:写7290控制寄存器
 365          参  数:unsigned char SubAddr,unsigned char value
C51 COMPILER V7.50   ZLG7290                                                               09/18/2008 15:29:04 PAGE 7   

 366          返回值:无
 367          修改记录
 368          ----------------------------------------------
 369          日期     作者      内容
 370          
 371          ---------------------------------------------*/
 372          void ZLG7290_WriteCmd(unsigned char cmd0,unsigned char cmd1)
 373          {
 374   1       bit cflag=0;
 375   1      
 376   1       ZLG7290_Start();         //开始
 377   1       ZLG7290_Wrbyt(ZLG7290_I2C_ADDR);     
 378   1       cflag=Check_ACK();
 379   1       ZLG7290_Wrbyt(ZLG7290_CmdBuf);
 380   1       cflag=Check_ACK();
 381   1      
 382   1       ZLG7290_Wrbyt(cmd0);
 383   1       cflag=Check_ACK();      //接收应答信号
 384   1       ZLG7290_Wrbyt(cmd1);
 385   1       cflag=Check_ACK();      //接收应答信号
 386   1        
 387   1       //ZLG7290_Delay(200);  //延时
 388   1       ZLG7290_Stop();      //停止
 389   1       ZLG7290_Delay(2000); //延时
 390   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    361    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       4
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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