Altium Designer画的自动洗碗机原理图和PCB图如下:(51hei附件中可下载工程文件)
单片机源程序如下:
#include"STC15Wxx.h"
#define uint unsigned int
#define uchar unsigned char
void delay_ms(uint z)
{
uchar y=0;
for(;z>0;z--)
for(y=115;y>0;y--);
}
uint Flag_count=0;
uint Flag_Temp=0;
#include"DS18B20.h"
//#include"LCD1602.h"
sbit LED_FLAG=P1^0;
sbit jinshui=P1^1;//进水
sbit chushui=P1^2;//出水
sbit meng=P1^3;
sbit DJ=P1^4; //电机
sbit ZYB=P1^5;//增压泵
sbit JE=P1^6;//加热
sbit JEB=P1^7;//电源加热
sbit gao=P2^3;//水位高
sbit wu=P2^2; //水位低
sbit qidong=P3^2;
sbit tingzhi=P3^3;
bit FLAG_qidong=0,FLAG_tingzhi=0;
bit detecyion_Water()//检测水位
{
if(gao==0&&wu==1)//水位高
{
// P1=P1|0x40;//进水关
jinshui=0;
chushui=0;//出水关
return 0;
}
else //水位低
{
// P1=P1&0xfd;//进水开
jinshui=1;
chushui=0;//出水关
return 1;
}
}
bit detecyion_Temp() //检测温度
{
static uchar FLAG=0;
EA=0;
Write_Inst();
// delay_ms(1000);
Read_RAM();
EA=1;
// display_Temp();
if(Flag_Temp<=3200)//温度低于32°加热
{
// P1=P1|0xc0;
FLAG=1;
JE=1;
JEB=1;
return 1;
}
else if((FLAG==1&&Flag_Temp>=3300)||FLAG==0)//加热温度超过34°或大于32°
{
// P1=P1&0x3f;
FLAG=0;
JE=0;
JEB=0;
return 0;
}
delay_ms(1000);
/* if(FLAG=0&&Flag_Temp>3200)
{
JE=1;
JEB=1;
return 0;
}*/
}
void wash_dishes_open()//洗碗开2分钟
{
TR0=1;
while((!(Flag_count>300))&&(!FLAG_tingzhi))//一分钟
{
DJ=1;
ZYB=1;
}
TR0=0;
}
void wash_dishes_cue()//洗碗关
{
DJ=0;
ZYB=0;
Flag_count=0;
TH0=(65536-46080)/256;//50ms
TL0=(65536-46080)%256;
}
void drainage()//排水
{
uchar i;
while((!detecyion_Water())&&(!FLAG_tingzhi))chushui=1;//水排至低水位
for(i=0;i<5;i++)
{
if(FLAG_tingzhi)break;
if(detecyion_Water())//低水位
{
delay_ms(500);
chushui=1;
delay_ms(300);
}
else
{
while((!detecyion_Water())&&(!FLAG_tingzhi))chushui=1;//水排至低水位
}
}
}
void CPU_init()
{
Write_Inst();
delay_ms(1000);
P1=P1|0xff;
P2=P2|0xff;
IT0=1;//下降沿触发
IT1=1;
TMOD=0x01;
TH0=(65536-46080)/256;//50ms
TL0=(65536-46080)%256;
ET0=1;
TR0=0;
EX0=1;
EX1=1;
EA=1;
}
void main()
{
CPU_init();
// lcd_init();
while(FLAG_qidong&&(!FLAG_tingzhi))
{
LED_FLAG=0;
while(detecyion_Water()&&(!FLAG_tingzhi));//水位
while(detecyion_Temp()&&(!FLAG_tingzhi));//温度
wash_dishes_open();//洗碗开2分钟
wash_dishes_cue(); //洗碗关
drainage();//排水
LED_FLAG=1;
EA=0;
Write_Inst();
EA=1;
delay_ms(1000);
}
}
void T0_50ms() interrupt 1
{
TH0=(65536-46080)/256;//50ms
TL0=(65536-46080)%256;
Flag_count++;
}
void INT0_0() interrupt 0
{
FLAG_qidong=1;
FLAG_tingzhi=0;
}
void INT1_1() interrupt 2
{
FLAG_tingzhi=1;
FLAG_qidong=0;
}
全部资料51hei下载地址:
面板(共阴)-595.7z
(1.83 MB, 下载次数: 46)
一次循环.zip
(33.03 KB, 下载次数: 43)
|