找回密码
 立即注册

QQ登录

只需一步,快速开始

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

C51单片机关于用独立按键切换两个程序

[复制链接]
跳转到指定楼层
楼主
ID:708554 发表于 2020-3-26 14:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Teaposion 于 2020-3-26 18:57 编辑

各位大佬我写了两个程序,用一个独立按键进行切换(想法是按下一次切换A程序,再按下切换B程序),现在结果是只能显示一种程序,求各位大佬帮忙看下。只列出了主函数,全部单片机程序代码仿真打包在最下面。
  1. #include "public.h"
  2. #include "lcd.h"
  3. #include "temp.h"
  4. #include "temperature.h"
  5. #include "reg52.h"
  6. #include "calculator.h"

  7. sbit k4=P3^2;
  8. bit flag_a=0;
  9. void keypros()
  10. {
  11.         if(k4==0)
  12.         {
  13.                 flag_a=1;
  14.         }
  15.         else
  16.         {
  17.                 flag_a=0;
  18.         }
  19.         if(flag_a==0)   //执行温度计程序
  20.         {
  21.                 LCD_Init();
  22.                 kai_display();
  23.                 while(1)
  24.                 {
  25.                 if(mode==0)
  26.                         Temp_DataPros();
  27.                         KEY_Pros();        
  28.                         TempData_Compare();        
  29.           }
  30.         }
  31.         else         //执行计算器程序
  32.         {
  33.                 lcdinit();  
  34.                 while(1)
  35.                 {
  36.                 keyscan();        
  37.                 }
  38.         }
  39. }

  40. void main()
  41. {        
  42.         while(1)
  43.         {        
  44.                 keypros();  //按键函数        
  45.         }               
  46. }
复制代码

新建文件夹.zip (190.78 KB, 下载次数: 26)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:697917 发表于 2020-3-26 15:09 | 只看该作者
        if(k4==0)
        {
                flag_a=1;
        }
        else
        {
                flag_a=0;
        }

你这里是按下后一个状态, 放开后会变成另外一个状态,不会像你说的按一下一个状态,再按一下切换到B。
只有按下和不按下两种状态。。。
回复

使用道具 举报

板凳
ID:708554 发表于 2020-3-26 15:31 | 只看该作者
黎明初至 发表于 2020-3-26 15:09
if(k4==0)
        {
                flag_a=1;

那该怎么改啊
回复

使用道具 举报

地板
ID:475247 发表于 2020-3-26 16:19 | 只看该作者
用按键值来判断,将按键值放switch中。最好在定时中断中做按键,这样main中执行效率高
回复

使用道具 举报

5#
ID:213173 发表于 2020-3-26 16:51 | 只看该作者
按一次改变一次
void keypros()
{
        if(k4==0)
        {
                flag_a=~flag_a;
        }
//        else
//        {
//                flag_a=0;
//        }
        if(flag_a==0)
        {
                //执行温度计程序
        }
        else         
        {
                //执行计算器程序
        }
}
回复

使用道具 举报

6#
ID:452950 发表于 2020-3-26 17:00 | 只看该作者
用一个按键进行多种状态的切换,可以设置标志位,按一下标志加一,然后判断标志除以状态种数的余数为几,就进入第几种状态。
比方用一个按键依次进入四段不同程序
uchar a,flag=0;
while(1)
{
if(K4==0)
{
a=flag%4;
switch(a)
{
    case 0: a();break;           //0
    case 1: b();break;                 //1
    case 2: c();break;                 //2
    case 3: d();break;                 //3
}
flag++;
}
}
回复

使用道具 举报

7#
ID:708554 发表于 2020-3-26 18:59 | 只看该作者
wulin 发表于 2020-3-26 16:51
按一次改变一次
void keypros()
{

还是不行啊大佬  上电默认为温度计,按下独立按键没反应。
回复

使用道具 举报

8#
ID:741974 发表于 2020-5-19 16:20 来自手机 | 只看该作者
Teaposion 发表于 2020-3-26 18:59
还是不行啊大佬  上电默认为温度计,按下独立按键没反应。

uchar a
a=0;
a++;
if(a>4);
a=0;
while(1)
{
if(K4==0)
delay(100);
if(K4==0)//按键确认
{
switch(a)
{
    case 0: a();break;           //0
    case 1: b();break;                 //1
    case 2: c();break;                 //2
    case 3: d();break;                 //3
}
}
}
回复
回复

使用道具 举报

9#
ID:65179 发表于 2020-5-27 08:54 | 只看该作者
if(k4==0)
         {
          delay(50);
       if(k4==0)
            {
                 while(!k4);
                 KeyLock1=0;
                }
          }
else if(KeyLock1==0)
   {
                  KeyLock1=1;
                Displayt=!Displayt;
   }
}
给你一个我一直在用它切换两个显示窗口,希望对你有用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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