HT93LC46_EWEN(); DELAY_TIMES(0x0A); if(calibration_flag==0) { HT93LC46_WRITE_ONE_BYTE(0x00, 0x4B); Mindata.One_4byte=finaldata.One_4byte; DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x01, Mindata.Four_1byte[0]); DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x02, Mindata.Four_1byte[1]); DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x03, Mindata.Four_1byte[2]); DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x04, Mindata.Four_1byte[3]); DELAY_TIMES(0x0A); calibration_flag=1; } else { Maxdata.One_4byte=finaldata.One_4byte; HT93LC46_WRITE_ONE_BYTE(0x05,Maxdata.Four_1byte[0]); DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x06,Maxdata.Four_1byte[1]); DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x07, Maxdata.Four_1byte[2]); DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x08, Maxdata.Four_1byte[3]); DELAY_TIMES(0x0A); Scalevalue.float_one_4byte=500000; Dividendvalue.float_one_4byte=(Maxdata.One_4byte-Mindata.One_4byte); Scalevalue.float_one_4byte=Dividendvalue.float_one_4byte/Scalevalue.float_one_4byte; HT93LC46_WRITE_ONE_BYTE(0x09, Scalevalue.float_four_1byte[0]); DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x0A, Scalevalue.float_four_1byte[1]); DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x0B, Scalevalue.float_four_1byte[2]); DELAY_TIMES(0x0A); HT93LC46_WRITE_ONE_BYTE(0x0C, Scalevalue.float_four_1byte[3]); DELAY_TIMES(0x0A); calibration_flag=0; } HT93LC46_EWDS(); DELAY_TIMES(0x0A); }
这段代码是关于HT93LC46 EEPROM芯片的操作。根据代码的逻辑,首先执行了HT93LC46_EWEN()函数,该函数用于使能EEPROM的写入操作。然后通过一系列的操作将数据写入到EEPROM中。
在calibration_flag为0的情况下,首先通过HT93LC46_WRITE_ONE_BYTE函数将0x4B写入到地址为0x00的位置,然后将finaldata.One_4byte的值赋给Mindata.One_4byte变量。接着将Mindata.Four_1byte数组中的四个字节分别写入到地址为0x01、0x02、0x03和0x04的位置。
在calibration_flag不为0的情况下,将finaldata.One_4byte的值赋给Maxdata.One_4byte变量。然后将Maxdata.Four_1byte数组中的四个字节分别写入到地址为0x05、0x06、0x07和0x08的位置。接着计算Scalevalue.float_one_4byte的值为500000,并将(Maxdata.One_4byte-Mindata.One_4byte)的结果赋给Dividendvalue.float_one_4byte变量。然后通过除法计算得到Scalevalue.float_one_4byte的值,并将Scalevalue.float_four_1byte数组中的四个字节分别写入到地址为0x09、0x0A、0x0B和0x0C的位置。
最后执行HT93LC46_EWDS()函数,用于禁止EEPROM的写入操作,然后延时0x0A后结束函数的执行。
void HT93LC46_EWEN(void) //ht93lc46 erase and write enable { uchar ewi,ewen_code=0x98; _nop_(); HT93LC46_CS=0; HT93LC46_CLK=0; _nop_(); HT93LC46_CS=1; //sending operation code 0x98=10011000 and 00 10bits _nop_(); for(ewi=0;ewi<8;ewi++) { if(ewen_code>=0x80) HT93LC46_DI=1; else HT93LC46_DI=0; _nop_(); HT93LC46_CLK=1; _nop_(); HT93LC46_CLK=0; _nop_(); ewen_code<<=1; } HT93LC46_CLK=1; _nop_(); HT93LC46_CLK=0; _nop_(); HT93LC46_CLK=1; _nop_(); HT93LC46_CS=0; }
这是一个函数,用于使HT93LC46芯片进入擦除和写入使能状态。函数内部首先定义了一些变量,包括ewi和ewen_code。然后将HT93LC46_CS拉低,HT93LC46_CLK拉低,进行一些延时操作。
接下来,将HT93LC46_CS拉高,发送操作码0x98(二进制为10011000)和00两位。在一个循环中,逐位发送ewen_code的值到HT93LC46_DI引脚。如果ewen_code的最高位为1,则将HT93LC46_DI设置为1,否则设置为0。之后进行一些延时操作,并将ewen_code左移1位。
最后将HT93LC46_CLK拉高,并进行一些延时操作。然后将HT93LC46_CS拉低,函数执行结束。
void DELAY_TIMES(uchar time1); void SYSTEM_INITIAL(void); void HT1621_SEND_COMMAND(uchar command); void HT1621_WRITE_DATA(uchar write_addr,uchar write_data); void HT1621_CLEAR_MEMORY(void); void HT1621_SHOW_MEMORY(void); void HT1621_SUCCESSIVE_DISPLAY(void); void HT1621_INITIAL(void); void HT93LC46_EWEN(void) ; void HT93LC46_EWDS(void); void HT93LC46_WRITE_ONE_BYTE(uchar ht93lc46_addr,uchar ht93lc46_data); uchar HT93LC46_READ_ONE_BYTE(uchar ht93lc46_addr1);
这段代码是函数的声明部分,用来声明一些函数的原型。函数原型告诉编译器函数的名称、参数类型和返回类型,但没有具体的函数实现。
下面是对这些函数声明的简要说明:
DELAY_TIMES(uchar time1)
: 延时函数,用于延时一定的时间,参数time1
表示延时的时间(可能是以某种单位表示)。SYSTEM_INITIAL(void)
: 系统初始化函数,用于初始化系统的各个组件和变量。HT1621_SEND_COMMAND(uchar command)
: HT1621发送指令函数,用于向HT1621驱动芯片发送特定的指令,参数command
表示要发送的指令。HT1621_WRITE_DATA(uchar write_addr,uchar write_data)
: HT1621写入数据函数,用于向HT1621驱动芯片的特定地址写入数据,参数write_addr
表示写入的地址,参数write_data
表示要写入的数据。HT1621_CLEAR_MEMORY(void)
: HT1621清除存储器函数,用于清除HT1621驱动芯片的存储器中的数据。HT1621_SHOW_MEMORY(void)
: HT1621显示存储器函数,用于显示HT1621驱动芯片存储器中的数据。HT1621_SUCCESSIVE_DISPLAY(void)
: HT1621连续显示函数,用于在HT1621驱动芯片上进行连续显示。HT1621_INITIAL(void)
: HT1621初始化函数,用于初始化HT1621驱动芯片的各个寄存器和设置。HT93LC46_EWEN(void)
: HT93LC46使能写入函数,用于使HT93LC46 EEPROM芯片进入写入模式。HT93LC46_EWDS(void)
: HT93LC46禁止写入函数,用于禁止HT93LC46 EEPROM芯片的写入模式。HT93LC46_WRITE_ONE_BYTE(uchar ht93lc46_addr,uchar ht93lc46_data)
: HT93LC46写入一个字节函数,用于向HT93LC46 EEPROM芯片的特定地址写入一个字节的数据。HT93LC46_READ_ONE_BYTE(uchar ht93lc46_addr1)
: HT93LC46读取一个字节函数,用于从HT93LC46 EEPROM芯片的特定地址读取一个字节的数据。
这些函数的具体实现代码需要在其他地方查找。希望对您有所帮助!如果还有其他问题,请随时提问。
相关推荐

















