📄 host.h
字号:
#ifndef HOST_H
#define HOST_H
#include "SegCode.h"
//定义输出引脚
sbit JDQH = P1^3;
sbit JDQL = P1^4;
sbit TRG = P1^5;
sbit DATA = P1^6;
sbit CLK = P1^7;
sbit BUSY = P3^2;
sbit RST = P3^3;
sbit SO = P2^3; /*25045输出*/
sbit SI = P2^1; /*25045输入*/
sbit SCK = P2^2; /*25045时钟*/
sbit CS = P2^0; /*25045片选*/
sbit WP = P0^2; /*25045写保护*/
sbit DE = P1^2; /*MAX485的DE*/
#define WREN_INST 0X06
/* Write enable latch instruction (WREN)*/
#define WRDI_INST 0X04
/* Write disable latch instruction (WRDI)*/
#define WRSR_INST 0X01
/* Write status register instruction (WRSR)*/
#define RDSR_INST 0X05
/* Read status register instruction (RDSR)*/
#define WRITE_INST 0X02
/* Write memory instruction (WRITE)*/
/*写入25045的先导字,应当为0000A010,其中的A为写入25045的高位地址
将此WRITE_INST和写入高位地址相或后即为正确的写先导字*/
#define READ_INST 0X03
/* Read memory instruction (READ)*/
/*读出25045的先导字,应当为0000A011,其中的A为读出25045的高位地址
将此READ_INST和读出高位地址相或后即为正确的读先导字*/
#define BYTE_ADDR 0X55
/* Memory address for byte mode operations*/
#define BYTE_DATA 0X11
/*Data byte for byte write operation*/
#define PAGE_ADDR 0X1F
/* Memory address for page mode operations*/
/*页面写入的其始地址*/
#define PAGE_DATA1 0X22
/* 1st data byte for page write operation*/
#define PAGE_DATA2 0X33
/* 2nd data byte for page write operation*/
#define PAGE_DATA3 0X44
/* 3rd data byte for page write operation*/
#define STATUS_REG 0X00
/* Status register,设置DOG时间设置为200毫秒,无写保护*/
/*这是状态寄存器的值,他的意义在于第5,第4位为WDI1,WDI0代表DOG的时间,00为1.4秒,01为600毫秒,10为200毫秒,00为disabled
第3位和第2位为BL1,BL0,是写保护设置位,00为无保护,01为保护180-1FF,10为保护100-1FF,11为保护000-1FF.第1位为WEL,
当他为1时代表已经"写使能"设置了,现在可以写了,只读位.第0位为WIP,当他为1时代表正在进行写操作,是只读*/
#define MAX_POLL 0x99
/* Maximum number of polls*/
/*最大写过程时间,确定25045的最大的写入过程的时间*/
#define INIT_STATE 0x09
/* Initialization value for control ports*/
#define SLIC 0x30
/* Address location of SLIC*/
typedef union _WordType
{
word w;
byte b[2];
}WordType;
typedef union _DwordType
{
dword dw;
word w[2];
byte b[4];
}DwordType;
//运算参数
typedef struct _Param
{
DwordType wZero; //零位
DwordType wInCount; //校准信号
WordType Current; //当前电流值
WordType wInput; //输入值
WordType wOutput; //输出值
WordType wALR_L; //报警下限
WordType wALR_H; //报警上限
WordType Password; //密码
byte bAlert; //报警标志位
byte PointPos; //小数点位置
byte bAddress; //地址
byte BaudIndex; //波特率下标
}PARAM, *PPARAM;
PARAM idata Param;
bit flag = 1;
byte idata Rarray[10];
byte idata Tarray[10];
byte changed = 0;
uchar KeyFuncIndex = 0;
void (*KeyFuncPtr)() reentrant; //按键功能指针
typedef struct
{
uchar KeyStateIndex; //当前状态索引号
uchar KeyLeftState; //按下"向左"键时转向的状态索引号
uchar KeyRightState; //按下"向右"键时转向的状态索引号
uchar KeyMenuState; //按下"MENU"键时转向的状态索引号
uchar KeyEnterState; //按下"回车"键时转向的状态索引号
void (*CurrentOperate)() reentrant; //当前状态应该执行的功能操作
}KbdTabStruct;
void wren_cmd(void);/*写使能子程序*/
//void wrdi_cmd(void);/*写使能复位*/
void wrsr_cmd(void);/*复位时间位和数据保护位写入状态寄存器*/
uchar rdsr_cmd(void);/*读状态寄存器*/
void byte_write(uchar aa,uint dd);/*字节写入,aa为写入的数据,dd为写入的地址*/
uchar byte_read(uint dd);/*字节读出,dd为读出的地址,返回读出的数据*/
void page_write(uchar aa1,uchar aa2,uchar aa3,uchar aa4,uint dd);/*页写入*/
void rst_wdog(void);/*DOG复位*/
void outbyt(uchar aa);/*输出一个字节到25045中,不包括先导字等*/
uchar inputbyt();/*由25045输入一个字节,不包括先导字等额外的东西*/
void wip_poll(void);/*检查写入过程是否结束*/
void Delay(uint utime, uint utime2) reentrant;
void I_Send(byte Data);
uchar GetKeyValue(uint *pValue, word Data, uchar uNum) reentrant;
//参数*pValue返回输入,Data为输入显示,uNum为显示的位数
void KeyResult(uchar uKey, uchar uMenu, uchar uEnter, word Value) reentrant;
void WriteParams(); //保存参数
void ReadParams(); //读参数
//显示数据
void Display(dword Data, uchar PointIndex) reentrant;
void GetKeyInput(void);
void Hints(uchar *pChar) reentrant;
//显示参数
void GetParamsCode(uchar *pChar, uchar begin, word wData) reentrant; //段码、显示片选起点、参数
//测量BUSY的量(查询方式)
dword GetCount();
//显示测量数据
void DisplayCurrent();
//设置Prog
void OptionProg() reentrant;
void OptionAYS() reentrant;
void OptionIn_Out() reentrant;
void OptionALR() reentrant;
void OptionSecr() reentrant;
void OptionAdBd() reentrant;
void AutoZero() reentrant; //显示零点
void InputX() reentrant; //显示输入值
void OutputX() reentrant; //显示输出值
void ALROFF() reentrant; //关闭报警
void ALRON() reentrant; //启动报警
void Passward() reentrant; //密码输入
void AddrX() reentrant; //显示当前地址
void BaudX() reentrant; //显示当前波特率
void Inp() reentrant; //显示INP
void Oup()reentrant; //显示OUP
void Point() reentrant; //提示小数点输入
void SetInput() reentrant; //设置输入值
void SetOutput() reentrant; //设置输出值
void SetPoint() reentrant; //设置小数点
void ALRLX() reentrant; //显示报警下限
void ALRHX() reentrant; //显示报警上限
void AL_L() reentrant; //报警下限输入
void AL_H() reentrant; //报警上限输出
void SetAL_L() reentrant; //设置低报警值
void SetAL_H() reentrant; //设置高报警值
void Address() reentrant; //提示地址输入
void Baud() reentrant; //提示波特率输入
void SetAddress() reentrant; //设置地址
void SetBaud() reentrant; //设置波特率
void SetTimer(uchar uIndex); //设置定时器的参数
void SendData(uchar uNum); //发送串行口数据
bit ReceiveData(uchar uNum); //接收串行口数据
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -