找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 434|回复: 1
打印 上一主题 下一主题
收起左侧

单片机C语言4个按键实现多级菜单及参数修改

[复制链接]
跳转到指定楼层
楼主
各位朋友,多级菜单本人已经实现,但是关于4个按键实现参数修改暂时还没有思路,单个界面的参数修改我倒是可以实现,但是多级菜单和他组合,我就没有思路了,还请各位指导一下!

Snipaste_2024-01-31_21-47-25.png (22.06 KB, 下载次数: 33)

Snipaste_2024-01-31_21-47-25.png

Snipaste_2024-01-31_21-47-37.png (28.05 KB, 下载次数: 32)

Snipaste_2024-01-31_21-47-37.png

Snipaste_2024-01-31_21-47-48.png (28.97 KB, 下载次数: 36)

Snipaste_2024-01-31_21-47-48.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2024-2-1 10:50 | 只看该作者
可以参考这段按键代码,取自《STC8H万年历自动匹配18b20序列号多点测温示例程序》
  1. //按键扫描函数 运行环境 周期1ms
  2. void key_scan()
  3. {
  4.         static bit key_sign=0;//按键状态标志
  5.         static u8 count=0;//消抖计数
  6.         if(!key1||!key2||!key3||!key4)
  7.         {
  8.                 if(++count>=10 && key_sign==0)
  9.                 {
  10.                         key_sign=1;
  11.                         if(!key1)
  12.                         {
  13.                                 Key_value=++Key_value%8;
  14.                                 if(Key_value==0)
  15.                                 {       
  16.                                         Ds1302Init();//写7个字节的日历和时间
  17.                                         mark=1; //允许读DS1302
  18.                                 }
  19.                                 else mark=0;//禁止读DS1302
  20.                         }
  21.                         if(!key2 && Key_value!=0)
  22.                         {
  23.                                 switch(Key_value)
  24.                                 {
  25.                                         case 1:if(++TIME[6]>99)TIME[6]=0; break;//调年
  26.                                         case 2:if(++TIME[4]>12)TIME[4]=1; break;//调月
  27.                                         case 3:if(++TIME[3]>31)TIME[3]=1; break;//调日
  28.                                         case 4:if(++TIME[5]>7) TIME[5]=1; break;//调周
  29.                                         case 5:if(++TIME[2]>23)TIME[2]=0; break;//调时
  30.                                         case 6:if(++TIME[1]>59)TIME[1]=0; break;//调分
  31.                                         case 7:if(++TIME[0]>59)TIME[0]=0; break;//调秒
  32.                                 }
  33.                         }
  34.                         if(!key3 && Key_value!=0)
  35.                         {
  36.                                 switch(Key_value)
  37.                                 {
  38.                                         case 1:if(--TIME[6]<0)TIME[6]=99; break;//调年
  39.                                         case 2:if(--TIME[4]<1)TIME[4]=12; break;//调月
  40.                                         case 3:if(--TIME[3]<1)TIME[3]=31; break;//调日
  41.                                         case 4:if(--TIME[5]<1)TIME[5]= 7; break;//调周
  42.                                         case 5:if(--TIME[2]<0)TIME[2]=23; break;//调时
  43.                                         case 6:if(--TIME[1]<0)TIME[1]=59; break;//调分
  44.                                         case 7:if(--TIME[0]<0)TIME[0]=59; break;//调秒
  45.                                 }
  46.                         }
  47.                         if(!key4)//切换单总线多通道DS1302
  48.                         {
  49.                                 Chx++;
  50.                                 if(Chx==common)Chx=0; //循环切换
  51.                         }
  52.                 }
  53.         }
  54.         else
  55.         {
  56.                 key_sign=0;
  57.                 count=0;
  58.         }
  59. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表