《豆浆机程序》由会员分享,可在线阅读,更多相关《豆浆机程序(14页珍藏版)》请在金锄头文库上搜索。
1、豆浆机程序豆浆机程序/*芯片类型: STC89C52总线频率: 12MHz*/#include “reg52.h“/IO 口重定义-sbit led1 = P10; /,作为控制 led1 用 干豆sbit led2 = P11; /,作为控制 led2 用 湿豆sbit led3 = P12; /,作为控制 led3 用 米糊sbit led4 = P13; /,作为控制 led4 用 开机/sbit sw1 = P15; /,作为按键 1 用 米糊sbit sw2 = P16; /,作为按键 2 用 湿豆sbit sw3 = P17; /,作为按键 3 用 干豆/sbit buzzer=
2、P20; /,作为蜂铃用/sbit k1 = P21; /,作为继电器开关 1 用 选择加热打豆sbit k2 = P22; /,作为继电器开关 2 用 总开关sbit k3 = P23; /,作为继电器开关 3 用 功率控制/sbit s1 = P36; /,作为电极 1 用 溢出sbit s2 = P37; /,作为电极 2 用 干烧/数据类型宏定义-#define uchar unsigned char /变量定义-/时间变量uchar to_2ms; /2ms 统计变量uchar to_20ms; /20ms 统计变量uchar to_200ms; /200ms 统计变量uchar t
3、o_1s; /2s 统计变量uchar to_1m; /1m 统计变量uchar to_1h; /1h 统计变量/bank0 或者其他 bank 的变量-uchar beep_time; /响铃时间uchar beep_num; /响铃次数uchar key_num; /按键号uchar trig; /按键触发,即有键按下 uchar key_jisu; /按键定时器计数 2msX510msuchar key_flg; /按键扫描定时器标记uchar on; /开机标记uchar flg_1s; /1 秒标记uchar move; /打浆步骤uchar hrat_tim,all_biao_ji
4、; /全功率加热时间 标记时间给一次uchar hit_tim,hit_biao_ji; /全功率打豆时间 标记时间给一次uchar half_tim,half_biao_ji; /半功率加热时间 标记时间给一次/子函数声明-void mcu_init(); /单片机初始化void var_init(); /变量初始化void set_timer(); /定时器设置函数void key_scan(); /2ms 扫描一次void beep(uchar beep_tim,uchar beep_nu); /蜂铃管理程序void all_heat(uchar all_hrat_tim); /全功率加
5、热程序void half_heat(half_heat_time); /半功率加热程序void all_hit(uchar all_hit_time); /全功率打豆程序void off(); /关机/mcu 寄存器初始化-void mcu_init()/变量初始化-void var_init() /设置定时器-/定时器模块相关说明:中文手册 75 页void set_timer()TMOD |= 0x01; /使用模式 1,16 位定时器,使用“|“符号可以在使用多个定时器时不受影响 TH0=0xff; /给定初值,这里使用定时器最大值从 0 开始计数一直到 65535 溢出TL0=0x82
6、;EA=1; /总中断打开ET0=1; /定时器中断打开TR0=1; /定时器开关打开/蜂铃管理程序void beep(uchar beep_tim,uchar beep_nu)/beep_tim-响铃时间 beep_nu响铃次数 /0 一直响 1 响一次beep_time = beep_tim;beep_num = beep_nu;/按键扫描程序-void key_scan(void) /2ms 扫描一次if(key_flg) /按键扫描标记开 key_flg = 0; /清除按键扫描标记if(!(sw1 /按键定时器计数 2msX510ms 消抖if(key_jisu4) /按键生效key
7、_jisu = 0; / 清除定时器计数on = 1; / 开机 on 置 1beep(5,1); / 响蜂铃 5x20ms100ms 一次if(!sw1) key_num = 1;if(!sw2) key_num = 2;if(!sw3) key_num = 3;else key_jisu = 0; /全功率加热程序-void all_heat(uchar all_hrat_tim) /all_hrat_tim 加热时间if(!all_biao_ji)hrat_tim = all_hrat_tim; all_biao_ji = 1; /给时间 一次if(flg_1s)flg_1s = 0;
8、/1 秒标记清零if(hrat_tim)k1 = 0; /加热k2 = 0; /总开k3 = 0; /全功率elsek1 = 1; /停止加热k2 = 1; /总关k3 = 1; /全功率关move +; /加热完成执行下一步程序all_biao_ji = 0; /全功率加热时间给一次标记清零,为再一次加热作准备hrat_tim -;/半功率加热程序-void half_heat(half_heat_time) /half_heat_time 半功率加热时间if(!half_biao_ji) half_tim = half_heat_time; half_biao_ji = 1; /给时间 一
9、次if(flg_1s)flg_1s = 0; /1 秒标记清零if(!s2) /缺水beep(5,1); /响蜂铃k2 = 1; /停止工作 总开关关elseif(half_tim)if(s1) /无溢出 继续加热k1 = 0; /加热k2 = 0; /总开k3 = 1; /半功率else / 溢出 停止加热k1 = 1; /停止加热k2 = 1; /总关k3 = 1; /全功率关elsek1 = 1; /停止加热k2 = 1; /总关k3 = 1; /全功率关move +; /半功率加热完成执行下一步程序all_biao_ji = 0; /半功率加热时间给一次标记清零,为再一次加热作准备ha
10、lf_tim-;/全功率打豆程序-void all_hit(uchar all_hit_time) /all_hit_time 打豆时间if(!hit_biao_ji)hit_tim = all_hit_time; hit_biao_ji = 1; /给时间 一次if(flg_1s)flg_1s = 0; /1 秒标记清零if(hit_tim)k1 = 1; /打豆k2 = 0; /总开k3 = 0; /全功率elsek1 = 1; /打豆关k2 = 1; /总开关k3 = 1; /全功率关move +; /打豆完成执行下一步程序hit_biao_ji = 0; /全功率打豆时间给一次标记清零
11、,为再一次打豆作准备hit_tim-;/防干烧void fan_gan_sao(void)if(!s2) /缺水报警beep(5,1); /响蜂铃k2 = 1; /循环检测是否有水 总开关关else move +; /有水执行下一步程序/防溢出void fan_yi_chu(void)if(s1) /没溢出 继续加热k1 = 0; /加热k2 = 0; /总开k3 = 0; /全功率else /溢出停止加热 k1 = 1; /停止加热k2 = 1; /总关k3 = 1; /全功率关move+; /下一步程序/湿豆打豆程序void wet_peas(void)switch(move)case 0 : fan_gan_sao(); break; /第一步缺水检测 检水case 1 : all_heat(5); break; /第二步加热到 80 度 加热case 2 : all_hit(5); break; /第一次打豆 15 秒