有点懒。看注释吧

// 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. win8.1和centos6.5 双系统启动问题

    笔记本系统为centos 6.5,由grub引导启动,安装了win 8.1后,开机直接进入win 8.1,没有出现centos6.5 引导项,解决办法: 一.开机按ESC键进入启动顺序菜单,选择cen ...

  2. C 语言学习准备

    摘要:用 C#语言学习了一些数据结构,突然想学习 C 语言,为了学习C,本文准备好资料. C 语言学习准备 作者:乌龙哈里 时间:2015-11-17 平台:Window7 64bit,Visual ...

  3. debian安装后sudo命令不能用的解决方法

    注:转载他人 且试用过了,我的debian版本是debian8.2 64X debian安装完之后发现sudo命令不能用 找了半天发现是没有安装sudo 得了,进入root安包,炸开他,apt-get ...

  4. Struts2 stracture

  5. java链接mysql添加中文和模糊查询

    如下内容为转载 http://sunshinechen2008.blog.163.com/blog/static/107585374201162442643967/     mysql如果不对乱码处理 ...

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

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

  7. 5个可用提高Godaddy主机速度的第三方CDN加速服务商

    毕竟Godaddy主机数据中心位于美国.新加坡.欧洲三个数据中心,一般我们都会选择美国数据中心,相比较其他2个机房的速度是快和稳定的,很多人要说为什么新加坡数据中心速度不好呢?因为目前的新加坡机房不是 ...

  8. android项目实战 --ListView 头部ViewPager广告轮询图效果

    看开源框架:https://github.com/tianshaojie/AndroidFine,里面有如下效果,特记录学习下,以后项目中用也好能够立刻想起来.   如上面所示,是常见项目中的图片轮训 ...

  9. 通用mapper的使用

    通用mapper的使用 导入依赖 <dependency> <groupId>com.github.abel533</groupId> <artifactId ...

  10. 大数据时代之hadoop(二):hadoop脚本解析

    “兵马未动,粮草先行”,要想深入的了解hadoop,我觉得启动或停止hadoop的脚本是必须要先了解的.说到底,hadoop就是一个分布式存储和计算框架,但是这个分布式环境是如何启动,管理的呢,我就带 ...