📄 main.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 + -