标题:
c51单片机独立按键控制一盏灯亮灭编程问题
[打印本页]
作者:
单片机之神
时间:
2020-4-4 16:32
标题:
c51单片机独立按键控制一盏灯亮灭编程问题
各位大佬,如果我不用位定义,改为总线操作方法编写这个程序,那么判断按键抬起while(! )这个括号里我该怎么编写?
附图片
IMG_20200404_162945.jpg
(549.15 KB, 下载次数: 48)
下载附件
2020-4-4 16:30 上传
作者:
单片机之神
时间:
2020-4-4 17:22
为什么没有大神帮我解答一下,各位大神帮忙看看
作者:
mffhxa
时间:
2020-4-4 19:37
P3^0XFF 就可以了,不要 !。
作者:
tyrl800
时间:
2020-4-4 19:44
while(P3!=0xfe );
作者:
benclee
时间:
2020-4-4 20:26
不加while判断抬起也可以实现功能了吧。
作者:
xxpp2011
时间:
2020-4-4 20:28
无键按下P3为0XFF,按键按下P3为0XFE,按键抬起P3恢复到0XFF,所以判断按键抬起可以用while(P3!=0XFF);
意思是直到P3=0XFF时才跳出循环,也可以写作while(!P3==0XFF);
作者:
我叫小大打
时间:
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灯亮
}
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1