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

📄 mega128_232.c

📁 自己开发的项目
💻 C
📖 第 1 页 / 共 2 页
字号:
             {
			 PORTB|=(1<<PORTB3);    ////正转控制
			 delay_ms(0x20);
			 PORTB&=~(1<<PORTB4);   ///升压
			 delay_ms(0x20);          ///修改成1V每秒
			 PORTB|=(1<<PORTB4);      ///升压停止
			 delay_ms(0x80);          ///转动间隔  修改成1V每秒
	         }
		 if(k>288)       ///比285.0V高
             {
			 PORTB&=~(1<<PORTB3);    ////反转控制
			 delay_ms(0x20);
		     PORTB&=~(1<<PORTB4);   ///降压
			 delay_ms(0x50);          ///向下微调
			 PORTB|=(1<<PORTB4);      ///降压停止
			 delay_ms(0x60);          ///转动间隔  修改成5V每秒
	         }                                        
		 if(k>282)       ///比281.0V高
             {
			 PORTB&=~(1<<PORTB3);    ////反转控制
			 delay_ms(0x20);
		     PORTB&=~(1<<PORTB4);   ///降压
			 delay_ms(0x20);          ///向下微调
			 PORTB|=(1<<PORTB4);      ///降压停止
			 delay_ms(0x50);          ///转动间隔  修改成1V每秒
	         }                                        
		 if((k<=282)&(k>=278))
		     {break; }
	    delay_ms(0x8f);  
	    tongxun_dianya();   ////通讯读电压值并处理显示
		k=wen_ding[0];     //取数据
	  }
  while(PIND&(1<<PIND4))	////等待10分钟计时满
	 {  
		 if(k<278)       ///大于275.0V小于279.0V
             {
			 PORTB|=(1<<PORTB3);    ////正转控制
			 delay_ms(0x20);
			 PORTB&=~(1<<PORTB4);   ///升压
			 delay_ms(0x20);          ///修改成1V每秒
			 PORTB|=(1<<PORTB4);      ///升压停止
			 delay_ms(0x80);          ///转动间隔  修改成1V每秒
	         }                                        
		 if(k>282)       ///比281.0V高
             {
			 PORTB&=~(1<<PORTB3);    ////反转控制
			 delay_ms(0x20);
		     PORTB&=~(1<<PORTB4);   ///降压
			 delay_ms(0x20);          ///向下微调
			 PORTB|=(1<<PORTB4);      ///降压停止
			 delay_ms(0x50);          ///转动间隔  修改成1V每秒
	         }
	    delay_ms(0xfff);  
	    tongxun_dianya();   ////通讯读电压值并处理显示
		k=wen_ding[0];     //取数据
	  }
  
  PORTB|=(1<<PORTB3);    ////正转控制关闭正反转输出(释放)
  PORTB|=(1<<PORTB4);   ///关闭调压输出(释放)
  PORTE|=(1<<PORTE7);    ////峰鸣声音提示
  delay_ms(0x50);        ////峰鸣声音鸣响时间
  while(PIND&(1<<PIND7)) ///等待测功率钮按下
       { xianshi(); }  //刷新显示
  while(!(PIND&(1<<PIND7)))  ///等待测功率钮释放
       { xianshi(); }  //刷新显示
  delay_ms(0xff);
  PORTB=0xff;//关一次B口 
}
///////////200V调压后450V稳压//3分钟短时过电压
void erbai_tiaoya(void)
{
  unsigned int k;
  PORTB=0xff;//关一次B口
  PORTE&=~(1<<PORTE7);  ///关指示灯
  delay_ms(0x50);    ///等待电路稳定
  tongxun_dianya();   ////通讯读电压值并处理显示
  k=wen_ding[0];     //取数据
  while((k>203)|(k<197))
       {
		if(k<190)        ////和195.0V比较
             {
			 PORTB|=(1<<PORTB3);    ////正转控制
			 delay_ms(0x20);
			 PORTB&=~(1<<PORTB4);   ///升压
			 delay_ms(0x50);          ///转动时间  修改成5V每秒
			 PORTB|=(1<<PORTB4);      ///升压停止
			 delay_ms(0x50);          ///转动间隔  修改成5V每秒
	         }
		if(k<197)       ///小于198.1V
             {
			 PORTB|=(1<<PORTB3);    ////正转控制
			 delay_ms(0x20);
			 PORTB&=~(1<<PORTB4);   ///升压
			 delay_ms(0x30);          ///修改成1V每秒
			 PORTB|=(1<<PORTB4);      ///升压停止
			 delay_ms(0x60);          ///转动间隔  修改成1V每秒
	         }
		 if(k>205)       ///比204.0V高
             {
			 PORTB&=~(1<<PORTB3);    ////反转控制
			 delay_ms(0x20);
		     PORTB&=~(1<<PORTB4);   ///降压
			 delay_ms(0x50);          ///向下微调
			 PORTB|=(1<<PORTB4);      ///降压停止
			 delay_ms(0x50);          ///转动间隔  修改成5V每秒
	         }                                        
		 if(k>203)       ///比201.9V高
             {
			 PORTB&=~(1<<PORTB3);    ////反转控制
			 delay_ms(0x20);
		     PORTB&=~(1<<PORTB4);   ///降压
			 delay_ms(0x30);          ///向下微调
			 PORTB|=(1<<PORTB4);      ///降压停止
			 delay_ms(0x50);          ///转动间隔  修改成1V每秒
	         } 
		 delay_ms(0xff);  
         tongxun_dianya();   ////通讯读电压值并处理显示
		 k=wen_ding[0];     //取数据
		 }
  delay_ms(0xff);
  PORTB&=~(1<<PORTB2);  ////KM2接通主电流回路
  PORTB|=(1<<PORTB3);   ////KM5切换到正转
  PORTB&=~(1<<PORTB6);  ////KM2接通主电流回路并启动3分钟计时
  while(k<410)    ////小于400V 则快速升压
             {
			 PORTB|=(1<<PORTB3);    ////正转控制
			 delay_ms(0x20);
			 PORTB&=~(1<<PORTB4);   ///升压
			 delay_ms(0x120);          ///转动时间  连续快速
	         PORTB|=(1<<PORTB4);      ///升压停止
			 delay_ms(0x60);       ///转动间隔
			 tongxun_dianya();   ////通讯读电压值并处理显示
			 k=wen_ding[0];     //取数据
			 }
  //delay_ms(0x0f);
  //PORTB|=(1<<PORTB4);      ///升压停止
  delay_ms(0x5f);
  while(1)  ////判琴键并等待3分钟计时满同时稳压
       { 
		if(k<447)       ///小于448.0V
             {
			 PORTB|=(1<<PORTB3);    ////正转控制
			 delay_ms(0x20);
			 PORTB&=~(1<<PORTB4);   ///升压
			 delay_ms(0x40);          ///修改成1V每秒
			 PORTB|=(1<<PORTB4);      ///升压停止
			 delay_ms(0x50);          ///转动间隔  修改成1V每秒
	         }                               
		 if(k>452)       ///比452.0V高
             {
			 PORTB&=~(1<<PORTB3);    ////反转控制
			 delay_ms(0x20);
		     PORTB&=~(1<<PORTB4);   ///降压
			 delay_ms(0x50);          ///向下微调
			 PORTB|=(1<<PORTB4);      ///降压停止
			 delay_ms(0x70);          ///转动间隔  修改成1V每秒
	         }   
		 delay_ms(0x2ff);             
	     tongxun_dianya();   ////通讯读电压值并处理显示
		 k=wen_ding[0];     //取数据   
		 delay_ms(0x0f);
		 if((k>=447)&(k<=452))
		     { break;}
		 if(!(PIND&(1<<PIND1)))
		     { break;}
		}
  delay_ms(0xff);
  while(PIND&(1<<PIND5))  ////判琴键并等待3分钟计时满同时稳压
     { xianshi(); }  //刷新显示
  PORTB=0xff;//关一次B口
  PORTE|=(1<<PORTE7);  ////峰鸣声音提示
  delay_ms(0xa0);   ////峰鸣声音延时
  while(k>280)       ///比280.0V高    电压回调280V
             {
			 PORTB&=~(1<<PORTB3);    ////反转控制
			 delay_ms(0x20);
		     PORTB&=~(1<<PORTB4);   ///降压
			 delay_ms(0x4ff);          ///向下调  较快
			 PORTB|=(1<<PORTB4);      ///降压停止
			 delay_ms(0x90);          ///转动间隔
	         tongxun_dianya();   ////通讯读电压值并处理显示
			 k=wen_ding[0];     //取数据
			 }
  delay_ms(0x7ff);         
  tongxun_dianya();   ////通讯读电压值并处理显示
  k=wen_ding[0];     //取数据
}

