找回密码
 立即注册

QQ登录

只需一步,快速开始

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

三个按键,三个LED,KEY1按一下LED1开,KEY1再按一下LED1关,KEY2、3类似

[复制链接]
跳转到指定楼层
楼主
#include <STC15F104E.H>

#define uchar unsigned char
#define uint  unsigned int
#define LED1=P3^3 //定义LED端口
#define LED2=P3^4 //定义LED端口
#define LED3=P3^5 //定义LED端口
sbit key1=P3^0; //按键接口定义
sbit key2=P3^1; //按键接口定义
sbit key3=P3^2; //按键接口定义



//ms延时函数
void Delay_xms(uint x)
{
  uint i,j;
  for(i=0;i<x;i++)
    for(j=0;j<122;j++);
}
//主函数
void main(void)
{
Delay_xms(50);//等待系统稳定

while(1)
{
  if(key1 == 0)
  {LED1 = 0;
  }else{
  LED1 = 1;}

  if(key2 == 0)
  {LED2 = 0;
  }else{
  LED2 = 1;}

  if(key3 == 0)
  {LED3 = 0;
  }else{
  LED3 = 1;}

    Delay_xms(20);//延时去抖动
   
  return 0;

}
}

总是报错,望大神指点!!!



捕获.JPG (42.16 KB, 下载次数: 109)

报错

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

使用道具 举报

沙发
ID:135052 发表于 2017-4-13 14:36 来自手机 | 只看该作者
if(key1==0)delay(10)if(key1==0)led~led

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:189194 发表于 2017-4-13 14:57 | 只看该作者
#define LED1=P3^3 错误在这里
改成 sbit LED1=P3^3。
还有这程序并不能实现你想要的功能,你试试看

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:112693 发表于 2017-4-13 15:24 | 只看该作者
别无所求 发表于 2017-4-13 14:36
if(key1==0)delay(10)if(key1==0)led~led

根据您的提示,修改为:
#include <STC12C2052AD.H>

#define uchar unsigned char
#define uint  unsigned int

sbit key=P3^0;

sbit LED=P1^0;

//ms延时函数
void Delay_xms(uint x)
{
  uint i,j;
  for(i=0;i<x;i++)
    for(j=0;j<50;j++);
}
//主函数
void main(void)
  {

    Delay_xms(10);//等待系统稳定

    while(1)
   
      {

                if(key == 0)
        LED=~LED;

      }

  }


去抖还是有问题

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:66137 发表于 2017-4-13 16:16 | 只看该作者
试试这个
#include <STC15F104E.H>

#define uchar unsigned char
#define uint  unsigned int
sbit LED1=P3^3; //定义LED端口
sbit LED2=P3^4; //定义LED端口
sbit LED3=P3^5; //定义LED端口
sbit key1=P3^0; //按键接口定义
sbit key2=P3^1; //按键接口定义
sbit key3=P3^2; //按键接口定义



//ms延时函数
void Delay_xms(uint x)
{
  uint i,j;
  for(i=0;i<x;i++)
    for(j=0;j<122;j++);
}
//主函数
void main(void)
{
        while(1)
        {
                if(key1 == 0)
                {
                        Delay_xms(10);
                        if(key1 == 0)
                                LED1 = ~LED1;
                        while(!key1);
                }
                if(key2 == 0)
                {
                        Delay_xms(10);               
                        if(key2 == 0)
                                LED2 = ~LED2;
                        while(!key2);
                }
                if(key3 == 0)
                {
                        Delay_xms(10);
                        if(key3 == 0)
                                LED3 = ~LED3;
                        while(!key3);
       
                }
                                                               
        }
}

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:148552 发表于 2017-4-14 08:02 | 只看该作者
/*********************************************************************************       
* 【程序功能】: 生活中常见一个按键随着按下次数不同对应不同功能                                                                                           
* 【使用说明】: 本程序以QX-MCS51 学习板中的S3键为例,模拟其具有2种功能,
                   一是点亮一个发光二极管,二是蜂鸣器发声
*  说明:免费开源,不提供源代码分析.
**********************************************************************************/

#include<reg52.h>

#define uchar unsigned char
uchar num;

sbit beep=P2^3;
sbit led=P1^0;
sbit S3=P3^1;

void delay(uchar i)
{
        uchar j,k;
        for(j=i;j>0;j--)
        for(k=125;k>0;k--);
}


void main()
{
        while(1)
        {
                if(S3==0)
                {
                        delay(20);                 //消抖
                        if(S3==0)
                        {
                                while(!S3);         //等待按键松开
                                num++;
                        }
                        switch(num)
                        {
                                case 1: led=0;        beep=1; break;
                                case 2: beep=0;        led=1;        num=0; break;
                        }
                }
        }
}


给你一个例子作为参考
回复

使用道具 举报

7#
ID:111634 发表于 2017-4-14 21:11 | 只看该作者
本帖最后由 zl2168 于 2017-4-14 21:12 编辑

实例5  4种不同方式键控信号灯


Proteus仿真一下,确认有效。
实例5 不同方式键控灯.rar (31.72 KB, 下载次数: 14)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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