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

📄 main.i

📁 单片机 mega16L 电池放电器源码
💻 I
字号:
#line 1 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"






#line 1 "C:/icc/include/iom8v.h"




#line 7 "C:/icc/include/iom8v.h"


#line 10 "C:/icc/include/iom8v.h"


#line 13 "C:/icc/include/iom8v.h"


#line 16 "C:/icc/include/iom8v.h"






















































































































































































































































































































































































































































#line 8 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
#line 1 "C:/icc/include/macros.h"






























#line 35 "C:/icc/include/macros.h"














void _StackCheck(void);
void _StackOverflowed(char);




#line 9 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
#line 1 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0/discharge.h"











































#line 46 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0/discharge.h"
void init_devices(void);
void port_init(void);
void timer0_init(void);
void timer1_init(unsigned int a,unsigned int b,unsigned int top);
void timer2_init(void);
void AD_init(void);
unsigned int read_adc (unsigned char r,unsigned char m);

void system(void);
void taskmgr(void);

void delay_nus(unsigned int n);
void delay_nms(unsigned int n);
void delay10us(void);

void timer(void);

unsigned int key(unsigned char a);

void BH1415_sent(unsigned int data);

void timer1_stop(void);
void timer1_start(void);

void desktop1(void);
void desktop2(void);
void desktop3(void);
void desktop4(void);
void menu_program(void);
void system_clock(void);


 unsigned char twi_start(void);
void twi_init(void);
void twi_stop(void);
 unsigned char twi_to_write(void);
 unsigned char twi_to_read(void);
 unsigned char twi_send(unsigned char data);
 unsigned char twi_receive(unsigned char *data);

void pt2314_sent(unsigned char data);


void  test(void);
void discharge (void);
unsigned int T_BT1_T(void);
unsigned int  T_BT1_V(void);
unsigned int T_BT1_I(void);
unsigned int T_BT1_P(void);
void BT1_I_Ctrl (void);

void bt1_v_record(void);

void Capacitance_setting(void);
void discharge_speed(void);
void record_setting(void);
void discharge_init(void);
void discharge_stop(void);
void welcome(void);


void Green_led(void);
void Green_led_init
 (unsigned int t,unsigned int cy,unsigned char ht);
void Red_led(void);
void Red_led_init
 (unsigned int t,unsigned int cy,unsigned char ht);
#line 10 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
#line 1 "C:/icc/include/eeprom.h"

#line 4 "C:/icc/include/eeprom.h"























int EEPROMwrite( int location, unsigned char);
unsigned char EEPROMread( int);

void EEPROMReadBytes(int addr, void *ptr, int size);
void EEPROMWriteBytes(int addr, void *ptr, int size);






#line 11 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
#line 1 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0/LCD_1602.h"























#line 26 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0/LCD_1602.h"
void LCD_init   (void);
void LCD_write_char  (unsigned command,unsigned data);
void LCD_write_DATA_PORT(unsigned char data);
void LCD_write_string(unsigned char x,unsigned char y, const unsigned char *s,unsigned char e);
void LCD_write_number(unsigned char x,unsigned char y,unsigned char d,unsigned long dat,const unsigned char *s,unsigned char e);
void LCD_write_time(unsigned char X,unsigned char Y,unsigned char h,
                                                unsigned char m,unsigned char s);
void LCD_write_new(void);
void LCD_check(unsigned char x,unsigned char y);
void LCD_clear(void);
void LCD_init_CGRAM(void);
void LCD_write_CGRAM(unsigned char x,unsigned char y,unsigned char n) ;
#line 12 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
  unsigned char keyboard;
  unsigned char RunTab=0;
  unsigned char RunTab_old;

  unsigned char time;
  unsigned char sec=0;
  unsigned char min=0;
  unsigned char hour=0;

  unsigned int sc_key,sc_bt1,sc_bt_ctrl,
  sc_discharge,sc_eeprom,sc_lcd_write,
  sc_bt1_record,sc_key_delay,sc_bt1_v_temp;


  unsigned char BT1_state;
  unsigned int BT1_V;
  unsigned int BT1_I;
  unsigned int BT1_T;
  unsigned int BT1_V_num;
  unsigned int BT1_V_num_temp;
  unsigned int bt1_v_temp;
  unsigned int bt1_v_temp_1;

  unsigned int BT1_I_SET;
  unsigned int PWM;
  unsigned long BT1_mAh;
  unsigned long BT1_time;
  unsigned int mAh;
  unsigned int D882_P;

  unsigned int mAh_set=1000;
  unsigned char speed=10;
  unsigned int BT1_P;

