📄 7290.c
字号:
{
unsigned char i;
for(i=0;i<num;i++)
{
ZLG7290_SendCmd(0x60+i,*disp_buf);
disp_buf++;
}
}
/*********************************************************************************************************
** 函数名称: ZLG7290_GetKey
** 功能描述: 读取键值
** 输 入: 无
**
** 输 出: >0 键值
** =0 无键按下
** 全局变量: 无
** 调用模块: IRcvStr、delayMS
**
********************************************************************************************************/
unsigned char ZLG7290_GetKey( void )
{
unsigned char key;
IRcvStr ( 0x70, 0x00, & key, 1 );
while ( ! ( key & 0x01 ) )
{
ISendStr(0x70,0x00, & key,1);
IRcvStr ( 0x70, 0x00, & key, 1 );
}
IRcvStr ( 0x70, 0x01, & key, 1 );
return key;
}
/*********************************************************************************************************
** 函数名称: Clear_7290
** 功能描述: 对7290清零
** 输 入: 无
**
** 输 出: 无
**
** 全局变量: IicWriteBuf
** 调用模块: ISendStr
**
********************************************************************************************************/
void Clear_7290(void)
{
uchar IicWriteBuf[3]; //输出缓存
uchar i=0,j,SubAddr;
for(j=0;j<2;j++)
{
for(i=0;i<8;i++)
{
IicWriteBuf[0]=0x60+i;
IicWriteBuf[1]=0x1f;
SubAddr=SubCmdBuf;
ISendStr(0x70,SubAddr,IicWriteBuf,2);
}
}
}
/*********************************************************************************************************
** 函数名称: shift_left
** 功能描述: 左移
** 输 入: shift_bit : 左移的位数
**
** 输 出: 无
**
** 全局变量: IicWriteBuf
** 调用模块: ISendStr
**
********************************************************************************************************/
void shift_left(unsigned char shift_bit)
{
uchar IicWriteBuf; //输出缓存
IicWriteBuf=0x10+shift_bit;
ISendStr(0x70,0x07,&IicWriteBuf,1);
}
/*********************************************************************************************************
** 函数名称: shift_right
** 功能描述: 右移
** 输 入: shift_bit : 右移的位数
**
** 输 出: 无
**
** 全局变量: IicWriteBuf
** 调用模块: ISendStr
**
********************************************************************************************************/
void shift_right(unsigned char shift_bit)
{
uchar IicWriteBuf; //输出缓存
IicWriteBuf=0x20+shift_bit;
ISendStr(0x70,0x07,&IicWriteBuf,1);
}
/*********************************************************************************************************
** 函数名称: for_shift_right
** 功能描述: 循环左移
** 输 入: shift_bit : 循环左移的位数
**
** 输 出: 无
**
** 全局变量: IicWriteBuf
** 调用模块: ISendStr
**
********************************************************************************************************/
void for_shift_left(unsigned char shift_bit)
{
uchar IicWriteBuf; //输出缓存
IicWriteBuf=0x30+shift_bit;
ISendStr(0x70,0x07,&IicWriteBuf,1);
}
/*********************************************************************************************************
** 函数名称: for_shift_right
** 功能描述: 循环右移
** 输 入: shift_bit : 循环右移的位数
**
** 输 出: 无
**
** 全局变量: IicWriteBuf
** 调用模块: ISendStr
**
********************************************************************************************************/
void for_shift_right(unsigned char shift_bit)
{
uchar IicWriteBuf; //输出缓存
IicWriteBuf=0x40+shift_bit;
ISendStr(0x70,0x07,&IicWriteBuf,1);
}
/*********************************************************************************************************
** 函数名称: PrintLed PrintDp
** 功能描述: 按位显示 显示小数点
** 输 入: dig : 显示位置 0~7
** data : 显示数据
** dp : dp=1 显示小数点
** dp=0 不显示小数点
** 输 出: 无
**
** 全局变量: IicWriteBuf
** 调用模块: ISendStr
**
********************************************************************************************************/
void PrintLed( uchar dig,uchar data )
{
uchar IicWriteBuf[2]; //输出缓存
IicWriteBuf[1]=data;
IicWriteBuf[0]=0x60+dig;
ISendStr(0x70,0x07,IicWriteBuf,2);
}
//have a bug!
void PrintDp( uchar dig,uchar dp )
{
uchar IicWriteBuf[2]; //输出缓存
IRcvStr(0x70,0x10+dig,&(IicWriteBuf[1]),1);
if(dp==0)
IicWriteBuf[1]&=~BIT7;
else if(dp==1)
IicWriteBuf[1]|=BIT7;
IicWriteBuf[0]=0x60+dig;
ISendStr(0x70,0x07,IicWriteBuf,2);
}
/*********************************************************************************************************
** 函数名称: shine
** 功能描述: 闪烁
** 输 入: shine_bit : 闪烁的位数( 使用BIT0~BIT7控制需要闪烁的位数)
**
** 输 出: 无
**
** 全局变量: IicWriteBuf
** 调用模块: ISendStr
**
********************************************************************************************************/
void shine(unsigned char shine_bit)
{
uchar IicWriteBuf[2]; //输出缓存
IicWriteBuf[1]=shine_bit;
IicWriteBuf[0]=0x70;
ISendStr(0x70,0x07,IicWriteBuf,2);
}
/*******************************************************************
** 向有子地址器件读取多字节数据函数
函数原型:uchar ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
Key 01H
RepeatCnt 02H
FunctionKey 03H functionKey.7~FunctionKey.0 对应S64~S57
********************************************************************/
uchar IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
{
uchar i;
Start_I2c(); /*启动总线*/
SendByte_I2c( sla ); /*发送器件地址*/
if(ack==0) return(0);
SendByte_I2c( suba ); /*发送器件子地址*/
if(ack==0) return(0);
Start_I2c();
SendByte_I2c( sla+1 );
if(ack==0) return(0);
for(i=0;i<no-1;i++)
{
*s=RcvByte_I2c(); /*接收数据*/
Ack_I2c(0); /*发送就答位*/
s++;
}
*s=RcvByte_I2c();
Ack_I2c(1); /*发送非应位*/
Stop_I2c(); /*结束总线*/
return(1);
}
/*******************************************************************
** 向有子地址器件发送多字节数据函数
函数原型: uchar ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
如果返回1表示操作成功,否则操作有误。
注意: 使用前必须已结束总线。
Key 01H
RepeatCnt 02H
FunctionKey 03H functionKey.7~FunctionKey.0 对应S64~S57
CmdBuf0~CmdBuf1 07H~08H
********************************************************************/
uchar ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
{
uchar i;
Start_I2c(); /*启动总线*/
SendByte_I2c(sla); /*发送器件地址*/
if(ack==0)return(0);
SendByte_I2c(suba); /*发送器件子地址*/
if(ack==0)return(0);
for(i=0;i<no;i++)
{
SendByte_I2c(*s); /*发送数据*/
if(ack==0)return(0);
s++;
}
Stop_I2c(); /*结束总线*/
return(1);
}
/********************************************************************************************************************
初始化7290,需要在主程序总中断使能
*********************************************************************************************************************/
void ini_7290() {
INIT_OUT;
INTI_HIGH;
INIT_IN ; //P1。0为输入模式
INIT_IES; //下降沿引发P1。0口中断
INIT_IFG ; //初始化中断标志
INIT_IE; //P1。0中断有效 ,需要在主程序总中断使能
Clear_7290( );
/* PrintLed( 0, 8 );
PrintLed( 1, 7 );
PrintLed( 2, 6 );
PrintLed( 3, 5 );
PrintLed( 4, 4 );
PrintLed( 5, 3 );
PrintLed( 6, 2 );
PrintLed( 7, 1 );
//time_delay1(20);
Clear_7290();
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -