
开源协议
:GPL 3.0
描述
实际上就是一个计时器加上泡面盖,所以叫做泡面计时器(自我吐槽)
设备功能
设备能够提供倒计时功能,当到达时间后蜂鸣器发声提醒,设备具有锂电池,具有便携性。
设备实物图

硬件设计
设备具有一块120毫安时的锂电池,通过TypeC口可以进行充电,请注意CC1 CC2引脚需要外部下拉,设备使用TP4054芯片为锂电池提供充放保护功能。


设备使用四位数码管+TM1637驱动芯片作为显示模块。

设备具有三个按键,分别实现了“数值加/减”和 “开始/停止计时”功能,按键位于数码管右侧,竖向排列。

设备具有两个状态指示灯,第一个是外部电源输入指示灯,当TypeC口有外部电源输入时该灯亮,能够表示电池正在充电。
另一个是VOUT输出指示灯,VOUT由外部开关控制,当开关闭合时,设备开始工作,否则设备不启动,启动时VOUT状态灯亮。

接口说明:设备PCB共有三组接口,位于数码管上方横向排列,下图是PCB正反示意图。


最左侧的是电池接口,将锂电池接入该接口,为设备提供电源。
紧挨着的是外部开关接口,开关连接该接口,实现供电开/关。
最右侧是烧录接口,用于芯片烧录,本设备使用的芯片是STC8G1K08A,请使用适配的串口烧录器进行烧录。


程序设计
使用stc-isp + keil5 + vscode进行开发,附件中提供hex文件。
tm1637.c / tm1637.h 为设备提供数码管显示控制功能。
main.c 是主要程序文件。
ST8HGH 是头文件。

#include "STC8G.H"#include "INTRINS.H"#include "tm1637.h"/** * 引脚定义 */sbit Buzz_IO = P5^4; // 蜂鸣器/** * 变量定义 */unsigned char mode_flag = 0; // 默认为参数设置模式unsigned char data_min = 3; // 定时值unsigned int back_time_s = 0; // 倒计时值unsigned char isok = 0; // 倒计时结束标志位/******************系统初始化**************** */void System_Init(){ P5M0 |= 0x10; P5M1 &= ~0x10; // Buzz_IO 设置为推挽输出 Buzz_IO = 0; P3M0 &= ~0x0c; P3M1 &= ~0x0c; P3M0 &= ~0x03; P3M1 &= ~0x03; P5M0 &= ~0x20; P5M1 &= ~0x20;}/******************系统初始化**************** *//******************按键监测**************** */#define Button1 0#define Button2 1#define Button3 2void ButtonClick(unsigned char button){ switch (button) { case Button1: // 增加 if (mode_flag == 0) { data_min += 1; if(data_min > 99){ data_min = 99; } } break; case Button2: if (mode_flag == 0) { mode_flag = 1; // 进入倒计时模式 back_time_s = data_min * 60; }else{ mode_flag = 0; // 参数模式 back_time_s = 0; } break; case Button3: // 减少 if (mode_flag == 0) { data_min -= 1; if(data_min < 1){ data_min = 1; } } break; default: break; }}void keyCheckLoop(){ P55 = P30 = P31 = 1; //拉高按键 if(P55 == 0){ ButtonClick(Button3); while(P55 == 0); } if(P30 == 0){ ButtonClick(Button1); while(P30 == 0); } if(P31 == 0){ ButtonClick(Button2); while(P31 == 0); }}/******************按键监测**************** *//******************倒计时模块**************** */void Delay300ms(void) //@11.0592MHz{ unsigned char data i, j, k; _nop_(); _nop_(); i = 13; j = 156; k = 83; do { do { while (--k); } while (--j); } while (--i);}void stopCheck(){ unsigned char number = 0; if (isok == 1) // 计时结束 { for (number = 0; number < 3; number++) { Buzz_IO = 1; Delay300ms(); Delay300ms(); Buzz_IO = 0; Delay300ms(); Delay300ms(); Buzz_IO = 1; Delay300ms(); Delay300ms(); Buzz_IO = 0; Delay300ms(); Delay300ms(); Buzz_IO = 1; Delay300ms(); Buzz_IO = 0; Delay300ms(); Delay300ms(); Delay300ms(); Delay300ms(); } mode_flag = 0; isok = 0; } }int timer1_number = 0;void Timer0_Isr(void) interrupt 1{ timer1_number++; if (timer1_number >= 20) // 每秒触发一次 { timer1_number = 0; if (mode_flag == 1) { back_time_s -= 1; if(back_time_s == 0){ isok = 1; } } }}void Timer0_Init(void) //50毫秒@12.000MHz{ AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0xB0; //设置定时初始值 TH0 = 0x3C; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器0中断 EA = 1; //使能总中断}/******************倒计时模块**************** *//******************数码管显示**************** */void SHUMA_DISPLAY(){ // 调用该方法更新显示界面 switch (mode_flag) { case 0: //参数设置界面 if (data_min < 10) { TM1637_Display(19,21,21,data_min); }else{ TM1637_Display(19,21,data_min/10,data_min%10); } break; case 1: //倒计时运行界面 TM1637_DisplayInt(back_time_s); break; default: break; }}/******************数码管显示**************** */void main(){ System_Init(); Timer0_Init(); while(1){ SHUMA_DISPLAY(); //界面显示 keyCheckLoop(); // 按键检测 stopCheck(); //结束监测 }}如何烧录
你需要具有一些STC基础,烧录不是问题。

CH_TX / CH_RX 代表串口烧录器的 TX / RX 引脚。
3D外壳注意事项
外壳在打印时请扩到101%或者102%。

设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论