#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)
{
(*(volatile unsigned char *)0x44) = 0x06;
  timer();

#line 54 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
  system();
  taskmgr();
  system_clock();
}


#line 62 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
void system(void)
{
  if((sc_key_delay==0)&&(keyboard!=0)){sc_key_delay=50;}
  if(sc_key_delay==1){keyboard=0;}
  if(sc_key==0)
    {keyboard=key(keyboard);sc_key=16;}

  if(sc_lcd_write==0)
   {
    desktop1();desktop2();desktop3();desktop4();
	Capacitance_setting();discharge_speed();
	record_setting();welcome();
	LCD_write_new();
	sc_lcd_write=32;
	}
	if(BT1_I_SET)
	{
 if(sc_bt1==0)
  {BT1_mAh+=BT1_I;sc_bt1=450;}
 if(sc_discharge==0)
  {BT1_time++;sc_discharge=125;}
 if(sc_eeprom==0)
  {
   if(BT1_V<2000)
	{discharge_stop();}
 EEPROMWriteBytes(0x01F0, & BT1_mAh, sizeof (BT1_mAh));
 EEPROMWriteBytes(0x01F4, & BT1_time, sizeof (BT1_time));
    sc_eeprom=1250;
	}
  if(sc_bt_ctrl==0)
    {
	 BT1_I_Ctrl();
      if((BT1_I>BT1_I_SET+5)||(BT1_I<BT1_I_SET-5))
	    sc_bt_ctrl=2;
		else sc_bt_ctrl=48;
	 }
  }
  if(sc_bt1_v_temp==0)
    {bt1_v_temp+=BT1_V;sc_bt1_v_temp=500;}
  if(sc_bt1_record==0)
    {bt1_v_record();sc_bt1_record=7500;}
}


#line 108 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
void taskmgr(void)
  {
	 if(keyboard==pageup)
	   {
		 if(RunTab!=3){RunTab++;keyboard=0;}
	   }
	 if(keyboard==pagedown)
	   {
	     if(RunTab!=1){RunTab--;keyboard=0;}
	   }
	  if(RunTab_old!=RunTab)
	     {LCD_clear();RunTab_old=RunTab;}
  }

void system_clock(void)
  {
	 if(sc_key!=0)  sc_key--;
	 if(sc_bt1!=0)  sc_bt1--;
	 if(sc_discharge!=0)  sc_discharge--;
	 if(sc_eeprom!=0)  sc_eeprom--;
	 if(sc_lcd_write!=0)  sc_lcd_write--;
	 if(sc_bt1_record!=0)  sc_bt1_record--;
	 if(sc_bt1_v_temp!=0)  sc_bt1_v_temp--;
	 if(sc_key_delay!=0)  sc_key_delay--;
	 if(sc_bt_ctrl!=0)  sc_bt_ctrl--;
  }
void bt1_v_record(void)
  {
     bt1_v_temp/=15;
 EEPROMReadBytes(0x01F8, & BT1_V_num, sizeof (BT1_V_num));
 EEPROMWriteBytes(BT1_V_num*2, & bt1_v_temp, sizeof (bt1_v_temp));

	if(BT1_V_num<249)
	   {BT1_V_num++;EEPROMWriteBytes(0x01F8, & BT1_V_num, sizeof (BT1_V_num));}

	 bt1_v_temp=0;
  }

#line 148 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
void main(void)
  {
	 sc_eeprom=500;
	 delay_nms(20);
	 init_devices();
	 LCD_clear();
(*(volatile unsigned char *)0x35)&=~(1<<5);
(*(volatile unsigned char *)0x35)&=~(1<<4);
	 RunTab=5;
	 delay_nms(2000);
 while(1)
       {
	     discharge_init();
		 discharge();
		 delay_nms(100);
       }
  }
void welcome(void)
  {
     unsigned char ID=5;
	  if(RunTab==ID)
		{
		  LCD_write_string(4,0,"Welcome",15);
		  LCD_write_string(1,1,"Discharger xp",15);
		}
  }
void discharge_stop(void)
  {
     BT1_I_SET=0;BT1_I=0;
	 BT1_state&=~(1<<1);
	 BT1_state|=(1<<2);
(*(volatile unsigned char *)0x37)&=~(1<<1);(*(volatile unsigned char *)0x35)&=~(1<<4);
	 PWM=100;
  }
void discharge_init(void)
  {
      BT1_V=T_BT1_V();
	  if((BT1_V>2000)&&BT1_state==0)
	    {
		  BT1_state|=(1<<0);
		  RunTab=10;
		}
  }
void Capacitance_setting(void)
  {
    unsigned char ID=10;
    if(RunTab==ID)
		  {
		    if((keyboard== 1)&&mAh_set<4000)
		     {keyboard=0;mAh_set+=100;}
		    else if((keyboard== 2)&&mAh_set>100)
		     {keyboard=0;mAh_set-=100;}
			else if(keyboard==pagedown)
	        {
			 keyboard=0;
 EEPROMReadBytes(0x01F0, & BT1_mAh, sizeof (BT1_mAh));
 EEPROMReadBytes(0x01F4, & BT1_time, sizeof (BT1_time));
 EEPROMReadBytes(0x01FC, & mAh_set, sizeof (mAh_set));
 EEPROMReadBytes(0x01FE, & speed, sizeof (speed));
			 RunTab=12;
	        }
			LCD_write_string(0,0,"Capacitance",0);
			LCD_write_number(0,1,0,mAh_set,"mAh",8);
			LCD_write_number(10,1,3,BT1_V,"V",15);
		  }
  }
void discharge_speed(void)
  {
      unsigned char ID=11;
      if(RunTab==ID)
		  {
		    LCD_write_string(0,0,"speed",0);
			LCD_write_number(9,0,0,6000/speed,"min",15);
			LCD_write_number(0,1,2,speed,"C",8);
			LCD_write_number(9,1,3,mAh_set/100*speed,"A",15);

		    if((keyboard== 1)&&speed<120)
		     {keyboard=0;speed+=5;}
		    else if((keyboard== 2)&&speed>5)
		     {keyboard=0;speed-=5;}
			else if(keyboard==pagedown)
	        {
			 keyboard=0;
	         RunTab--;LCD_clear();
	        }
			}
  }
void record_setting(void)
  {
      unsigned char ID=12;
      if(RunTab==ID)
		  {
 EEPROMWriteBytes(0x01FC, & mAh_set, sizeof (mAh_set));
 EEPROMWriteBytes(0x01FE, & speed, sizeof (speed));
			PWM=500;sc_bt1_record=7500;
			sc_eeprom=1250;sc_bt1_v_temp=500;
	        BT1_I_SET=mAh_set/100*speed;
(*(volatile unsigned char *)0x37)|=(1<<1);(*(volatile unsigned char *)0x35)|=(1<<4);
			BT1_state|=(1<<1);
			RunTab=1;
			LCD_clear();
		  }
  }

#line 254 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
void discharge (void)
  {
      unsigned long v_temp,i_temp;
	  unsigned char v,i;

	  while(BT1_state&(1<<1))
	  {(*(volatile unsigned char *)0x35)|=(1<<4);
		if(i<4)
		 {i_temp+=T_BT1_I();i++;}
		else
		 {i=0;BT1_I=i_temp>>2;i_temp=0;}
		delay_nms(5);
		if(v<64)
		 {v_temp+=T_BT1_V()+(BT1_I>>1); v++;}
		else
		 {v=0;BT1_V=v_temp>>6;v_temp=0;}

		delay_nms(5);
		D882_P=(BT1_V-(BT1_I>>1))/100;
		D882_P*=(BT1_I/10);
		BT1_T=T_BT1_T();
		delay_nms(5);
		}
(*(volatile unsigned char *)0x35)&=~(1<<4);
  }


#line 283 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
void desktop2(void)
  {
     unsigned char ID=2;
		 if(RunTab==ID)
		 {
		    LCD_write_time(7,1,hour,min,sec);
		    LCD_write_number(7,0,0,BT1_time,"sec",10);
			LCD_write_number(0,1,1,BT1_T,"C",0);
			LCD_write_number(0,0,0,D882_P,"mW",0);
		 }
  }

