OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8628|回复: 13

如何通过按键控制串口来修改已经打印出的RTC时钟?

[复制链接]

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
发表于 2022-11-10 13:35:58 | 显示全部楼层 |阅读模式
想问问各位大佬,就是用按键控制串口打印RTC时钟,打印我打印出来了,要通过按键修改的话,代码要怎么写呢?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2022-6-29
在线时间
33 小时
发表于 2022-11-12 20:44:15 | 显示全部楼层
第一步实现通过一个按键设置一个固定的RTC时钟
第二步实现至少3个按键,对应时、分、秒,按一下小时按键RTC时钟小时就加一,加到24就归零,按一下分钟键RTC时钟分钟就加一,加到60就归零,秒也是一样的
回复 支持 1 反对 0

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2022-6-29
在线时间
33 小时
发表于 2022-11-13 23:43:01 | 显示全部楼层
也可以只要2个按键,一个选择时分秒,一个加1
回复 支持 反对

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2022-11-14 15:50:02 | 显示全部楼层
sousuna 发表于 2022-11-12 20:44
第一步实现通过一个按键设置一个固定的RTC时钟
第二步实现至少3个按键,对应时、分、秒,按一下小时按键RT ...

搞出来了,谢谢
回复 支持 反对

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2022-11-15 15:00:29 | 显示全部楼层
sousuna 发表于 2022-11-12 20:44
第一步实现通过一个按键设置一个固定的RTC时钟
第二步实现至少3个按键,对应时、分、秒,按一下小时按键RT ...

老哥,问个和这个相关的,我打印出来的实时时钟,是那种一行一行的,怎么让它打印出只有一行的实时时钟?
回复 支持 反对

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2022-11-15 15:01:03 | 显示全部楼层
sousuna 发表于 2022-11-13 23:43
也可以只要2个按键,一个选择时分秒,一个加1

老哥,问个和这个相关的,请问我打印出来的实时时钟,是那种一行一行的,怎么让它打印出只有一行的实时时钟?
回复 支持 反对

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2022-6-29
在线时间
33 小时
发表于 2022-11-15 21:48:18 | 显示全部楼层
上截图,不知道你说的是什么意思?
回复 支持 反对

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2022-11-23 09:06:35 | 显示全部楼层
sousuna 发表于 2022-11-15 21:48
上截图,不知道你说的是什么意思?

老哥,能不能加个微信,微信上问你方便一点
回复 支持 反对

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2022-11-23 09:08:11 | 显示全部楼层
sousuna 发表于 2022-11-13 23:43
也可以只要2个按键,一个选择时分秒,一个加1

四个按键,已经用了两个了,还剩两个,请问怎么用这两个按键来控制年月日、时分秒?
回复 支持 反对

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2022-6-29
在线时间
33 小时
发表于 2022-11-23 18:32:28 | 显示全部楼层
wsh15249375668 发表于 2022-11-23 09:08
四个按键,已经用了两个了,还剩两个,请问怎么用这两个按键来控制年月日、时分秒?

设置一个flag,其值012345对应年月日时分秒,按键每按一下,flag+1,选择年月日时分秒的一个,按到6,清零;另一个按键按下时,根据当前flag值选择的年月日时分秒,设定是加到24清零还是加到60清零
回复 支持 反对

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2022-6-29
在线时间
33 小时
发表于 2022-11-23 18:34:43 | 显示全部楼层
wsh15249375668 发表于 2022-11-23 09:08
四个按键,已经用了两个了,还剩两个,请问怎么用这两个按键来控制年月日、时分秒?

设定年月日时分秒的按键按下时,最好同时打印一下当前设定的是什么,方便查看
回复 支持 反对

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2022-6-29
在线时间
33 小时
发表于 2022-11-23 21:41:42 | 显示全部楼层
wsh15249375668 发表于 2022-11-23 09:06
老哥,能不能加个微信,微信上问你方便一点

我也是新手,还在探索中,相互学习吧,把你的微信号发我邮箱sousuna@126.com
回复 支持 反对

使用道具 举报

3

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2022-6-29
在线时间
33 小时
发表于 2022-11-28 18:03:59 | 显示全部楼层
main函数主要内容

yearset = calendar.w_year;
monthset = calendar.w_month;
dateset = calendar.w_date;
hourset = calendar.hour;
minset = calendar.min;
secset = calendar.sec;

while (1)
{
        key = KEY_Scan(0);       
        if(key)
        {
                if(key==KEY1_PRES)
                {
                        if(Key1_STA<6) Key4_STA++;
                        else Key1_STA=1;
                        switch(Key1_STA)
                        {
                                case 1:
                                        printf("Year Set\r\n");
                                        break;
                                case 2:
                                        printf("Month Set\r\n");
                                        break;
                                case 3:
                                        printf("Date Set\r\n");
                                        break;
                                case 4:
                                        printf("Hour Set\r\n");
                                        break;
                                case 5:
                                        printf("Minute Set\r\n");
                                        break;
                                case 6:
                                        printf("Second Set\r\n");
                                        break;
                                default:
                                        break;
                        }               
                }else if(key==KEY2_PRES)
                {
                        switch(Key1_STA)
                        {
                                case 1:
                                        if(yearset<2099) yearset++;
                                        else yearset = 1970;
                                        break;
                                case 2:
                                        if(monthset<12)        monthset++;
                                        else monthset = 1;
                                        break;
                                case 3:
                                        if(Is_Leap_Year(yearset))
                                        {
                                                if(monthset==2)
                                                {
                                                        if(dateset<(mon_table[monthset-1]+1))  dateset++;
                                                        else dateset = 1;
                                                }else
                                                {
                                                        if(dateset<mon_table[monthset-1])  dateset++;
                                                        else dateset = 1;
                                                }
                                        }
                                        else
                                        {
                                                if(dateset<mon_table[monthset-1]) dateset++;
                                                else dateset = 1;
                                        }
                                        break;
                                case 4:
                                        if(hourset<23)        hourset++;
                                        else hourset = 0;
                                        break;
                                case 5:
                                        if(minset<59)        minset++;
                                        else minset = 0;
                                        break;
                                case 6:
                                        secset = 0;
                                        break;
                                case 0:
                                        printf("Please press Key1 to select time quantum set!\r\n");
                                        break;
                                default:
                                        break;
                        }
                        RTC_Set(yearset,monthset,dateset,hourset,minset,secset);
                }         
        }else delay_ms(100);
}
回复 支持 反对

使用道具 举报

25

主题

124

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2022-11-1
在线时间
53 小时
 楼主| 发表于 2022-11-29 10:48:41 | 显示全部楼层
sousuna 发表于 2022-11-23 21:41
我也是新手,还在探索中,相互学习吧,把你的微信号发我邮箱吧

发你邮箱了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 22:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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