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

📄 zlg7290.c

📁 基于Cortex-M3的全自动焊接机
💻 C
字号:

#include "ZLG7290.h"

//IIC 0  接的控制面板上的按键和LED
//IIC 1  接的控制面板数码管


extern tI2CM_DEVICE zlg7290;


/*
函数:ZLG7290_WriteReg()
功能:向ZLG7290的某个内部寄存器写入数据
参数:
	RegAddr:ZLG7290的内部寄存器地址
	dat:要写入的数据
返回:
	I2C_MASTER_ERR_NONE:正常
	往往不做返回值检测
*/
unsigned long ZLG7290_WriteReg(unsigned char RegAddr, unsigned char *dat)
{
	unsigned long ulStatus;
        I2CM_DeviceDataSet(&zlg7290, RegAddr, dat, 1);
	ulStatus = I2CM_DataSend(&zlg7290);
	return ulStatus;
}

/*
函数:ZLG7290_ReadReg()
功能:从ZLG7290的某个内部寄存器读出数据
参数:
	RegAddr:ZLG7290的内部寄存器地址
	*dat:保存读出的数据
返回:
	I2C_MASTER_ERR_NONE:正常
	
*/
unsigned long ZLG7290_ReadReg(unsigned char RegAddr, unsigned char *dat)
{
	unsigned long ulStatus;
        I2CM_DeviceDataSet(&zlg7290, RegAddr, dat, 1);
	ulStatus = I2CM_DataRecv(&zlg7290); 
	return ulStatus;
}

/*
函数:ZLG7290_cmd()
功能:向ZLG7290发送控制命令
参数:
	cmd0:写入CmdBuf0寄存器的命令字(第1字节)
	cmd1:写入CmdBuf1寄存器的命令字(第2字节)
返回:
	I2C_MASTER_ERR_NONE:正常
*/
unsigned long ZLG7290_cmd(char cmd0, char cmd1)
{
	unsigned long ulStatus;
	unsigned char buf[2];
	buf[0] = cmd0;
	buf[1] = cmd1;
        I2CM_DeviceDataSet(&zlg7290, ZLG7290_CmdBuf, buf, 2);//对zlg7290来说依然是单字节地址
	ulStatus = I2CM_DataSend(&zlg7290);
	return ulStatus;
	
}

/*
函数:ZLG7290_SegOnOff()
功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段
参数:
	seg:取值0~63,表示数码管(或LED)的段号
	b:0表示熄灭,1表示点亮
返回:
	0:正常
	1:访问ZLG7290时出现异常
说明:
	在每一位数码管中,段号顺序按照“a,b,c,d,e,f,g,dp”进行
*/
bool ZLG7290_SegOnOff(char seg, bool b)
{
	char cmd;
	cmd = seg & 0x3F;
	if ( b ) cmd |= 0x80;
	return ZLG7290_cmd(0x01,cmd);
}


//清除LED现实函数
void ClearAll_LED(char n,char m)
{
    unsigned char x;
    unsigned char data[2] = {0};
    
    data[0] = 0x00;
    if(n==m) 
    {
        ZLG7290_WriteReg(ZLG7290_DpRam+n, data);
        Delay(300);
    }
    
    if(n!=m)
    {
          for ( x=n; x<=m; x++ )
          {
              ZLG7290_WriteReg(ZLG7290_DpRam+x,data);
              Delay(300);
          }
    }

}


/*
函数:ZLG7290_Download()
功能:下载数据并译码
参数:
	addr:取值0~7,显示缓存DpRam0~DpRam7的编号
	dp:是否点亮该位的小数点,0-熄灭,1-点亮
	flash:控制该位是否闪烁,0-不闪烁,1-闪烁
	dat:取值0~31,表示要显示的数据
返回:
	0:正常
	1:访问ZLG7290时出现异常
说明:
	显示数据具体的译码方式请参见ZLG7290的数据手册
*/
unsigned long ZLG7290_Download(char addr, bool dp, bool flash, unsigned char dat)
{
	char cmd0;
	char cmd1;
        
        //addr = ZLG7290_DpRam + addr;
        
        /*switch(addr)
        {
           case 0x10:  addr = 0x14; break;        //显示第一个数码管,从左向右看
           case 0x11:  addr = 0x15; break;        //显示第二个数码管,从左向右看
           case 0x12:  addr = 0x13; break;        //显示第三个数码管,从左向右看
           case 0x13:  addr = 0x12; break;        //显示第四个数码管,从左向右看
           case 0x14:  addr = 0x11; break;        //显示第五个数码管,从左向右看
           case 0x15:  addr = 0x10; break;        //显示第六个数码管,从左向右看
           default :break;
        }*/
        
	cmd0 = addr & 0x0F;
	cmd0 |= 0x60;
	cmd1 = dat & 0x1F;
	if ( dp ) cmd1 |= 0x80;
	if ( flash ) cmd1 |= 0x40;
        
	return ZLG7290_cmd(cmd0,cmd1);
}


/***************************************************
函数名:ZLG7290_FlashShow
功能:控制数码管闪烁函数
参数: Seg_Num为 0x04时闪烁数码管第三位,Seg_Num为 0x08时闪烁数码管第四位,Seg_Num为 0x10时闪烁数码管第五位,
说明:Seg_Num为 0x20时闪烁数码管第六位,
****************************************************/
unsigned long ZLG7290_FlashShow(char Seg_Num)
{
        char cmd0;
	char cmd1;
        
	cmd0 = 0x70;
	cmd1 = Seg_Num & 0xFF;
        
       return ZLG7290_cmd(cmd0,cmd1);
}


