有点懒。看注释吧

// 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. [SQL基础教程] 1-5 表的删除和更新

    [SQL基础教程] 1-5 表的删除和更新 表的删除 语法 DROP TABLE <表名>; 法则 1-12 删除的表无法恢复 表定义的更新 语法 ALTER TABLE<表名> ...

  2. 【jquery、XML】jquery通过按钮使打开select

    <select> <option>aaaaa</option> <option>bbbbb</option> <option>c ...

  3. ubuntu搭建git服务器

    1.准备两台ubuntu虚拟机,其中一个作为server,另一个作为client.检查是否安装ssh,如果没有安装:sudo apt-get install openssh-server, 然后在se ...

  4. php笔记(八)PHP类与对象之抽象类

    <?php //通过abstract关键字定义一个抽象类 abstract class ACanEat{ //通过abstract关键字定一个不用具体实现的抽象方法eat() abstract ...

  5. 兼容不同浏览器的 CSS Hack 写法

    所谓 CSS Hack,是指在 CSS 代码中嵌入诸如 *,*html  等代码,方便于独立控制某种浏览器的具体样式.比如有些 CSS Hack 只能被 IE6 或 IE7 识别,而 Firefox ...

  6. GCD系列 之(二): 多核心的性能

    全局队列的并发执行 for(id obj in array) [self doSomethingIntensiveWith:obj]; 假设,每个元素要做的事情-doSomethingIntensiv ...

  7. OOP的方法

    <?php class Computer{ //我要创建一个构造方法 public function __construct(){ echo '我是比较先进的构造方法!'; //构造方法一般用于 ...

  8. code style

    http://www.jianshu.com/p/0a984f999592# https://github.com/drakeet/LayoutFormatter https://github.com ...

  9. Location-aware Associated Data Placement for Geo-distributed Data-intensive Applications--INFOCOM 2015

    [标题] [作者] [来源] [对本文评价] [why] 存在的问题 [how] [不足] assumption future work [相关方法或论文] [重点提示] [其它]

  10. pychon - selenium2Libray源码简介

    I. Introduction Selenium2Library是robot framework中主流的测试网页功能的库, 它的本质是对webdriver的二次封装, 以适应robot框架. 百度上一 ...