⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bc728x.c

📁 这是铁路各工区
💻 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 + -