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\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菜单按键的设计的更多相关文章
- 基于STM32+华为云IOT设计智能称重系统
摘要:选择部署多个重量传感器和必要的算法.通过WiFi 通信模块.GPS定位模块,采集车辆称重数据一地理位置信息,并通过网络发送至云平台,设计图形化UI界面展示称重.地图位置等重要信息,实现对称重系统 ...
- php大力力 [031节] php设计系统后台菜单和样式设计
php大力力 [031节] php设计系统后台菜单和样式设计 耗掉我一整夜的时间,把后台html设计了一个,对于我这样的html白痴,实属不容易啊. 留下一点点网上查找的网页知识: 索马里论坛群发简介 ...
- STM32硬件IIC驱动设计(转)
源: STM32硬件IIC驱动设计 参考: STM32—硬件IIC主机通信 STM32’s I2C 硬件BUG引发的血案(qzm) 解决STM32 I2C接口死锁在BUSY状态的方法讨论
- Lind.DDD.Manager里菜单权限的设计
回到目录 对于一个后台管理系统来说,你的权限设计与安全是重中之重,当你为一个权限分配一些菜单后,当这个权限的用户没有菜单权限时,这个菜单的URL是不可以被用户访问的,而在之前的设计中,没有考虑到这点, ...
- ST推出新软件STM32Cube ,让STM32微控制器应用设计变得更容易、更快、更好用
功能强大的STM32Cube 新软件平台由设计工具.中间件和硬件抽象层组成,让客户能够集中精力创新 意法半导体(STMicroelectronics,简称ST)针对STM32微控制器推出一套免费的功能 ...
- Cocos2d-x 点击菜单按键居中放大(无需修改底层代码)
建议转至该处阅读 https://www.zybuluo.com/tangyikejun/note/21953 配置环境:win7+Cocos2d-x.2.0.3+VS2012 目标读者:已经了解Co ...
- STM32之模拟串口设计
一.设计用途: 公司PCB制成板降成本,选择的MCU比项目需求少一个串口,为满足制成板成本和项目对串口需求,选择模拟一路串口. 二.硬件电路: 三.设计实现: 工具&软件:STM32F030R ...
- STM32中按键中断分析
在按键学习中,我们有用到查询的方法来判断按键事件是否发生,这种查询按键事件适用于程序工作量较少的情况下,一旦程序中工作量较大较多,则势必影响程序运行的效率,为了简化程序中控制的功能模块的执行时间,引入 ...
- WEB开发中前后台树形菜单的展示设计
在WEB开发中经常需要进行树形菜单的展示,本例通过不同角度的总结了如下三种实现方式: 通过JS的递归实现前端菜单DOM的动态创建 通过JSP的include指令结合JSTL表达式语言递归实现菜单的展示 ...
随机推荐
- C# 语言规范_版本5.0 (第7章 表达式)
1. 表达式 表达式是一个运算符和操作数的序列.本章定义语法.操作数和运算符的计算顺序以及表达式的含义. 1.1 表达式的分类 一个表达式可归类为下列类别之一: 值.每个值都有关联的类型. 变量.每个 ...
- ligerUI实现分页
在公司实习看到公司框架里使用了ligerUI的grid进行分页,个人感觉挺好用的,自己摸索着实现了一遍记录下来 简单来说,liger grid 就是提交准备好的数据到指定的目标请求数据,拿到数据以后, ...
- python 内嵌函数, 闭包, 函数装饰器
一. 函数内嵌 闭包 在python中,函数可以作为返回值, 可以给变量赋值. 在python中, 内置函数必须被显示的调用, 否则不会执行. #!/usr/bin/env python #-*- ...
- SaltStack Job管理
Job基本管理 Jid: job id,格式为%Y%m%d%H%M%S%f 在master在下发指令消息时,会附带上产生的jid.minion在接收到指令开始执行时,会 在本地的cachedir(默认 ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- 组合,关联,聚合的区别(转自http://jimmyleeee.blog.163.com/blog/static/9309618200932014422932/)
类间关系 在类图中,除了需要描述单独的类的名称.属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义.在UML类图中,关系用类框之间的连 ...
- java 移位运算
移位运算 :将整数转化为二进制(以补码的形式),按位平移. << 左移 >> 右移 >>> 无符号右移 << 右移: 按位做平 ...
- tomcat识别不出maven web项目
解决办法: 点中项目-->Properties-->project facets 勾选:Dynamic Web Module.java.javaScript Apply-->OK 解 ...
- RTL-SDR简单介绍
Sdr 软件定义的无线电(Software Defined Radio,SDR) 是一种无线电广播通信技术,它基于软件定义的无线通信协议而非通过硬连线实现. Rtl-sdr 原身是Realtek RT ...
- 第八十八节,html5+css3pc端固定布局,搜索区,插入大图,搜索框
html5+css3pc端固定布局,搜索区,插入大图,搜索框 设置一个div作为搜索区域 1.宽度为百分之百 2.最小宽度为1263,因为要考虑到手机,等小屏幕缩小后宽度会自适应,导致破坏布局,将最小 ...