基于单片机的三种模式家用养生壶自动控制系统设计

电子说

1.2w人已加入

描述

本次设计的家用养生壶自动控制系统便是基于单片机制作的,多种控制方式可以按用户需要快捷操作。

通过控制温度、加热功率和加热时间来实现养生壶的模式切换。

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,

};


 

 

单片机

单片机

单片机

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分