找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2572|回复: 1
打印 上一主题 下一主题
收起左侧

单片机电煮锅控制程序 可控硅控制 功能很多

[复制链接]
跳转到指定楼层
楼主
ID:509464 发表于 2019-4-11 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自编的电水壶程序参考下,ESD-SFB-7P201与ESD-SFB-7P202开关面板

单片机源程序如下:
  1. #include "../H/Function_Init.h"
  2. #define LED_COM1 PB4//第一组LED公共端---共阳极  【大火、中火、小火、功能】
  3. #define LED_COM2 PA1//第二组LED公共端---共阳极  【沸水、慢炖、蒸焖、开关】
  4. #define LED_SEG1 PA7//中火、慢炖
  5. #define LED_SEG2 PA6//小火、蒸焖
  6. #define LED_SEG3 PA5//开关、功能
  7. #define LED_SEG4 PB1//大火、沸水
  8. #define CLOSE_DISP {LED_SEG1 = 1;LED_SEG2 = 1;LED_SEG3 =1;LED_SEG4 = 1;LED_COM1 = 0;LED_COM2 = 0;}//关显示
  9. /*
  10. PB6 电压检测【220  110】---AIN13
  11. PB5 过零检测---AIN12
  12. PB3 温度检测1---AIN10
  13. PA3 温度检测2
  14. PA4 可控硅控制脚
  15. */
  16. #define Horizontal 0
  17. #define Vertical   1
  18. #define Pro_Attr   Vertical
  19. //                  电煮锅    蒸蛋
  20. #define STATE_OFF 0//关机
  21. #define B_FIRE    6//大火 --- 蛋羹
  22. #define M_FIRE    5//中火 --- 全熟蛋
  23. #define S_FIRE    4//小火 --- 溏心蛋
  24. #define STEWING   1//蒸焖 --- 火锅
  25. #define S_STEW    2//慢炖 --- 烧开
  26. #define B_WATER   3//沸水 --- 温泉蛋
  27. /*
  28. ------------------------------------------------------------------------------------------------
  29. 【蒸蛋机】
  30. 大火【蛋羹】   --- 首次96.5度持续保温60S【功率要求:全功率】,98度持续60S【功率要求:300W】,96度持续420S【功率要求:300W】,98度持续300S【功率要求:300W】,95持续200S【功率要求:200W】
  31. 中火【全熟蛋】 --- 首次92度持续保温35S【功率要求:首次在全电压后转100W保温】,96.7度持续300S【功率要求:100W】
  32. 小火【溏心蛋】 --- 首次90度持续保温30S【功率要求:首次在全电压后转100W保温】,100度持续150S【功率要求:100W】
  33. 蒸焖【火锅】   --- 到100度持续30S后转,长期沸腾【功率要求:首次在全电压后转300W】
  34. 慢炖【烧开】   --- 首次98度3~12S内断电开始保温,保温温度范围75~90【功率要求:100V 450W/220V 600W】
  35. 沸水【温泉蛋】 --- 首次65度持续保温5分钟【功率要求:首次在全电压后转100W保温】,69度持续3分钟【功率要求:100W】,72度持续13分钟【功率要求:100W】
  36. ------------------------------------------------------------------------------------------------
  37. */
  38. const uint16 data_ad10[]={//12位AD 精度5.00/4096 = 0;根据电阻分压,求出模拟值。
  39. 4018,4014,4010,4005,4000,3995,3990,3985,3979,3973,//-9~0
  40. 3967,3961,3954,3948,3941,//1~5
  41. 3933,3925,3917,3909,3900,//6~10
  42. 3891,3882,3872,3862,3851,//11~15
  43. 3840,3829,3817,3805,3793,//16~20
  44. 3779,3766,3752,3738,3723,//21~25
  45. 3708,3692,3676,3659,3642,//26~30
  46. 3625,3607,3588,3569,3550,//31~35
  47. 3530,3509,3488,3467,3445,//36~40
  48. 3422,3399,3376,3352,3328,//41~45
  49. 3303,3278,3252,3226,3199,//46~50
  50. 3172,3145,3117,3089,3060,//51~55
  51. 3031,3002,2972,2942,2912,//56~60
  52. 2881,2850,2819,2788,2756,//61~65
  53. 2724,2692,2659,2627,2595,//66~70
  54. 2561,2529,2496,2462,2429,//71~75
  55. 2396,2363,2329,2289,2263,//76~80
  56. 2229,2196,2163,2129,2096,//81~85
  57. 2063,2030,1997,1964,1931,//86~90
  58. 1899,1867,1835,1804,1772,//91~95
  59. 1741,1711,1680,1650,1621,//96~100
  60. 1591,1562,1534,1506,1478,//101~105
  61. 1450,1423,1397,1370,1344,//106~110
  62. 1319,1294,1269,1245,1221,//111~115
  63. 1197,1174,1151,1128,1106,//116~120
  64. 1084,1063,1042,1021,1000,//121~125
  65. 979,958,938,918,898,//126~130
  66. 879,860,842,824,806,//131~135
  67. 789,772,755,739,723,//136~140
  68. 708,693,678,664,649,//141~145
  69. 636,622,609,596,584//146~150
  70. };
  71. uint8 work_mode;//关机
  72. uint8 blink;//呼吸标志
  73. uint8 pwr_vol;//供电电压
  74. uint8 power;//工作功率
  75. uint8 temperature;//当前温度
  76. uint8 step;//加热步骤标志
  77. uint8 temp_err;//温度异常标志
  78. uint8 stop_change;//停止变换
  79. uint8 drift_max;
  80. uint8 t98_max;
  81. uint8 keyscan_enable;
  82. #define T98_220MAX 80//
  83. #define T98_100MAX 180//
  84. void work_at_b_fire(void);
  85. void work_at_m_fire(void);
  86. void work_at_s_fire(void);
  87. void work_at_stewing(void);
  88. void work_at_s_stew(void);
  89. void work_at_b_water(void);
  90. /*****************************************************
  91. *函数名称:void ramClear(void)
  92. *函数功能:RAM中数据全部清零
  93. *入口参数:void
  94. *返回值:void
  95. *****************************************************/
  96. void ramClear(void){
  97.     __asm{
  98.          CLR   IAAL;
  99.          CLR   IAAH;
  100.          CLR   IAD;
  101.          INC   IAAL,1;
  102.          JBS   PSW,C
  103.          GOTO  $-3;
  104.          INC   IAAH,1;
  105.          JBS   IAAH,2
  106.          GOTO  $-6;
  107.     }
  108. }
  109. /*****************************************************
  110. *函数名称:void sysInit(void)
  111. *函数功能:系统初始化
  112. *入口参数:void
  113. *返回值:void
  114. *****************************************************/
  115. void sysInit(void){//用户需更改
  116.         ANSL =0xFF;                           //Set Digital port
  117.         ANSH =0xFF;                           
  118.         PWEN = 3;                                       // 当BOREN使能时,软件使能低电压检测复位;使能WDT内部RC时钟

  119.         blink = 0;
  120.         work_mode = STATE_OFF;//B_FIRE  STATE_OFF
  121.         temperature = 0;
  122.         pwr_vol = PWR_VOL_220AC;//PWR_VOL_220AC
  123.         power = PWR_STOP;//
  124.         step = 0;
  125.         temp_err = 0;
  126.         stop_change = 0;
  127.         drift_max = Drift_220V;
  128.         t98_max = T98_220MAX;
  129.         keyscan_enable = 0;
  130. }
  131. /*****************************************************
  132. *函数名称:void delay100ms(uint8 time)
  133. *函数功能:延时100ms
  134. *入口参数:time—时间计数,单位100ms
  135. *返回值:void
  136. *****************************************************/
  137. void delay100ms(uint8 time){
  138.         uint8 i,j,k;
  139.         for (i=0; i<time; i++){
  140.                 for (j=0; j<100; j++){
  141.                         for (k=0; k<249; k++){
  142.                                 nop();
  143.                                 nop();
  144.                                 //nop();
  145.                                 clr_wdt();
  146.                         }
  147.                 }
  148.         }
  149. }
  150. /*****************************************************
  151. *函数名称:void display(void)
  152. *函数功能:显示函数
  153. *入口参数:void
  154. *返回值:void
  155. *****************************************************/
  156. void display(void){
  157. //开关指示灯在关机状态下常亮,开机工作状态下,3s后熄灭
  158. //功能指示灯在开机状态和切换工作模式状态时常亮,3s后熄灭
  159. /*
  160. #define LED_COM1 PB4//第一组LED公共端---共阳极  【大火、中火、小火、功能】
  161. #define LED_COM2 PA1//第二组LED公共端---共阳极  【沸水、慢炖、蒸焖、开关】
  162. #define LED_SEG1 PA7//中火、慢炖
  163. #define LED_SEG2 PA6//小火、蒸焖
  164. #define LED_SEG3 PA5//开关、功能
  165. #define LED_SEG4 PB1//大火、沸水
  166. 目前:蛋羹1、全熟2、溏心3、火锅4、烧开5、火锅6
  167. 愚人:
  168. 1.竖排的排序:如图,功能跳转:默认火锅,烧开、温泉、溏心、全熟、蛋羹

  169. 愚人:
  170. 1.横排的排序及功能跳转:默认火锅,烧开、温泉、溏心、全熟、蛋羹

  171. */        
  172.         static uint8 i = 0;
  173.         if(tick2 != 2){
  174.                 return;
  175.         }
  176.         CLOSE_DISP
  177.         if(i == 0){
  178.                 LED_COM1 = 1;
  179.                 if(work_mode != STATE_OFF){
  180.                         LED_SEG3 = 0;//功能指示灯只有在开机的时候才亮
  181.                 }
  182.                 switch(work_mode){
  183.                 case B_FIRE://大火
  184.                         if(blink < 6){//小于3s
  185.                                 if(blink%2){
  186.                                         if(Pro_Attr == Vertical){
  187.                                                 LED_SEG4 = 0;
  188.                                         }else{
  189.                                                 LED_SEG2 = 0;        
  190.                                         }        
  191.                                 }
  192.                         }else{
  193.                                 if(blink%7 < 6){
  194.                                         if(Pro_Attr == Vertical){
  195.                                                 LED_SEG4 = 0;
  196.                                         }else{
  197.                                                 LED_SEG2 = 0;        
  198.                                         }
  199.                                 }
  200.                         }
  201.                 break;
  202.                 case M_FIRE://中火
  203.                         if(blink < 6){//小于3s,
  204.                                 if(blink%2){
  205.                                         LED_SEG1 = 0;        
  206.                                 }
  207.                         }else{
  208.                                 if(blink%7 < 6){
  209.                                         LED_SEG1 = 0;
  210.                                 }
  211.                         }
  212.                 break;
  213.                 case S_FIRE://小火
  214.                         if(blink < 6){//小于3s,
  215.                                 if(blink%2){
  216.                                         if(Pro_Attr == Vertical){
  217.                                                 LED_SEG2 = 0;
  218.                                         }else{
  219.                                                 LED_SEG4 = 0;        
  220.                                         }        
  221.                                 }
  222.                         }else{
  223.                                 if(blink%7 < 6){
  224.                                         if(Pro_Attr == Vertical){
  225.                                                 LED_SEG2 = 0;
  226.                                         }else{
  227.                                                 LED_SEG4 = 0;        
  228.                                         }
  229.                                 }
  230.                         }
  231.                 break;
  232.                 }
  233.                 i = 1;
  234.         }else{
  235.                 LED_COM2 = 1;
  236.                 LED_SEG3 = 0;//开关指示灯永远亮
  237.                 switch(work_mode){
  238.                 case STEWING://蒸焖
  239.                         if(blink < 6){//小于3s,
  240.                                 if(blink%2){
  241.                                         LED_SEG2 = 0;        
  242.                                 }
  243.                         }else{
  244.                                 if(blink%7 < 6){
  245.                                         LED_SEG2 = 0;
  246.                                 }
  247.                         }
  248.                 break;
  249.                 case S_STEW://慢炖
  250.                         if(blink < 6){//小于3s
  251.                                 if(blink%2){
  252.                                         LED_SEG1 = 0;        
  253.                                 }
  254.                         }else{
  255.                                 if(blink%7 < 6){
  256.                                         LED_SEG1 = 0;
  257.                                 }
  258.                         }
  259.                 break;
  260.                 case B_WATER://沸水
  261.                         if(blink < 6){//小于3s
  262.                                 if(blink%2){
  263.                                         LED_SEG4 = 0;        
  264.                                 }
  265.                         }else{
  266.                                 if(blink%7 < 6){
  267.                                         LED_SEG4 = 0;
  268.                                 }
  269.                         }
  270.                 break;
  271.                 }
  272.                 i = 0;
  273.         }
  274. }
  275. /*****************************************************
  276. *函数名称:void keyScan(void)
  277. *函数功能:工作        //TK_state        使用TK_state参数 对应按键状态位 32bit  按下为1 松开为0
  278. *入口参数:void        //TK_state_single 使用TK_state_single参数 对应按键状态位 32bit  按下为1 松开为0 仅一个按键有效
  279. *返回值:void
  280. *****************************************************/
  281. void keyScan(void){
  282.         static uint8 record = 14,reset = 0;
  283.         uint8 tkey = 14;
  284.         if(keyscan_enable == 0){
  285.                 return;
  286.         }
  287.         if(temp_err){//温度传感器异常,不能开机
  288.                 work_mode = STATE_OFF;
  289.                 return;
  290.         }
  291.         if((uint16)TK_state_single&0x1){
  292.                 tkey = 7;
  293.         }else if((uint16)TK_state_single&0x2){
  294.                 tkey = 9;
  295.         }
  296.         if(tkey != record){//如果此次按键值,与记录的按键值不相同,开始计时,消抖
  297.                 if(reset){
  298.                         if(tk_cnt >= TK_CNT){//计时了20ms,触发按键还是没发生变化
  299.                                 reset = 0;
  300.                         }else{
  301.                                 return;        
  302.                         }
  303.                 }else{//重新计数
  304.                         tk_cnt = 0;
  305.                         reset = 1;
  306.                         return;
  307.                 }
  308.         }else{
  309.                 return;
  310.         }
  311.         record = tkey;
  312.         if(blink > 6){
  313.                 stop_change = 1;
  314.         }else{
  315.                 blink = 0;
  316.         }
  317.         switch(tkey){
  318.                 case 9://触摸按键9 --- 功能按键
  319.                 if((work_mode != STATE_OFF)&&(stop_change != 1)){
  320.                         work_mode++;
  321.                         if(work_mode > B_FIRE){
  322.                                 work_mode = STEWING;
  323.                         }
  324.                 }
  325.                 break;
  326.                 case 7://触摸按键7--- 开关按键
  327.                 if(work_mode != STATE_OFF){
  328.                         work_mode = STATE_OFF;
  329.                         blink = 7;//关机立刻刷新工作状态
  330.                 }else{
  331.                         work_mode = STEWING;
  332.                         blink = 0;
  333.                         stop_change = 0;
  334.                 }
  335.                 break;
  336.                 default://14
  337.                 break;
  338.         }
  339. }
  340. /*****************************************************
  341. *函数名称:void stateMonitor(void)
  342. *函数功能:检测输入电压和过零检测
  343. *入口参数:void
  344. *返回值:void
  345. *****************************************************/
  346. void stateMonitor(void){
  347.         uint16 val;
  348.         uint8 i;
  349.         //【AIN10---RT1温度采集】【AIN12过零检测 AIN13电压检测】
  350.         /*
  351.         示波器显示:220VAC时,采样点电压最大值3.6V,最小值3.2V,平均值3.33V
  352.         220AC ---> 110DC  110V x [10 / (100+100+10+10)] - 1.4 = 3.6V

  353.         100AC ---> 50DC   50V  x [10 / (100+100+10+10)] - 1.4 = 0.87V
  354.         综上所述,以2V为分界点,大于2V为220VAC供电,小于2V为100VAC供电
  355.         分界采样值a如下:4096 / 5 *2 = 1638 ===> 取1650即可
  356.         */
  357.         //RT1温度采集
  358.         static uint8 temp_old = 0,k = 0;
  359.         val = adcSimpling(AIN10);
  360.         for(i = 0;i < 160;i++){
  361.                 if(val < data_ad10[i]){
  362.                         continue;        
  363.                 }else{
  364.                         break;        
  365.                 }
  366.         }
  367.         if(i < 10){//热敏电阻短路故障  25===2045~2050
  368.                 temperature        = 0xe3;//0xe3
  369.                 temp_err = 1;
  370.         }else if(i > 120){//热敏电阻开路故障【干烧到110度】
  371.                 temperature        = 0xe3;//0xe2        
  372.                 temp_err = 1;
  373.         }else{
  374.                 temperature = i - 9;//转化温度值        
  375.                 temp_old = temperature;
  376.                 temp_err = 0;
  377.         }
  378.         if(temp_err){
  379.                 if(k <= 100){
  380.                         k++;
  381.                         temperature = temp_old;
  382.                         temp_err = 0;
  383.                 }
  384.         }else{
  385.                 k = 0;
  386.         }
  387.         //电压检测
  388.         if(tick1 != 1){
  389.                 return;
  390.         }
  391.         if(adcSimpling(AIN13) > 1500){//1650
  392.                 pwr_vol = PWR_VOL_220AC;//220VAC供电
  393.                 drift_max = Drift_220V;
  394.                 t98_max = T98_220MAX;
  395.         }else{
  396.                 pwr_vol = PWR_VOL_100AC;//100VAC供电
  397.                 drift_max = Drift_100V;
  398.                 t98_max = T98_100MAX;
  399.         }
  400.         
  401.         tick1 = 0;
  402. }
  403. /*****************************************************
  404. *函数名称:void outputCtrl(void)
  405. *函数功能:输出控制函数
  406. *入口参数:void
  407. *返回值:void
  408. *****************************************************/
  409. void outputCtrl(void){
  410. /*
  411. P = U*U/R;
  412. 加热管220V 1800W
  413. 220V   600W【默认为全电压、全功率】
  414. 100V   350W【默认为全电压、全功率】

  415. ------------------------------------------------------------------------------------------------
  416. 【蒸蛋机】
  417. 大火【蛋羹】   --- 首次96.5度持续保温60S【功率要求:全功率】,98度持续60S【功率要求:300W】,96度持续420S【功率要求:300W】,98度持续300S【功率要求:300W】,95持续200S【功率要求:300W】
  418. 中火【全熟蛋】 --- 首次92度持续保温35S【功率要求:首次在全电压后转300W保温】,96.7度持续300S【功率要求:300W】
  419. 小火【溏心蛋】 --- 首次90度持续保温30S【功率要求:首次在全电压后转300W保温】,100度持续150S【功率要求:300W】
  420. 蒸焖【火锅】   --- 到100度持续30S后转,长期沸腾【功率要求:首次在全电压后转300W】
  421. 慢炖【烧开】   --- 首次98度3~12S内断电开始保温,保温温度范围75~90【功率要求:100V 350W/220V 600W】
  422. 沸水【温泉蛋】 --- 首次65度持续保温5分钟【功率要求:首次在全电压后转200W保温】,69度持续3分钟【功率要求:200W】,72度持续13分钟【功率要求200W】

  423. 【蒸蛋机】---功能修改2019-3-16
  424. 中火【全熟蛋】 --- 首次92度持续保温35S【功率要求:首次分开二段,先全电压维持40度1`2分钟后转350W,来确保冰箱蛋不被由于温度骤升导致裂)后转300W保温】,96.7度持续300S【功率要求:300W】
  425. 小火【溏心蛋】 --- 首次90度持续保温30S【功率要求:首次分开二段,先全电压维持40度1`2分钟后转350W,来确保冰箱蛋不被由于温度骤升导致裂)后转300W保温】,100度持续150S【功率要求:300W】
  426. 沸水【温泉蛋】 --- 首次65度持续保温5分钟【功率要求:首次分开二段,先全电压维持40度1`2分钟后转350W,来确保冰箱蛋不被由于温度骤升导致裂)后转200W保温】,69度持续3分钟【功率要求:200W】,72度持续13分钟【功率要求200W】
  427. 【蒸蛋机】---功能修改2019-3-21
  428. 大火【蛋羹】   --- 1.首次96.5度持续保温60S【1.全功率转300W】,2.98度持续60S【2.350W】,3.96度持续420S【3.300W】,4.98度持续300S【4.350W】,5.95持续200S【5.300W】
  429. 中火【全熟蛋】 --- 1.首次分开二段,先全电压维持40度1`2分钟后转350W到60度持续60S后转300W到92度保温35S,2.300W到96持续300S
  430. 小火【溏心蛋】 --- 1.首次分开二段,先全电压维持40度1`2分钟后转350W到60度持续60S后350W到90度300W保温30S,2.350W到100度持续150S
  431. 沸水【温泉蛋】 --- 1.首次分开二段,先全电压维持40度1`2分钟后转350W到67度后转200W维持保温5分钟 2.200W 69度持续保温3.5分钟 3.200W 72度持续保温14分钟
  432. ------------------------------------------------------------------------------------------------
  433. */
  434.         static uint8 old_work_mode = 0;
  435.         if(blink > 6){//新的工作模式生效
  436.                 if(old_work_mode != work_mode){
  437.                         step = 0;//工作模式变过,操作步骤重新开始
  438.                         old_work_mode = work_mode;
  439.                 }
  440.         }
  441.         switch(old_work_mode){
  442.         case STATE_OFF://关机
  443.                 power = PWR_STOP;
  444.         break;
  445.         case B_FIRE://大火【蛋羹】
  446.                 work_at_b_fire();
  447.         break;
  448.         case M_FIRE://中火【全熟蛋】
  449.                 work_at_m_fire();
  450.         break;
  451.         case S_FIRE://小火【溏心蛋】
  452.                 work_at_s_fire();
  453.         break;
  454.         case STEWING://蒸焖【火锅】
  455.                 work_at_stewing();
  456.         break;
  457.         case S_STEW://慢炖【烧开】
  458.                 work_at_s_stew();
  459.         break;
  460.         case B_WATER://沸水【温泉蛋】
  461.                 work_at_b_water();
  462.         break;
  463.         }
  464. }
  465. //===============================================================================
  466. //全功率时,96度要减,98度不用减
  467. //局部函数,工作在大火模式下
  468. void work_at_b_fire(void){
  469.         //大火【蛋羹】   --- 1.首次96.5度持续保温60S【1.全功率转300W】,2.98度持续60S【2.350W】,3.96度持续420S【3.300W】,4.98度持续300S【4.350W】,5.95持续200S【5.300W】
  470.         if(step == 0){
  471.                 if(temperature < (96 - 2)){//1.首次96.5度持续保温60S【1.全功率转300W】
  472.                         power = PWR_ALL;
  473.                 }else{
  474.                         step = 1;
  475.                         tickn = 0;
  476.                 }
  477.         }else if(step == 1){
  478.                 if(tickn < 60){
  479.                         if(temperature < 96){
  480.                                 power = PWR_300W;
  481.                         }else{
  482.                                 power = PWR_STOP;
  483.                         }
  484.                 }else{
  485.                         step = 2;
  486.                 }
  487.         }else if(step == 2){//2.98度持续60S【2.350W】
  488.                 if(temperature < 98-2){
  489.                         power = PWR_350W;
  490.                 }else{
  491.                         step = 3;
  492.                         tickn = 0;
  493.                 }
  494.         }else if(step == 3){
  495.                 if(tickn < 60){
  496.                         if(temperature < 98){
  497.                                 power = PWR_350W;
  498.                         }else{
  499.                                 power = PWR_STOP;
  500.                         }
  501.                 }else{
  502.                         step = 4;
  503.                 }
  504.         }else if(step == 4){//3.96度持续420S【3.300W】
  505.                 if(temperature > 96){
  506.                         power = PWR_STOP;//一定要加
  507.                 }else{
  508.                         step = 5;
  509.                         tickn = 0;
  510.                 }
  511.         }else if(step == 5){
  512.                 if(tickn < 420){
  513.                         if(temperature < 96){
  514.                                 power = PWR_300W;
  515.                         }else{
  516.                                 power = PWR_STOP;
  517.                         }
  518.                 }else{
  519.                         step = 6;
  520.                 }
  521.         }else if(step == 6){//4.98度持续300S【4.350W】
  522.                 if(temperature < 98-2){
  523.                         power = PWR_350W;
  524.                 }else{
  525.                         step = 7;
  526.                         tickn = 0;
  527.                 }
  528.         }else if(step == 7){
  529.                 if(tickn < 300){
  530.                         if(temperature < 98){
  531.                                 power = PWR_350W;
  532.                         }else{
  533.                                 power = PWR_STOP;
  534.                         }
  535.                 }else{
  536.                         step = 8;
  537.                 }
  538.         }else if(step == 8){//5.95持续200S【5.300W】
  539.                 if(temperature > 95){
  540.                         power = PWR_STOP;//一定要加
  541.                 }else{
  542.                         step = 9;
  543.                         tickn = 0;
  544.                 }
  545.         }else if(step == 9){
  546.                 if(tickn < 200){
  547.                         if(temperature < 95){
  548.                                 power = PWR_300W;
  549.                         }else{
  550.                                 power = PWR_STOP;
  551.                         }
  552.                 }else{
  553.                         work_mode = STATE_OFF;//工作结束,关机
  554.                 }
  555.         }
  556. }
  557. //局部函数,工作在中火模式下
  558. void work_at_m_fire(void){
  559.         //中火【全熟蛋】 --- 1.首次分开二段,先全电压维持40度1`2分钟后转350W到60度持续60S后转300W到92度保温35S,2.300W到96持续320S
  560.         if(step == 0){
  561.                 if(temperature < 40){
  562.                         power = PWR_ALL;
  563.                 }else{
  564.                         step = 1;
  565.                         tickn = 0;
  566.                 }
  567.         }else if(step == 1){
  568.                 if(tickn < 120){
  569.                         if(temperature < 40){
  570.                                 power = PWR_ALL;
  571.                         }else{
  572.                                 power = PWR_STOP;
  573.                         }
  574.                 }else{
  575.                         step = 2;
  576.                 }
  577.         }else if(step == 2){
  578.                 if(temperature < 60){
  579.                         power = PWR_350W;
  580.                 }else{
  581.                         step = 3;
  582.                         tickn = 0;
  583.                 }
  584.         }else if(step == 3){
  585.                 if(tickn < 60){
  586.                         if(temperature < 60){
  587.                                 power = PWR_350W;
  588.                         }else{
  589.                                 power = PWR_STOP;
  590.                         }
  591.                 }else{
  592.                         step = 4;
  593.                 }
  594.         }else if(step == 4){
  595.                 if(temperature < 92){
  596.                         power = PWR_300W;
  597.                 }else{
  598.                         step = 5;
  599.                         tickn = 0;
  600.                 }
  601.         }else if(step == 5){
  602.                 if(tickn < 35){
  603.                         if(temperature < 92){
  604.                                 power = PWR_300W;
  605.                         }else{
  606.                                 power = PWR_STOP;
  607.                         }
  608.                 }else{
  609.                         step = 6;
  610.                 }
  611.         }else if(step == 6){
  612.                 if(temperature < (97-2)){
  613.                         power = PWR_300W;
  614.                 }else{
  615.                         step = 7;
  616.                         tickn = 0;
  617.                 }
  618.         }else if(step == 7){
  619.                 if(tickn < 320){//
  620.                         if(temperature < 97){
  621.                                 power = PWR_300W;
  622.                         }else{
  623.                                 power = PWR_STOP;
  624.                         }
  625.                 }else{
  626.                         work_mode = STATE_OFF;//工作结束,关机
  627.                 }
  628.         }
  629. }
  630. //局部函数,工作在小火模式下
  631. void work_at_s_fire(void){
  632.         //小火【溏心蛋】 --- 1.首次分开二段,先全电压维持40度1`2分钟后转350W到60度持续60S后350W到90度300W保温30S,2.350W到100度持续130S
  633.         if(step == 0){
  634.                 if(temperature < 40){
  635.                         power = PWR_ALL;
  636.                 }else{
  637.                         step = 1;
  638.                         tickn = 0;
  639.                 }
  640.         }else if(step == 1){
  641.                 if(tickn < 120){
  642.                         if(temperature < 40){
  643.                                 power = PWR_ALL;
  644.                         }else{
  645.                                 power = PWR_STOP;
  646.                         }
  647.                 }else{
  648.                         step = 2;
  649.                 }
  650.         }else if(step == 2){
  651.                 if(temperature < 60){
  652.                         power = PWR_350W;
  653.                 }else{
  654.                         step = 3;
  655.                         tickn = 0;
  656.                 }
  657.         }else if(step == 3){
  658.                 if(tickn < 60){
  659.                         if(temperature < 60){
  660.                                 power = PWR_350W;
  661.                         }else{
  662.                                 power = PWR_STOP;
  663.                         }
  664.                 }else{
  665.                         step = 4;
  666.                 }
  667.         }else if(step == 4){
  668.                 if(temperature < 90){
  669.                         power = PWR_350W;
  670.                 }else{
  671.                         step = 5;
  672.                         tickn = 0;
  673.                 }
  674.         }else if(step == 5){
  675.                 if(tickn < 30){
  676.                         if(temperature < 90){
  677.                                 power = PWR_300W;
  678.                         }else{
  679.                                 power = PWR_STOP;
  680.                         }
  681.                 }else{
  682.                         step = 6;
  683.                 }
  684.         }else if(step == 6){
  685.                 if(temperature < (100 - 4)){
  686.                         power = PWR_350W;
  687.                 }else{
  688.                         step = 7;
  689.                         tickn = 0;
  690.                 }
  691.         }else if(step == 7){
  692.                 if(tickn < 130){
  693.                         if(temperature < 100){
  694.                                 power = PWR_350W;
  695.                         }else{
  696.                                 power = PWR_STOP;
  697.                         }
  698.                 }else{
  699.                         work_mode = STATE_OFF;//工作结束,关机
  700.                 }
  701.         }
  702. }
  703. //局部函数,工作在蒸焖模式下
  704. void work_at_stewing(void){
  705.         //蒸焖【火锅】   --- 到100度持续30S后转,长期沸腾【功率要求:首次在全电压后转300W】
  706.         if(step == 0){
  707.                 if(temperature < (100 - 3)){//首次小于100度
  708.                         power = PWR_ALL;//全功率加热
  709.                 }else{
  710.                         step = 1;//到了100度,进入下一步,进行保温
  711.                         tickn = 0;//100度持续,计时30s
  712.                 }
  713.         }else if(step == 1){//到100度持续30S后转,长期沸腾【功率要求:首次在全电压后转300W】
  714.                 if(tickn < 30){//100度持续30s时间未到
  715.                         power = PWR_ALL;//全功率加热
  716.                 }else{//100度持续30s时间到,进入下一步
  717.                         step = 2;//长期沸腾
  718.                 }
  719.         }else if(step == 2){//300W,长期沸腾
  720.                 //300W加热
  721.                 power = PWR_300W;//
  722.         }
  723. }
  724. //局部函数,工作在慢炖模式下
  725. void work_at_s_stew(void){
  726.         //慢炖【烧开】   --- 首次98度3~12S内断电开始保温,保温温度范围75~90【功率要求:100V 350W/220V 600W】
  727.         static uint8 heat = 0;
  728.         if(step == 0){
  729.                 if(temperature < 90){
  730.                         power = PWR_ALL;//全功率加热
  731.                 }else{
  732.                         step = 1;//到了90度,进入下一步
  733.                         tickn = 0;//90度,计时
  734.                 }
  735.         }else if(step == 1){
  736.                 if((temperature < (98-1))&&(tickn < t98_max)){//首次98度3~12S内断电
  737.                         power = PWR_ALL;//全功率加热
  738.                 }else{
  739.                         step = 2;//到了98度,进入下一步
  740.                         tickn = 0;//98度持续,3~12S内断电
  741.                 }
  742.         }else if(step == 2){
  743.                 if(tickn < 12){//3~12S内断电
  744.                         if(temperature < 98){//首次98度3~12S内断电
  745.                                 power = PWR_ALL;//全功率加热
  746.                         }else{
  747.                                 power = PWR_STOP;
  748.                         }
  749.                 }else{
  750.                         power = PWR_STOP;
  751.                         step = 3;//到了3~12s,进入下一步,保温,保温温度范围75~90
  752.                         heat = 0;
  753.                 }
  754.         }else if(step == 3){
  755.                 if(temperature < (75 + 2)){
  756.                         heat = 1;
  757.                 }
  758.                 if(temperature > (90 - 2)){
  759.                         heat = 0;
  760.                 }
  761.                 if(heat){//温度不在保温范围内,需要加热
  762.                         power = PWR_ALL;//全功率加热
  763.                 }else{
  764.                         power = PWR_STOP;
  765.                 }
  766.         }
  767. }
  768. //局部函数,工作在沸水模式下
  769. void work_at_b_water(void){
  770.         //沸水【温泉蛋】 --- 1.首次分开二段,先全电压维持40度1`2分钟后转350W到67度后转200W维持保温5分钟 2.200W 69度持续保温3.5分钟 3.200W 72度持续保温14分钟
  771.         if(step == 0){
  772.                 if(temperature < 40){
  773.                         power = PWR_ALL;
  774.                 }else{
  775.                         step = 1;
  776.                         tickn = 0;
  777.                 }
  778.         }else if(step == 1){
  779.                 if(tickn < 120){
  780.                         if(temperature < 40){
  781.                                 power = PWR_ALL;
  782.                         }else{
  783.                                 power = PWR_STOP;
  784.                         }
  785.                 }else{
  786.                         step = 2;
  787.                 }
  788.         }else if(step == 2){
  789.                 if(temperature < 67){
  790.                         power = PWR_350W;
  791.                 }else{
  792.                         step = 3;
  793.                         tickn = 0;
  794.                 }
  795.         }else if(step == 3){
  796.                 if(tickn < 300){
  797.                         if(temperature < 67){
  798.                                 power = PWR_200W;
  799.                         }else{
  800.                                 power = PWR_STOP;
  801.                         }
  802.                 }else{
  803.                         step = 4;
  804.                 }
  805.         }else if(step == 4){
  806.                 if(temperature < 69){
  807.                         power = PWR_200W;
  808.                 }else{
  809.                         step = 5;
  810.                         tickn = 0;
  811.                 }
  812.         }else if(step == 5){
  813.                 if(tickn < 210){
  814.                         if(temperature < 69){
  815.                                 power = PWR_200W;
  816.                         }else{
  817.                                 power = PWR_STOP;
  818.                         }
  819.                 }else{
  820.                         step = 6;
  821.                 }
  822.         }else if(step == 6){
  823.                 if(temperature < 72){
  824.                         power = PWR_200W;
  825.                 }else{
  826.                         step = 7;
  827.                         tickn = 0;
  828.                 }
  829.         }else if(step == 7){
  830.                 if(tickn < 840){
  831.                         if(temperature < 72){
  832.                                 power = PWR_200W;
  833.                         }else{
  834.                                 power = PWR_STOP;
  835.                         }
  836.                 }else{
  837.                         work_mode = STATE_OFF;//工作结束,关机
  838.                 }
  839.         }
  840. }
  841. /*****************************************************
  842. *函数名称:void Customer_Keystatejustpress(void)
  843. *函数功能:触控任意通道被刚刚检测到按下状态
  844. *入口参数:void
  845. *返回值:void
  846. *****************************************************/
  847. void Customer_Keystatejustpress(void){ //TK_state was just freshed  you can use the  parameter as you want  输出值: TK_state

  848. }
  849. /*****************************************************
  850. *函数名称:void Customer_Keystatejustrelease(void)
  851. *函数功能:触控任意通道被刚刚检测到释放
  852. *入口参数:void
  853. *返回值:void
  854. *****************************************************/
  855. void Customer_Keystatejustrelease(void){ //TK_state was just freshed  you can use the  parameter as you want  输出值: TK_state

  856. }
复制代码


  1. /*********************************************************************************
  2. 适用于ESD-SFB-7P201与ESD-SFB-7P202开关面板               
  3. **********************************************************************************/
  4. #include "./H/Function_Init.h"
  5. /*****************************************************
  6. *函数名称:void main(void)
  7. *函数功能:主函数
  8. *参数:void
  9. *返回值:void
  10. *****************************************************/
  11. void main(void){
  12.         ramClear();
  13.         sysInit();//Customer need change
  14.         delay100ms(1);
  15.         ioInit();
  16.         adcInit();
  17.         dateInit();
  18.         timerInit();            
  19.         itVectorsInit();
  20.         TKInit();
  21.         GIE  = 1;                     
  22.         Tk_getbaselinedata();//初始化基线
  23.         while(!(tick2 == 2));//芯片配置字中的看么狗没有使能
  24.     while(1){
  25.                 clr_wdt();//清看门狗        
  26.                 Tk_service();
  27.                 Timer_check();//Check if 10ms tick                 
  28.                 keyScan();
  29.                 stateMonitor();
  30.                 outputCtrl();
  31.     }
  32. }
复制代码

所有资料51hei提供下载:
test.7z (594.05 KB, 下载次数: 61)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-4-11 19:44 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表