单片机C语言 的循环左右移动 函数问题。 单片机C语言版 循环移位问题错误,求解!

\u5e2e\u6211\u770b\u770b\u8fd9\u4e2a\u5faa\u73af\u5de6\u79fb\u51fd\u6570\u7528\u5f97\u6709\u6ca1\u6709\u95ee\u9898\uff0851\u5355\u7247\u673a\uff0cc\u8bed\u8a00\uff09

\u6211\u6709\u7591\u95ee\u5462\uff1a
\u5171\u6709\u591a\u5c11\u4e2a\u4e8c\u6781\u7ba1\uff1fP0\u3001P1\u54048\u4e2a\u53e3\u90fd\u5360\u7528\u4e86\uff1f
\u4f1a\u4e0d\u4f1a\u95ee\u9898\u51fa\u5728\u786c\u4ef6\u8fde\u63a5\u548c\u8f6f\u4ef6\u63a7\u5236\u7684\u5bf9\u5e94\u4e0e\u5426\u4e0a\uff1f

\u9519\u8bef\u63d0\u793a\u548c\u5faa\u73af\u79fb\u4f4d\u6709\u4ec0\u4e48\u5173\u7cfb\uff1f\u91cd\u590d\u5b9a\u4e49\u4e86

首先对比一下 左边与右边 那里有不同 同时 程序不同对应的输出结构有哪些不同。。
P2口 连接8个LED 低电平驱动使其发光。
P2=0xfe //上电 P2.0连接的 LED发光。 其余的熄灭。
对比一下程序
void main() //主函数
{
P2=0xfe; //P2初始化
while(1) //死循环
{
num=P2; //这里 与左边不同 把P2的状态给 NUM 也就是0XFE num=0xfe
P2=_crol_(num,1); //P2等于num 循环左移 P2=0xef 这时应该是连接的P2.7的LED发光
delay(0);//延迟
}
}

左边 代码 NUM 每次大循环 都赋值 num=0xfe 是固定的 所以不管你以后怎么移动 P2口的输出都是不变得 只移动了一次。。

道理很简单,左边的永远拿一样的0xfe. 右边的是拿当时的P2内容。

所以左边的结果永远不变。

不能这样.

估计:你在P2口上直接连接的LED吧.
这样的话,P2口输出1时,实际上的引脚电平在0.7V左右,然后再循环中直接从P2读入引脚状态,实际上读入的数据全部是0,也就是0x00.

右边
num=P2
而P2在后面一句中被_crol_(num, 1)重新赋值了,所以下一次循环到num=P2的时候P2已经不是0xfe了。

你左边的代码num=0xfe,永远都是0xfe。

扩展阅读:扫一扫题目出答案 ... 循环右移指令 c语言 ... c#面试题 ... c#一般用来开发什么 ... plc基础知识指令27个 ... while循环简单例子c语言 ... c语言的for循环例子 ... python for循环 ... 51单片机流水灯左右循环 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网