//////MAIN主程序/////
void main(void)
{
 unsigned char n;
 PORTB=0xff;    //B口设置为高
 DDRB=0xff;     //B口设置为输出
 PORTD=0xff;    //D口设置为高
 DDRD=0x00;     //D口设置为输入
 DDRE=0xff;     //E口设置为输出
 PORTE=0xff;    //E口设置为高
 DDRG=0x00;     //G口设置为输入
 PORTG=0xff;    //G口设置为高
 EIMSK|=(1<<INT0);   
 EICRA&=~(1<<ISC01);
 EICRA&=~(1<<ISC00);
 PORTA=0xff;    //A口设置为高
 DDRA=0xff;     //A口设置为输出
 PORTA=0xff;    //A口设置为高
 PORTC=0xff;    //C口设置为高
 DDRC=0xff;     //C口设置为输出
 PORTC=0xff;    //C口设置为高
 PORTE=0xff;    //A口设置为高
 DDRE=0xff;     //A口设置为输出
 CLI();         //CPU禁止中断
 adc_init();    //AD初始化并启动一次转换
 while(ADIF==0)
 {NOP();}
 bao_cun=0;   //电阻初测保存值清0
 ADCSRA|=(1<<ADIF);//清中断
 delay_ms(0x2);
 PORTA=0xc0;///////数码管显示0
 PORTC=0x0f;//////4位数码管显示0
 PORTE&=~(1<<PORTE7);  ///// 先关一次E口的指示灯输出
 while(1)         /////循环
     {       while(PIND&(1<<PIND6))  ////等待启动
	                 {  xianshi(); }  //刷新显示
		     PORTB=0xff;  ///// 先关一次B口的输出
		     PORTE&=~(1<<PORTE7);  ///// 先关一次E口的指示灯输出
		     switch(PING)
	             {
	               case 0x1a:      ///(11010)电阻测量程序
	                 dian_zu();
	                 break;
	               case 0x19:       //11001
	                 dianzu_bijiao();  ////(11001)电阻比较程序   //恢复时间
		             break;	
	               case 0x13:      ////10011功率0V调压280稳压
	                 xiaxian_tiaoya();
	                 break;         
	               case 0x0b:        ////01011过压200V快速调压450稳压
		    	     erbai_tiaoya();
			         break;
				   case 0x03:        ///00011
				       tongxun_dianya();  ////读功率表电压值
				    	 break;
				
				   default:
		              {PORTB=0xff;  ///// 先关一次B口的输出
			           //PORTE=0xff;  ///// 先关一次E口的输出  
		               PORTA=0x7f;            /////BIT/x点小数点
		               PORTC=0xbf;            /////BITx点小数点
			           PORTC=0xfb;            /////BITx点小数点
		               delay_ms(0xa0);
					   } 
		               break;
		           }
		    
      }
}

 /* case 0x01:        ///00001
				       tongxun_diannao2();  ////电脑通讯
				    	 break;*/
/* void tongxun_diannao2(void)
{
   unsigned char i;
			PORTA=BCD[10];  ///个位数"A"
		     PORTC=0xef;              ///BIT/x
			 PORTA=BCD[10]; ///十位数"A"
		     PORTC=0xcf;             ///BIT/x两位
			DDRD=0xff;
			PORTD=0xff;
			UBRR1H=0;
			UBRR1L=71;       ///  波特率设置
			UCSR1C=0x06;
			UCSR1B=(1<<RXEN0)|(1<<TXEN0);//允许发送和接收
		
		     PORTC=0xef;              ///BIT/x
			 PORTA=BCD[9]; ///十位数"9"
		     PORTC=0xcf;             ///BIT/x两位
			 for(i=0;i<7;i++)
			   {  while(!(UCSR1A& (1<<UDRE1))); //置usart数据寄存器空,系统复位时,udre位置1,表示数据发送已准备好
	              UDR1=dianya_mingling[i];//数据寄存器
			    }
	  	     for(i=0;i<2;i++)
                  {    PORTA=0xa4;   ///显示“2”
		              PORTC=0x00;         ///千位数     ///BIT/5
		              delay_ms(0x01);
		           }
			for(i=0;i<10;i++)
			    {
			     while(!(UCSR1A& (1<<RXC1)));//将第七位RXC置1,表示USART接受完成
			     dianya_hui[i]=UDR1;
			     } 
			 
  }   */
/*  void tongxun_diannao(void)
{
   unsigned char i;
			PORTA=BCD[10];  ///个位数"A"
		     PORTC=0xef;              ///BIT/x
			 PORTA=BCD[10]; ///十位数"A"
		     PORTC=0xcf;             ///BIT/x两位
			DDRE=0xff;
			PORTE=0xff;
			UBRR0H=0;
			UBRR0L=51;       ///  波特率设置
			UCSR0C=0x06;
			UCSR0B=(1<<RXEN0)|(1<<TXEN0);//允许发送和接收
			for(i=0;i<10;i++)
			  {
			  while(!(UCSR0A& (1<<RXC0)));//将第七位RXC置1,表示USART接受完成
			  dianya_hui[i]=UDR0;
			  }
		     PORTC=0xef;              ///BIT/x
			 PORTA=BCD[9]; ///十位数"9"
		     PORTC=0xcf;             ///BIT/x两位
			 for(i=0;i<7;i++)
			   {  while(!(UCSR0A& (1<<UDRE0))); //置usart数据寄存器空,系统复位时,udre位置1,表示数据发送已准备好
	              UDR0=dianya_mingling[i];//数据寄存器
			    }
	  	     delay_ms(0x05);
  }   */
  
  //    while(!(UCSR0A& (1<<UDRE0))); //置usart数据寄存器空,系统复位时,udre位置1,表示数据发送已准备好
	     //     UDR0=0x49;//数据寄存器
			//}
			//RXB0=0xfa; 
			//}
 /*    网上下载资料
//   #define LED_SET    PORTD |= (1 << PD5)           //位置高
//#define LED_CLR    PORTD &= ~(1 << PD5)          //位置低
//#define LED_COM    PORTD ^= (1 << PD5)           //位取反
//#define LED_R      PIND & (1 << PD5)      //位读取
//通过上面的定义就可以在程序中直接操作I/O了。   */
//按键INT0中断//启动AD转换
///*#pragma interrupt_handler int0_isr:2
//void int0_isr(void)
//{
// ADMUX=(1<<REFS0)|(adc_mux&0x0f)|(1<<REFS1);//选择内部AVCC为基准
// ADMUX =0xc0;
// ADCSRA|=(1<<ADSC);//启动AD转换
//}*/
//ADC完成中断 // ADC结果转换成电压值4位十进制数存入数组
/*#pragma interrupt_handler adc_isr:22  
void adc_isr(void)
{  unsigned char f,m=3;
 unsigned long v;
 v=ADC&0x3ff;
 v=v*Vref/0x3ff;
 for(f=4;f>0;f--)
  {     led_buff[m]=v%0x0a;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
        m--;
        v=v/0x0a;     }
 ADMUX=(1<<REFS0)|(adc_mux&0x0f)|(1<<REFS1);// //内部2.643基准,//选择内部AVCC为基准
 ADCSRA|=(1<<ADSC);//启动AD转换                     
}*/

⌨️ 快捷键说明

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