
用單片機設計的豆漿機控制電路的程序
//********************************************************************
//豆漿機控制器,工作過程:加熱5分鐘,打漿4次,(17秒打、19秒停),繼續加熱15分鐘。
//在8位單片機P89LPC901上測試通過
//輸入:液位
//輸出:電機、加熱器、指示燈、蜂鳴器
//編寫日期:2008.10.04
//更新日期:2008.10.05
//********************************************************************
#include //單片機頭文件
unsigned char data MOTS; //狀態,
unsigned char data HETS; //狀態
unsigned long data Num1; //計數1
unsigned int data Num2; //計數2
sbit LED=P0^4; //發光二極管
sbit BUZ=P0^5; //蜂鳴器
sbit MOT=P3^0; //攪拌機
sbit HET=P3^1; //加熱器
sbit HIG=P1^5; //高位
sbit LOW=P1^2; //低位
//--------------------------------------------------------------------
//io_init:初始化IO子程序
//--------------------------------------------------------------------
void io_init(void)
{
P0M1=0x00; //P0推挽
P0M2=0x30;
P1M1=0xFF; //P1僅為輸入
P1M2=0x00;
P3M1=0x00; //P3推挽
P3M2=0x03;
}
//-------------------------------------------------------------------
//TIMER_init:初始化定時器
//-------------------------------------------------------------------
void TIMER_init(void)
{
TMOD=0x11; //定時器0和1配置為模式1
TAMOD=0x00;
// ET0=1; //允許定時器0中斷
TH1=0x6F; //10ms,根據波特率和單片機計算出
TL1=0xFE;
ET1=1; //允許定時器1中斷
// TR1=1; //打開定時器1
}
//------------------------------------------------------------------
//main:主函數
//------------------------------------------------------------------
void main(void)
{
MOT=0;
HET=0;
MOTS=0;
HETS=0;
BUZ=1;
P1=0xFF;
io_init(); //端口初始化
TIMER_init();
EA=1;
while(LOW==1); //有水檢測,防止干燒
LED=0;
if(HIG)
{
HETS=1; //水位不超,開始工作,LED閃
TR1=1;
}
while(1) //循環檢測
{
if(LOW) //水燒干,停止工作,LED常亮
{
HETS=0;
MOTS=0;
LED=0;
TR1=0;
BUZ=0;
}
if(MOTS==1) MOT=1; //到打漿時間,電機工作
else MOT=0;
if(HETS==1 && HIG==1) HET=1; //加熱時間,沒有溢出就加熱,有溢出停
else HET=0;
}
}
//-------------------------------------------------------------------
//Timer1Int:定時中斷子程序,用于顯示輸出及按鍵延時計時,1ms
//-------------------------------------------------------------------
void Timer1Int(void) interrupt 3
{
TH1=0x6F; //10ms,根據波特率和單片機計算出
TL1=0xFE;
Num1++; //超時計數
Num2++; //超時計數
if(Num2>50) //閃爍,工作指示
{
LED=!LED;
Num2=0;
}
if((Num1>30000 && Num133600 && Num137200 && Num140800 && Num131800 && Num135400 && Num139000 && Num130100 && Num133700 && Num137300 && Num140900 && Num1
if(Num1>90000)
{
LED=0; //時間到15分鐘,全部停止
HETS=0;
TR1=0;
BUZ=0;
}
}


為了方便大家更好的學習,您還可以關注暢學電子和EDA的公眾號,每天推送相關知識,希望能對你的學習有所幫助!

