用单片机设计的豆浆机控制电路的程序
//********************************************************************
//豆浆机控制器,工作过程:加热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的公众号,每天推送相关知识,希望能对你的学习有所帮助!