今天使用STC8G1K08做个定时器,配个继电器实现定时给鱼缸打氧玩玩


P5.5作为输出,实现开关定时
代码如下:
#include <stc8g.h> // 包含 STC8G1K08 单片机的寄存器定义头文件
#define uint unsigned int
#define uchar unsigned char
// 定义 P5.5 引脚
sbit P5_5 = P5^5; // P5.5 接 输出
// 定时器 0 初始化
void timer0_init() {
TMOD |= 0x01; // 定时器 0 模式 1(16 位定时器)
TH0 = 0xFC; // 定时器初值,12MHz 晶振下约 1ms
TL0 = 0x18;
ET0 = 1; // 使能定时器 0 中断
EA = 1; // 使能总中断
TR0 = 1; // 启动定时器 0
}
// 全局变量
uint ms_count = 0; // 毫秒计数器
uint seconds_count = 0; // 秒计数器
uint minutes_count = 0; // 分钟计数器
// 定时器 0 中断服务函数
void timer0_isr() interrupt 1 {
TH0 = 0xFC; // 重装定时器初值
TL0 = 0x18;
ms_count++; // 每 1ms 计数一次
if (ms_count >= 1000) { // 1 秒
ms_count = 0;
seconds_count++;
if (seconds_count >= 60) { // 1 分钟
seconds_count = 0;
minutes_count++;
}
}
}
void main() {
P5M0 = 0x00; // 设置 P5 口为准双向口
P5M1 = 0x00;
P5_5 = 1; // 初始化 P5.5 为高电平
timer0_init(); // 初始化定时器 0
while (1) {
if (minutes_count >= 1) { // 1 分钟后
P5_5 = 0; // P5.5 输出低电平
}
if (minutes_count >= 30) { // 30 分钟后
P5_5 = 1; // P5.5 输出高电平
minutes_count = 0; // 重置分钟计数器
}
}
}
粗略制作,还请大佬指导