用STC8G1K08做一个定时给鱼缸打氧气的小模块
<p>今天使用STC8G1K08做个定时器,配个继电器实现定时给鱼缸打氧玩玩</p><p><img src="data/attachment/forum/202507/02/164303itvax49cnlhast2x.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202507/02/164326t15z6t5vxh6z4k2z.png" alt="image.png" title="image.png" /></p>
<p>P5.5作为输出,实现开关定时</p>
<p>代码如下:</p>
<p>#include <stc8g.h>// 包含 STC8G1K08 单片机的寄存器定义头文件</p>
<p>#define uint unsigned int<br />
#define uchar unsigned char</p>
<p>// 定义 P5.5 引脚<br />
sbit P5_5 = P5^5;// P5.5 接 输出</p>
<p>// 定时器 0 初始化<br />
void timer0_init() {<br />
TMOD |= 0x01;// 定时器 0 模式 1(16 位定时器)<br />
TH0 = 0xFC; // 定时器初值,12MHz 晶振下约 1ms<br />
TL0 = 0x18;<br />
ET0 = 1; // 使能定时器 0 中断<br />
EA = 1; // 使能总中断<br />
TR0 = 1; // 启动定时器 0<br />
}</p>
<p>// 全局变量<br />
uint ms_count = 0; // 毫秒计数器<br />
uint seconds_count = 0; // 秒计数器<br />
uint minutes_count = 0; // 分钟计数器</p>
<p>// 定时器 0 中断服务函数<br />
void timer0_isr() interrupt 1 {<br />
TH0 = 0xFC;// 重装定时器初值<br />
TL0 = 0x18;</p>
<pre><code>ms_count++;// 每 1ms 计数一次
if (ms_count >= 1000) {// 1 秒
ms_count = 0;
seconds_count++;
if (seconds_count >= 60) {// 1 分钟
seconds_count = 0;
minutes_count++;
}
}
</code></pre>
<p>}</p>
<p>void main() {<br />
P5M0 = 0x00;// 设置 P5 口为准双向口<br />
P5M1 = 0x00;</p>
<pre><code>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;// 重置分钟计数器
}
}
</code></pre>
<p>}</p>
<p>粗略制作,还请大佬指导</p>
学习打卡,放在同一个帖子中 隐约 发表于 2024-12-20 20:40
一个帖子写上所有学习内容吗?
是,在自己的帖子中,一集一个楼层 神农鼎 发表于 2024-12-20 20:43
是,在自己的帖子中,一集一个楼层
好的谢谢 实现每约30分钟打开继电器一次约10分钟 这个模块使用小功率电器还行,如果使用大功率需要单独给继电器和单片机供电,继电器单独做开关作用{:4_167:} 粗糙的焊接成品
页:
[1]