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

📄 adc_db_main.c

📁 PIC测试辐射强度代码
💻 C
📖 第 1 页 / 共 2 页
字号:
			}	
			
		case 4://KEY down
			 //TMR0IE=1;
			if(keybit==1)
			{ back_led_time=0;
				 back_led=0;	//ON
				//TMR2ON=1;	CCPR1L=0x55; 	
				keybit=0;

				if(savenum > 0 && savenum <10)
						savenum--;	
				else 
					 	savenum=0;							
			}		
		break;		
		default:
		break;
	
	}	
}
//---------------------------------------
//名称: 初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216  
//-----------------------------------------
void init(void)
{
  	asm("CLRWDT");  
  	ADCON1=0X06;
  	OPTION=0x83;
  	TRISA=0B00111111;
  	TRISB=0B00000000;
  	TRISC=0B00000000;
   	PORTA=0;
  	PORTB=0x06;
  	PORTC=0x2d;	
  	RBIE=0;  
}
//---------------------------------------
//名称: AD初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216  
//-----------------------------------------
void ADC_init(void)
{
	ADCS0=0;
	ADCS1=0;	//AD转换时钟选择位=FOSC/32			
	PCFG0=1;
	PCFG1=1;
	PCFG2=0;	//A0A1A3为AD		
	ADIE=0;	
}
//---------------------------------------
//名称: AD转换函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216  
//-----------------------------------------
unsigned char adc_read(unsigned char channel)
	{// ADC_init();
	ADCS0=0;
	ADCS1=0;	//AD转换时钟选择位=FOSC/32			
	PCFG0=1;
	PCFG1=1;
	PCFG2=0;	//A0A1A3为AD		
	ADIE=0;	
		
	ADCON0 = (channel << 3) + 0x81;		// enable ADC, FOSC/32 osc.
	asm("CLRWDT");
	asm("NOP");
	asm("NOP");
	asm("NOP");
	asm("NOP");
	ADGO = 1;
	while(ADGO)
		continue;		//wait for conversion complete
	return ADRES;
}

//-----------------------------------------
//名称: AD-电压变换函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216  
//-----------------------------------------
void dianya_zhuanhuan(void)
{
	uint16 V;

asm("CLRWDT"); 
  		V=(int)((double)ADC_valmax*267/25.5);//电压值 放大100
	  

	if(V<1680)// ---
		{	
			//fhao=0;
			ValDB=(int)((1680-V)/0.19); // db=(v-1.68)/0.0193			
			ValDB=ValDB|0x8000;
  	  //calc_DBtoMW(ValDB);
	  }	   
  else//++++++
		{
 	   ValDB=(int)((V-1680)/0.19);  
	   //calc_DBtoMW(ValDB);
    } 

   
}

//*---------------------------------------
//名称: AD-电压变换函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216

//-----------------------------------------
void LCD_show(	unsigned char pagenum , int show_dbbuf,long show_mwbuf)
{ int disbufdb=0; 
	uint8 i=0;  
	asm("CLRWDT");
	

	  if(pagenum) //DS
	  	{
	  	 LCD_write_char(0,0,7,1); LCD_write_char(1,0,2,1); 
	  	 LCD_write_shu(15,0,savenum,1);	
	  	 
	  	}
	  else  // TS    
	  	{ 
	     LCD_write_char(0,0,3,1); LCD_write_char(1,0,2,1); 
	  	 LCD_write_shu(15,0,savenum,1);	
	    } 
	    
	    
	     
	  switch(pagenum)
	  {
	  case 0:	//PAGE1
	  	     //asm("CLRWDT"); 
	  	    

     case 1:	
     	    asm("CLRWDT"); 
     	    
     	    if(show_dbbuf ==0xffff)
     	    	{
     	    		for(i=4;i<=8;i++)
     	    			 LCD_write_char(i,2,4,1); // "----- db"
//     	    		LCD_write_char(10,2,1,1);   //d
//					    LCD_write_char(11,2,0,1);   //b  	
					    
     	    	  for(i=4;i<=10;i++)
     	    			LCD_write_char(i,4,4,1);  //"---------"
     	    	
     	    	}
     	    else
     	    {	
			    //Noise	db 				   
		      if((show_dbbuf&0x8000)!=0)//	
					  { 
					  	LCD_write_char(4,2,4,1); //显示“-”
						}   //-	
						else  
			      { 
			      	LCD_write_char(4,2,5,1); //显示“ ”
		        } //      				        
					disbufdb=show_dbbuf&0x7fff;			
//					LCD_write_shu(5,2,(disbufdb/100)%10,1);   //x
//					LCD_write_shu(6,2,(disbufdb%100)/10,1);   //x     
////					LCD_write_char(7,2,6,1);   //.
//					LCD_write_shu(7,2,disbufdb%10,1);   //x	
//					LCD_write_char(10,2,1,1);   //d
//					LCD_write_char(11,2,0,1);   //b   
					LCD_write_shu(5,2,(disbufdb/1000),1);   //x
					LCD_write_shu(6,2,(disbufdb%1000)/100,1);   //x     
					LCD_write_shu(7,2,((disbufdb%1000)%100)/10,1);   //x
					LCD_write_shu(8,2,((disbufdb%1000)%100)%10,1);   //x		
					  
			    //Noise	mw
			    asm("CLRWDT"); 
			    LCD_write_char(4,4,4,1);  //-	
			    LCD_write_char(5,4,4,1);  //-	
				  LCD_write_char(6,4,4,1);  //-	
			    LCD_write_char(7,4,4,1);  //-	
			    LCD_write_char(8,4,4,1);  //-	
			    LCD_write_char(9,4,4,1);  //-			    
			    LCD_write_char(10,4,4,1);  //-	
			    LCD_write_char(11,4,4,1);  //-		
				    	    
//			    LCD_write_shu(4,4,(uint8)(show_mwbuf/100000000),1);  //-	
//			    LCD_write_shu(5,4,(uint8)(show_mwbuf/10000000)%10,1);//-	
//					LCD_write_shu(6,4,(uint8)(show_mwbuf/1000000)%10,1); //x
//					LCD_write_shu(7,4,(uint8)(show_mwbuf/100000)%10,1);  //x     
//					LCD_write_shu(8,4,(uint8)(show_mwbuf/10000)%10,1);   //.
//					LCD_write_shu(9,4,(uint8)(show_mwbuf/1000)%10,1);    //x	
//					LCD_write_shu(10,4,(uint8)(show_mwbuf/100)%10,1);     //v
//					LCD_write_shu(11,4,(uint8)(show_mwbuf/10)%10,1);      //v    	
//			    LCD_write_shu(12,4,(uint8)(show_mwbuf%10),1);         //v  
			  }
			    break;
			    
    default:
		      break;
    
    
    }
}
//---------------------------------------
//名称: t0初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216  
//-----------------------------------------
void init_timer0(void)
{
	T0CS=0;      //TMR0工作于
	PSA=0;       //TMR0分频器 	
  PS2=1; 
  PS1=1;
  PS0=1; 
  TMR0IF=0;    
  TMR0IE=1;
  TMR0=255;     
  GIE=1;   	
}

//---------------------------------------
//名称: 中断处理函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216  
//-----------------------------------------
void interrupt ISR(void)
{	//(256-初值)*分频系数*4/12M
  	if(TMR0IF==1)           //256us
  	{
  		TMR0IF=0; 
  		TMR0=255;   		
  		GIE=0; 
  		showflash_time++;
  		
  ADCS0=0;
	ADCS1=0;	//AD转换时钟选择位=FOSC/32			
	PCFG0=1;
	PCFG1=1;
	PCFG2=0;	//A0A1A3为AD		
	ADIE=0;	
	ADCON0 = (2 << 3) + 0x81;		// enable ADC, FOSC/32 osc.
	asm("NOP");
	asm("NOP");
	asm("NOP");
	asm("NOP");
	ADGO = 1;
	while(ADGO)
		continue;		//wait for conversion complete
	//return ADRES;
//
  		if(ADRES>ADC_valmax)
  			{	
  				ADC_valmax=ADRES;
  		  }
  		
  		
  		
  GIE=1;  
  		
  	}
	
}
//---------------------------------------
//名称: CCP初始化函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216  
//-----------------------------------------
void CCP_init(void)
{	
	CCPR1L=0x00;
	CCP1CON=0x3c;	
	PR2=0xff;              //频率15.625KHZ
	T2CKPS1=0;	T2CKPS0=1;           //前分频为1:1

	TRISC2=0;	         //将RC2设置为输出
	
	TMR2ON=0;	         //启动TIMER2
	//pwmbuf=0;
}
//---------------------------------------
//名称: 主函数
//作者:cby
//网站:宁波单片机开发网
//网址:www.nbdpj.com
//邮箱:nbdpj@nbdpj.com
//日期:20081216  
//-----------------------------------------
void main(void)
{   uint8 timetest=0,beeptime_fig=0;//
	  uint8 i=0;  
  	init(); 
    init_timer0();
  	CCP_init();    
  	//ADC_init();
  	LCD_init(); 
  	LCD_clear();
  	back_led=0;	//ON

  	while(1)
  	{	
  		 //TMR0IE=0;
    	asm("CLRWDT"); 
    	keypro();   //按键扫描   
     	               	      	
    	if(showpage==0)//测试页
    	{ 

    	 //-----ad转换间隔---------------------------------	    		
           	if(showflash_time>5000)  //	if(timetest>20)
    		    { 
    		    		//LCD_clear(); 
    		    	dian_fig^=1;
    		    	if(dian_fig)
	    		     {
	    		    		for(i=0;i<3;i++)
	    		    		{							 
	    		    			LCD_write_char(2+i,0,6,1);   //.
	    		    		}
	    		   	 }							
							else
								{
			   		    	for(i=0;i<3;i++)
		    		    	{							 
		    		    		LCD_write_char(2+i,0,5,1);   //.
		    		    	}	
								}
    		    	dianya_zhuanhuan();  //ad转换处理  
//   		      	LCD_show(showpage,ValDB,ValMW);                //显示刷新      		     	
      		    ADC_valmax=0;
             	showflash_time=0;//	    	timetest=0;//
    	      }
    //	  else
    //	    	timetest++;
    	 //------报警 --------------------------------
    	 if((ValDB&0x7fff)<=6000 )//报警    	        
    	        	 {  	 
    	        	 	      	        	 	
    	        	 	  
    	        	 	 if((ValDB&0x7fff)<=2000)	
   	 	       	 	 	   				{
    	        	 	 	   		       	 	 if(beeptime_fig>2)
    	        	 	    										{ 
    	        	 	    											beeptime_fig=0;
    	        	 	    											TMR2ON^=1;
    	        	 	    											led_ds^=1;	
    	        	 	    											CCPR1L=0x55; 
    	        	 	    										}
    	        	 	    								else
    	        	 	    									beeptime_fig++;
    	        	 	 	   			}	  
    	        	 	 	   else if((ValDB&0x7fff)>2000 && (ValDB&0x7fff)<=4000   )
    	        	 	 	   				{
    	        	 	 	   		       	 	 if(beeptime_fig>4)
    	        	 	    										{ 
    	        	 	    											beeptime_fig=0;
    	        	 	    											TMR2ON^=1;
    	        	 	    											led_ds^=1;		
    	        	 	    											CCPR1L=0x55; 
    	        	 	    										}
    	        	 	    								else
    	        	 	    									beeptime_fig++;
    	        	 	 	   				}	    	 	 	  	

    	        	 	 	       	else 
    	        	 	 	       		{
    	        	 	 	       		  if(beeptime_fig>6)
    	        	 	    										{ 
    	        	 	    											beeptime_fig=0;
    	        	 	    											TMR2ON^=1;
    	        	 	    											led_ds^=1;		
    	        	 	    											CCPR1L=0x55; 
    	        	 	    										}
    	        	 	    								else
    	        	 	    									beeptime_fig++;
    	        	 	    				 }
    	        	 	
    	        	 }
	    	        else
	    	        {
	    	        	led_ds=0;  //关
	    	          TMR2ON=0;	 //PWM
	    	        }
	    	      	LCD_show(showpage,ValDB,ValMW);                //显示刷新  
//    		    	ADC_valmax=0;

    	}    	
    	else         //回显页
    	{  led_ds=0;  //关 
    		 CCPR1L=0xff;
    		 TMR2ON=0;		
    		 if(ValDB_Save[savenum]==0xffff)
    		    LCD_show(1,0xffff,0xffff);
    		 else
    		  	LCD_show(1,ValDB_Save[savenum],0);  //显示刷新  	
    	}	
    	
     //-------背光灯-------------------------------
  	 	if(back_led_time>200)
    	{  	

    		back_led=1;	//OFF
    	}	
    	else
    		back_led_time++;
  	 //---------------------------------------------  	
    	  
  	}
}

⌨️ 快捷键说明

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