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)
2019-5-18 04:02 上傳
點擊文件名下載附件
一次循環.zip
(33.03 KB, 下載次數: 43)
2019-5-17 18:24 上傳
點擊文件名下載附件
|