设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 1176|回复: 0
收起左侧

STC单片机实现的简易封口机控制器 (定时器中断实现,带掉电模式)

[复制链接]
发表于 2021-10-4 15:43:01 | 显示全部楼层 |阅读模式
晶振频率:12Mhz 单片机型号:STC任意
封口机的按压开关按下后,P3.2下降沿到来。
P3.3低电平控制继电器或MOS管 打开发热丝。
松开或超过3秒,则停止发热,按压未满0.25秒不发热。
松开10秒进入掉电模式 (P3.2下降沿中断唤醒)。

@.png
  1. #include "STC15F104E.h"
  2. #include "intrins.h"
  3. #define u8 unsigned char
  4. #define u16 unsigned int
  5. sbit key = P3 ^ 2;      //按压开关 低电平按下
  6. sbit mos = P3 ^ 3;      //低电平打开封口机发热丝
  7. void InitTimer0(){
  8.     TMOD = 0x01;
  9.     TH0 = 0x0FC;
  10.     TL0 = 0x18;
  11.     EA = 1;
  12.     ET0 = 1;
  13.     TR0 = 1;
  14. }

  15. void main(){
  16.     WDT_CONTR = 0x27;
  17.     InitTimer0();
  18.     IT0 = 1;    //INT0下降沿中断
  19.     EX0 = 1;    //开INT0中断
  20.     PX0 = 1;    //INT0中断高优先级
  21.     while(1){
  22.         WDT_CONTR |= 0x10;
  23.     }
  24. }

  25. void exint0() interrupt 0 {      //P3.2(INT0)中断入口
  26.     _nop_();
  27.     _nop_();
  28.     _nop_();
  29.     _nop_();
  30. }

  31. void Timer0Interrupt() interrupt 1{     //12Mhz 1mS 定时器中断
  32.     static u16 keyms = 0;
  33.     static u16 leave = 0;
  34.     TH0 = 0x0FC;
  35.     TL0 = 0x18;
  36.     if (key) {
  37.         keyms = 0;
  38.         if (++leave >= 10000) {     //10秒无按下
  39.             PCON |= 0x02;   //进入掉电模式
  40.             _nop_();_nop_();_nop_();_nop_();
  41.             leave = 0;
  42.         }
  43.     } else {
  44.         leave = 0;
  45.         if (keyms != 0xFFFF) {
  46.             keyms++;
  47.         }
  48.     }
  49.     mos = !(keyms >= 250 && keyms <= 3000);                //3000毫秒,可自行修改
  50. }
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-3-29 20:07 , Processed in 2.044116 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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