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

📄 controler.c

📁 AT89C2051为电动车充电器装加控制器
💻 C
字号:
#include <reg51.h>
#define LEDLen 3


sbit OUT0 = P1^0;
sbit OUT1 = P1^1;
sbit OUT2 = P1^2;
sbit OUT3 = P1^3;
sbit OUT4 = P1^4;
sbit OUT5 = P1^5;
sbit OUT6 = P1^6;
sbit OUT7 = P1^7;

int bdata Second;
sbit TURN0 = Second^8;
sbit TURN1 = Second^9;
sbit TURN2 = Second^10;

int bdata flag;

sbit I_test = flag^0;                   //电流测试标志  



unsigned char Sec,Time;

unsigned int w;

unsigned char LEDBuf[LEDLen];             //显示缓冲区
unsigned char Buf0[LEDLen];
unsigned char Buf1[LEDLen];

code unsigned char LEDMAP[] = {

      0x80,  0xb9,  0x24,  0x30,  0x19,  0x12,  0x02,  0xb8,  0x00,  0x10
};

void delay1() {
   unsigned int j;
	for (j=0;j<30000; j++){}
	}

     

void Delay(unsigned char CNT) {         //延时函数
  unsigned int i;        
  while (CNT-- !=0)
    for (i=100; i !=0; i--);
          

}


void DisplayLED()  {                     //显示函数
   unsigned char i;
    
      
   for (i = 0; i < LEDLen; i++) {
	
	 P3 = LEDBuf[i];
	 if (i == 0) {
	 OUT4 = 1;
	 OUT3 = 1;
	 OUT2 = 0;
    	 
    }
	 else if (i == 1) {
	 OUT4 = 1;
	 OUT3 = 0;
	 OUT2 = 1;
	 }
	 else {
	 OUT4 = 0;
	 OUT3 = 1;
	 OUT2 = 1;
	 }
                       
   Delay(1);
   
  }
}

             //中断函数
#define Tick     4000                      //4000x250us=1s
#define T250us   (256-230)                   //250us 时间常数(fosc11.0592
unsigned char Hour, Minute;

unsigned int C250us;                       //250us 计数单元



void T0Int() interrupt 1  {              //T0 中断服务函数
  C250us--;
      if (C250us == 0)  {
         C250us = Tick/8;                //250us 计数器为0,重置计数器


			Second++;                      //秒进位

      if (Time == 8){                      //点位处理
          OUT5 = TURN2;   
           
            }
        else  {
              OUT5 = TURN0;
         
}
           

          if (Second == 480) {                  
		     
         Second = 0;                        //秒清零


             Minute++;
             if (Minute == 60) {
                 Minute = 0;
                 Hour++;
                 if (Hour == Time){ 
                   
                    OUT5 = 1;
                    TURN0 = 1;
                    TR0 = 0;           
						 }
         }
       }
    }
}


void main()  {                                 //主函数
   


   Time   = 8;            //
   TMOD   = 0X02;         //设置T0工作方式与处置
   TH0    = T250us;
   TL0    = T250us;
   IE     = 0x82;          //开中断
   Hour   = 0;
   Minute = 0;
   Second = 0;
   C250us = Tick;
   TR0    = 1;              //启动定时器 0

   
   I_test = 0;             //启动程序

   
	P3 = 0x00; 
 if  (P3 == 0x00  ){            //启动检测电流
      
         OUT6 = 0;
                                               
        delay1();
		  OUT6 = 1;
        delay1();
		  if (P3 == 0x00){             //确认电流
        OUT6 = 0;
		  delay1();
		  OUT6 = 1;
          delay1();
     				  
   while (1)  {                  //循环函数
        
        LEDBuf[0] = LEDMAP[Hour%10];
        LEDBuf[1] = LEDMAP[Minute/10];
        LEDBuf[2] = LEDMAP[Minute%10]; 
       
        DisplayLED();
        if (Hour == Time){
                   OUT7 = 0;
                   TURN0 = 1;
                  OUT5 = 1;
                  }
       
		  if (Time == 8){                  //转浮冲的翻转函数
        P3 = 0x00;
		  if (P3 != 0x00){                 //检测电流是否反转
 		  Buf0[0]=LEDBuf[0];
		  Buf0[1]=LEDBuf[1];
		  Buf0[2]=LEDBuf[2];
		  Second=0x00;
		  Minute=0x00;
		  Hour=0x00;
        Time = 2;
        }
		  }
		else                                         //如果已经进入浮充
		    if (TURN0 == 1)                                 //翻看函数  
              
             if (OUT5 == 0){
				 
				 w=600;                                   //翻看时间
				 while (w){
                w--;
				 LEDBuf[0]=Buf0[0];
				 LEDBuf[1]=Buf0[1];
				 LEDBuf[2]=Buf0[2];
				 DisplayLED();
				 
				 }
             }

          
    }

}

}
  
}

       

⌨️ 快捷键说明

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