📄 bc728x.c
字号:
#include "fun.h"
#include "var.h"
//初始化BC728x
void init_bc728x(void)
{uchar i;
RST=0;
delay(0xff);
RST=1;
delay(0xff);
for(i=0xf7;i>=0xe0;i--)
{P2=i;
while(rd_bc728x(A_ModReg)!=D_ModReg)wr_bc728x(A_ModReg,D_ModReg); //工作模式设置
wr_bc728x(A_Seg1Reg,D_SegBright); //全亮
wr_bc728x(A_Seg2Reg,D_SegBright);
};
for(i=5;i>0;i--)
{kmg();
delay(0xffff);
};
for(i=0xf7;i>=0xe0;i--)
{P2=i;
wr_bc728x(A_Seg1Reg,D_SegDark); //全灭
wr_bc728x(A_Seg2Reg,D_SegDark);
};
for(i=5;i>0;i--)
{kmg();
delay(0xffff);
}
}
//写入BC728X,第一个参数为目标寄存器地址,第二个参数为要写入的数据
void wr_bc728x(uchar reg_add,uchar reg_data)
{send_byte(reg_add); //发送寄存器地址
send_byte(reg_data); //发送数据字节
}
//读出BC728X内部寄存器的值,调用参数为寄存器地址
uchar rd_bc728x(uchar reg_add)
{send_byte(reg_add|0x80); //发送读指令(bit7=1)
return(receive_byte()); //接收数据字节并返回
}
//向BC728X发送一个字节
void send_byte(uchar out_byte)
{uchar n;
CLK=0; //产生一个CLK脉冲
CLK=1;
do{CLK=0; //发送CLK脉冲直至DAT为低电平
CLK=0;
CLK=1;
}while(DAT);
CLK=0; //15US之内再次输出一个CLK脉冲
CLK=0;
CLK=1;
while(!DAT); //等待BC728X进入接收状态
for(n=0;n<8;n++)
{ //发送8个比特
if((out_byte&0x80)==0)
{DAT=0; //如果待发BIT为0,置DAT为0
}
else
{DAT=1; //反之置为1
}
out_byte=out_byte*2; //send_data 左移一位
CLK=0; //输出一个CLK脉冲
CLK=0;
CLK=1;
delay(1); //短暂延时
}
DAT=1; //恢复DAT为高电平
delay(2); //指令间设置一个微小延时
}
//从BC728X接收一个字节
uchar receive_byte(void)
{uchar n,in_byte;
CLK=0; //只发送一个单一的CLK脉冲
CLK=1;
while(DAT); //等待BC728X响应DAT为低电平
CLK=0; //收到响应,再发一个脉冲等待接收数据
CLK=1;
for(n=0;n<8;n++)
{ //接收8个BIT
delay(1); //短暂延时
in_byte=in_byte*2; //in_byte 左移一位
if(DAT) //如果DAT为1
{in_byte=in_byte|0x01; //bit0=1
}
CLK=0; //输出一个CLK脉冲
CLK=1;
}
delay(2); //指令间设置一个微小延时
return(in_byte);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -