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

📄 text1.c

📁 电压监控保护程序,多位数码显示,保护电压,和检测
💻 C
字号:
#include <reg51st.H>
#include <stdio.h>
#define uchar unsigned char
#define uint  unsigned int

sbit  DP       =P1^0;//
sbit  COM1     =P1^1;
sbit  COM2     =P1^2;
sbit  COM3     =P1^3;
sbit  ACC_Detect  =P1^4;//ACC  Detect
sbit  INPUT    =P1^5;//voltage detect
sbit  SW       =P1^6;
sbit  LED_COM  =P1^7;								
/********************************************/
//引脚P3的定义
sbit RedLED1    =P3^0;
sbit RedLED2    =P3^1;//
sbit GreenLED1  =P3^2;
sbit GreenLED2  =P3^3;//
sbit BlueLED1   =P3^4;// 
sbit BlueLED2   =P3^5;//

uchar x,y,z,t,led,LedFlag,Delay;
uint count;
uchar code dig[]={0x3f,0x06,0x9B,0x8F,0xA6,0xAD,0xBD,0x47,0xBF,0xAF};

void mDelay(uchar c)//延时调用
{
  uchar i;
  for(i=0;i<c;i++);
}

void NmDelay(uchar c)
{
  while(c--)
    {
      mDelay(255);
     }
}

void Timer_Init()
{
	  TMOD=0x01;
	  TCON=0x00;
	  ET0=1;
//	  ET1=1;
	  EA=1;
	 // TR1=1;
}

void series_init()
{
   SCON=0x50;//0xD8; //0xD0/M=3,REN=1;  D0
   PCON=0x00;
   TI=1;	
}


void Send_Char(uchar c)
{
   TI=0;
   SBUF=c;
   while(TI==0);
   TI=0;
}

/*void Time1(void) interrupt 3
{ 
   count++;
   if(count>62)TR1=0;
   else
   TR1=1;

}*/



void Num_Disp(uchar a,uchar b,uchar c)
{
   x=a;
   y=b;
   z=c;
   TR0=1;//启动定时器
}

void Display(uint a)
{
  uchar i;
  i=((a-102)*61/70);
  x=a/100;
  y=i/10;
  z=(i)%10;
  Num_Disp(x,y,z);
}

void Time0(void) interrupt 1
{
   TR0=0;
   count++;
   LED_COM=0;
   P3=dig[x];
   DP=0;
   COM1=1;
   NmDelay(8);
   COM1=0;
   P3=dig[y];
   DP=1;
   COM2=1;
   NmDelay(8);
   COM2=0;
   P3=dig[z];
   DP=0;
   COM3=1;
   NmDelay(8);
   COM3=0;
   P3=led;
   LED_COM=1;
   TL0=0xFF;
   TH0=0xE0;   
   TR0=1;		
}

void WatchDog_Init()
{
  WDT_CONTR=0x37;
}

void WatchDog_Clear()
{
  WDT_CONTR=0x37;
}

void Sys_Init()
{
  P1M0=0x30;//设置p1.4、p1.5为输入高阻
  P1M1=0x00;
  P1&=0x00;
  Timer_Init();
  ADC_CONTR=0xE5;
  mDelay(100);
  ADC_CONTR|=0x08;
  LedFlag=0;
}

uchar Ad_Detect()
{
  uchar i=0;
  ADC_CONTR&=0xEF;
  ADC_CONTR|=0x08;
  while(!(ADC_CONTR&0x10))
    { 
	  i++;
	  if(i>5)return 0;
	  mDelay(10);
	 }
  return ADC_DATA;
}

void Led_Change(uchar n)
{
 uchar a,b;
 switch(n)
 {
  case 1:
          led>>=1;
          if(led==0)led=0x20;
		  break;
  case 2: 
		  led<<=1;
		  if(led>0x20)led=0x01;
		  break;
  case 3: 		  
	      a=led<<(8-n);
   	      b=led>>1;
	      led=a|b; 
		  break;
  case 4: 
	      a=led<<(8-n);
   	      b=led>>2;
	      led=a|b;
		  break;
  case 5: 
          a=(led&0x07)>>1;
   	      b=(led&0x38)<<1;
	      led=a|b;
		  if(led>0x40||led<1)
		    led=0x0c;
		  break;
  case 6: 
          if(led>0x40||led<1||led==0x0C)
		  {
			led=0x21;
			break;
		  }
		  else
		  {		  
            a=(led&0x07)<<1;
   	        b=(led&0x38)>>1;
	        led=a|b;		  
		    break;
		  }
  case 7: 		  
		  led=~led;
		  break;		    
  default:  break;
  
  }

}
   
void main(void)
{
   uchar Data,temp;
   Sys_Init();
   WatchDog_Init();
	Send_Char('O');
	Send_Char('K');
	Send_Char('!');
   while(1)				
	  {
        while(1)
	     {
	       WatchDog_Clear();
		   mDelay(10);
		   if(Ad_Detect()!=0) Data=Ad_Detect();
		   if(Data>0x65&&Data<0xA5&&ACC_Detect==1)
		     {
			   if(count>3876)
			    {
				  if((Data<(temp+3))&&(Data>(temp-3))) temp=Data;   
				  else break;//continue;				  
			     }
			   else	 break;			   

			  }
		    NmDelay(255);
			Send_Char(0x88);
	      }

	     count=0;
		 LedFlag=0;
	     SW=1;
		 while(1)
		 {
	       WatchDog_Clear();
		   if(Ad_Detect()!=0) temp=Ad_Detect();
		   if(temp<0x65||temp>0xA5||ACC_Detect==0||count>3876)
		     {
			   TR0=0;
			   SW=0;
			   P3=0;
			   LED_COM=0;
			   break;
			  }  			   
		   else if((temp>(Data+3))||(temp<(Data-3)))
			 {
			   TR0=0;
			   count=0;
			   TR0=1;
			 }
			 Data=temp;
	        if(temp>0x64&&temp<0x6E)
			{
			  if(LedFlag!=1)
			   { 
			     LedFlag=1;
				 led=0x20;
				 Delay=60;
				}
			  else
			    Led_Change(1);
			}
			else if(temp>0x6D&&temp<0x77)
			{
			  if(LedFlag!=2)
			   { 
			     LedFlag=2;
				 led=0x01;
				 Delay=60;				 				 
				}
			  else
			    Led_Change(2);
			}
			else if(temp>0x76&&temp<0x80)
			{
			  if(LedFlag!=3)
			   { 
			     LedFlag=3;
				 led=0x09;
				 Delay=130;
				}
			  else
			    Led_Change(3);
			}
			else if(temp>0x7F&&temp<0x89)
			{
			  if(LedFlag!=4)
			   { 
			     LedFlag=4;
				 led=0x09;
				 Delay=130;
				}
			  else
			    Led_Change(4);
			}
			else if(temp>0x88&&temp<0x92) 
			{
			  if(LedFlag!=5)
			   { 
			     LedFlag=5;
				 led=0x0C;
				 Delay=100;
				}
			  else
			    Led_Change(5);
			}
			else if(temp>0x91&&temp<0x9B) 
			{
			  if(LedFlag!=6)
			   { 
			     LedFlag=6;
				 led=0x21;
				 Delay=150;
				}
			  else
			    Led_Change(6);
			}
			else 
			{
			  if(LedFlag!=7)
			   { 
			     LedFlag=7;
				 led=0x55;
				 Delay=190;
				}
			  else
			    Led_Change(7);
			}
			P3=led;
			LED_COM=1;
            NmDelay(Delay);
		    Display(temp);
			//Send_Char(0x88);
	      }
    	} 
}

⌨️ 快捷键说明

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