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