📄 zlg7290.c
字号:
#include "zlg7290.h"
#include "IIC.h"
#include <C8051F020.H>
/***********************************************************************
*函数: 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<i-1)
return 0;
for(j=0;j<i;j++)
{
ZLG7290_Download(x-j,0,0,d[j]);
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -