找回密码
 立即注册

QQ登录

只需一步,快速开始

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

c51单片机独立按键控制一盏灯亮灭编程问题

[复制链接]
跳转到指定楼层
楼主
ID:720329 发表于 2020-4-4 16:32 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
各位大佬,如果我不用位定义,改为总线操作方法编写这个程序,那么判断按键抬起while(!     )这个括号里我该怎么编写?
附图片

IMG_20200404_162945.jpg (549.15 KB, 下载次数: 48)

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

使用道具 举报

沙发
ID:720329 发表于 2020-4-4 17:22 来自手机 | 只看该作者
为什么没有大神帮我解答一下,各位大神帮忙看看
回复

使用道具 举报

板凳
ID:195446 发表于 2020-4-4 19:37 | 只看该作者
P3^0XFF 就可以了,不要 !。
回复

使用道具 举报

地板
ID:275826 发表于 2020-4-4 19:44 | 只看该作者
while(P3!=0xfe );
回复

使用道具 举报

5#
ID:70069 发表于 2020-4-4 20:26 | 只看该作者
不加while判断抬起也可以实现功能了吧。
回复

使用道具 举报

6#
ID:452950 发表于 2020-4-4 20:28 | 只看该作者
无键按下P3为0XFF,按键按下P3为0XFE,按键抬起P3恢复到0XFF,所以判断按键抬起可以用while(P3!=0XFF);
意思是直到P3=0XFF时才跳出循环,也可以写作while(!P3==0XFF);
回复

使用道具 举报

7#
ID:699194 发表于 2020-4-4 21:35 | 只看该作者
#include<reg51.h>
#define uchar unsigned char
sbit KEY_S1=P3^0;                   //定义输入引角
sbit KEY_S2=P3^1;
sbit KEY_S3=P3^2;
sbit KEY_S4=P3^3;

void main(void)
{
  uchar temp;
  P3=0xff;                          //将p3口置成输入状态
  while(1)
  {
  temp=P3;
  switch(temp&=0x0f)           //屏蔽高4位
  {
   case 0x0e:P1=0xe7;break;                 //按下k1,p1端口位3、位4控制的led灯亮
   case 0x0d:P1=0xdb;break;                 //按下k2,p1端口位2、位5控制的led灯亮
   case 0x0b:P1=0xbd;break;                 //按下k3,p1端口位1、位6控制的led灯亮
   case 0x07:P1=0x7e;break;                 //按下k4,p1端口位0、位7控制的led灯亮
   default:P1=0xc3;break;                //不按键或同时按下多个按键时,p1端口位2、位3、位4、位5控制的led灯亮
   }
   }
}

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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