📄 zlg7290.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 + -