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

📄 zlg7290.txt

📁 ZLG7290使用代码 ,使用模拟I2C,其是ZLG7290的IIC驱动C语言程序。
💻 TXT
📖 第 1 页 / 共 2 页
字号:
      //最后修改时间   :   2004-2-18
      //*****************************************************************
      u08 I2c_Send(u08 icadder, u08 adder, u08 value)
      {
         if (adder >0x17)
            return False;
            
         Start_I2c();
         I2c_Send_Byte(icadder);  //写入IC地址
         _Nop(15);
         I2c_Send_Byte(adder);    //写入寄存器地址
         _Nop(15);
         I2c_Send_Byte(value);   //写入值
         _Nop(30);
         
         Stop_I2c();

         return True;
      }

      //==============================================
      //ZLG7290接口部分
      //==============================================

      //*****************************************************************
      //函   数   名   :   ZLG_Get_Key
      //建 立 时  间   :   2004-2-18
      //功 能 描  述   :   从ZLG7290里读取键盘数值
      //备      注   :   有返回值,返回的为读取的按键值,如果是0则是没有按键读回 
      //最后修改时间   :   2004-2-19
      //*****************************************************************
      u08 ZLG_Get_Key(void)
      {
         u08 tmp;
         tmp = 0;
         I2c_Read(zlg7290, 0x01, 0x01, &tmp);
         _Nop(1);
         return tmp; 
      }

      //*****************************************************************
      //函   数   名   :   ZLG_Disp_Cnt
      //建 立 时  间   :   2004-2-18
      //功 能 描  述   :   向ZLG7290写入要显示的数码管的数量(0--7)
      //备      注   :   有返回值,成功写入数据返回True,注意ZLG7290扫描位数寄存器的设置
      //最后修改时间   :   2004-2-19
      //*****************************************************************
      u08 ZLG_Disp_Cnt(u08 Count)
      {
         u08 tmp;
         tmp = 0;
         if (Count > 0x07)
            return False;
            
         I2c_Send(zlg7290,0x0D,Count);
         _Nop(1);
         I2c_Read(zlg7290,0x0D,0x01,&tmp);
         asm("nop");
         if (tmp == Count)
            return True;
         else
            return False;
      }

      //*****************************************************************
      //函   数   名   :   ZLG_Disp_LED
      //建 立 时  间   :   2004-2-18
      //功 能 描  述   :   向ZLG7290写入要显示的数码管和内容.
      //备      注   :   有返回值,成功写入数据返回True,注意ZLG7290扫描位数寄存器的设置
      //最后修改时间   :   2004-2-19
      //*****************************************************************
      u08 ZLG_Disp_LED(u08 Led_Index,u08 Led_Num)
      {
         u08 tmp;
         tmp = 0;
         if ((Led_Index < 0x10) || (Led_Index > 0x17))
            return False;
         
         I2c_Send(zlg7290,Led_Index,Led_Num);
         asm("nop");
         I2c_Read(zlg7290,Led_Index,0x01,&tmp);
         asm("nop");
         if (tmp == Led_Num)
            return True;
         else
            return False;
      }

      //*****************************************************************
      //函   数   名   :   ZLG_Cls
      //建 立 时  间   :   2004-2-18
      //功 能 描  述   :   清LED显示,Type =0 全部清除显示为0,Type=1 全部不显示,默认为1
      //备      注   :   有返回值,成功则返回True,失败返回False
      //最后修改时间   :   2004-2-18
      //*****************************************************************
      u08 ZLG_Cls(u08 Type)
      {
         u08 tmp,i;
         u08 Num;
         tmp = 0;
         
         Num = 0x00;
         
         if (Type == 0x00)
            Num = 0xFC;
            
         for(i=0;i<8;i++)
         {
            I2c_Send(zlg7290,SubDpRam+i,Num);
            asm("nop");
            asm("nop");
         }
         _Nop(1);
         for(i=0;i<8;i++)
         {
            I2c_Read(zlg7290,SubDpRam+i,0x01,&tmp);
            if(tmp != Num)
               return False;
         }
         
         _Nop(1);
         return True;

      }
      #ifndef USE_INT
      //*****************************************************************
      //函   数   名   :   ZLG_Check_Key
      //建 立 时  间   :   2004-2-19
      //功 能 描  述   :   检查是否有按键,只有在没有定义过USE_INT后才能使用
      //备      注   :   有返回值 ,如果返回True表示有按键产生
      //最后修改时间   :   2004-2-19
      //*****************************************************************
         u08 ZLG_Check_Key(void) 
         {
            u08 tmp;
            I2c_Read(zlg7290,0x00,0x01,&tmp);
            if ((tmp & 0x01) == 0x01 )
               return True;
            else
               return False;
         }
      #endif

      //*****************************************************************
      //函   数   名   :   ZLG_Read_Reg
      //建 立 时  间   :   2004-2-19
      //功 能 描  述   :   读取指定寄存器,作为I2c的读取数据的API使用,扩展功能用
      //备      注   :   有返回值
      //最后修改时间   :   2004-2-19
      //*****************************************************************
      u08 ZLG_Read_Reg(u08 reg) 
      {
         u08 tmp;
         tmp = 0;
         I2c_Read(zlg7290,reg,0x01,&tmp);
         return tmp;
      }

      //*****************************************************************
      //函   数   名   :   ZLG_Write_reg
      //建 立 时  间   :   2004-2-19
      //功 能 描  述   :   向指定寄存器写入数据,作为I2c的写入数据的API使用,扩展功能用
      //备      注   :   有返回值
      //最后修改时间   :   2004-2-19
      //*****************************************************************
      u08 ZLG_Write_reg(u08 reg, u08 value) 
      {
         u08 tmp;
         tmp = 0;
         I2c_Send(zlg7290,reg,value);
         _Nop(1);
         I2c_Read(zlg7290,reg,0x01,&tmp);
         
         if (tmp == value)
            return True;
         else
            return False;
      }

      //*****************************************************************
      //函   数   名   :   RST_ZLG
      //建 立 时  间   :   2004-2-19
      //功 能 描  述   :   由于ZLG的不稳定,控制它的复位,达到整个系统的健壮
      //备      注   :   有返回值,此函数未经实际测试
      //最后修改时间   :   2004-2-19
      //*****************************************************************
      #ifdef USE_RST
         void delay(u16 dly_Time)
         {
            u16 i,t;
            t = dly_Time;
            while(t--)
               for(i=0;i<6300;i++);
         }
         u08 RST_ZLG(void)
         {
            u08 tmp;
            tmp = 0x00;
            RST_0;
            delay(400);   //延时100未经实际测试
            _Nop(2);
            RST_1;
            I2c_Send(zlg7290,0x00,0xF0);
            _Nop(10);
            I2c_Read(zlg7290,0x00,0x01,&tmp);
            if(tmp == 0xF0)
               return True;
            else
               return False;
         }
      #endif

      //##################程序结束

⌨️ 快捷键说明

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