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

📄 hardware.c

📁 用KEILC 编的充电器程序。自动调节充电电压。需要电路资料与我联系
💻 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 + -