有点懒。看注释吧

// 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\r\n",SystemCoreClock);
printf("2-RCC_APB2Periph_USART1 %d\r\n",RCC_APB2Periph_USART1);
printf("3-USART1->BRR \t %d\r\n",USART1->BRR);
printf("Now is %d-%02d-%02d %02d:%02d:%02d Week %d \n\r",mcalendar.year,mcalendar.month,mcalendar.day,mcalendar.hour,mcalendar.min,mcalendar.sec,mcalendar.week);
// return 0;
*/
printf("Kylin MINI\r");
}

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

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

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

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

// key0 for enter or enable
void kset0(void){
kclean();
switch(kstat){
case 0:
kstat=1;
klogon();
kmenu(0);
// printf("\r loggin \r");
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("\rKEY 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("\rKEY 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("\rLogoffed");
break;
case 1:
kstat=0;
klogoff();

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

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

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

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

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

stm32菜单按键的设计的更多相关文章

  1. 基于STM32+华为云IOT设计智能称重系统

    摘要:选择部署多个重量传感器和必要的算法.通过WiFi 通信模块.GPS定位模块,采集车辆称重数据一地理位置信息,并通过网络发送至云平台,设计图形化UI界面展示称重.地图位置等重要信息,实现对称重系统 ...

  2. php大力力 [031节] php设计系统后台菜单和样式设计

    php大力力 [031节] php设计系统后台菜单和样式设计 耗掉我一整夜的时间,把后台html设计了一个,对于我这样的html白痴,实属不容易啊. 留下一点点网上查找的网页知识: 索马里论坛群发简介 ...

  3. STM32硬件IIC驱动设计(转)

    源: STM32硬件IIC驱动设计 参考: STM32—硬件IIC主机通信 STM32’s I2C 硬件BUG引发的血案(qzm) 解决STM32 I2C接口死锁在BUSY状态的方法讨论

  4. Lind.DDD.Manager里菜单权限的设计

    回到目录 对于一个后台管理系统来说,你的权限设计与安全是重中之重,当你为一个权限分配一些菜单后,当这个权限的用户没有菜单权限时,这个菜单的URL是不可以被用户访问的,而在之前的设计中,没有考虑到这点, ...

  5. ST推出新软件STM32Cube ,让STM32微控制器应用设计变得更容易、更快、更好用

    功能强大的STM32Cube 新软件平台由设计工具.中间件和硬件抽象层组成,让客户能够集中精力创新 意法半导体(STMicroelectronics,简称ST)针对STM32微控制器推出一套免费的功能 ...

  6. Cocos2d-x 点击菜单按键居中放大(无需修改底层代码)

    建议转至该处阅读 https://www.zybuluo.com/tangyikejun/note/21953 配置环境:win7+Cocos2d-x.2.0.3+VS2012 目标读者:已经了解Co ...

  7. STM32之模拟串口设计

    一.设计用途: 公司PCB制成板降成本,选择的MCU比项目需求少一个串口,为满足制成板成本和项目对串口需求,选择模拟一路串口. 二.硬件电路: 三.设计实现: 工具&软件:STM32F030R ...

  8. STM32中按键中断分析

    在按键学习中,我们有用到查询的方法来判断按键事件是否发生,这种查询按键事件适用于程序工作量较少的情况下,一旦程序中工作量较大较多,则势必影响程序运行的效率,为了简化程序中控制的功能模块的执行时间,引入 ...

  9. WEB开发中前后台树形菜单的展示设计

    在WEB开发中经常需要进行树形菜单的展示,本例通过不同角度的总结了如下三种实现方式: 通过JS的递归实现前端菜单DOM的动态创建 通过JSP的include指令结合JSTL表达式语言递归实现菜单的展示 ...

随机推荐

  1. 梅特卡夫法则(Metcalfe's law)

    如果一个网络中有n个人,那么网络对于每个人的价值与网络中其他人的数量成正比,于是网络对于所有人的总价值与n*(n-1)成正比.

  2. C# 语言规范_版本5.0 (第18章 不安全代码)

    1. 不安全代码 **(注:此章对于跨多语言编程开发非常重要,如遇异常无法完成跨语言,建议使用此种方式.) 如前面几章所定义,核心 C# 语言没有将指针列入它所支持的数据类型,从而与 C 和 C++ ...

  3. Python笔记5(字符串)-20160921

    一.字符串常用方法 1.title():返回字符串的标题版本,即单词首字母大写其余字母小写 2.upper():返回字符串全部大写版本,lower()则返回字符串全部小写版本 >>> ...

  4. 1.部分(苹果)移动端的cookie不支持中文字符,2.从json字符串变为json对象时,只支持对象数组

    1.移动端的cookie不支持中文字符.可以用编码,解码的方式解决. 2.json字符串变成相应 的,json对象数组字符串.就这样 3.不同客户端(移动端.电脑)的请求,在C#服务端的取时间的格式竟 ...

  5. 【HELLO WAKA】WAKA iOS客户端 之二 架构设计与实现篇

    上一篇主要做了MAKA APP的需求分析,功能结构分解,架构分析,API分析,API数据结构分析. 这篇主要讲如何从零做iOS应用架构. 全系列 [HELLO WAKA]WAKA iOS客户端 之一 ...

  6. JQuery中$.ajax()方法参数详解及应用

    url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...

  7. Microsoft Visual Studio 2012正式版官方下载

    Microsoft Visual Studio 2012正式版官方下载 首先声明,看到园子里还没有类似的新闻,所以斗胆发首页,如有不妥之处,请移除并谅解. 虽然之前已经又用到泄露的MSDN正式版,但今 ...

  8. Impala:新一代开源大数据分析引擎

    Impala架构分析 Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据.已有的Hive系统虽然也提供了SQL语 ...

  9. Directed Roads

    Directed Roads 题目链接:http://codeforces.com/contest/711/problem/D dfs 刚开始的时候想歪了,以为同一个连通区域会有多个环,实际上每个点的 ...

  10. linux下如何使用vnstat查看服务器带宽流量统计

    因为很多vps或者服务器都是限流量的,但是又很多服务商并没有提供详细的流量表,比如每天的流量表,所以肯定有人很想知道自己服务器到底跑了多少流量. vnstat就是一个很好用的服务器流量统计命令.我截几 ...