【发布时间】:2021-02-13 09:27:24
【问题描述】:
我需要将我的 LED 颜色顺序从“端口 B”中的原始序列反转为“端口 D”。 我在“PORT B”中的原始颜色是蓝色、紫色、绿色、红色、黄色、绿松石色、白色,并且没有颜色。现在我需要颠倒“Port D”中的顺序。我的 while 循环在正确操作时遇到了问题。
#include <math.h>
#include <p18f4620.h>
#pragma config OSC = INTIO67
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config BOREN = OFF
void Delay_One_Sec(){
for(int I=0; I <17000; I++);}
void main(){
TRISA = 0xff;
TRISB = 0x00;
TRISC = 0x00;
TRISD = 0x00;
ADCON1 = 0x0f;
while (1)
{
for(char i=0;i<8;i++)
{
PORTB = i;
PORTD = i<<2;
Delay_One_Sec();
Delay_One_Sec();
}
}
【问题讨论】:
-
PORTB取值 0、1、...、7,而您需要PORTD取值 7、6、...、0?如果这是正确的,那么位移不是答案。 -
我是否理解正确编写计数器值这样
PORTB = i;使您的 LED 显示列出的颜色序列。并且您想编写值序列,以便另一个端口以相反的顺序显示颜色。你能确认写入相同的值会导致另一个端口上的颜色相同吗?我们不知道您的硬件,请记住这一点。从您的编码尝试PORTD = i<<2;我们不得不推迟一个非常不同的硬件。请说明你对那条线的想法。毕竟,这不是您刚刚发布的随机行,以将其“固定”为解决方案。 -
为什么不反转你的循环呢?
unsigned char i = 8; while (i--) { /* rest of loop */ }?我没有你的电路板数据表或技术参考,方便,但这是我的猜测。如果char在您的实现上签名,请使用unsigned char或unit8_t而不是char来防止不必要的符号扩展。 -
@adabsurdum 没有数值,我根据书上的说明设置了微控制器以及 Pickit3 设备,并且我将根据常见的阴极颜色变化进行操作。是的,它成功了,感谢您的帮助。
-
如果您认为您的问题已经解决,那么请看这里stackoverflow.com/help/someone-answers 它不需要您接受,但如果不是,您可能想解释缺少的内容。坦率地说,@adabsurdum 确实为您付出了努力,并获得了接受的回报。另外,我认为他们会适应您对答案的任何需求(只要现有问题涵盖...)。