51单片机,用keil4编程:if(P1^(7-i)&&P1^(3-j)==0) 这句话有效吗?

我想用矩阵键盘控制数码管亮,按几亮几;编译没有错误;但不能实现,程序如下:请问其中的if(P1^(7-i)&&P1^(3-j)==0)有效吗?#include<reg51... 我想用矩阵键盘控制数码管亮,按几亮几;编译没有错误;但不能实现,程序如下:请问其中的 if(P1^(7-i)&&P1^(3-j)==0) 有效吗?
#include<reg51.h>
unsigned char code a[4][4]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Delay10ms(void);
sbit LA=P2^2;
sbit LB=P2^3;
sbit LC=P2^4;
void main()
{
int i,j;
LA=1;
LB=1;
LC=1;
while(1)
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(P1^(7-i)&&P1^(3-j)==0)
{
Delay10ms();
if(P1^(7-i)&&P1^(3-j)==0)
P0=a[i][j];
}
}
}
}
}
void Delay10ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
展开
 我来答
一剑出血
高粉答主

2014-06-28 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
如果你是想用这种方式切换管脚的话,那么是没用的。
在程序体中,^仅仅作为异或运算符使用,并非用来表示管脚序号。
追问
那请问P1^1为什么能代表P11管脚呢?  还有能不能sbit 一个数组,比如sbit a[]={p1^1,p2^2}?
追答
定义时的解析方式跟程序体的解析方式不同。

Keil不支持位数组。
焊板子的兔子
2014-06-28 · TA获得超过879个赞
知道小有建树答主
回答量:275
采纳率:50%
帮助的人:164万
展开全部
说实话兄弟,真没见过这么写的,因为像p0^0这种I/O端口的定义是在头文件里面已经预定义好的,你这么写可能会有问题,要是想扫描端口的话,不如用switch...case...吧。
再有就是看看电路上面有没有问题,51单片机P0端口作为驱动端口用的话是要加上拉电阻的,你看一下有没有加上
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-06-28
展开全部
你确定这样不会报错?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式