控制/MCU
本次设计的家用养生壶自动控制系统便是基于单片机制作的,多种控制方式可以按用户需要快捷操作。
通过控制温度、加热功率和加热时间来实现养生壶的模式切换。
1)设置三种加热模式:高功率加热、中功率加热、低功率加热。
2)要求系统具有预约功能和保温功能。
3)要求系统具有多种工作模式:烧水模式:直接加热至100℃停止;果茶模式:直接加热至100℃后
改为低功率运行10分钟,然后保温; 煲汤模式:直接加热至100℃,中功率20分钟后低功率运行20
分钟,然后保温;火锅模式:直接加热至100℃,转中功率模式持续加热;热奶模式:直接加热至75℃
后转保温模式。
部分程序:
include "stc89c51.h"
#include "typedef.h"
#include
//-----------------------IO配置------------------------------------------
sbit BEEP = P2^2;//蜂鸣器
//按键相关
#define DEF_KEY_TIMES 10 //按键检测次数,放抖动
sbit KEY1 = P1^4;//烧水
sbit KEY2 = P1^5;//果茶
sbit KEY3 = P1^6;//煲汤
sbit KEY4 = P1^7;//火锅
sbit KEY5 = P3^4;//热奶
sbit KEY6 = P3^5;//设置
sbit KEY7 = P3^6;//时间加
sbit KEY8 = P3^7;//时间减
sbit KEY9 = P3^1;//开始
sbit KEY10= P3^0;//暂停 停止
//数码管位选管脚定义
#define DEF_OFF 1 //数码管灭
#define DEF_ON 0 //数码管亮
#define DEF_LED_PORT P0 //数码管段选端口
sbit LED0 = P1^0;//温度第1位位选
sbit LED1 = P1^1;//温度第2位位选
sbit LED2 = P1^2;//温度第3位位选
sbit LED3 = P1^3;//温度第4位位选
sbit LED4 = P4^5;//时间第1位位选
sbit LED5 = P4^4;//时间第2位位选
sbit LED6 = P2^7;//时间第3位位选
sbit LED7 = P4^6;//时间第4位位选
sbit LED8 = P2^6;//放二极管指示灯位选
//继电器IO初始化
#define ULN2003_ON 1//开启继电器
#define ULN2003_OFF 0 //关闭继电器
sbit BW = P2^1;//保温继电器
sbit D_OUT = P2^0;//低功率继电器
sbit Z_OUT = P3^2;//中功率继电器
sbit G_OUT = P3^3;//高功率继电器
#define T_100 33//设定的温度100度,方便演示用了34度
#define T_75 30//设定的温度75度,方便演示用了30度
//定义ADC0832引脚
sbit CS1=P2^5;
sbit CLK1=P2^3;
sbit DATI1=P2^4;
sbit DATO1=P2^4;
//-----------------------------------------------------------------------
//----------------------ADC 初始化---------------------------------------
//热敏电阻温度查表,温度的准确与否需要矫正此表格
code u8 ex_code_temper[256] =
//0 1 2 3 4 5 6 7
{256, 255, 245, 230, 231, 232, 220, 210,
//8 9 10 11 12 13 14 15
205, 190, 180, 370, 360, 350, 340, 290,
//16 17 18 19 20 21 22 23
260, 250, 249, 245, 220, 200, 150, 102,
//24 25 26 27 28 29 30 31
80, 79, 78, 77, 76, 75, 74, 73,
//32 33 34 35 36 37 38 39
72, 71, 70, 69, 68, 67, 66, 65,
//40 41 42 43 44 45 46 47
65, 64, 63, 63, 62, 61, 61, 60,
//48 49 50 51 52 53 54 55
59, 58, 58, 57, 57, 56, 56, 55,
//56 57 58 59 60 61 62 63
55, 54, 53, 53, 52, 52, 51, 51,
//64 65 66 67 68 69 70 71
50, 50, 49, 49, 48, 48, 47, 47,
//72 73 74 75 76 77 78 79
46, 46, 45, 45, 45, 44, 44, 43,
//80 81 82 83 84 85 86 87
43, 42, 42, 42, 41, 41, 40, 40,
//88 89 90 91 92 93 94 95
40, 39, 39, 38, 38, 38, 37, 37,
//96 97 98 99 100 101 102 103
36, 36, 36, 35, 35, 35, 34, 34,
//104 105 106 107 108 109 110 111
34, 33, 33, 32, 32, 32, 31, 31,
//112 113 114 115 116 117 118 119
31, 30, 30, 30, 29, 29, 29, 28,
//120 121 122 123 124 125 126 127
28, 28, 27, 27, 27, 26, 26, 26,
//128 129 130 131 132 133 134 135
25, 25, 25, 24, 24, 24, 23, 23,
//135 136 137 138 139 140 141 142
23, 23, 22, 22, 22, 21, 21, 21,
//142 143 144 145 146 147 148 149
21, 20, 20, 20, 19, 19, 19, 18,
//150 151 152 153 154 155 156 157
18, 18, 17, 17, 17, 16, 16, 15,
//158 159 160 161 162 163 164 165
15, 15, 14, 14, 14, 13, 13, 13,
//166 167 168 169 170 171 172 173
12, 12, 12, 11, 11, 11, 10, 10,
//174 175 176 177 178 179 180 181
10, 9, 9, 9, 8, 8, 7, 7,
//182 183 184 185 186 187 188 189
7, 6, 6, 6, 5, 5, 4, 4,
//190 191 192 193 194 195 196 197
4, 3, 3, 2, 2, 2, 1, 1,
//198 199 200 201 202 203 204 205
0, 0, 0, 0, 0, 0, 0, 0,
//206 207 208 209 210 211 212 213
0, 0, 0, 0, 0, 0, 0, 0,
//214 215 216 217 218 219 220 221
0, 0, 0, 0, 0, 0, 0, 0,
};
u8 adc_val;//温度ADC值,ADC0832测得的数值
u8 adc_tmper;//温度返回值,时间温度
//这两个变量觉得采集温度的速率,也就是说温度的刷新速率
u8 flag_get_dac = 0;
u16 flag_get_dac_time = 0;
//-----------------------------------------------------------------------
//----------------------变量初始化---------------------------------------
bit flag_timer0 = 0;//2ms中断标志
//按键
u8 key1_time;
u8 key2_time;
u8 key3_time;
u8 key4_time;
u8 key5_time;
u8 key6_time;
u8 key7_time;
u8 key8_time;
u8 key9_time;
u16 key10_time;
u16 key10_time_long;
u8 key_val; //按键返回值
//1s中的时间
u16 time_1s = 0;
u8 time_1s_flag = 0;
//不同模式下的时间切换标志位
u8 time_mode_dat = 0;
//LED位选轮询
u8 led_wei = 0;
//数码管当前显示的内容
u8 arr_led_now[9] = {11,2,3,4,5,6,7,8,1};
//数码管码字数字0-9,
u8 led_arr[16] = {
0xD7,/ 0 /
0x90,/ 1 /
0xA7,/ 2 /
0xB5,/ 3 /
0xF0,/ 4 /
0x75,/ 5 /
0x77,/ 6 /
0x91,/ 7 /
0xF7,/ 8 /
0xF5,/ 9 /
0x00,
};
//显示时间点
u8 led_arr_1[16] = {
0xDF,/ 0 /
0x98,/ 1 /
0xAF,/ 2 /
0xBD,/ 3 /
0xF8,/ 4 /
0x7D,/ 5 /
0x7F,/ 6 /
0x99,/ 7 /
0xFF,/ 8 /
0xFD,/ 9 /
0x00,
0x00,
0x20,
};
全部0条评论
快来发表一下你的评论吧 !