找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 592|回复: 8
收起左侧

请教C语言逻辑语句含义?

[复制链接]
ID:28942 发表于 2024-2-13 14:30 | 显示全部楼层 |阅读模式
void Move_LED()
{
         if((P1 & 0x01) == 0x00) //如何解读?
P0 ^= 0x01; //异或的目的是什么
         }


回复

使用道具 举报

ID:94031 发表于 2024-2-14 08:43 | 显示全部楼层
(P1 & 0x01) == 0x00,判断P1末位是否为0。
回复

使用道具 举报

ID:94031 发表于 2024-2-14 09:04 | 显示全部楼层
P0 ^= 0x01; //对P0末位进行翻转。
回复

使用道具 举报

ID:1110932 发表于 2024-2-14 10:24 | 显示全部楼层
如果P1.0的引脚为低电平,就让它翻转置为高电平
回复

使用道具 举报

ID:1109793 发表于 2024-2-14 10:43 | 显示全部楼层
P0 ^= 0x01;异或不怎么用,好像是保留7-1位不变,只吧0位取反
回复

使用道具 举报

ID:496636 发表于 2024-2-14 12:09 | 显示全部楼层

P0 ^= 0x01;
就是
P0 = P0 ^0x01
意思就是P0的8位二进制数与0000 0001进行按位异或,异或的意思是二者不同则结果为1,两者相同则结果为0,与P0相异或的数的1-7位都为0,则P0相对应的位的为1则为1,为0则为0,而与P0异或的0位为1,如果P0的0位为1,那么相同结果为0,如果P0的0位为0,那么相异为1,取反。
所以运算的结果P0的0位取反,其它保持不变。
如果要使P0口的1位取反呢,那么异或的数是多少?只要那位为1,其它为0就可以了。
此值为(二进制)0000 0010
这样:P0^=0x02;
这样就可以对端口的任意位进行操作,不影响其它位的值。
回复

使用道具 举报

ID:1057978 发表于 2024-2-15 09:15 | 显示全部楼层
用大白话就是:P1口的末位是0的话就把P0口的末位电平翻转一下
回复

使用道具 举报

ID:1111098 发表于 2024-2-18 15:53 | 显示全部楼层
读取P1端的最低位是否为低电平,若是,则翻转P0端的最低位输出电平;
异或运算在单片机编程中一般用来翻转,0异或0等于0,0异或1等于1,1异或0等于0,1异或1等于0,分析以上结果可以看出,0或者1异或0之后不变,异或1之后则变相反数
回复

使用道具 举报

ID:28942 发表于 2024-3-4 07:52 | 显示全部楼层
感谢各位。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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