关于51单片机io口sbit赋值的问题 15

这是定义sbitDAT=P2^0;这是数组ucharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9... 这是定义sbit DAT=P2^0;
这是数组uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
num=tab[0];
DAT=num&0x80;
num=num<<1;
-----------------------------------------------------------------------------------------------
DAT=num&0x80;这句赋值是什么意思,是把num和0x80的且运算的最高位赋给dat吗
---------------------------------------------------------------------------------------------
#include<reg52.h>
sbit l1=P1^0;//连接一个发光二极管
unsigned char a=0x40;
int main(){
l1=a;
while(1);
}
如果是最高位赋值,我试了这个程序发光二级管不会亮感觉很奇怪,求解。。。
展开
 我来答
单片机技术宅
推荐于2018-05-10 · 知道合伙人教育行家
单片机技术宅
知道合伙人教育行家
采纳数:251 获赞数:552
飞思卡尔智能赛车邀请赛二等奖全国大学生电子设计竞赛成功参赛奖

向TA提问 私信TA
展开全部
你的l1是一个位变量,而a是一个8位的字符型,a=0x40,是第七位为1,你执行把a赋值给l1,得到的是把a的最低位给了位变量l1,所以l1是得0。l1的值要么是1,要么是0。
追问
l1如果为0发光二级管应该点亮啊,但是没有。。
追答
额!!!,那最好你给l1直接写个0看看能不能点亮。最好不要这样像你这样写。还有主函数没有返回值啊,直接写void main(){

}
百度网友214ce95
2014-04-07 · 超过14用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:23.1万
展开全部
DAT=num&0x80;是逻辑与的结果送DAT,这里由最高位决定。

l1=a; 屏蔽后送最低位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小大小艾
2022-07-08
知道答主
回答量:5
采纳率:0%
帮助的人:2510
展开全部
把l1改成P1
0x40 的二进制是 0100 0000
P1^0 只是一个位
P1 有八个io口,即8位,
P1=0X40,就是把 0100 0000 分别赋给P1的八个位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式