?? zlg7290.c
字號:
#include "ZLG7290.h"
//IIC 0 接的控制面板上的按鍵和LED
//IIC 1 接的控制面板數(shù)碼管
extern tI2CM_DEVICE zlg7290;
/*
函數(shù):ZLG7290_WriteReg()
功能:向ZLG7290的某個內(nèi)部寄存器寫入數(shù)據(jù)
參數(shù):
RegAddr:ZLG7290的內(nèi)部寄存器地址
dat:要寫入的數(shù)據(jù)
返回:
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;
}
/*
函數(shù):ZLG7290_ReadReg()
功能:從ZLG7290的某個內(nèi)部寄存器讀出數(shù)據(jù)
參數(shù):
RegAddr:ZLG7290的內(nèi)部寄存器地址
*dat:保存讀出的數(shù)據(jù)
返回:
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;
}
/*
函數(shù):ZLG7290_cmd()
功能:向ZLG7290發(fā)送控制命令
參數(shù):
cmd0:寫入CmdBuf0寄存器的命令字(第1字節(jié))
cmd1:寫入CmdBuf1寄存器的命令字(第2字節(jié))
返回:
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來說依然是單字節(jié)地址
ulStatus = I2CM_DataSend(&zlg7290);
return ulStatus;
}
/*
函數(shù):ZLG7290_SegOnOff()
功能:段尋址,單獨點亮或熄滅數(shù)碼管(或LED)中的某一段
參數(shù):
seg:取值0~63,表示數(shù)碼管(或LED)的段號
b:0表示熄滅,1表示點亮
返回:
0:正常
1:訪問ZLG7290時出現(xiàn)異常
說明:
在每一位數(shù)碼管中,段號順序按照“a,b,c,d,e,f,g,dp”進(jìn)行
*/
bool ZLG7290_SegOnOff(char seg, bool b)
{
char cmd;
cmd = seg & 0x3F;
if ( b ) cmd |= 0x80;
return ZLG7290_cmd(0x01,cmd);
}
//清除LED現(xiàn)實函數(shù)
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);
}
}
}
/*
函數(shù):ZLG7290_Download()
功能:下載數(shù)據(jù)并譯碼
參數(shù):
addr:取值0~7,顯示緩存DpRam0~DpRam7的編號
dp:是否點亮該位的小數(shù)點,0-熄滅,1-點亮
flash:控制該位是否閃爍,0-不閃爍,1-閃爍
dat:取值0~31,表示要顯示的數(shù)據(jù)
返回:
0:正常
1:訪問ZLG7290時出現(xiàn)異常
說明:
顯示數(shù)據(jù)具體的譯碼方式請參見ZLG7290的數(shù)據(jù)手冊
*/
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; //顯示第一個數(shù)碼管,從左向右看
case 0x11: addr = 0x15; break; //顯示第二個數(shù)碼管,從左向右看
case 0x12: addr = 0x13; break; //顯示第三個數(shù)碼管,從左向右看
case 0x13: addr = 0x12; break; //顯示第四個數(shù)碼管,從左向右看
case 0x14: addr = 0x11; break; //顯示第五個數(shù)碼管,從左向右看
case 0x15: addr = 0x10; break; //顯示第六個數(shù)碼管,從左向右看
default :break;
}*/
cmd0 = addr & 0x0F;
cmd0 |= 0x60;
cmd1 = dat & 0x1F;
if ( dp ) cmd1 |= 0x80;
if ( flash ) cmd1 |= 0x40;
return ZLG7290_cmd(cmd0,cmd1);
}
/***************************************************
函數(shù)名:ZLG7290_FlashShow
功能:控制數(shù)碼管閃爍函數(shù)
參數(shù): Seg_Num為 0x04時閃爍數(shù)碼管第三位,Seg_Num為 0x08時閃爍數(shù)碼管第四位,Seg_Num為 0x10時閃爍數(shù)碼管第五位,
說明:Seg_Num為 0x20時閃爍數(shù)碼管第六位,
****************************************************/
unsigned long ZLG7290_FlashShow(char Seg_Num)
{
char cmd0;
char cmd1;
cmd0 = 0x70;
cmd1 = Seg_Num & 0xFF;
return ZLG7290_cmd(cmd0,cmd1);
}
/*
函數(shù):ZLG7290_Download_Display()
功能:ZLG7290數(shù)碼管顯示函數(shù)
參數(shù):
addr:取值0~7,顯示緩存DpRam0~DpRam7的編號
dp:是否點亮該位的小數(shù)點,0-熄滅,1-點亮
flash:控制該位是否閃爍,0-不閃爍,1-閃爍
dat:取值0~31,表示要顯示的數(shù)據(jù)
返回:
0:正常
1:訪問ZLG7290時出現(xiàn)異常
說明:
顯示數(shù)據(jù)具體的譯碼方式請參見ZLG7290的數(shù)據(jù)手冊
*/
void ZLG7290_Download_Display(char addr, bool dp, bool flash, unsigned char dat)
{
ZLG7290_Download_One(addr,dp,flash,dat);
Delay(100);
}
//清除數(shù)碼管現(xiàn)實函數(shù)
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);
}
}
/*
函數(shù):ZLG7290_cmd_One()
功能:向ZLG7290發(fā)送控制命令
參數(shù):
cmd0:寫入CmdBuf0寄存器的命令字(第1字節(jié))
cmd1:寫入CmdBuf1寄存器的命令字(第2字節(jié))
返回:
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來說依然是單字節(jié)地址
ulStatus = I2CM_DataSend_One(&zlg7290);
return ulStatus;
}
/*
函數(shù):ZLG7290_Download_One()
功能:下載數(shù)據(jù)并譯碼
參數(shù):
addr:取值0~5,顯示緩存DpRam0~DpRam5的編號
dp:是否點亮該位的小數(shù)點,0-熄滅,1-點亮
flash:控制該位是否閃爍,0-不閃爍,1-閃爍
dat:取值0~31,表示要顯示的數(shù)據(jù)
返回:
0:正常
1:訪問ZLG7290時出現(xiàn)異常
說明:
顯示數(shù)據(jù)具體的譯碼方式請參見ZLG7290的數(shù)據(jù)手冊
*/
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; //顯示第一個數(shù)碼管,從左向右看
case 0x11: addr = 0x15; break; //顯示第二個數(shù)碼管,從左向右看
case 0x12: addr = 0x13; break; //顯示第三個數(shù)碼管,從左向右看
case 0x13: addr = 0x12; break; //顯示第四個數(shù)碼管,從左向右看
case 0x14: addr = 0x11; break; //顯示第五個數(shù)碼管,從左向右看
case 0x15: addr = 0x10; break; //顯示第六個數(shù)碼管,從左向右看
default :break;
}
cmd0 = addr & 0x0F;
cmd0 |= 0x60;
cmd1 = dat & 0x1F;
if ( dp ) cmd1 |= 0x80;
if ( flash ) cmd1 |= 0x40;
return ZLG7290_cmd_One(cmd0,cmd1);
}
/*
函數(shù):ZLG7290_WriteReg_One()
功能:向ZLG7290的某個內(nèi)部寄存器寫入數(shù)據(jù)
參數(shù):
RegAddr:ZLG7290的內(nèi)部寄存器地址
dat:要寫入的數(shù)據(jù)
返回:
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; //顯示第一個數(shù)碼管,從左向右看
case 0x11: RegAddr = 0x15; break; //顯示第二個數(shù)碼管,從左向右看
case 0x12: RegAddr = 0x13; break; //顯示第三個數(shù)碼管,從左向右看
case 0x13: RegAddr = 0x12; break; //顯示第四個數(shù)碼管,從左向右看
case 0x14: RegAddr = 0x11; break; //顯示第五個數(shù)碼管,從左向右看
case 0x15: RegAddr = 0x10; break; //顯示第六個數(shù)碼管,從左向右看
default :break;
}
I2CM_DeviceDataSet_One(&zlg7290_One, RegAddr, dat, 1);
ulStatus = I2CM_DataSend_One(&zlg7290_One);
return ulStatus;
}
/***************************************************
函數(shù)名:ZLG7290_FlashShow_One
功能:控制數(shù)碼管閃爍函數(shù)
參數(shù): Seg_Num為 0x04時閃爍數(shù)碼管第三位,Seg_Num為 0x08時閃爍數(shù)碼管第四位,Seg_Num為 0x10時閃爍數(shù)碼管第五位,
說明:Seg_Num為 0x20時閃爍數(shù)碼管第六位,
****************************************************/
unsigned long ZLG7290_FlashShow_One(char Seg_Num)
{
char cmd0;
char cmd1;
cmd0 = 0x70;
cmd1 = Seg_Num & 0xFF;
return ZLG7290_cmd_One(cmd0,cmd1);
}
//簡單的數(shù)據(jù)顯示 調(diào)試時用
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);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -