【问题标题】:I need to reverse the order of LED colors in my board我需要颠倒我板上的 LED 颜色顺序
【发布时间】: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&lt;&lt;2; 我们不得不推迟一个非常不同的硬件。请说明你对那条线的想法。毕竟,这不是您刚刚发布的随机行,以将其“固定”为解决方案。
  • 为什么不反转你的循环呢? unsigned char i = 8; while (i--) { /* rest of loop */ }?我没有你的电路板数据表或技术参考,方便,但这是我的猜测。如果 char 在您的实现上签名,请使用 unsigned charunit8_t 而不是 char 来防止不必要的符号扩展。
  • @adabsurdum 没有数值,我根据书上的说明设置了微控制器以及 Pickit3 设备,并且我将根据常见的阴极颜色变化进行操作。是的,它成功了,感谢您的帮助。
  • 如果您认为您的问题已经解决,那么请看这里stackoverflow.com/help/someone-answers 它不需要您接受,但如果不是,您可能想解释缺少的内容。坦率地说,@adabsurdum 确实为您付出了努力,并获得了接受的回报。另外,我认为他们会适应您对答案的任何需求(只要现有问题涵盖...)。

标签: c pic18


【解决方案1】:

如果要一起迭代序列 [0, 1, ..., 7] 和 [7, 6, ..., 0],只需使用算术:

#include <stdio.h>

int main(void) {
    for (int i=0; i < 8; i++) {
        int forward = i;
        int backward = 7 - i;
        printf("forward: %d, backward: %d\n", forward, backward);
    }
    return 0;
}
$ ./a.out 
forward: 0, backward: 7
forward: 1, backward: 6
forward: 2, backward: 5
forward: 3, backward: 4
forward: 4, backward: 3
forward: 5, backward: 2
forward: 6, backward: 1
forward: 7, backward: 0

【讨论】:

  • 我认为这是在问题明确之前回答。但我也可以根据meta.stackoverflow.com/questions/334822/… 将其视为一个答案,足以支持投票。
  • @Yunnosch -- 谢谢;如果 OP 回来说我误解了问题,我会更新或删除
猜你喜欢
  • 2021-06-10
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多