【项目介绍】
进入冬季了天气变冷,很多时候躺到床上就不想起来了,看时间不是为了起床,而是看还能睡多久,冷飕飕的空气手机又离床比较远(放近貌似有辐射),实是令人苦恼;现代人看时间,不是看手机,就是看手表,却很少看见另一种记录时间的东西——数码管时钟,这对于一些喜欢数字的人来说,是一种失落和遗憾,不过不用担心,今天我就带着我的数码管时钟Eclock跟大家见面了
【功能介绍】:
1.通过8位数码管自动切换显示年月日、时分秒、温度
2.按键总共有四个,从左至右分别为+、-、下一位选择、进入设置时间
3.时间模式:24小时制
4.秒自动归零:调节时或分后秒即自动归零
5.显示模式:动态扫描
6.加入独立看门狗程序,预防死机
步骤1 所需元器件
材料清单
- STM32F103C8T6单片机最小系统板 X1
- ULN2803达林顿晶体管 X1
- TIP127功率达林顿晶体管 X8
- 74LS07 缓冲器/线路驱动器 X2
- TM1640数码管驱动芯片 X1
- 转接板 SOP转DIP SO28 X1
- TTP223 触摸按键模块 X4
- LM75A温度传感器 X1
- 电源适配器24v1A X1
- 转接接板贴片转直插 SOP转DIP SO8 X1
- 9*15单面镀锡洞洞板 X9
- 1*16单排座 2.54间距 X2
- 红白 双头 2.54mm 端子线 长20cm/10P X8
- 220欧1/2W(0.5W)电阻 X10
- 5英寸LED数码管50101BS共阳 X8
- DC-DC电源模块 3A大电流降压模块5V X1
- 10MM 红发红 圆头红光LED X4
- 3脚黑色DC头DC005 DC座子 X1
- 保险管 夹子 5*20 保险丝夹 X2
- 保险管0.1A X1
- 亚克力透明有机玻璃板 X6
- 铜柱m3 六角铜柱 X20
- 带垫片螺丝 M3*6 X20
- S8050三极管 X1
步骤2 电路图
由于时间原因没有绘出主控电路
步骤3 硬件连接
主控板:
数码管驱动板正面:
数码管驱动板背面:
8个数码管拼装:
上电:
步骤4 时分秒分隔支架(3D打印)
上视频:
代码
/*********************************************************************************************
程序名: 数码管时钟Eclock
编写人: 阿偶
编写时间: 2020年11月1日
编写软件: Keil 4
硬件支持: STM32F103C8 外部晶振8MHz RCC函数设置主频72MHz
说明:
本模板加载了STM32F103内部的RCC时钟设置,并加入了利用滴答定时器的延时函数。
可根据自己的需要增加或删减。
*********************************************************************************************/
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "rtc.h"
#include "TM1640.h"
#include "lm75a.h"
#include "touch_key.h"
#include "buzzer.h"
#include "iwdg.h"
#include "led.h"
int main (void){//主程序
u8 a=0,c=0;
u8 MENU=0;//菜单值
u8 buffer[3];//存入温度
u16 i=0;
u16 t;
u16 j;
u8 rup=0;//调整时间标志位
u8 sd;//进入调整时间标志位
delay_ms(200);//延时200毫秒让其它器件准备
RCC_Configuration(); //系统时钟初始化
I2C_Configuration();//I2C初始化
RTC_Config(); //RTC初始化
RTC_Calibration();//RTC校准函数
TM1640_Init(); //TM1640初始化
TOUCH_KEY_Init();//按键初始化
LM75A_GetTemp(buffer); //读取LM75A的温度数据
LED_Init();
BUZZER_Init();//初始化
BUZZER_BEEP2();//响一声
IWDG_Init(); //初始化并启动独立看门狗
for(j=0;j<10;j++){
TM1640_display(0,j); //初始显示内容
TM1640_display(1,j);
TM1640_display(2,j);
TM1640_display(3,j);
TM1640_display(4,j);
TM1640_display(5,j);
TM1640_display(6,j);
TM1640_display(7,j);
delay_ms(300);
IWDG_Feed(); //喂狗
}
// RTC_Set(2020,11,9,22,58,00); //写入当前时间(1970~2099年有效)
RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
while(1){
if(rup){
rup=0;
RTC_Set(ryear,rmon,rday,rhour,rmin,rsec);
}
if(MENU<3 || MENU>8){
RTC_Get(); //读出RTC时间
LM75A_GetTemp(buffer); //读取LM75A的温度数据
}
t++;//设置切换显示时间
if(MENU<3){
if(t==1)MENU=0;
if(t==3000)MENU=1;//年月日的显示时长
if(t==15000)MENU=2;//时分秒的显示时长
if(t==15025)t=0;//温度的显示时长
}
if(MENU==0){//显示年月日
TM1640_display(0,(ryear%100)/10); //年
TM1640_display(1,(ryear%100)%10);
TM1640_display(2,21);// -
TM1640_display(3,rmon/10);//月
TM1640_display(4,rmon%10);
TM1640_display(5,21);// -
TM1640_display(6,rday/10);//日
TM1640_display(7,rday%10);
TM1640_led(0x00);
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));
sd=0;
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){ //读触摸按键的电平
MENU=0;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){ //读触摸按键的电平
MENU=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){ //读触摸按键的电平
MENU=2;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){ //读触摸按键的电平
MENU=3;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D));
}
}
if(MENU==1){//显示时分秒
TM1640_display(0,20); //无
TM1640_display(1,20); //无
TM1640_display(2,rhour/10); //时
TM1640_display(3,rhour%10+10);
TM1640_display(4,rmin/10); //分
TM1640_display(5,rmin%10+10);
TM1640_display(6,rsec/10); //秒
TM1640_display(7,rsec%10);
TM1640_led(0x00);
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0));
sd=1;
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){ //读触摸按键的电平
MENU=0;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){ //读触摸按键的电平
MENU=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){ //读触摸按键的电平
MENU=2;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){ //读触摸按键的电平
MENU=3;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D));
}
}
if(MENU==2){//显示温度
TM1640_display(0,20); //无
TM1640_display(1,20); //无
if(buffer[0])
TM1640_display(2,21); //正负号
else
TM1640_display(2,20);
TM1640_display(3,(buffer[1]%100)/10);//温度
TM1640_display(4,(buffer[1]%10)+10);
TM1640_display(5,(buffer[2]%100)/10);
TM1640_display(6,buffer[2]%10);
TM1640_display(7,22);//c
TM1640_led(0x00);
GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1));
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){ //读触摸按键的电平
MENU=0;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){ //读触摸按键的电平
MENU=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){ //读触摸按键的电平
MENU=2;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){ //读触摸按键的电平
MENU=3;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D));
}
delay_ms(200);//延时200毫秒让温度传感器有时间读取数据
}
if(MENU==3){//显示SET
TM1640_display(0,23); //无
TM1640_display(1,24);
TM1640_display(2,25);
TM1640_display(3,20);
TM1640_display(4,20);
TM1640_display(5,20);
TM1640_display(6,20);
TM1640_display(7,20);
TM1640_led(0x00);
BUZZER_BEEP3();
delay_ms(1000);
switch (sd)
{
case 0:
MENU=4;
break;
case 1:
MENU=7;
break;
default:
break;
}
}
//调时从这里开始
if(MENU==4){//年设置
i++;
if(i>600){
TM1640_display(0,(ryear%100)/10); //年调时闪烁
TM1640_display(1,(ryear%100)%10);
}else{
TM1640_display(0,20);
TM1640_display(1,20);
}
if(i>1200)i=0;
TM1640_display(2,21);// -
TM1640_display(3,rmon/10);//月
TM1640_display(4,rmon%10);
TM1640_display(5,21);// -
TM1640_display(6,rday/10);//日
TM1640_display(7,rday%10);
TM1640_led(0x00);
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){
i=601;
ryear++;
if(ryear>2099)ryear=2000;
TM1640_display(0,(ryear%100)/10); //年
TM1640_display(1,(ryear%100)%10);
delay_ms(80);
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
//单击后执行的程序放到此处
i=601;
ryear++;
if(ryear>2099)ryear=2000;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){
i=601;
ryear--;
if(ryear<2000)ryear=2099;
TM1640_display(0,(ryear%100)/10); //年
TM1640_display(1,(ryear%100)%10);
delay_ms(80);
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
//单击后执行的程序放到此处
i=601;
ryear--;
if(ryear<2000)ryear=2099;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){ //读触摸按键的电平
MENU=5;
rup=1;//调整完时间写入RTC标志位
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){ //读触摸按键的电平
MENU=0;
rup=1;//调整完时间写入RTC标志位
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D));
}
}
if(MENU==5){//月设置
TM1640_display(0,(ryear%100)/10); //年
TM1640_display(1,(ryear%100)%10);
TM1640_display(2,21);// -
i++;
if(i>600){
TM1640_display(3,rmon/10);//月调时闪烁
TM1640_display(4,rmon%10);
}else{
TM1640_display(3,20);
TM1640_display(4,20);
}
if(i>1200)i=0;
TM1640_display(5,21);// -
TM1640_display(6,rday/10);//日
TM1640_display(7,rday%10);
TM1640_led(0x00);
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){
i=601;
rmon++;
if(rmon>12)rmon=1;
TM1640_display(3,rmon/10);//月
TM1640_display(4,rmon%10);
delay_ms(80);
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
//单击后执行的程序放到此处
i=601;
rmon++;
if(rmon>12)rmon=1;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){
i=601;
rmon--;
if(rmon<1)rmon=12;
TM1640_display(3,rmon/10);//月
TM1640_display(4,rmon%10);
delay_ms(80);
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
//单击后执行的程序放到此处
i=601;
rmon--;
if(rmon<1)rmon=12;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){ //读触摸按键的电平
MENU=6;
rup=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){ //读触摸按键的电平
MENU=0;
rup=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D));
}
}
if(MENU==6){//日设置
TM1640_display(0,(ryear%100)/10); //年
TM1640_display(1,(ryear%100)%10);
TM1640_display(2,21);// -
TM1640_display(3,rmon/10);//月
TM1640_display(4,rmon%10);
TM1640_display(5,21);// -
i++;
if(i>600){
TM1640_display(6,rday/10);//日调时闪烁
TM1640_display(7,rday%10);
}else{
TM1640_display(6,20);
TM1640_display(7,20);
}
if(i>1200)i=0;
TM1640_led(0x00);
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){
i=601;
rday++;
if(rday>31)rday=1;
TM1640_display(6,rday/10);//日更新显示
TM1640_display(7,rday%10);
delay_ms(80);//长按的速度变慢
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
//单击后执行的程序放到此处
i=601;
rday++;
if(rday>31)rday=1;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){
i=601;
rday--;
if(rday<1)rday=31;
TM1640_display(6,rday/10);//日更新显示
TM1640_display(7,rday%10);
delay_ms(80);
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
//单击后执行的程序放到此处
i=601;
rday--;
if(rday<1)rday=31;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){ //读触摸按键的电平
MENU=4;
rup=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){ //读触摸按键的电平
MENU=0;
rup=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D));
}
}
if(MENU==7){//小时设置
TM1640_display(0,20); //无
TM1640_display(1,20); //无
i++;
if(i>600){
TM1640_display(2,rhour/10); //时
TM1640_display(3,rhour%10+10);
}else{
TM1640_display(2,20);
TM1640_display(3,20);
}
if(i>1200)i=0;
TM1640_display(4,rmin/10); //分
TM1640_display(5,rmin%10+10);
TM1640_display(6,rsec/10); //秒
TM1640_display(7,rsec%10);
TM1640_led(0x00);
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){
i=601;
rhour++;
if(rhour>23)rhour=0;
TM1640_display(2,rhour/10); //时
TM1640_display(3,rhour%10+10);
delay_ms(80);
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
i=601;
rhour++;
if(rhour>23)rhour=0;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){
i=601;
if(rhour==0)rhour=24;
rhour--;
TM1640_display(2,rhour/10); //时
TM1640_display(3,rhour%10+10);
delay_ms(80);
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
//单击后执行的程序放到此处
i=601;
if(rhour==0)rhour=24;
rhour--;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){ //读触摸按键的电平
MENU=8;
rup=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){ //读触摸按键的电平
MENU=1;
rup=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D));
}
}
if(MENU==8){//分钟设置
TM1640_display(0,20); //无
TM1640_display(1,20); //无
TM1640_display(2,rhour/10); //时
TM1640_display(3,rhour%10+10);
i++;
if(i>600){
TM1640_display(4,rmin/10); //分
TM1640_display(5,rmin%10+10);
}else{
TM1640_display(4,20);
TM1640_display(5,20);
}
if(i>1200)i=0;
TM1640_display(6,rsec/10); //秒
TM1640_display(7,rsec%10);
TM1640_led(0x00);
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A)){
i=601;
rmin++;
if(rmin>59)rmin=0;
rsec=0;
TM1640_display(4,rmin/10); //分
TM1640_display(5,rmin%10+10);
delay_ms(80);
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
//单击后执行的程序放到此处
i=601;
rmin++;
if(rmin>59)rmin=0;
rsec=0;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){//判断长短键
while((GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B))&&c<KEYA_SPEED1){ //循环判断长按,到时跳转
c++;delay_ms(10); //长按判断的计时
}
if(c>=KEYA_SPEED1){ //长键处理
//长按后执行的程序放到此处
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B)){
i=601;
if(rmin==0)rmin=60;
rmin--;
rsec=0;
TM1640_display(4,rmin/10); //分
TM1640_display(5,rmin%10+10);
delay_ms(80);
BUZZER_BEEP1();//响一声
IWDG_Feed(); //喂狗
}
}else{ //单击处理
if(a==0){ //判断单击
//单击后执行的程序放到此处
i=601;
if(rmin==0)rmin=60;
rmin--;
rsec=0;
BUZZER_BEEP1();//响一声
}
}
a=0;c=0; //参数清0
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C)){ //读触摸按键的电平
MENU=7;
rup=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C));
}
if(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D)){ //读触摸按键的电平
MENU=1;
rup=1;
BUZZER_BEEP1();//响一声
while(GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D));
}
}
IWDG_Feed(); //喂狗
}
}
【项目总结】
1、后期可以加入闹钟功能
2、时间的修改可以用红外接收模式
【相关资料】
最后分享程序的源文件、支架stl文件、亚克力加工图
附件
rzegkly2021.01.08
3D打印和电子结合,好好学习
hnqylgq2020.12.04
这是我到目前为止见过焊的最好的洞洞板,厉害!