STM32的综合项目——电子钟

电子钟的需求单

 ——页面1:Page==0

功能:           走时,实时时间显示

显示格式:    23.59.55(小数点,独占一格)

LED灯指示:    DS0亮

按键功能:    Key0:切换界面    

                     Key1:由按键来控制DS6灯的亮灭        

                     Key2:由按键来决定DS4灯的是否进行闪烁

                     Key3:关闭当次闹铃

 ——页面2:Page==1

功能:           时间调整,选择是调整小时,还是调整分钟

显示格式:    0:选择小时:5-01F 01;        1:选择分钟:5 01F-01 (8段码)

LED灯指示:    DS1亮

按键功能:    Key0:切换界面    

                     Key1:选择调整参数,光标变迁 ,起始:调整小时值     

                     Key2:对选中的参数,+1

                     Key3:对选中的参数,-1

 ——页面3:Page==2

功能:           闹铃设置,选择是设置小时,还是设置分钟

显示格式:    0:设置小时:nL-01 01;        1:设置分钟:nL 01-01 (8段码)

LED灯指示:    DS2亮

按键功能:    Key0:切换界面    

                     Key1:选择设置参数,光标变迁 ,起始:设置小时值     

                     Key2:对选中的设置参数,+1

                     Key3:对选中的设置参数,-1

------页面1的示例代码

//走时页面

            case 0:            

                switch (KeyScan())

                {

                    case KEY0_PRESS://切换到时间调整状态

                        Page = 1;

                        Adj_Time = 0;        //进入此页面时的默认值为进入时的 小时 和 分钟 值,光标在小时前。

                        Adj_Hour = Hour;

                        Adj_Min = Min;

                        Button_Flag = 1;                    

                        break;

                    case KEY1_PRESS://切换到闹钟开关    

                        Alarm_Flag = !Alarm_Flag;

                        HAL_GPIO_WritePin(DS_GPIO_Port, DS6_Pin, Alarm_Flag?DS_ON:DS_OFF);

                        Button_Flag = 1;

                        break;

                    case KEY2_PRESS://切换LED闪烁开关

                        Flash_Flag = !Flash_Flag;

                        if(!Flash_Flag)

                        {

                            HAL_GPIO_WritePin(DS_GPIO_Port, DS4_Pin, DS_OFF);

                        }

                        Button_Flag = 1;    

                        break;

                    case WKUP_PRESS://关闭当次闹铃

                        HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, BEEP_OFF);

                        Button_Flag = 1;

                        break;

                    default:

                        break;

                }

        break;

------页面2的示例代码

//时间调整页面

      case 1:

                switch (KeyScan())

                {

                    case KEY0_PRESS://切换到闹铃时间调整状态

                        Page = 2;

                        Button_Flag = 1;

                        break;

                    case KEY1_PRESS://切换选择调整参数            

                        Adj_Time = !Adj_Time;

                        Button_Flag = 1;

                        break;

                    case KEY2_PRESS://对选中参数+1            

                        if (!Adj_Time)

            {

                            Adj_Hour = (Adj_Hour==23)?0:Adj_Hour+1;

                        }

                        else

                        {

                            Adj_Min = (Adj_Min==59)?0:Adj_Min+1;

                        }

                        Button_Flag = 1;

                        break;

                    case WKUP_PRESS://对选中参数-1

                        if (!Adj_Time)

                        {

                            Adj_Hour = (Adj_Hour == 0)?23:Adj_Hour-1;

                        }

                        else

                        {

                            Adj_Min = (Adj_Min == 0)?59:Adj_Min-1;

                        }

                        Button_Flag = 1;

                        break;

                    default:

                        break;

                }

        break;

-----------页面3的示例代码

//闹钟调整页面

            case 2:

                switch (KeyScan())

                {

                    case KEY0_PRESS://切换到走时状态,前述调整的走时和闹铃时间将会生效,秒参数变为0。

                        Page = 0;

                        Hour = Adj_Hour;

                        Min = Adj_Min;

                        Sec = 0;

                        Button_Flag = 1;

                        break;

                    case KEY1_PRESS://切换选择调整参数            

                        Adj_alarm = !Adj_alarm;

                        Button_Flag = 1;

                        break;

                    case KEY2_PRESS://对选中参数+1            

                        if (!Adj_alarm)

                        {

                            Alarm_Hour = (Alarm_Hour==23)?0:Alarm_Hour+1;

                        }

                        else

                        {

                            Alarm_Min = (Alarm_Min==59)?0:Adj_Min+1;

                        }

                        Button_Flag = 1;

                        break;

                    case WKUP_PRESS://对选中参数-1

                        if (!Adj_alarm)

                        {

                            Alarm_Hour = (Alarm_Hour==0)?23:Alarm_Hour-1;

                        }

                        else

                        {

                            Alarm_Min = (Alarm_Min==0)?59:Alarm_Min-1;

                        }

                        Button_Flag = 1;

                        break;

                    default:

                        break;

                }

                break;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值