📄 7281.c
字号:
#define SET_HD7281_KEY P6 |= 0X02
#define CLR_HD7281_KEY P6 &= 0Xfd
#define HD7281_KEY P5&0x80
#define SET_HD7281_DATA P6 |= 0X01
#define CLR_HD7281_DATA P6 &= 0Xfe
#define HD7281_DATA P6&0x01
#define SET_HD7281_CLK P6 |= 0X04
#define CLR_HD7281_CLK P6 &= 0XFb
bit bdata Flag_KeyUp;
float xdata WeightShow;
float xdata tempFloat2,tempFloat1;
float xdata Temprature[4];
UCHAR xdata KeyBuffRD;
UCHAR xdata KeyBuff0;
UCHAR xdata KeyBuff1;
UCHAR xdata KeyBuff2;
bit bdata Flag_NoPack; //去皮标志
bit bdata Flag_Stand; //稳定标志
bit bdata Flag_Date; //日期标志
bit bdata Flag_Time; //时间标志
bit bdata Flag_Auto; //巡检状态
bit bdata Flag_Zero; //零位标志
bit bdata Flag_Print;
bit bdata Flag_PowerUp=1;
bit bdata Flag_Cycle;
unsigned char xdata Cusor;
unsigned char xdata ShowBuff[8];
//UCHAR code NumCode[] = {0XDB,0x09,0xb3,0x3b,0x69,0X7a,0Xfa,0x0b,0xfb,0x7b,0XEB,0xf8,0xd2,0xb9,0xf2,0xe2,0xe9,0xd0,0xe3,0x04,0x00,0x98,0xa0,0xa8,0xb8,0xf0,0x79,0x19,0x20,};
UCHAR code NumCode[] = {0XC0,0xCF,0x64,0x46,0x4B,0X52,0X50,0xC7,0x40,0x42,0X41,0x58,0xF0,0x4c,0x70,0x71,0x49,0xF8,0x61,0xBF,0xff,0xdc,0x7d,0x5d,0x5c,0x78,0x4a,0xCE,0x7F,};
void write728x(unsigned char reg_add, unsigned char write_data)
{
send_byte(reg_add); // 发送寄存器地址
send_byte(write_data); // 发送数据字节
}
// **********************************************************
// * 读出 BC728X 内部寄存器的值, 调用参数为寄存器地址 *
// **********************************************************
unsigned char read728x(unsigned char reg_add)
{
send_byte(reg_add|0x80); // 发送读指令(bit7=1)
return(receive_byte()); // 接收数据字节并返回
}
// ***********************************************************
// * 向 BC728X 发送一个字节 *
// ***********************************************************
void send_byte(unsigned char send_byte)
{
unsigned char bit_counter;
CLR_HD7281_CLK; // 产生一 clk 脉冲
delay(1);
SET_HD7281_CLK;
do // 等待 BC728X 输出 dat 低电平响应
{
CLR_HD7281_CLK; // 产生一 clk 脉冲
delay(1);
SET_HD7281_CLK;
}while ((P6&0x01)==0x01);
CLR_HD7281_CLK; // 产生一 clk 脉冲
delay(1);
SET_HD7281_CLK;
while ((P6&0x01)==0X00); // 等待 BC728X 进入接收状态
for (bit_counter=0;bit_counter<8;bit_counter++)
{ // 发送 8 个比特
if ((send_byte&0x80)==0)
{
CLR_HD7281_DATA;// 如果待发bit为0, 置 dat 为 0
}
else
{
SET_HD7281_DATA; // 反之置为 1
}
send_byte=send_byte*2; // send_byte 左移一位
CLR_HD7281_CLK; // 产生一 clk 脉冲
delay(1);
SET_HD7281_CLK;
delay(5); // 短暂延时
}
SET_HD7281_DATA; // 恢复 dat 为高电平
}
// ************************************************************
// * 从 BC728X 接收一个字节 *
// ************************************************************
unsigned char receive_byte(void)
{
unsigned char bit_counter, in_byte;
CLR_HD7281_CLK; // 产生一 clk 脉冲
delay(1);
SET_HD7281_CLK;
while ((P6&0x01)==0x01); // 等待 BC728X 响应
CLR_HD7281_CLK; // 产生一 clk 脉冲
delay(1);
SET_HD7281_CLK;
for (bit_counter=0;bit_counter<8;bit_counter++)
{ // 接收8个bit
delay(1); // 短暂延时
in_byte=in_byte*2; // in_byte 左移一位
if((HD7281_DATA)==0x01) // 如果 dat 为'1'
{
in_byte=in_byte|0x01; // bit0=1
}
CLR_HD7281_CLK; // 产生一 clk 脉冲
delay(1);
SET_HD7281_CLK;
}
return(in_byte);
}
// ***********************************************************
// * 短暂延时程序, 延时时间与参数time成正比, 范围是几个uS到几百个uS *
// ***********************************************************
void delay(unsigned char time)
{
while (time!=0)
{
time--;
}
}
//*********************************************
//*延时1分钟
//*********************************************
void Delay1min(unsigned char x)
{
unsigned int i;
unsigned int j;
unsigned int k;
for (i=0; i<x; i++)
{
for (j=0; j<6000; j++)
{
for(k=0;k<11110;k++);
}
}
}
void Delay1ms(unsigned char T)
{
unsigned int i,j;
for(i=0;i<T;i++)
{
for(j=0;j<1000;j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -