搜索
bottom↓
回复: 15

太阳能充电控制器

[复制链接]

出0入0汤圆

发表于 2012-10-10 13:50:52 | 显示全部楼层 |阅读模式
太阳能充电控制器
原理图

第一层原理图

第二层原理图

第三层原理图
PCB版图

拼版图(PCB)

PCB打样
仿真图

        仿真图(proteus)
实物图

实物图
源程序
/*******************************************************************|
========================《太阳能充电控制器》========================|
使用芯片:ATMEGA8A
软件设计人:何涛
工程开始时间:2012.06.12
联系电话:13798974197(珠海)
QQ:562673469
====================================================================|
********************************************************************/

/****************************74HC164.C******************************/
#include "app.h"

void Show_164(unsigned char _ShowValue)  
{
                   unsigned char Count0;
                  for(Count0=0;Count0<=7;Count0++)
                     {          
                    
            if((_ShowValue&0x01)==0x01)
            PORTD=PORTD|0X01;       //1  DATA
                else  
            PORTD=PORTD&0XFE;       //0  DATA
            _ShowValue>>=1;   
                       
                        PORTD=PORTD&0XFD;       //CLK 0
                        //delay(1);
            PORTD=PORTD|0X02;       //CLK 1  
                        //delay(10);
          }
                    PORTD=PORTD|0X02;       //CLK 1  
}
/****************************74HC164.H******************************/
void Show_164(unsigned char _ShowValue);
/****************************AD.C***********************************/
#include "app.h"


/*ƬÄÚADC³õʼ»¯*/
void ADC_Init(INT8U channel)
{  /*¹¤×÷ÓÚµ¥´Îת»»Ä£Ê½ÏÂ*/
    switch(channel)//ÄÚ²¿AREFµçѹ2.56V  ADLARת»»½á¹ûÓÒ¶ÔÆë ÊäÈëͨµÀchannel
                {
        case 0:ADMUX=0xc0+0;break;
        case 1:ADMUX=0xc0+1;break;
        case 2:ADMUX=0xc0+2;break;
        case 3:ADMUX=0xc0+3;break;
        case 4:ADMUX=0xc0+4;break;
        case 5:ADMUX=0xc0+5;break;
        case 6:ADMUX=0xc0+6;break;
        case 7:ADMUX=0xc0+7;break;
                default:break;
                }
    ADCSRA=0x00;//Æô¶¯×ª»» µ¥´Îת»» 16•ÖƵ
}

INT16U ADC_Start(INT8U channel)
{
    INT8U Temp_L;
    INT8U Temp_H;
        INT16U AD_Data;
       
       
        switch(channel)
        {
        case 0:ADMUX=0xc0+0;break;
        case 1:ADMUX=0xc0+1;break;
        case 2:ADMUX=0xc0+2;break;
        case 3:ADMUX=0xc0+3;break;
        case 4:ADMUX=0xc0+4;break;
        case 5:ADMUX=0xc0+5;break;
        case 6:ADMUX=0xc0+6;break;
        case 7:ADMUX=0xc0+7;break;
        default:break;
        }
    ADCSRA |=0xC0;//Æô¶¯ADת»» µ¥´Îת»»
    Temp_L=ADCL;
    Temp_H=ADCH;
        AD_Data=Temp_H*256+Temp_L;       
       
        ADCSRA  =0x80;//¹Ø±ÕADת»» µ¥´Îת»»
       
        switch(channel)
        {
        case 0:ADMUX=0xc0+0;break;
        case 1:ADMUX=0xc0+1;break;
        case 2:ADMUX=0xc0+2;break;
        case 3:ADMUX=0xc0+3;break;
        case 4:ADMUX=0xc0+4;break;
        case 5:ADMUX=0xc0+5;break;
        case 6:ADMUX=0xc0+6;break;
        case 7:ADMUX=0xc0+7;break;
        default:break;
        }
    ADCSRA |=0xC0;//Æô¶¯ADת»» µ¥´Îת»»
    Temp_L=ADCL;
    Temp_H=ADCH;       
    AD_Data=Temp_H*256+Temp_L;
       
        ADCSRA  =0x80;//¹Ø±ÕADת»» µ¥´Îת»»
       
        return(AD_Data);
}

void AD_select(INT8U channel)
{
switch(channel)
  {
   case 0:        LED_NUM2[0]=ADC_Start(6)/4;break;//UXX.X ³Ë10±¶ ±ãÓÚÏÔʾ
   case 1:        LED_NUM2[1]=ADC_Start(7)/4;break;//AXX.X
   case 2:        LED_NUM2[2]=ADC_Start(0)/4;break;//bXX.X
   case 3:        LED_NUM2[3]=ADC_Start(1)/4;break;//CXX.X
  }
}       
/****************************AD.H***********************************/
void ADC_Init(unsigned char channel);
unsigned int ADC_Start(unsigned char channel);
void AD_select(unsigned char channel);
/***************************APP.H***********************************/
#include <iom8v.h>
#include <macros.h>
#include <eeprom.h>
//#include "Kernel.h"
//#include "task.h"
#include "misc.h"
#include "initial.h"
#include "74HC164.h"
#include "delay.h"
#include "LED.h"
#include "AD.h"
#include "EEPROM.h"
/***************************DELAY.H*********************************/
#include "app.h"

unsigned int Min = 0;//•ÖÖÓ
unsigned int Sec = 0;//Ãë

void delay(unsigned int a)
{
         unsigned int i,j;
         for(i=0;i<a;i++)
                 for(j=0;j<500;j++);
}

void SolarCount(void)//¼ÆËã¸÷λÏÔʾֵ
{
Sec++;
if (Sec>59)
{
   Sec = 0;
   Min ++;
}
}
/***************************DELAY.H*********************************/
extern unsigned int Min;//•ÖÖÓ
extern unsigned int Sec;//Ãë
extern unsigned int Count,flag_count;//¼ÆÊý

void delay(unsigned int a);
void SolarCount(void);
/***************************EEPROM.H********************************/
#include "app.h"

void EEPROM_Init(void)
{
INT8U i=0;
flag_0 =EEPROMread(1);


flag_3 =EEPROMread(4);
flag_4 =EEPROMread(5);
flag_5 =EEPROMread(6);
flag_6 =EEPROMread(7);
flag_7 =EEPROMread(8);

flag_9 =EEPROMread(10);
flag_10=EEPROMread(11);
}

void EEPROM_Start(void)
{
  EEPROMwrite(1,flag_0);
  
  
  EEPROMwrite(4,flag_3);
  EEPROMwrite(5,flag_4);
  EEPROMwrite(6,flag_5);
  EEPROMwrite(7,flag_6);
  EEPROMwrite(8,flag_7);//125
  
  EEPROMwrite(10,flag_9);
  EEPROMwrite(11,flag_10);
}

void EEPROM_Recover(void)
{
  EEPROMwrite(1,6);
  
  
  EEPROMwrite(4,50);
  EEPROMwrite(5,108);
  EEPROMwrite(6,144);
  EEPROMwrite(7,0);
  EEPROMwrite(8,125);
  
  EEPROMwrite(10,0);
  EEPROMwrite(11,0);
}
/***************************EEPROM.C********************************/
void EEPROM_Init(void);

void EEPROM_Start(void);

void EEPROM_Recover(void);
/***************************INITIAL.C*******************************/
#include "app.h"

INT16U Time1=3;
void Gpio_Init(void);
void Timer1_Init(void);
void Timer2_Init(void);
void Interrupt_Init(void);
void Battery_Init(void);

void Hardware_Init(void)
{
        ADC_Init(6);
        EEPROM_Init();
    Gpio_Init();
        Timer1_Init();
    Timer2_Init();
    Interrupt_Init();
        Battery_Init();
}

void Battery_Init(void)
{
INT16U i=4,j=5;
while(Time1)//6sµ¹¼Æʱ
{
  if(flag_count==1)
  {Time1--;flag_count=0;}
  Display4(Time1);
}
while(i--)
{
  while(j--)
  Display1(windows_1,120);  
  PORTD=0XFF;
  delay(1000);
  j=8;
// delay(100);
}
}
  
//***************************************************************
void Gpio_Init(void)
{
        DDRB   = 0xDF;   //PB5×öΪ°´¼ü
        PORTB  = 0x20;
        DDRC   = 0x00;
        PORTC  = 0xFF;  
        DDRD   = 0xFF;  
        PORTD  = 0xFF;  
}

//TIMER1 initialize - prescale:1024
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Hz
// actual value:  1.000Hz (0.0%)
void Timer1_Init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFF; //setup
TCNT1L = 0xB2;
OCR1AH = 0x00;
OCR1AL = 0x4E;
OCR1BH = 0x00;
OCR1BL = 0x4E;
ICR1H  = 0x00;
ICR1L  = 0x4E;
TCCR1A = 0x00;
TCCR1B = 0x05; //start Timer
TIMSK |= 0x10;//Êä³ö±È½ÏAÆ¥ÅäÖжÏʹÄÜ
}

void Timer2_Init(void)
{
TCCR2 = 0x00; //stop
ASSR  = 0x00; //set async mode
TCCR2 = 0x0F; //start
TCNT2 = 0x00; //setup
OCR2  = 0x4D;
TIMSK|= 0x80;
}

void Interrupt_Init(void)
{
        SREG |= 0x80;   //Enable Global Interrupt
}
/***************************INITIAL.H*******************************/
void Hardware_Init(void);
/***************************INTERPUTL.C*****************************/


#include "app.h"

unsigned int Count=0,flag_count=0;//¼ÆÊý

#pragma interrupt_handler Timer1_Interrupt:7
void Timer1_Interrupt(void)
{
        //Clear Timer2 OCIF Flag
        TIFR  |= 0x10;
    TCNT2 = 0x00;
       
}

#pragma interrupt_handler Timer2_Interrupt:4
void Timer2_Interrupt(void)
{
        TIFR  |= 0x80;//Clear Timer2 OCIF Flag
    TCNT2 = 0x00;
        Count++;
       
        if(Count>100)
        {
         Count=0;
         flag_count=1;//µ¹¼Æʱ1S±êÖ¾
         SolarCount();//¼Æʱ
        }
        if(flag_timestart!=1)//¼Æʱ±ê־λÇåÁã
        Min=0;//ÓôËÖÖ•½Ê½ÒÖÖƼÆʱ
}
/***************************LCD.C***********************************/
#include "app.h"
INT8U LED_NUM[]={0x28,/*0*/
                                0xEB,/*1*/
                                0x32,/*2*/
                            0xA2,/*3*/
                         0xE1,/*4*/
                         0xA4,/*5*/
                         0x24,/*6*/
                         0xEA,/*7*/
                         0x20,/*8*/
                         0xA0,/*9*/
                                 0x60,/*A*/
                                 0x25,/*b*/
                         0x3C,/*C*/
                         0x74,/*F*/
                         0x29,/*U*/
                                 0xFF,/*È«ºÚ 15*/
                                };
//INT8U LED_NUM1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x0E,0x41}; //¹²Ñô¼«+СÊýµã
INT8U LED_NUM1[]={
                          0x08,/*0*/
                          0xCB,/*1*/
                          0x12,/*2*/
                          0x82,/*3*/
                          0xC1,/*4*/
                          0x84,/*5*/
                          0x04,/*6*/
                          0xCA,/*7*/
                          0x00,/*8*/
                          0x80,/*9*/
                          0x40,/*A*/
                          0x05,/*B*/
                          0x1C,/*C*/
                          0x54,/*F*/
                          0x09,/*U*/
                                  0xFF,/*È«ºÚ 15*/
                                 };

INT8U LED_NUM2[]={0,1,2,3};
INT16U Fixed_Time[]={1,5,10,60,120,180,240,300,360,420,480,540,600,660,720};//14
void Display2(INT8U value);
void Display3(INT8U value);


