📄 hardware.c
字号:
#include <absacc.h>
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
//2007/1/28 stc5412ad p0^0做AD转换,10位。//
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
// isp相关寄存器 //
sfr ISP_DATA = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD = 0xe5;
sfr ISP_TRIG = 0xe6;
sfr ISP_CONTR = 0xe7;
// I_O Port 模式寄存器 //
sfr P0M0 = 0x93;
sfr P0M1 = 0x94;
sfr P1M0 = 0x91;
sfr P1M1 = 0x92;
sfr P2M0 = 0x95;
sfr P2M1 = 0x96;
sfr P3M0 = 0xb1;
sfr P3M1 = 0xb2;
sfr ADC_CTRL =0XC5; //b7:ADC_POWER,b6\b5:SPEED1\0,b4:ADCFLAG,b3:ADC_START,b2~0:CHANNEL0~7//
sfr ADC_DATA =0XC6;
sfr ADC_LOW2 =0XBE;
//看门狗//
sfr WDT_CONTR = 0xe1;
// 定义命令 //
#define READ_AP_and_Data_Memory_Command 0x01 // 字节读数据存储区 //
#define PROGRAM_AP_and_Data_Memory_Command 0x02 // 字节编程数据存储区 //
#define SECTOR_ERASE_AP_and_Data_Memory_Command 0x03 // 扇区擦除数据存储区 //
// 定义常量 //
#define ERROR 0
#define OK 1
#define WAIT_TIME 0x03
#define buffer_size 3 //10 //87 //47
#define equ_div 9 //3 //14 //8
// #define DELAY_CONST 60000 //
#define key_fen 0x7f //MODE1分项菜单
//#define key_2 0xf7 //MODE2 电源变化并测电压值
#define key_menu 0xfd //MODE3 功能键
//#define key_4 0xbf //MODE4 电源变化并加负载变化测当前电压值
//#define key_5 0xef //MODE5 电源变化并加负载变化测当前电压值最小值
//#define key_6 0xfe //MODE6 电源变化测试运行的状态,需要一个测试引脚.
#define key_dec 0xdf //MODE7 减1
#define key_add 0xfb //MOD0 加1
#define battery_full_plus 119
#define battery_low_plus 2
#define battery_half_delay 3 //3次不回落即为半充满——减小电流到一半
#define battery_full_delay 30 //30次(10秒)不回落即为充满,实时检测用小电流维持。
sbit dig3=P3^3;
sbit dig2=P3^4;
sbit dig1=P3^5;
sbit dig0=P3^7;
sbit key_h=P3^2; //键盘检测位,输入口与P1口共用//
sbit jd_2=P1^5;
sbit jd_4=P1^6;
sbit jd_8=P1^7;
sbit chg_1=P1^1;
sbit chg_2=P1^2;
sbit chg_4=P1^3;
sbit chg_8=P1^4;
sbit AD_CH0=P1^0;
//充电状态定义
uchar idata battery_v_standard=12; //电压标称值,与充电电压有关
uchar idata battery_i_standard=1; //电流标称值//与充电电流有关
uchar idata battery_full; //电压充满值
uchar idata battery_low; //低极限值
uchar code bat_jds[]= {1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5}; //电压标称值对应充电继电器档位
uchar code bat_full[]={14,28,42,57,72,75,100,114,126,142,171}; //电压满度值
bit battery_err;
uchar data chgc_finish; //充电状态设置:0-错误,1-电池检测正常 2-开始充电 3-半满 4-全满浮充
uchar data chgc_count;
sfr seg=0XA0; //P2口// 0x90 P1口
bit key;
bit write_flash;
bit write_err;
bit jdq_bit;
uchar data adc_state=0;
uint data adc_result=0;
uint data adc_low=4096;
uint data jishi_min; //时间计时器,以分为单位最大255循环计数
uchar data jishi_sec; //时间计时器,以秒为单位(60进制)//
uchar data jishi4ms; //时间计时器,以4MS为单位(250进制)//
uint data dis_hex_buffer;
uchar data disbuffer[4]=0; //显示缓冲区,共有四位//
uint idata adc_buffer[buffer_size];
uchar data adc_count=0;
uchar data discount; //显示计数器,从0到3循环计数//
uchar data keyword;
uchar data inmode; //模式,00-设定标称值 01--设定标称电流值。02-校准电压参数 10-自充电模式 20-激历模式
uchar data jd_state;
bit jd_bit;
uchar data chgc_state; //充电电流设置。。
bit chgc_bit;
uchar data key_time;
bit key_bit;
bit flash_1;
bit flash_2;
bit flash_3;
bit flash_0;
bit flash; //秒闪显示标志//
//数码管代码区,从0到F,无论是共阴或共阳,位选电平始终是0有效//
//uchar code dismap1[]={0xfc,0X60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xF6,0xEE,0x3e,0x9c,0x7a,0x9E,0x8e}; //共阴极数码管正装,正常显示小数点加1//
//uchar code dismap2[]={0xfc,0x0C,0xd9,0x9D,0x2D,0xb5,0xF5,0x1C,0xfd,0xBD,0xF9,0xE5,0xF0,0xCD,0xF1,0x71}; //共阴极反数码管正装小数点加2//
//uchar code dismap3[]={0xfc,0x0C,0xda,0x9e,0x2e,0xb6,0xF6,0x1C,0xfe,0xbe,0xfa,0xE6,0xF0,0xce,0xF2,0x72}; //共阴极反数码管反装小数点加1//
//uchar code dismap1[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x21,0xc1,0x63,0x85,0x61,0x71}; //共阳极数码管正装,正常显示小数点减1//
uchar code dismap1[]={0xB7,0x12,0x67,0x76,0xd2,0xf4,0xf5,0x16,0xf7,0xf6,0xd7,0xf1,0xA5,0x73,0xe5,0xc5};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -