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

📄 main.c

📁 电磁波产生控制原理
💻 C
字号:
#include <reg52.h>
#include <stdio.h>
#include "iic.h"
#include "ds18b20.h"

sbit logo=P1^0;			//单片机读取标志位
sbit onoff=P1^6;		//继电器控制开关位
sbit test_flag=P1^1;	//数据读取正确标志
sbit teat_flag=P1^2;	//温度写入正确标志
sbit scr_coil_on =P2^3;
sbit scr_coil_off=P2^2;
sbit scr_res_on =P2^5;
sbit scr_res_off=P2^4;
sbit big_r=P2^6;	 	//大电阻继电器控制
sbit min_r=P2^7;	 	//小电阻继电器控制

int k=0,ff=0,tt=0;		
int tmax,fmax;			
int max[6]={900,400,233,150,100,67};
						//频率设定标准表
unsigned char wd=0;		//温度值


//-----------------------
//********延时nms********
void delay(unsigned int n)
{
	  unsigned  char i;
	  while(n--)
	  {
	    for( i=1000;i>0;i-- );
	  } 
}
//-----------------------

//-----------------------
//********初始化*********
void initial(void)
{
      onoff=0;
	  big_r=0;
	  min_r=1;
	  test_flag=0;
	  teat_flag=0;
 	  scr_res_on=1;
	  scr_res_off=0;
	  scr_coil_on=1;
	  scr_coil_off=0;
	  IT0=1;
	  EA=1;
	  EX0=1;			//中断源INT0开启
}	
//-----------------------
//********初始化t0*********
void initial_temptimer0(unsigned char time)
{
	  int t;

	  TR0=0;
	  TMOD=0x11;		
	  //定治疗时间
	  t=(int)time;		//t/min
	  tmax=t*1000;		//t*1min

	  TH0=0x15;			//60ms
	  TL0=0x9F;
	  ET0=1;
	  TR0=1;	    	//定时器T0开启
}
//-----------------------
//-----------------------
//********初始化t1*********
void initial_timer1(unsigned char fre)
{
	  int f;

	  TR1=0;
	  TMOD=0x11;		
	  //定治疗频率
	  f=(int)fre;		//f/hz
	  fmax=max[f-1];	//f*1hz

	  TH1=0xFC;			//1ms
	  TL1=0x17;
	  ET1=1;
	  TR1=1;	    	//定时器T1开启
}
//-----------------------

//-----------------------
//********开始缓冲********
void charge(void) 
{
	  big_r=1;			//控制大电阻继电器闭合
	  delay(2000);		//电源通过大电阻充电
	  min_r=0;	   		//控制小电阻继电器闭合
	  delay(50);   		//大电阻,小电阻电路一起充电线圈关闭状态
	  scr_coil_on=1; 
	  scr_coil_off=0;
}
//-----------------------
//********开始工作********
void work(void)
{
	  scr_coil_on=0;	//控制输出交变电压
	  scr_coil_off=1;
	 // delay(100);  		//1hz
	  delay(20);
	  scr_coil_on=1;
	  scr_coil_off=0;
	  delay(80);
}
//-----------------------
//********停止工作********
discharge(void)
{
	  scr_coil_on=1;
	  scr_coil_off=0;
	  min_r=1;	   		//控制小电阻继电器开
      delay(600);
      big_r=0;	   		//控制大电阻继电器开
      scr_res_on=0;
	  scr_res_off=1;
	  delay(2000);
      scr_res_on=1;
	  scr_res_off=0;
      //stoptimerT0&&T1
	  TR0=0;
	  TR1=0;
	  ET1=0;

}
//-----------------------	  

//-----------------------
//********主程序*********
void main()
{ 
	  delay(200);
      initial();
	  while(1);	  

}
//-----------------------

//-----------------------
//********中断程序********
void int0_int(void) interrupt 0 
{ 
	  unsigned char start,stop,fre,time;

	  EX0=0;
	  onoff=1;			//控制继电器位常闭状态
	  logo=1;			//单片机读取busy
	  delay(5);			//读开始信号
	  start=IRcvStr(0xa0,0x00,0xa1);
	  delay(5);			//读停止信号
	  stop=IRcvStr(0xa0,0x00,0xa2);
	  delay(5);			//读频率设定
	  fre=IRcvStr(0xa0,0x00,0xa3);
	  delay(5);			//读时间设定
	  time=IRcvStr(0xa0,0x00,0xa4);
	  delay(5);
	  logo=0;			//单片机读取free
	  onoff=0;			//控制继电器位常开状态

	  if(start==0x55)
	  {
	  	if((fre==0)||(time==0))
			test_flag=1;
		else
		{
			test_flag=0;
			charge();  	//开始充放电
			initial_temptimer0(time);
	  		initial_timer1(fre);
		}
	   }
	  if(stop==0x04)
	  {
	    TR0=0;
	    TR1=0;
		discharge();
	  }
	  EX0=1; 
} 
//-----------------------
//-----------------------
//********Timer0中断程序********
void timer0_int(void) interrupt 1      
{ 
	  bit b0=0;

	  TR0=0;
	  TH0=0x15;
	  TL0=0x9F;
	  k++;tt++;
	  TR0=1;

	  if(tt==tmax)		//治疗时间到
	  {
	    discharge();
	  	tt=0;
	  }
	   else
	   {
	  if(k==500)	   	//30s时间到
	  {
	  	//EA=0;
	  	wd=ds18b20();
		//wd=30;
	  	onoff=1;
		logo=1;
	  	delay(5);		//读写温度
	  	b0=ISendStr(0xa0,0x00,0xa5,wd);
		delay(5);
	  	logo=0;
	  	onoff=0;
		//EA=1;

	  	if(b0==1)
	  	{
		  teat_flag=1;	
	  	}
		else
		  teat_flag=0;

	    k=0;
	  }
	  }
} 
//-----------------------
//-----------------------
//********Timer1中断程序********
void timer1_int(void) interrupt 3      
{ 
	  TR1=0;
	  TH1=0xFC;
	  TL1=0x17;
	  ff++;

	  if(ff==fmax)		//工作频率到
	  {
	    work();
	  	ff=0;
	  }

	  TR1=1;
} 
//-----------------------

⌨️ 快捷键说明

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