如何点亮特定的LED';并使用74HC595移位寄存器每隔一个led进行移位?

如何点亮特定的LED';并使用74HC595移位寄存器每隔一个led进行移位?,c,microcontroller,atmega,shift-register,C,Microcontroller,Atmega,Shift Register,我目前正在建造一台带有微控制器的鼓式机器。我正试图弄清楚音序器的逻辑。我有16个LED指示灯,指示鼓机当前播放的第16个音符 例如,假设每分钟拍数(BPM)为120,则led应每秒移动两次 对于移位部分,我已经编写了代码,如果步数是0,我们在1中移位。如果步数大于0,我们将以0移位。该方法每(60/BPM)秒调用一次 PD5是串行输入, PD4是插销,PD3是时钟插销 void update_led(void) { if (step_number == 0){ PORTD

我目前正在建造一台带有微控制器的鼓式机器。我正试图弄清楚音序器的逻辑。我有16个LED指示灯,指示鼓机当前播放的第16个音符

例如,假设每分钟拍数(BPM)为120,则led应每秒移动两次

对于移位部分,我已经编写了代码,如果步数是0,我们在1中移位。如果步数大于0,我们将以0移位。该方法每(60/BPM)秒调用一次

PD5是串行输入, PD4是插销,PD3是时钟插销

void update_led(void) {
    if (step_number == 0){
       PORTD |= (1 << PD5); //Send a 1
       PORTD |= (1 << PD4); //Read the input to 1st led
       PORTD &= ~(1 << PD5);
       PORTD &= ~(1 << PD4);
       PORTD |= (1 << PD3); //Shift to next led
       _delay_ms(40);  //Apparently I need a delay here to light up LED
      PORTD &= ~(1 << PD3);
    }else{
      PORTD |= (1 << PD4);
      PORTD &= ~(1 << PD4);
      PORTD |= (1 << PD3);
      _delay_ms(40);
      PORTD &= ~(1 << PD3);
   }
 }           
void更新_指示灯(void){
如果(步骤编号==0){

PORTD |=(1)我只需将所有LED的所需状态保留在一个变量中。每次更改时,通过所有LED移动必要的位以将其更新为最新状态。我如何正确声明这样一个变量?假设我在步骤8中当前有步骤号,所选步骤为1、5、9、12。我想要一个数组“当前_步骤”在第8个索引处设置为1。一个数组“选择的_步骤”在索引1,5,9,12处设置为1。然后我想要一个“最终的_步骤”数组,它是final_led=XOR(当前的_步骤,选择的_步骤)。我对C不是很有经验,所以我很难正确定义这些数组。你的思路是正确的!但是“如何声明数组?”“是另一个问题的材料。一个可能已经回答了很多次的问题,所以只需搜索一下:)是的,我知道了,谢谢你花时间回答我!我的第二个问题应该不难找到哈哈。