文件:
//#####################---文件信息-----############################
//文 件 名 : 7290.c
//创 建 人 : ZXJ
//建 立 时 间 : 2004-2-17
//版 本 描 述 : V1.0
//功 能 描 述 : ZLG7290使用代码 ,使用模拟I2C
//备 注 : 调试环境为AVRGCC 3.3.1,MCU为Mega8 晶振为3.6864MHZ
// 由于ZLG7290的速度很慢,换晶振时注意延时程序的调整.实际测试中
// 死机现象比较严重,建议使用控制ZLG7290的复位
//最后修改时间 : 2004-2-19
//##################################################################
#include "7290.h"
//0到9
//const u08 LED_Font[10] = {0xCF,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; //正
const u08 LED_Font[10] = {0xfc,0x0c,0xda,0x9e,0x2e,0xb6,0xf6,0x1c,0xfe,0xbe}; //反
//----------------------------------------------------------------
void I2c_Send_Byte(u08 data);
u08 I2c_Rev_Byte(void);
//*****************************************************************
//函 数 名 : _Nop
//建 立 时 间 : 2004-2-17
//功 能 描 述 : 延时函数,最大值为0xff
//备 注 : 没有返回值
//最后修改时间 : 2004-2-18
//*****************************************************************
void _Nop(u08 dly)
{
u08 i;
for(i=0;i;
}
//*****************************************************************
//函 数 名 : I2c_Send_Byte
//建 立 时 间 : 2004-2-17
//功 能 描 述 : 向I2c总线发送1个字节的数据/命令
//备 注 : 没有返回值
//最后修改时间 : 2004-2-18
//*****************************************************************
void I2c_Send_Byte(u08 data)
{
u08 BitCnt;
for(BitCnt=0;BitCntL_1
_Nop(15);
if(bit_is_set(I2C_PIN,SDA))ack=0;
else ack=1; //判断是否接收到应答信号
SCL_0
_Nop(15);
}
//*****************************************************************
//函 数 名 : Stop_I2c
//建 立 时 间 : 2004-2-17
//功 能 描 述 : 从I2c总线接收1个字节的数据/命令
//备 注 : 返回接收到的数据/命令
//最后修改时间 : 2004-2-18
//*****************************************************************
u08 I2c_Rev_Byte(void)
{
u08 retc;
u08 BitCnt;
retc=0;
SDA_1 //置数据线为输入方式
for(BitCnt=0;BitCnt//备 注 : 有返回值,成功写入数据返回True,注意ZLG7290扫描位数寄存器的设置
//最后修改时间 : 2004-2-19
//*****************************************************************
u08 ZLG_Disp_LED(u08 Led_Index,u08 Led_Num)
{
u08 tmp;
tmp = 0;
if ((Led_Index 0x17))
return False;
I2c_Send(zlg7290,Led_Index,Led_Num);
asm("nop");
I2c_Read(zlg7290,Led_Index,0x01,&tmp);
asm("nop");
if (tmp == Led_Num)
return True;
else
return False;
}
//*****************************************************************
//函 数 名 : ZLG_Cls
//建 立 时 间 : 2004-2-18
//功 能 描 述 : 清LED显示,Type =0 全部清除显示为0,Type=1 全部不显示,默认为1
//备 注 : 有返回值,成功则返回True,失败返回False
//最后修改时间 : 2004-2-18
//*****************************************************************
u08 ZLG_Cls(u08 Type)
{
u08 tmp,i;
u08 Num;
tmp = 0;
Num = 0x00;
if (Type == 0x00)
Num = 0xFC;
for(i=0;i
if ((tmp & 0x01) == 0x01 )
return True;
else
return False;
}
#endif
//*****************************************************************
//函 数 名 : ZLG_Read_Reg
//建 立 时 间 : 2004-2-19
//功 能 描 述 : 读取指定寄存器,作为I2c的读取数据的API使用,扩展功能用
//备 注 : 有返回值
//最后修改时间 : 2004-2-19
//*****************************************************************
u08 ZLG_Read_Reg(u08 reg)
{
u08 tmp;
tmp = 0;
I2c_Read(zlg7290,reg,0x01,&tmp);
return tmp;
}
//*****************************************************************
//函 数 名 : ZLG_Write_reg
//建 立 时 间 : 2004-2-19
//功 能 描 述 : 向指定寄存器写入数据,作为I2c的写入数据的API使用,扩展功能用
//备 注 : 有返回值
//最后修改时间 : 2004-2-19
//*****************************************************************
u08 ZLG_Write_reg(u08 reg, u08 value)
{
u08 tmp;
tmp = 0;
I2c_Send(zlg7290,reg,value);
_Nop(1);
I2c_Read(zlg7290,reg,0x01,&tmp);
if (tmp == value)
return True;
else
return False;
}
//*****************************************************************
//函 数 名 : RST_ZLG
//建 立 时 间 : 2004-2-19
//功 能 描 述 : 由于ZLG的不稳定,控制它的复位,达到整个系统的健壮
//备 注 : 有返回值,此函数未经实际测试
//最后修改时间 : 2004-2-19
//*****************************************************************
#ifdef USE_RST
void delay(u16 dly_Time)
{
u16 i,t;
t = dly_Time;
while(t--)
for(i=0;i
|