• stm32菜单按键的设计


    有点懒。看注释吧


    // k0,enter/enable;k3:esc/disable
    // k1,value+/menu+;k2:menu-/value-;

    #include "sysmenu.h"

    #define KUP 2
    #define KDWN 1
    #define KNA 0

    uint8_t ktimeout; //0:logging time forever;n>0:logging n mins for keyed
    uint8_t kloginlife; //the count for logging refer to logtimeout;0:logoff
    uint8_t kstat; //logoff=0;1=menu;2=value
    uint8_t kstep; //menu and value step count
    // uint8_t km 0:kstep,1:kstep--,2:kstep++
    uint16_t kvar; //For the value to change

    uint8_t kmenu_init(void)
    {
    kstat=0;
    kstep=0;
    kvar=0;
    }

    void kinfo(void)
    {
    /*
    printf("1-SystemCoreClock %d ",SystemCoreClock);
    printf("2-RCC_APB2Periph_USART1 %d ",RCC_APB2Periph_USART1);
    printf("3-USART1->BRR %d ",USART1->BRR);
    printf("Now is %d-%02d-%02d %02d:%02d:%02d Week %d ",mcalendar.year,mcalendar.month,mcalendar.day,mcalendar.hour,mcalendar.min,mcalendar.sec,mcalendar.week);
    // return 0;
    */
    printf("Kylin MINI ");
    }

    void kdata(void)
    {
    printf("%d-%02d-%02d %02d:%02d:%02d Week %d ",mcalendar.year,mcalendar.month,mcalendar.day,mcalendar.hour,mcalendar.min,mcalendar.sec,mcalendar.week);
    }

    void kclean(void)
    {
    printf(" ");
    }

    void klogon(void)
    {
    if(ktimeout>0){
    kloginlife=ktimeout;
    }
    }

    void klogoff(void)
    {
    kloginlife=0;
    kclean();
    printf(" Logoffing");
    }

    // key0 for enter or enable
    void kset0(void){
    kclean();
    switch(kstat){
    case 0:
    kstat=1;
    klogon();
    kmenu(0);
    // printf(" loggin ");
    break;
    case 1:
    kstat=2;
    klogon();
    kedit();
    break;
    case 2:
    klogon();
    kack();
    kstat=1;
    break;
    default:kstat=1;kmenu(KNA);
    }
    }

    //key1 for menu++ or value++
    void kset1(void)
    {
    kclean();
    switch(kstat){
    case 0:
    printf(" KEY up");
    break;
    case 1:
    klogon();
    kmenu(KUP);
    break;
    case 2:
    klogon();
    kvalue(KUP);
    break;
    }
    }

    //key2 for menu-- or value--
    void kset2(void)
    {
    kclean();
    switch(kstat){
    case 0:
    printf(" KEY down");
    break;
    case 1:
    klogon();
    kmenu(KDWN);
    break;
    case 2:
    klogon();
    kvalue(KDWN);
    break;
    }
    }

    //ke3 for quit or disable
    void kset3(void)
    {
    kclean();
    switch(kstat){
    case 0:
    klogoff();
    printf(" Logoffed");
    break;
    case 1:
    kstat=0;
    klogoff();

    break;
    case 2:
    kstat=1;
    klogon();
    kvar=0;
    kmenu(KNA);
    break;
    default:printf(" KEY quit ");
    }
    }

    void kmenu(uint8_t km)
    {
    if(km==KDWN){
    if(kstep){
    kstep--;
    }
    }
    if(km==KUP){
    kstep++;
    }
    //km=KNA;
    switch(kstep){
    case 0:
    printf(" Show info");
    break;
    case 1:
    printf(" Show data");
    break;
    case 2:
    printf(" Show temp");
    break;
    case 3:
    printf(" Show RH");
    break;
    case 4:
    printf(" Set year");
    break;
    case 5:
    printf(" Set mon");
    break;
    case 6:
    printf(" Set day");
    break;
    case 7:
    printf(" Set hour");
    break;
    case 8:
    printf(" Set min");
    break;
    case 9:
    printf(" Set sec");
    break;
    default:kstep=0; printf(" Logoff");
    }
    }

    void kedit(void)
    {
    switch(kstep){
    case 0:
    printf(" Show info:");
    kinfo();
    break;
    case 1:
    printf(" Show data:");
    kdata();
    break;
    case 2:
    printf(" Show temp:");
    printf("%.2f",SHT2x_MeasureTempPoll());
    break;
    case 3:
    printf(" Show RH:");
    printf("%.2f ",SHT2x_MeasureHumiPoll());
    break;
    case 4:
    printf(" Set year:");
    kvar=mcalendar.year;
    break;
    case 5:
    printf(" Set mon:");
    kvar=mcalendar.month;
    break;
    case 6:
    printf(" Set day:");
    kvar=mcalendar.day;
    break;
    case 7:
    printf(" Set hour:");
    kvar=mcalendar.hour;
    break;
    case 8:
    printf(" Set min:");
    kvar=mcalendar.min;
    break;
    case 9:
    printf(" Set sec:");
    kvar=mcalendar.sec;
    break;
    default: kstep=0;printf(" Nothing ");
    }
    if(kvar>0){
    printf("%d",kvar);
    }
    }


    void kvalue(uint8_t km)
    {
    switch(kstep){
    /*
    case 0:
    printf(" keypress info: ");
    if(km==KUP){
    printf(" KEY UP ");
    }
    if(km==KDWN){
    printf(" KEY DOWN");
    }
    break;
    case 1:
    printf(" keypress data:");
    if(km==KUP){
    printf(" KEY UP ");
    }
    if(km==KDWN){
    printf(" KEY DOWN");
    }
    break;
    case 2:
    printf(" Show temp: ");
    if(km==KUP){
    printf(" KEY UP ");
    }
    if(km==KDWN){
    printf(" KEY DOWN");
    }
    break;
    case 3:
    printf(" Show RH:");
    if(km==KUP){
    printf(" KEY UP ");
    }
    if(km==KDWN){
    printf(" KEY DOWN");
    }
    break;
    */
    case 4:
    printf(" Set year:");
    if(km==KUP){
    if(kvar<2100){
    kvar+=1;
    }
    }
    if(km==KDWN){
    if(kvar>2000){
    kvar-=1;
    }
    }
    break;
    case 5:
    printf(" Set mon:");
    if(km==KUP){
    if(kvar<12){
    kvar++;
    }
    }
    if(km==KDWN){
    if(kvar>0){
    kvar--;
    }
    }
    break;
    case 6:
    printf(" Set day:");
    if(km==KUP){
    if(kvar<31){
    kvar++;
    }
    }
    if(km==KDWN){
    if(kvar>0){
    kvar--;
    }
    }
    break;
    case 7:
    printf(" Set hour:");
    if(km==KUP){
    if(kvar<23){
    kvar++;
    }
    }
    if(km==KDWN){
    if(kvar>0){
    kvar--;
    }
    }
    break;
    case 8:
    printf(" Set min:");
    if(km==KUP){
    if(kvar<59){
    kvar++;
    }
    }
    if(km==KDWN){
    if(kvar>0){
    kvar--;
    }
    }
    break;
    case 9:
    printf(" Set sec:");
    if(km==KUP){
    if(kvar<59){
    kvar++;
    }
    }
    if(km==KDWN){
    if(kvar>0){
    kvar--;
    }
    }
    break;
    default: kstep=0;printf(" Nothing");
    }
    if(kvar>0)
    {
    printf("%d",kvar);
    }
    }

    void kack(void)
    {
    switch(kstep){
    /*
    case 0:
    // printf(" keypress info:");
    kmenu(kstep);
    break;
    case 1:
    // printf(" keypress data:");
    kmenu(kstep);
    break;
    case 2:
    // printf(" Show temp: ");
    kmenu(kstep);
    break;
    case 3:
    // printf(" Show RH:");
    kmenu(kstep);
    break;
    */
    case 4:
    // printf(" Set year:");
    if(kvar!=mcalendar.year){
    setTime(kvar,mcalendar.month,mcalendar.day,mcalendar.hour,mcalendar.min,mcalendar.sec);
    }
    break;
    case 5:
    // printf(" Set mon:");
    setTime(mcalendar.year,kvar,mcalendar.day,mcalendar.hour,mcalendar.min,mcalendar.sec);
    break;
    case 6:
    // printf(" Set day:");
    setTime(mcalendar.year,mcalendar.month,kvar,mcalendar.hour,mcalendar.min,mcalendar.sec);
    break;
    case 7:
    // printf(" Set hour:");
    setTime(mcalendar.year,mcalendar.month,mcalendar.day,kvar,mcalendar.min,mcalendar.sec);
    break;
    case 8:
    // printf(" Set min:");
    setTime(mcalendar.year,mcalendar.month,mcalendar.day,mcalendar.hour,kvar,mcalendar.sec);
    break;
    case 9:
    // printf(" Set sec:");
    setTime(mcalendar.year,mcalendar.month,mcalendar.day,mcalendar.hour,mcalendar.min,kvar);
    break;
    default: kstep=1;kmenu(KNA);
    }
    if(kvar){
    kdata();
    }
    kvar=0;
    }

  • 相关阅读:
    U盘禁用工具1.3
    《中文专业论文写作概论》笔记
    基于WAP1.0的手机论坛网站系统
    销售统计SQL
    移动如何保护个人开发者的合法权益?
    c#使用winnet检测网络连接状况
    HBASE客户端的一些参数设置
    代理模式
    使用Eclipse+Axis2生成webservice
    java多线程的理解
  • 原文地址:https://www.cnblogs.com/htsky/p/5919530.html
Copyright © 2020-2023  润新知