void Display1(INT8U windows,INT8U value)
{
         INT8U s=value;
         if(windows==0)  //½çÃæ1 UXX.XÐîµç³Øµçѹ
         {
          Show_164(LED_NUM[14]);
          PORTD=0XD8;
          delay(10);
         }
         if(windows==1)  //½çÃæ2 AXX.X B•Êä³öµçÁ÷
         {
          Show_164(LED_NUM[10]);
          PORTD=0XD8;
          delay(10);
         }
         if(windows==2)  //½çÃæ3 bXX.X A•Êä³öµçÁ÷
         {
          Show_164(LED_NUM[11]);
          PORTD=0XD8;
          delay(10);
         }
         if(windows==3)  //½çÃæ4 CXX.X ³äµçµçÁ÷
         {
          
          Show_164(LED_NUM[12]);
          PORTD=0XD8;
          delay(10);
         }           
         
         Show_164(LED_NUM[s/100]);
         PORTD=0X78;
         delay(10);
         
         
         Show_164(LED_NUM1[s%100/10]);
         PORTD=0XB8;
         delay(10);          
         
         
         Show_164(LED_NUM[s%10]);
         PORTD=0XE8;
         delay(10);                  
}

void Display2(INT8U value)
{
         INT8U s=value;
         
         Show_164(LED_NUM1[13]); //F.XXX
         PORTD=0XD8;
         delay(10);
         
         
         Show_164(LED_NUM[0]);
         PORTD=0X78;
         delay(10);
         
         
         Show_164(LED_NUM[s/10]);
         PORTD=0XB8;
         delay(10);          
         
         
         Show_164(LED_NUM[s%10]);
         PORTD=0XE8;
         delay(10);                  
}

void Display3(INT8U value)
{
         INT8U s=value;
         
         Show_164(LED_NUM[s/100]);
         PORTD=0XD8;
         delay(10);
         
         
         Show_164(LED_NUM1[s%100/10]);
         PORTD=0X78;
         delay(10);          
         
         
         Show_164(LED_NUM[s%10]);
         PORTD=0XB8;
         delay(10);       
         
         
         Show_164(LED_NUM[14]); //XX.XU
         PORTD=0XE8;
         delay(10);                   
}

void Display4(INT16U value)// ÏÔʾXXXX
{
         INT16U t=value;
                
         
         Show_164(LED_NUM[t/1000]);
         PORTD=0XD8;
         delay(10);
                  
         
         Show_164(LED_NUM[t%1000/100]);
         PORTD=0X78;
         delay(10);
         
         
         Show_164(LED_NUM[t%100/10]);
         PORTD=0XB8;
         delay(10);          
         
         
         Show_164(LED_NUM[t%10]);
         PORTD=0XE8;
         delay(10);                  
}

void Display5(INT16U value)
{
         INT16U t=value; //720min
                
         
         Show_164(LED_NUM[t/100]);//7
         PORTD=0XD8;
         delay(10);
                  
         
         Show_164(LED_NUM[t%100/10]);//2
         PORTD=0X78;
         delay(10);
         
         
         Show_164(LED_NUM[t%10]);//0
         PORTD=0XB8;
         delay(10);          
         
         
         if(Count>50)
         Show_164(0XDF);//ÏÔʾСÊýµã
         else if(Count<51)
         Show_164(0XFF);//¹Ø±ÕСÊýµã
         PORTD=0XE8;
         delay(10);                  
}

void Display(void)
{
         if(!(Enter1|Enter2|Enter3)) //ËĽçÃæÇл»
         Display1(windows_1,LED_NUM2[windows_1]);
         
         if(Enter1)
         Display2(windows_2);//F.XXX
         
         if(Enter2)
         {
          switch(windows_2)
          {
          case 0:Display4(Fixed_Time[flag_0]);break;//Êä³öA¶¨Ê±Ê±¼ä
          case 1:break;//A•µçÁ÷±£»¤Öµ
          case 2:break;//B•µçÁ÷±£»¤Öµ
          case 3:Display4(flag_3);break;//¹â¿Øµã
          case 4:Display3(flag_4);break;//Ǖѹ±£»¤Öµ  //XX.XU
          case 5:Display3(flag_5);break;//¹ýѹ±£»§Öµ
          case 6:Display4(flag_6);break;//¹â¿ØÊÖ¶¯Çл»
          case 7:Display3(flag_7);break;//¹ý•Åµçѹ•µ»ØÖµ       
          case 8:break;//µçѹÊÖ¶¯ÐÞÕý²¹³¥Öµ       
          case 9:Display4(flag_9);break;//ÊýÂëÏÔʾ¿ª¹Ø       
          case 10:Display4(flag_10);break;//USB_5VÊä³ö       
          case 11:Display4(flag_11);break;//»Ö¸´³ö³§ÉèÖà      
                 
          default:break;
          }
         }
         else return;
}   
/***************************LCD.H***********************************/void Display1(unsigned char windows,unsigned char value);

void Display4(unsigned int value);

void Display5(unsigned int value);

void Display(void);         
/***************************MAIN.H**********************************/
#include "app.h"
unsigned int i=0;
void main(void)
{
        Hardware_Init();
       
        while(1)
        {
         AD_select(i);
         if(i++>4)i=0;               
         Key_Manage();
         if(flag_timestart!=1)//•Ç¶¨Ê±Ä£Ê½
         Display();
         else if(flag_timestart==1)//¶¨Ê±Ä£Ê½
         Display5(Fixed_Time[flag_0]-Min);             
         judgement();
         performance();
         LED_Control();

        }

}
/***************************MISC.C**********************************/
#include "app.h"

//******************************************************************************
/*****²ÎÊý±äÁ¿*******/
INT8S flag_0=6;//10.8
INT8U flag_4=108;//10.8
INT8U flag_5=144;//14.4
INT8U flag_7=125;//12.5
INT8U flag_3=20;
INT8S flag_6=0;
INT8U flag_9=0;
INT8U flag_10=0;
INT8U flag_11=0;
INT8U flag_timestart=0;//¿ªÆô¼Æʱ±ê־λ ¡°1 ¡±ÓÐЧ
INT8U flag_light=0; //¹â¿Ø±ê־λ
INT8U flag_wait=0; //´ý»ú
/**********************/
INT8U Enter1=0;
INT8U Enter2=0;
INT8U Enter3=0;
/**********************/
INT8U windows_1=0;//ËÄÖÖ½çÃæÇл»
INT8S windows_2=0;//²ÎÊýºÅ½çÃ棨11ÖÖ£©
/**********************/
INT8U flag_undervoltage=0;//Ǖѹ±ê־λ
INT8U flag_overvoltage =0;//¹ý³äµç±ê־λ
/**********************/
INT16U Time=4;//µ¹¼Æʱ
/**********************/
INT8U OUT_A=0,OUT_B=0,CHA=0,CHB=0;
//local function(s) declaration
INT16U swGet_Key1(void);
INT16U swGet_Key2(void);
INT16U swGet_Key3(void);
INT16U swGet_Key4(void);

//******************************************************************************
INT16U swGet_Key1(void)
{
        static INT16U wKeyStatus = 1;
        if(wKeyStatus == 1)
        {
                if((PINB & (1 << Key_R)) == 0) //Key Pressed
                {
                        wKeyStatus = 0;
                }
        }
        else if(wKeyStatus == 0)
        {
                if(PINB & (1 << Key_R))       //Key Released
                {
                        wKeyStatus = 1;
                        return(true);
                }
        }
        return(false);
}

//******************************************************************************
INT16U swGet_Key2(void)
{
        static INT16U wKeyStatus = 1;
        if(wKeyStatus == 1)
        {
                if((PINC & (1 << Key_S)) == 0) //Key Pressed
                {
                        wKeyStatus = 0;
                }
        }
        else if(wKeyStatus == 0)
        {
                if(PINC & (1 << Key_S))       //Key Released
                {
                        wKeyStatus = 1;
                        return(true);
                }
        }
        return(false);
}

//******************************************************************************
INT16U swGet_Key3(void)
{
        static INT16U wKeyStatus = 1;
        if(wKeyStatus == 1)
        {
                if((PINC & (1 << Key_A)) == 0) //Key Pressed
                {
                        wKeyStatus = 0;
                }
        }
        else if(wKeyStatus == 0)
        {
                if(PINC & (1 << Key_A))       //Key Released
                {
                        wKeyStatus = 1;
                        return(true);
                }
        }
        return(false);
}

//******************************************************************************
INT16U swGet_Key4(void)
{
        static INT16U wKeyStatus = 1;
        if(wKeyStatus == 1)
        {
                if((PINC & (1 << Key_B)) == 0) //Key Pressed
                {
                        wKeyStatus = 0;
                }
        }
        else if(wKeyStatus == 0)
        {
                if(PINC & (1 << Key_B))       //Key Released
                {
                        wKeyStatus = 1;
                        return(true);
                }
        }
        return(false);
}

//******************************************************************************
INT8U Key_Detection(void)
{
        if(swGet_Key1() == true)
        {
                return 3;
        }
       
        if(swGet_Key2() == true)
        {
                return 4;
        }
       
        if(swGet_Key3() == true)
        {
                return 2;
        }
       
        if(swGet_Key4() == true)
        {
                return 1;
        }
        return 0;
}

//******************************************************************************
void Key_Manage(void)
{
switch(Key_Detection())
{
    case S:
                   if(!(Enter1|Enter2|Enter3)){Enter1=1;break;}//½øÈë¶þ²ã½çÃæ
                   if(Enter1==1){Enter2=1;Enter1=0;break;}//½øÈëÈý²ã½çÃæ
                   if(Enter2==1){Enter3=1;Enter2=0;}//È•ÈÏ£¬±£´æ
                   if(Enter3==1)
                   {
                           while(Time)
                        {
                         if(flag_count==1)
                         {Time--;flag_count=0;}
                         Display4(Time);
                        }
                        if(flag_11==0)
                        EEPROM_Start(); //±£´æÉèÖÃ
                        else if(flag_11==1)
                        {
                         EEPROM_Recover();//»Ö¸´³ö³§ÉèÖÃ
                         flag_11=0;//ÇåÁã±ê־λ
                        }
                        Time=4;Enter1=1;Enter3=0;break;}                  
                   else break;                                        
        case R:
                  {
                   if(!(Enter1|Enter2|Enter3)){windows_1++;if(windows_1==4)windows_1=0;}//Ò»²ã½çÃ棨ËÄÖÖÏÔʾ»­ÃæÇл»£©
                   if(Enter1==1){Enter1=0;}//½øÈëÒ»²ã½çÃ棨Í˳ö¶þ²ã½çÃ棩
                   if(Enter2==1){Enter2=0;Enter1=1;}
                   if(Enter3==1){Enter3=0;Enter2=1;}
                  }break;        //½øÈë¶þ²ã½çÃ棨Í˳öÈý²ã½çÃ棩  
    case A:
                  {
                   if(!(Enter1|Enter2|Enter3)){OUT_A=!OUT_A;break;}
                   if(Enter1==1){windows_2++;if(windows_2>11)windows_2=0;break;}
                   if(Enter2==1)
                                                   switch(windows_2)
                                                {
                                                          case 0:{flag_0+=1;if(flag_0>14)flag_0=0;break;}//Êä³öA¶¨Ê±Ê±¼ä
                                                          case 1:break;//A•µçÁ÷±£»¤Öµ
                                                          case 2:break;//B•µçÁ÷±£»¤Öµ
                                                          case 3:{flag_3+=1;if(flag_3>100)flag_3=1;break;}//¹â¿Øµã
                                                          case 4:{flag_4+=1;if(flag_4>113)flag_4=106;break;}//Ǖѹ±£»¤Öµ
                                                          case 5:{flag_5+=1;if(flag_5>164)flag_5=136;break;}//¹ýѹ±£»§Öµ
                                                          case 6:{flag_6+=1;if(flag_6>2)flag_6=0;break;}//¹â¿ØÊÖ¶¯Çл»
                                                          case 7:{flag_7+=1;if(flag_7>130)flag_7=120;break;}//¹ý•Åµçѹ•µ»ØÖµ
                                                          case 8:break;//µçѹÊÖ¶¯ÐÞÕý²¹³¥Öµ
                                                          case 9:{flag_9=!flag_9;break;}//ÊýÂëÏÔʾ¿ª¹Ø
                                                          case 10:{flag_10=!flag_10;break;}//USB_5VÊä³ö
                                                          case 11:{flag_11=!flag_11;break;}//»Ö¸´³ö³§ÉèÖÃ
                                                          default:break;
                                                 }
                        }break;                         
                               
                                     
    case B:
                  {
                   if(!(Enter1|Enter2|Enter3)){OUT_B=!OUT_B;break;}
                   if(Enter1==1){windows_2--;if(windows_2<0)windows_2=11;break;}
                   if(Enter2==1)
                                                   switch(windows_2)
                                                {
                                                          case 0:{flag_0-=1;if(flag_0<0)flag_0=14;break;}//Êä³öA¶¨Ê±Ê±¼ä
                                                          case 1:break;//A•µçÁ÷±£»¤Öµ
                                                          case 2:break;//B•µçÁ÷±£»¤Öµ
                                                          case 3:{flag_3--;if(flag_3<0)flag_3=99;break;}//¹â¿Øµã
                                                          case 4:{flag_4-=1;if(flag_4<106)flag_4=112;break;}//Ǖѹ±£»¤Öµ
                                                          case 5:{flag_5-=1;if(flag_5<136)flag_5=164;break;}//¹ýѹ±£»§Öµ
                                                          case 6:{flag_6-=1;if(flag_6<0)flag_6=2;break;}//¹â¿ØÊÖ¶¯Çл»
                                                          case 7:{flag_7-=1;if(flag_7<120)flag_7=130;break;}//¹ý•Åµçѹ•µ»ØÖµ
                                                          case 8:break;//µçѹÊÖ¶¯ÐÞÕý²¹³¥Öµ
                                                          case 9:{flag_9=!flag_9;break;}//ÊýÂëÏÔʾ¿ª¹Ø
                                                          case 10:{flag_10=!flag_10;break;}//USB_5VÊä³ö       
                                                          case 11:{flag_11=!flag_11;break;}//»Ö¸´³ö³§ÉèÖà                                                                                                                                                   
                                                          default:break;
                                                 }
                    }break;
                                                                                                                                                                 
        default : break;       
        }
}       

void judgement(void)
{

/*********µÚÒ»¼¶ÅжÏ********/
//¹â¿Ø
if(flag_3>=LED_NUM2[3]&&flag_undervoltage==0&&flag_6==1)//¹â¿Ø
{
  flag_light=1;
}
if(flag_3<LED_NUM2[3]||flag_undervoltage==1||flag_6!=1)//¹Ø±Õ¹â¿Ø
{                                                                                                                          
  if(flag_light==1)                                                                                                                          
  {
   flag_light=2;
  }
}
       
          
//¶¨Ê±
if(flag_6==2&&flag_undervoltage==0&&OUT_A==1)
{
  flag_timestart=1;
}
if(flag_6!=2||flag_undervoltage==1||OUT_A==0||Min>=Fixed_Time[flag_0])
{
  if(flag_timestart==1)
  {
   flag_timestart=2;
  }
}

//Ǖѹ
if(flag_4>LED_NUM2[0])  //Ǖѹ
{
  flag_undervoltage=1;
}
if(flag_7<=LED_NUM2[0]&&flag_undervoltage==1)//Ǖѹ»Ø¸´
{
  flag_undervoltage=0;
}
//¹ýѹ
if(flag_5<LED_NUM2[0])  //¹ýѹ
{
  flag_overvoltage=1;
}
if(flag_5>=LED_NUM2[0])  //¹ýѹ»Ø¸´
{
  flag_overvoltage=0;
}
//´ý»ú
if(flag_undervoltage==0&&flag_overvoltage==0&&OUT_A==0&&OUT_B==0)
{
  flag_wait=1;
}
else
{
  flag_wait=0;
}
}

void performance(void)
{
//OUT_A OUT_B Ç¿ÖÆÐÔ
if(flag_undervoltage==1)
{
  PORTB=PORTB&0XFD;       
  PORTB=PORTB&0XF7;
}
if(flag_light==2)
{
  OUT_A=0;
  flag_light=0;
}
if(flag_timestart==2)
{
  OUT_A=0;
  flag_timestart=0;
}
if(flag_timestart==1||flag_light==1)
{
  OUT_A=1;
  //OUT_B=0;
}
//CHA CHB Ç¿ÖÆÐÔ
if(flag_overvoltage==1)
{
  CHA=0;
  CHB=0;
}
if(flag_overvoltage==0)
{
  CHA=1;
  CHB=1;
}
if(flag_undervoltage==0)
{
  if(OUT_A)PORTB=PORTB|0X02;//A•Êä³ö
    else   PORTB=PORTB&0XFD;       
  if(OUT_B)PORTB=PORTB|0X08;//B•Êä³ö
    else   PORTB=PORTB&0XF7;
  if(CHA)  PORTB=PORTB&0X7F;//¿ªCHA
    else   PORTB=PORTB|0X80;//¹ØCHA
  if(CHB)  PORTB=PORTB&0XFE;//¿ªCHB       
    else   PORTB=PORTB|0X01;//¹ØCHB                 
}   
}                                                         
void LED_Control(void)
{
        if(flag_undervoltage==1)
         
         Show_164(0X7F);
         PORTD=0XF0;
         delay(10);
         PORTD=0XF8;                        
}
/***************************MISC.H**********************************/
#define INT8U  unsigned char
#define INT8S    signed char
#define INT16U unsigned int
#define INT16S   signed int
#define INT32U unsigned long
#define INT32S   signed long

#define true         1
#define false         0

#define Key_R 5
#define Key_S 4
#define Key_A 3
#define Key_B 5  
/**********************/
#define R 1
#define S 2
#define A 3
#define B 4
/**********************/
extern INT8U OUT_A,OUT_B;
/*****²ÎÊý±äÁ¿*******/
extern INT8S flag_0;
extern INT8U flag_4;
extern INT8U flag_5;
extern INT8U flag_7;
extern INT8U flag_3;
extern INT8S flag_6;
extern INT8U flag_9;
extern INT8U flag_10;
extern INT8U flag_11;
extern INT8U flag_timestart;//
extern INT8U flag_light;
/**********************/
extern INT8U Enter1;
extern INT8U Enter2;
extern INT8U Enter3;
/**********************/
extern INT8U windows_1;//ËÄÖÖ½çÃæÇл»
extern INT8S windows_2;//²ÎÊýºÅ½çÃ棨11ÖÖ£©
/**********************/
extern INT8U LED_NUM2[4];//ËĽçÃæ²ÎÊý
extern INT16U Fixed_Time[15];//¶¨Ê±Ê±¼ä²ÎÕÕ±í

INT8U Key_Detection(void);
void Key_Manage(void);
void judgement(void);
void performance(void);
void LED_Control(void);
//====================END OFF ILE=============================//

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-10-10 14:11:43 | 显示全部楼层
木有原理图

出0入0汤圆

发表于 2012-10-11 11:13:13 | 显示全部楼层
程序里面的大段注释都是乱码

出0入0汤圆

 楼主| 发表于 2012-10-11 19:50:20 | 显示全部楼层
太阳能充电控制器项目

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-11 19:53:16 | 显示全部楼层
imlion 发表于 2012-10-10 14:11
木有原理图

已经上传了复件

出0入0汤圆

发表于 2012-12-4 09:04:10 | 显示全部楼层
谢谢!楼主!!

出0入0汤圆

发表于 2012-12-4 09:25:01 | 显示全部楼层
PDF文件里面基本没有标示,全丢了

出0入0汤圆

发表于 2013-3-28 09:57:59 | 显示全部楼层
看看,谢谢楼主

出0入0汤圆

发表于 2013-4-1 19:44:45 | 显示全部楼层
没有图,代码看的不是很懂!!!!!

出0入0汤圆

发表于 2013-5-11 12:38:49 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2014-1-19 20:21:31 | 显示全部楼层
,来学些一下太阳能控制器

出0入0汤圆

发表于 2014-1-19 20:57:03 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2014-1-19 21:05:05 | 显示全部楼层
发一张收人卡;

出0入0汤圆

发表于 2014-1-20 19:21:51 | 显示全部楼层
不错,谢谢开源共享

出0入0汤圆

发表于 2014-1-22 11:17:43 | 显示全部楼层
感谢楼主开源

出0入0汤圆

发表于 2014-1-22 16:32:17 | 显示全部楼层
What compiler it is?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表