找回密码
 立即注册

QQ登录

只需一步,快速开始

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

c语言控制程序,如何更改触发方式(按键判断改为高低电平判断),而保持原程序执行...

[复制链接]
跳转到指定楼层
楼主
ID:342600 发表于 2018-6-1 00:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的程序,按一次按键(key1)执行case0,再按一次按键执行case1。
本人新手,想请高手指点帮忙,实现以下功能:当key1高电平时,执行case0。当key1为低电平时,执行case1。
【即:当key1高电平时,灯2灭,灯1灭;1秒后,保持灯2灭,但灯1亮,然后一直保持,直至key1电平发生变化。】
我曾使用if(!key1)但不能实现所需要的功能。

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay_ms(uint);
sbit led2=P1^0;
sbit led1=P1^2;
sbit key1=P3^2;

void main()
{
uchar i=0;

while(1)
{
if(key1==0)//按键1
{
delay_ms(10);
if(key1==0)
{
i++;
i=i%2;
switch(i)
{
case 0: led2=1; led1=1; delay_ms(1000); led2=1; led1=0; break;//灯2灭,灯1灭;1秒后,保持灯2灭,但灯1亮。
case 1: led2=0; led1=1; delay_ms(1000); led2=0; led1=0; break;//灯2亮,灯1灭;1秒后,保持灯2亮,但灯1亮。
default: break;
}
}
while(!key1);
}

}
}
void delay_ms(uint z) //延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

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

使用道具 举报

沙发
ID:213173 发表于 2018-6-1 07:24 | 只看该作者
改这样试试
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay_ms(uint);
sbit led2=P1^0;
sbit led1=P1^2;
sbit key1=P3^2;

void main()
{
        bit i=0;
        while(1)
        {
                if(key1==0)//按下
                {
                        delay_ms(10);
                        if((key1==0)&&(i==0))
                        {
                                i=~i;
                                led2=1; led1=1; delay_ms(1000); led2=1; led1=0; //灯2灭,灯1灭;1秒后,保持灯2灭,但灯1亮。
                        }
                }
                if(key1==1)//抬起
                {
                        delay_ms(10);
                        if((key1==1)&&(i==1))
                        {               
                                i=~i;
                                led2=0; led1=1; delay_ms(1000); led2=0; led1=0; //灯2亮,灯1灭;1秒后,保持灯2亮,但灯1亮
                        }
                }
        }
}
void delay_ms(uint z) //延时子程序
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
回复

使用道具 举报

板凳
ID:330198 发表于 2018-6-1 08:49 | 只看该作者
本来按键就是高低电平判断,不需要改啊。
回复

使用道具 举报

地板
ID:342600 发表于 2018-6-1 18:39 | 只看该作者
wulin 发表于 2018-6-1 07:24
改这样试试
#include
#define uint unsigned int

测试已通过!谢谢!!!

至于增加i,和i取反,其中的作用,我将好好的去理解并搞懂来。

再次感谢!!!
回复

使用道具 举报

5#
ID:342600 发表于 2018-6-1 18:46 | 只看该作者
zhanghyg 发表于 2018-6-1 08:49
本来按键就是高低电平判断,不需要改啊。

不同的。

原来的程序是按下并松开变化一次。现在是:按下变化一次,松开又变化一次。

即:原来的是下降沿触发(其实我不知到是上升沿还是下降沿)。现在是:高电平、低电平分别触发。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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