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

📄 host.h

📁 智能数字电流表。双CPU工作
💻 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 + -