/*
函数:ZLG7290_Download_Display()
功能:ZLG7290数码管显示函数
参数:
	addr:取值0~7,显示缓存DpRam0~DpRam7的编号
	dp:是否点亮该位的小数点,0-熄灭,1-点亮
	flash:控制该位是否闪烁,0-不闪烁,1-闪烁
	dat:取值0~31,表示要显示的数据
返回:
	0:正常
	1:访问ZLG7290时出现异常
说明:
	显示数据具体的译码方式请参见ZLG7290的数据手册
*/
void ZLG7290_Download_Display(char addr, bool dp, bool flash, unsigned char dat)
{
    ZLG7290_Download_One(addr,dp,flash,dat);
    Delay(100);
}



//清除数码管现实函数
void ClearAll(char n,char m)
{
    unsigned char x;
   
    for ( x=n; x<=m; x++ )
    {
	ZLG7290_Download_One(ZLG7290_DpRam+x,0,0,31);
        Delay(300);
    }
}


/*
函数:ZLG7290_cmd_One()
功能:向ZLG7290发送控制命令
参数:
	cmd0:写入CmdBuf0寄存器的命令字(第1字节)
	cmd1:写入CmdBuf1寄存器的命令字(第2字节)
返回:
	I2C_MASTER_ERR_NONE:正常
*/
unsigned long ZLG7290_cmd_One(char cmd0, char cmd1)
{
	unsigned long ulStatus;
	unsigned char buf[2];
	buf[0] = cmd0;
	buf[1] = cmd1;
        I2CM_DeviceDataSet_One(&zlg7290, ZLG7290_CmdBuf, buf, 2);//对zlg7290来说依然是单字节地址
	ulStatus = I2CM_DataSend_One(&zlg7290);
	return ulStatus;
	
}

/*
函数:ZLG7290_Download_One()
功能:下载数据并译码
参数:
	addr:取值0~5,显示缓存DpRam0~DpRam5的编号
	dp:是否点亮该位的小数点,0-熄灭,1-点亮
	flash:控制该位是否闪烁,0-不闪烁,1-闪烁
	dat:取值0~31,表示要显示的数据
返回:
	0:正常
	1:访问ZLG7290时出现异常
说明:
	显示数据具体的译码方式请参见ZLG7290的数据手册
*/
unsigned long ZLG7290_Download_One(char addr, bool dp, bool flash, unsigned char dat)
{
	char cmd0;
	char cmd1;
        
        //addr = ZLG7290_DpRam + addr;
        
        switch(addr)
        {
           case 0x10:  addr = 0x14; break;        //显示第一个数码管,从左向右看
           case 0x11:  addr = 0x15; break;        //显示第二个数码管,从左向右看
           case 0x12:  addr = 0x13; break;        //显示第三个数码管,从左向右看
           case 0x13:  addr = 0x12; break;        //显示第四个数码管,从左向右看
           case 0x14:  addr = 0x11; break;        //显示第五个数码管,从左向右看
           case 0x15:  addr = 0x10; break;        //显示第六个数码管,从左向右看
           default :break;
        }
        
	cmd0 = addr & 0x0F;
	cmd0 |= 0x60;
	cmd1 = dat & 0x1F;
	if ( dp ) cmd1 |= 0x80;
	if ( flash ) cmd1 |= 0x40;
        
	return ZLG7290_cmd_One(cmd0,cmd1);
}


/*
函数:ZLG7290_WriteReg_One()
功能:向ZLG7290的某个内部寄存器写入数据
参数:
	RegAddr:ZLG7290的内部寄存器地址
	dat:要写入的数据
返回:
	I2C_MASTER_ERR_NONE:正常
	往往不做返回值检测
*/
unsigned long ZLG7290_WriteReg_One(unsigned char RegAddr, unsigned char *dat)
{
	unsigned long ulStatus;
        
        switch(RegAddr)
        {
           case 0x10:  RegAddr = 0x14; break;        //显示第一个数码管,从左向右看
           case 0x11:  RegAddr = 0x15; break;        //显示第二个数码管,从左向右看
           case 0x12:  RegAddr = 0x13; break;        //显示第三个数码管,从左向右看
           case 0x13:  RegAddr = 0x12; break;        //显示第四个数码管,从左向右看
           case 0x14:  RegAddr = 0x11; break;        //显示第五个数码管,从左向右看
           case 0x15:  RegAddr = 0x10; break;        //显示第六个数码管,从左向右看
           default :break;
        }
        
        I2CM_DeviceDataSet_One(&zlg7290_One, RegAddr, dat, 1);
	ulStatus = I2CM_DataSend_One(&zlg7290_One);
	return ulStatus;
}



/***************************************************
函数名:ZLG7290_FlashShow_One
功能:控制数码管闪烁函数
参数: Seg_Num为 0x04时闪烁数码管第三位,Seg_Num为 0x08时闪烁数码管第四位,Seg_Num为 0x10时闪烁数码管第五位,
说明:Seg_Num为 0x20时闪烁数码管第六位,
****************************************************/
unsigned long ZLG7290_FlashShow_One(char Seg_Num)
{
        char cmd0;
	char cmd1;
        
	cmd0 = 0x70;
	cmd1 = Seg_Num & 0xFF;
        
       return ZLG7290_cmd_One(cmd0,cmd1);
}

//简单的数据显示   调试时用
void DispValue(char x, unsigned char dat)
{
	unsigned char d;
	d = dat / 10;
        ZLG7290_Download_One(x,0,0,d);//ZLG7290_Download(x,0,0,d);
	d = dat - d * 10;
        ZLG7290_Download_One(x+1,0,0,d);
}

⌨️ 快捷键说明

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