📄 general.h
字号:
#ifndef _GRNERAL_H_
#define _GRNERAL_H_
// 函数指针类型定义
typedef void (* PROC_FUNC)(void);
// 设备状态属性
#define DEVICE_OK 0xCF // 正常状态
// 电流方向定义
#define ATTRIBUTE_OF_PLUS_MINUS 0x04 // 反向
// 电量属性定义 之 四类定义
#define ATTRIBUTE_OF_APEX 0x0000 // 电量属性之峰
#define ATTRIBUTE_OF_CALM 0x0001 // 电量属性之平
#define ATTRIBUTE_OF_VALE 0x0002 // 电量属性之谷
#define ATTRIBUTE_OF_TINE 0x0003 // 电量属性之尖
// 电量属性定义 之 八类定义
#define ATTRIBUTE_OF_APEX_PLUS 0x0000 // 电量属性之正峰
#define ATTRIBUTE_OF_CALM_PLUS 0x0001 // 电量属性之正平
#define ATTRIBUTE_OF_VALE_PLUS 0x0002 // 电量属性之正谷
#define ATTRIBUTE_OF_TINE_PLUS 0x0003 // 电量属性之正尖
#define ATTRIBUTE_OF_APEX_MINUS 0x0004 // 电量属性之反峰
#define ATTRIBUTE_OF_CALM_MINUS 0x0005 // 电量属性之反平
#define ATTRIBUTE_OF_VALE_MINUS 0x0006 // 电量属性之反谷
#define ATTRIBUTE_OF_TINE_MINUS 0x0007 // 电量属性之反尖
// 事件位定义
#define EVENT_01_SECOND BIT0 // 1s定时事件
#define EVENT_01_MINUTE BIT1 // 1min定时事件
//#define EVENT_15_MINUTE BIT2 // 15min定时事件
#define EVENT_SERIAL_PORT BIT3 // 串口通信事件
#define EVENT_KEY_DOWN BIT4 // 按键事件
#define EVENT_KEY_DETECT BIT5 // 按键事件
#define EVENT_POWERMINUS BIT6 // 反向起始事件
#define EVENT_REVERSED (BIT2|BIT7)
// 基本数据定义
#define PULSE_COUNT_OF_PER_DEGREE 100 // 一度电的脉冲数
//#ifdef LIAONING_STANDARD
#define COUNT_OF_CHARGE_RATE 3 // 费率数
#define PROTOCOL_WR_DATALEN 16
#define COUNT_OF_DISPLAY_POWER 4
//#else
//#ifdef BEIJING_STANDARD
//#define COUNT_OF_CHARGE_RATE 4 // 费率数
//#define PROTOCOL_WR_DATALEN 20
//#define COUNT_OF_DISPLAY_POWER 5
//#endif
//#endif
// 数据存储模式定义
#define DUTY_STORE 0x0000 // 例行存储
#define FORCE_STORE 0x0001 // 强制存储
// 时段检查模式定义
#define DUTY_DETECT 0x0000 // 时段例行检查
#define FORCE_DETECT 0x0001 // 时段强制检查
// 时间数组各项下标含义定义
#define SPACE_OF_SECOND 0x0000
#define SPACE_OF_MINUTE 0x0001
#define SPACE_OF_HOUR 0x0002
#define SPACE_OF_WEEKDAY 0x0003
#define SPACE_OF_DAY 0x0004
#define SPACE_OF_MONTH 0x0005
#define SPACE_OF_YEAR 0x0006
// 定时器个数定义
#define TIMER_NUMBER 2
// RealTimer操作定义
#define REALTIMER_WRITE 0
#define REALTIMER_READ 1
// 通信端口选择定义
#define NULL_PORT 0x0000
#define IR_PORT 0x0001
#define RS485_PORT 0x0002
#define IR_PORT_WITH_BATTERY 0x0004
// 奇偶校验标识
#define UART_BIT_9_H 0xA5
#define UART_BIT_9_L 0x5A
// 串口状态定义
#define UART_RXD_OK 0
#define UART_WAIT_START_BYTE1 1
#define UART_WAIT_ADDRESS 2
#define UART_WAIT_START_BYTE2 3
#define UART_WAIT_CTL_WORD 4
#define UART_WAIT_DATA_LENGTH 5
#define UART_WAIT_DATA 6
#define UART_WAIT_CS 7
#define UART_WAIT_STOP_BYTE 8
#define UART_RXD_PARITY_ERR 9
#define UART_RXD_OVERTIME_ERR 10
// 串口错误定义
#define UART_RXD_ERR_START_BYTE1 0x81
#define UART_RXD_ERR_ADDRESS 0x82
#define UART_RXD_ERR_START_BYTE2 0x83
#define UART_RXD_ERR_CTL_WORD 0x84
#define UART_RXD_ERR_DATA_LENGTH 0x85
#define UART_RXD_ERR_DATA 0x86
#define UART_RXD_ERR_CS 0x87
#define UART_RXD_ERR_STOP_BYTE 0x88
#define UART_RXD_ERR_STATE 0x89
#define UART_RXD_ERR_PARITY 0x8A
// 串口消息固定字符
#define UART_RXD_BUF_SIZE 48
#define UART_TXD_BUF_SIZE 7
#define UART_START_BYTE 0x68
#define UART_STOP_BYTE 0x16
// 波特率定义
#define BAUD_RATE 1200
#define IR_CARRIER 38000
// ACLK=32768,SMCLK=ACLK*32
#define SMCLK_FREQ (32768*32)
// generate IR carrier
#define IR_CAR_GEN (SMCLK_FREQ/IR_CARRIER)
// BAUD_RATE
#define Bitime_5 (SMCLK_FREQ/(2*BAUD_RATE)) // ~ 0.5 bit length + small adjustment 13.6533
#define Bitime ((SMCLK_FREQ/BAUD_RATE)) // 427us bit length ~ 2341 baud 27.30666
// 串口发送定义
#define N_HALF_CLK 10
#define N_SEND_BIT 200
// 串口接收定义
#define UART_HALF_BIT_TIME_1200 14
#define UART_BIT_TIME_1200 27
// 串口发送波特率定义
#define UART_BOND_RATE_1200 200
//表号
#define LCD_ADDRESS_OF_DEVICE_NUM 0
#define LCD_OF_DEVICE_NUM BIT5
//户号
#define LCD_ADDRESS_OF_USER_NUM 0
#define LCD_OF_USER_NUM BIT3
//日期,时间
#define LCD_ADDRESS_OF_DATE_TIME 0
#define LCD_OF_TIME BIT7
#define LCD_OF_DATE BIT6
//冒号前
#define LCD_ADDRESS_OF_MAOHAO0 4
#define LCD_OF_MAOHAO0 BIT3
//冒号后
#define LCD_ADDRESS_OF_MAOHAO1 5
#define LCD_OF_MAOHAO1 BIT3
#define LCD_ADDRESS_OF_MAOHAO2 6
#define LCD_OF_MAOHAO2 BIT3
//正向,反向
#define LCD_ADDRESS_OF_ZHENGFAN_XIANG 0
#define LCD_OF_ZHENGXIANG BIT0
#define LCD_OF_FANXIANG BIT1
//总,峰,平,谷,尖
#define LCD_ADDRESS_OF_ZFPGJ 8
//点后
#define LCD_ADDRESS_OF_DOT1 7
#define LCD_OF_DOT1 BIT3
//通信...
#define LCD_ADDRESS_OF_TONGXIN 9
#define LCD_OF_TONXIN BIT2
//电量
#define LCD_ADDRESS_OF_DIANLIANG 9
#define LCD_OF_DIANLIANG BIT5
//需量
//#define LCD_ADDRESS_OF_XULIANG 8
//#define LCD_OF_XULIANG BIT4
//本
#define LCD_ADDRESS_OF_BEN 2
#define LCD_OF_BEN BIT3
//上
#define LCD_ADDRESS_OF_SHANG 0
#define LCD_OF_SHANG1 BIT4
//月
#define LCD_ADDRESS_OF_YUE 3
#define LCD_OF_YUE BIT3
//null
#define LCD_OF_NULL 0
//冬
#define LCD_ADDRESS_OF_DONG 0
#define LCD_OF_DONG BIT2
//低电显示
#define LCD_ADDRESS_OF_LOWPWR 9
#define LCD_OF_LOWPWR BIT4
//掉电显示
#define LCD_ADDRESS_OF_BRKPWR 9
#define LCD_OF_BRKPWR BIT5
//开盖报警显示
#define LCD_ADDRESS_OF_COVER 9
#define LCD_OF_COVER BIT1
//编程显示
#define LCD_ADDRESS_OF_PROGRAM 9
#define LCD_OF_PROGRAM BIT0
// 其他数据地址定义
// 1.常规数据信息
#define ADDRESS_OF_DEVICE_CONSTANT 0 // 设备常数 - 4字节
#define ADDRESS_OF_DEVICE_NUMBER 4 // 设备标识地址 - 6字节
#define ADDRESS_OF_DEVICE_CODE 10 // 设备码地址 - 6字节
#define ADDRESS_OF_USER_CODE 16 // 用户编号地址 - 6字节
#define ADDRESS_OF_STARTING_COUNT 22 // 设备起始读数 - 20字节(总峰平谷尖:缺省为0)
#define ADDRESS_OF_DEVICE_PASSWORD1 42 // 设备访问密码1 - 4字节
#define ADDRESS_OF_DEVICE_PASSWORD2 46 // 设备访问密码2 - 4字节
#define ADDRESS_OF_DEVICE_PASSWORD3 50 // 设备访问密码3 - 4字节
#define ADDRESS_OF_TIME_REFINE 54 // 对时允许误差值 - 1字节 - 缺省为5(分钟)
#define ADDRESS_OF_DISPLAY_CHOOSE_BAK 55 // 设备显示选择备份 - 4字节 - 缺省为FF(所有数据轮显)
#define ADDRESS_OF_DISPLAY_INTERVAL 57 // 循显时间设定 - 1字节 - 缺省为01(每秒切换显示内容),此字节可直接设置,是ADDRESS_OF_DISPLAY_CHOOSE_BAK的第三个字节
#define ADDRESS_OF_DISPLAY_CHOOSE 59 // 设备显示选择 - 7字节 - 缺省为FF(所有数据轮显)
#define ADDRESS_OF_DEVICE_STATUS_MAIN 66 // 设备主状态字 - 1字节
#define ADDRESS_OF_DEVICE_STATUS_SUB 67 // 设备子状态字 - 1字节
#define ADDRESS_OF_SOFTWARE_VERSION 68 // 软件版本号 - 3字节
#define ADDRESS_OF_HARDWARE_VERSION 71 // 硬件版本号 - 3字节
#define ADDRESS_OF_PROGRAM_TIMES 74 // 编程次数 - 2字节
#define ADDRESS_OF_PROGRAM_TIME 76 // 最近一次编程时间 - 6字节
#define ADDRESS_OF_DEVICE_CLEAR_TIMES 82 // 设备清零次数 - 2字节
#define ADDRESS_OF_DEVICE_CLEAR_TIME 84 // 最近一次清零时间 - 6字节
#define ADDRESS_OF_START_TIME_MINUS 90 // 最近一次反向时间 - 6字节
#define ADDRESS_OF_POWER_TIME_MINUS 96 // 反向运行的总时间 - 4字节 - 单位是分钟
#define ADDRESS_OF_LAST_BREAK_POWER_TIME 100 // 最后一次掉电时间 - 6字节
#define ADDRESS_OF_LAST_LOW_POWER_TIME 106 // 最后一次低压时间 - 6字节
#define ADDRESS_OF_SUCCESSSETTIME_FLAG 112 // 成功对时标记位 - 1字节
#define ADDRESS_OF_STARTING_COUNT_TIME 113 // 设备起始读数时间 - 6字节
#define ADDRESS_OF_TIME_REFINE_TIME 119 // 最近一次对时时间 - 6字节
#define ADDRESS_OF_CPU_RESET_CNT 125 // CPU复位次数 - 2字节
#define ADDRESS_OF_OPEN_COVER_CNT 127 // 开盖次数 - 2字节
#define ADDRESS_OF_OPEN_COVER_TIME 129 // 开盖次数 - 6字节
// 2.临时数据保存区
#define ADDRESS_OF_RELAY_STATE 150 // 继电器状态 - 1字节
#define ADDRESS_OF_SETTLEMENT_HOUR 151 // 月结算日期 - 1字节 - 缺省为01(每月1号)
#define ADDRESS_OF_SETTLEMENT_DAY 152 // 月结算日期 - 1字节 - 缺省为01(每月1号)
#define ADDRESS_OF_SETTLEMENT_RECODE_MON 153 // 上一次结算月信息 - 1字节
#define ADDRESS_OF_BACKUP_STATUS_MAIN 154 // 设备主状态字 - 1字节
#define ADDRESS_OF_BACKUP_STATUS_SUB 155 // 设备子状态字 - 1字节
#define ADDRESS_OF_RS485BAUDRATE 156 // RS485波特率设置 - 2字节
#define ADDRESS_OF_IRBAUDRATE 158 // IR波特率设置 - 2字节
#define ADDRESS_OF_PERIOD_OF_TIME_COUNT 160 // 时段数 - 1字节
// 时段设置数据存储地址,每项的存储格式为:
// typedef struct tag_TimeSect
// {
// unsigned char Attribute; - 时段属性
// unsigned char Minute; - 时段的起始分钟
// unsigned char Hour; - 时段的起始小时
// }TimeSect_S;
// 如此的存储格式限定了时段设置不能跨零点
#define ADDRESS_OF_TIME_SECT 161 // 共占用3*12=36个字节
// 3.用电数据统计区
#define ADDRESS_OF_TOTAL_POWER_PLUS 200 // 设备总正用电量 - 4字节
#define ADDRESS_OF_TOTAL_APEX_PLUS 204 // 设备总正峰电量 - 4字节
#define ADDRESS_OF_TOTAL_CALM_PLUS 208 // 设备总正平电量 - 4字节
#define ADDRESS_OF_TOTAL_VALE_PLUS 212 // 设备总正谷电量 - 4字节
#define ADDRESS_OF_TOTAL_TINE_PLUS 216 // 设备总正尖电量 - 4字节
#define ADDRESS_OF_TOTAL_POWER_MINUS 220 // 设备总反用电量 - 4字节
#define ADDRESS_OF_TOTAL_APEX_MINUS 224 // 设备总反峰电量 - 4字节
#define ADDRESS_OF_TOTAL_CALM_MINUS 228 // 设备总反平电量 - 4字节
#define ADDRESS_OF_TOTAL_VALE_MINUS 232 // 设备总反谷电量 - 4字节
#define ADDRESS_OF_TOTAL_TINE_MINUS 236 // 设备总反尖电量 - 4字节
// 月历史冻结数据存储地址,每月的存储格式为:
// typedef struct tag_MonthLog
// {
// unsigned long PlusTotalLog; - 总正电量数据
// unsigned long PlusApexLog; - 正峰电量数据
// unsigned long PlusCalmLog; - 正平电量数据
// unsigned long PlusValeLog; - 正谷电量数据
// unsigned long PlusTineLog; - 正尖电量数据
// unsigned long MinusTotalLog; - 总反电量数据
// unsigned long MinusApexLog; - 反峰电量数据
// unsigned long MinusCalmLog; - 反平电量数据
// unsigned long MinusValeLog; - 反谷电量数据
// unsigned long MinusTineLog; - 反尖电量数据
// }MonthLog_S;
#define ADDRESS_OF_MONTH_LOG 500 // 共占用40*13=520个字节
#define ADDRESS_OF_MONTH_01 500 // 一月数据存储地址
#define ADDRESS_OF_MONTH_02 540 // 二月数据存储地址
#define ADDRESS_OF_MONTH_03 580 // 三月数据存储地址
#define ADDRESS_OF_MONTH_04 620 // 四月数据存储地址
#define ADDRESS_OF_MONTH_05 660 // 五月数据存储地址
#define ADDRESS_OF_MONTH_06 700 // 六月数据存储地址
#define ADDRESS_OF_MONTH_07 740 // 七月数据存储地址
#define ADDRESS_OF_MONTH_08 780 // 八月数据存储地址
#define ADDRESS_OF_MONTH_09 820 // 九月数据存储地址
#define ADDRESS_OF_MONTH_10 860 // 十月数据存储地址
#define ADDRESS_OF_MONTH_11 900 // 十一月数据存储地址
#define ADDRESS_OF_MONTH_12 940 // 十二月数据存储地址
#define ADDRESS_OF_MONTH_CURRENT 1000 // 当前月数据记录区(40bytes)
// 实时时钟管脚定义 ( MSP430F413 <--> RS5C372A )
// +---------------+
// | P6.7 | ---> SCL
// | P6.6 | <---> SDA
// +---------------+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -