www.pudn.com > uCOSV262.rar > zlg7290.c


#include "zlg7290.h" 
#include "IIC.h" 
#include  
 
/*********************************************************************** 
*函数:       ZLG7290_WriteReg() 
*调用函数:   bit SmbSend (unsigned char slaveAddr, unsigned char subAddr,  
*                          unsigned char subMod, unsigned char size, unsigned char *sendPtr) 
*功能:       向ZLG7290 的某个内部寄存器写入数据 
*参数: 
*             RegAddr:ZLG7290 的内部寄存器地址 
*             dat:要写入的数据 
*返回: 
*             1:正常 
*             0:访问ZLG7290 时出现异常 
************************************************************************/ 
unsigned char  ZLG7290_WriteReg(unsigned char regAddr, unsigned char dat) 
{ 
   unsigned char  b; 
   b = SmbSend(ZLG7290_I2C_ADDR, ®Addr, 1, 1, &dat); 
   return b; 
} 
/*********************************************************************** 
*函数:    ZLG7290_ReadReg() 
*功能:    从ZLG7290 的某个内部寄存器读出数据 
*调用函数:bit SmbRec(unsigned char slaveAddr,unsigned char subAddr, 
                      unsigned char subMod,unsigned char size, unsigned char *recPtr ) 
*参数: 
*          RegAddr:ZLG7290 的内部寄存器地址 
*          *dat:保存读出的数据 
*返回: 
*          1:正常 
*          0:访问ZLG7290 时出现异常 
************************************************************************/ 
unsigned char  ZLG7290_ReadReg(unsigned char regAddr, unsigned char *dat) 
{ 
   unsigned char  b; 
   b = SmbRec(ZLG7290_I2C_ADDR, ®Addr, 1, 1, dat); 
   return b; 
} 
 
/*********************************************************************** 
*函数:ZLG7290_Cmd() 
*功能:向ZLG7290 发送控制命令 
*调用函数:   bit SmbSend (unsigned char slaveAddr, unsigned char subAddr,  
*                          unsigned char subMod, unsigned char size, unsigned char *sendPtr) 
*参数: 
*      cmd0:写入CmdBuf0 寄存器的命令字(第1 字节) 
*      cmd1:写入CmdBuf1 寄存器的命令字(第2 字节) 
*返回: 
*      1:正常 
*      0:访问ZLG7290 时出现异常 
**********************************************************************/ 
unsigned char ZLG7290_Cmd(unsigned char cmd0, unsigned char cmd1) reentrant  
{ 
   unsigned  b; 
   unsigned char buf[2]; 
   unsigned char cmdBuf; 
   cmdBuf = ZLG7290_CmdBuf; 
   buf[0] = cmd0; 
   buf[1] = cmd1; 
   b = SmbSend(ZLG7290_I2C_ADDR,&cmdBuf,1,2,buf); 
return b; 
} 
 
/******************************************************************* 
*函数:ZLG7290_SegOnOff() 
*功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段 
*参数: 
*      seg:取值0~63,表示数码管(或LED)的段号 
*      b:0 表示熄灭,1 表示点亮 
*返回: 
*      0:正常 
*      1:访问ZLG7290 时出现异常 
*说明: 
*      在每一位数码管中,段号顺序按照“a,b,c,d,e,f,g,dp”进行 
*******************************************************************/ 
unsigned char  ZLG7290_SegOnOff(unsigned char seg, unsigned char  b) 
{ 
   unsigned char cmd; 
   cmd = seg & 0x3F; 
   if ( b )  
   cmd |= 0x80; 
   return ZLG7290_Cmd(0x01,cmd); 
} 
 
/***************************************************************** 
*函数:ZLG7290_Download() 
*功能:下载数据并译码 
* 
*参数: 
*      addr:取值0~7,显示缓存DpRam0~DpRam7 的编号 
*      dp:是否点亮该位的小数点,0-熄灭,1-点亮 
*      flash:控制该位是否闪烁,0-不闪烁,1-闪烁 
*      dat:取值0~31,表示要显示的数据 
*返回: 
*      1:正常 
*      0:访问ZLG7290 时出现异常 
*说明: 
*      显示数据具体的译码方式请参见ZLG7290 的数据手册 
*****************************************************************/ 
unsigned char  ZLG7290_Download(unsigned char addr, unsigned char  dp, unsigned char  flash, unsigned char dat) 
{ 
   unsigned char cmd0; 
   unsigned char cmd1; 
   cmd0 = addr & 0x0F; 
   cmd0 |= 0x60; 
   cmd1 = dat & 0x1F; 
   if ( dp )  
      cmd1 |= 0x80; 
   if ( flash )  
      cmd1 |= 0x40; 
   return ZLG7290_Cmd(cmd0,cmd1); 
} 
 
void ZLG7290_GetKey(unsigned char * keyValue) 
{ 
	while(IE0==0); 
	ZLG7290_ReadReg(ZLG7290_Key,keyValue);	 //读取键值、 
	  
	 
} 
void ZLG7290_GetRepeatCnt(unsigned char *repeatCnt) 
{ 
    while(IE0==0); 
	ZLG7290_ReadReg(ZLG7290_RepeatCnt,repeatCnt); // 连击计数器值 
 
} 
/***************************************************************** 
*函数:ZLG7290_Clear(char a) 
*功能:清除指定位的显示 
* 
*参数: 
*      a:   取小于-1全部清除,a>=0,a<=7 时清楚该位的显示 
 
*返回: 无 
 
*说明: 
*      显示数据具体的译码方式请参见ZLG7290 的数据手册 
*/ 
void ZLG7290_Clear(char a) 
{	 
	unsigned char i = 0; 
	if(a<=-1) 
	{ 
		for(i=0;i<8;i++) 
		ZLG7290_Download(i,0,0,0x1f); 
	} 
	if(a>-1&&a<8) 
		ZLG7290_Download(a,0,0,0x1f); 
	if(a>=8) 
	return; 
} 
unsigned char ZLG7290_DispValue(unsigned char x, unsigned long int dat) 
{ 
    unsigned char d[8]; 
	unsigned char i = 0; 
	unsigned char j; 
	while(dat>0) 
	{ 
	    d[i] = dat%10; 
		dat /= 10; 
		i++;     
	} 
	if(x