void desktop1(void)
 {
   unsigned char ID=1;
   if(RunTab==ID)
		  {
		    if(keyboard== 1)
		     {keyboard=0;BT1_I_SET+=50;}
		    else if(keyboard== 2)
		     {keyboard=0;BT1_I_SET-=50;}
			else if(keyboard== 8)
	        {
			 keyboard=0;
	         BT1_mAh=0;
			 BT1_time=0;
 EEPROMWriteBytes(0x01F0, & BT1_mAh, sizeof (BT1_mAh));
 EEPROMWriteBytes(0x01F4, & BT1_time, sizeof (BT1_time));
		     BT1_V_num=0;BT1_V_num_temp=0;
 EEPROMWriteBytes(0x01F8, & BT1_V_num, sizeof (BT1_V_num));
		     sec=0;min=0;hour=0;
		     sc_bt1_record=7500;
	        }
		    LCD_write_number(0,0,3,BT1_V,"V",6);
			LCD_write_number(0,1,3,BT1_I,"A",6);
			if(BT1_state&(1<<2))
			LCD_write_string(7,0,"Finish",15);
			  else
			LCD_write_number(7,0,0,PWM,"PWM",0);
			LCD_write_number(7,1,1,BT1_mAh/100,"mAh",15);
		  }
 }
void desktop3(void)
  {
     unsigned char ID=3;
		 if(RunTab==ID)
		 {
		    if(BT1_V_num_temp<BT1_V_num-1)
			 {
			   if(keyboard== 1)
			    {
				  keyboard=0;
				  BT1_V_num_temp++;
 EEPROMReadBytes(BT1_V_num_temp*2, & bt1_v_temp_1, sizeof (bt1_v_temp_1));
				 }
			  }

			  if(BT1_V_num_temp<BT1_V_num-10)
			 {
			   if(keyboard== 9)
			    {
				  keyboard=0;
				  BT1_V_num_temp+=10;
 EEPROMReadBytes(BT1_V_num_temp*2, & bt1_v_temp_1, sizeof (bt1_v_temp_1));
				 }
			  }

			if(BT1_V_num_temp>0)
			 {
			   if(keyboard== 2)
			    {
				  keyboard=0;
				  BT1_V_num_temp--;
 EEPROMReadBytes(BT1_V_num_temp*2, & bt1_v_temp_1, sizeof (bt1_v_temp_1));
				 }
			  }

			 if(BT1_V_num_temp>10)
			 {
			   if(keyboard== 10)
			    {
				  keyboard=0;
				  BT1_V_num_temp-=10;
 EEPROMReadBytes(BT1_V_num_temp*2, & bt1_v_temp_1, sizeof (bt1_v_temp_1));
				 }
			  }

			LCD_write_number(0,1,3,bt1_v_temp_1,"V",8);
			LCD_write_number(0,0,0,BT1_V_num_temp,"min",8);
		    LCD_write_number(10,0,0,BT1_V_num,"min",15);
	        LCD_write_number(10,1,3,BT1_V,"V",15);
		 }
}

void desktop4(void)
  {
     unsigned char ID=4;
		 if(RunTab==ID)
		 {
		   if(PWM<250)
		   {
		    if(keyboard== 1)
			   {
			     keyboard=0;
				 PWM+=5;
(*(volatile unsigned int *)0x4A)=PWM-1;
				 LCD_write_number(0,1,3,534/1*PWM/25,"V",0);
			   }
			 }
			if(PWM>5)
		   {
		    if(keyboard== 2)
			   {
			     keyboard=0;
				 PWM-=5;
(*(volatile unsigned int *)0x4A)=PWM-1;
				 LCD_write_number(0,1,3,534/1*PWM/25,"V",0);
			   }
			 }
		    LCD_write_time(8,1,hour,min,sec);
		    LCD_write_number(7,0,0,PWM,"PWM",15);
			LCD_write_number(0,0,3,BT1_P,"V",0);

		 }
  }


void BT1_I_Ctrl (void)
  {
   if(BT1_I_SET!=0)
   {
     if(BT1_I>BT1_I_SET+1)
	  {
	  if(PWM!=0)
	  PWM-=1;
(*(volatile unsigned int *)0x4A)=PWM;
	  }
	  else if(BT1_I<BT1_I_SET-1)
	  {
	  if(PWM!=1900)
	  PWM+=1;
(*(volatile unsigned int *)0x4A)=PWM;
	  }
	  }
	  else
	   {PWM=300;(*(volatile unsigned int *)0x4A)=PWM;}
  }


#line 434 "E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c"
void timer(void)
{
  ++time;
 if(time==125)
   {
      time=0;
      ++sec;
	 if(sec==60)
	 {
	  sec=0;
	  min++;
	   if(min==60)
	   {
	    min=0;
		hour++;
		 if(hour==24)
		 {
		   hour=0;
		 }
	   }
	 }

   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -