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

从F到0 - From F to 0

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

C51/STC单片机 定时器中断实现精准1小时循环通断电控制器 (带有源蜂鸣器,1Hz闪烁LED)

[复制链接]
发表于 2021-9-27 11:56:05 | 显示全部楼层 |阅读模式
本帖最后由 GPIO 于 2021-9-27 11:57 编辑

1.png
上电后继电器吸合1小时,释放1小时,带1Hz闪烁LED,继电器吸合或释放后有源蜂鸣器响半秒,定时器中断实现。
型号:STC任意 (推荐8脚STC单片机) 晶振频率:12Mhz
  1. #include "STC15F104E.h"
  2. #include "intrins.h"
  3. #define u8 unsigned char
  4. #define u16 unsigned int
  5. #define SEC 3600             //吸合3600秒 释放3600秒 (最长65535秒) 可自行修改
  6. sbit relay = P3 ^ 2;        //继电器(MOS管) 低电平吸合(导通)
  7. sbit led_1hz = P3 ^ 3;      //秒闪烁LED 低电平点亮
  8. sbit beep = P3 ^ 4;         //有源蜂鸣器 低电平鸣叫
  9. void InitTimer0(){
  10.     TMOD = 0x01;
  11.     TH0 = 0xEC;
  12.     TL0 = 0x78;
  13.     EA = 1;
  14.     ET0 = 1;
  15.     TR0 = 1;
  16. }

  17. void main() {
  18.     led_1hz = 1;
  19.     relay = 0;
  20.     InitTimer0();
  21.     WDT_CONTR = 0x27;           //开看门狗
  22.     while (1) {
  23.         _nop_(); _nop_(); _nop_();
  24.         WDT_CONTR |= 0x10;      //看门狗喂狗
  25.         _nop_(); _nop_(); _nop_();
  26.     }
  27. }

  28. void Timer0Interrupt() interrupt 1 {        //5毫秒定时器中断
  29.     static u8 ms5 = 0;
  30.     static u16 sec = 0;
  31.     TH0 = 0xEC;
  32.     TL0 = 0x78;
  33.     if (ms5 == 0 || ms5 == 100) {
  34.         led_1hz = !led_1hz;
  35.         beep = !(ms5 == 0 && sec == 0);
  36.     }

  37.     if (++ms5 >= 200) {
  38.         ms5 = 0;
  39.         if (++sec >= SEC) {
  40.             sec = 0;
  41.             relay = !relay;
  42.         }

  43.     }

  44. }
复制代码

相关帖子

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

本版积分规则

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

腾讯云安全认证

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

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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