永发信息网

C51中变量取反 为什么不能赋值给另一个变量或者赋值给I/O口

答案:1  悬赏:50  手机版
解决时间 2021-05-10 06:17

C51中变量取反 为什么不能赋值给另一个变量或者赋值给I/O口

例如 P2口接发光二极管 用一下程序让发光二极管闪烁

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

uchar i;
void delay(uint k)
{
uint i;
for(i=0;i<k;i++);
}

void main()
{
while(1)
{
i=~i;
P2=i;
delay(30000);
}

}

这样做 发光二极管可以闪烁

为什么改成下面的就不可以闪烁了

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

uchar i;
void delay(uint k)
{
uint i;
for(i=0;i<k;i++);
}

void main()
{
while(1)
{
//i=~i;
P2=~i;
delay(30000);
}

}

也就是说直接给P2口送取反后的变量i

还有下面这个情况也不可以

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

uchar i,k;
void delay(uint k)
{
uint i;
for(i=0;i<k;i++);
}

void main()
{
while(1)
{
k=~i;
P2=k;
delay(30000);
}

}

吧取反后的变量i的值赋给K 然后在吧K的值赋给P2口

难道说变量取反只能赋值给自身 例如(i=~i 这个是可以取反的 ,上面的情况 单步调试 跟踪变量 没看到变量取反) 这是为什么那

最佳答案
你有没有注意到
这两种
//i=~i;
P2=~i;

k=~i;
P2=k;
i的值都没有变化也就是输P2始终等于~i状态就是一样的 那么当然不会闪烁
但是
i=~i;
P2=i;
delay(30000);
这样 每次循环的时候 i都把自己重新取反一次 所以P2每次循环都在变
当然会闪烁了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
给找俩个POOP手机A121的手机主题
我是1989农历十一月十六,是什么星座啊
地下城韩服有60级以上的装备吗
抽太多烟嘴会变黑,怎么才能变红润些
馨嘉园饺子地址在什么地方,想过去办事
为什么网上没有顾自伤城全篇
本草干蒂慢肝宁
女人是怎么样的?
很想送他礼物呢
为什么玩QQ视频斗地主说欢乐斗绑定了
小孩每天一醒过来就要吃奶,有时白天不睡觉每
下苦楝坪怎么去啊,有知道地址的么
宠物小精灵红宝石386的大黄鱼在哪里捉
上传空间音乐一定要开通绿钻吗?
黑色牛仔裤怎样才不会粘灰尘?
推荐资讯
急!请问唐山有没有Etude house专柜?
为什么现在的QQ版本,只要按一次QQ宠物,在下
女士究竟喜欢什么样的男生?
(你老爸的厂现在招人不)粤语怎么说?
丝路英雄升至大司马长史要多少声望
请问那里可以学到服装跟单
中国哪里的夏天最冷?
魔兽的版本一样为什么本地的局域网上不能连接
衡阳市一中明天领通知书要带什么?
入手N86的问题
诺基亚手机最近的新机哪款好用又好看
QQ飞车顶级多少级啊?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?