Программирование платы DE-115 с 7-сегментным дисплеем для отсчета от 0 до 99999999

Программирование платы DE-115 с 7-сегментным дисплеем для отсчета от 0 до 99 999 999

Я закончил кодирование 7-сегментного дисплея, чтобы сделать случайный дизайн, когда он составляет 250 мс, обойти окружность вокруг egdes дисплея на 125 мс, и теперь, когда я установил его на 50 мс, мне нужно кодировать Счетчик перейти от 0 до 99 999 999 и повторить. Я хочу получить основную идею о том, как это сделать. Я знаю, что буду использовать для циклов внутри для циклов. Я предполагаю, что будет цикл for, а затем еще 7 внутри.

/*
 * "Hello World" example.
 *
 * This example prints 'Hello from Nios II' to the STDOUT stream. It runs on
 * the Nios II 'standard', 'full_featured', 'fast', and 'low_cost' example
 * designs. It runs with or without the MicroC/OS-II RTOS and requires a STDOUT
 * device in your system's hardware.
 * The memory footprint of this hosted application is ~69 kbytes by default
 * using the standard reference design.
 *
 * For a reduced footprint version of this template, and an explanation of how
 * to reduce the memory footprint for a given application, see the
 * "small_hello_world" template.
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include <time.h>

void circleSegments();//Function declaration for changing 7-segment output in circle

int main() {
    printf("Hello from Nios II!\n");
    alt_u32 current_value;
    alt_u32 current_state;
    alt_u8 current_direction;
    alt_u32 keys;
    current_state = 3;
    current_value = 1;
    current_direction = 0;
    srand(time(NULL));
    int i;
    int counter = 0;
    printf("Program running (UART)...\n");
    fprintf(stderr, "Program running (LCD)...\n");
    while (1) {
        // read the current state of the keys
        keys = IORD_ALTERA_AVALON_PIO_DATA(KEYS_BASE);
        // switch speed if necessary
        if ((keys != 7) && (keys != current_state)) {
            if (keys == 3){
                printf("speed set to 250 ms\n");
                fprintf(stderr, "speed set to 250 ms (LCD)...\n");
            }
            else if (keys == 5){
                printf("speed set to 125 ms\n");
                fprintf(stderr, "speed set to 125 ms (LCD)...\n");
            }
            else if (keys == 6){
                printf("speed set to 50 ms\n");
                fprintf(stderr, "speed set to 50 ms (LCD)...\n");
            }
            current_state = keys;
        }
        // switch direction if necessary
        if ((current_direction == 0) && (current_value == (1 << 25)))
            current_direction = 1;
        else if ((current_direction == 1) && (current_value == 1))
            current_direction = 0;
        // move light
        else if (current_direction == 0)
            current_value = current_value << 1;
        else
            current_value = current_value >> 1;
        // update lights

        if (current_state == 3){//Changes 7 Segment output to random output
            IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,rand());
            IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE,rand());
            IOWR_ALTERA_AVALON_PIO_DATA(HEX2_BASE,rand());
            IOWR_ALTERA_AVALON_PIO_DATA(HEX3_BASE,rand());
            IOWR_ALTERA_AVALON_PIO_DATA(HEX4_BASE,rand());
            IOWR_ALTERA_AVALON_PIO_DATA(HEX5_BASE,rand());
            IOWR_ALTERA_AVALON_PIO_DATA(HEX6_BASE,rand());
            IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,rand());
        }

        if (current_state == 5){
            //circleSegments();
            if (count < 3){
            IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,126);
            IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,126);
            IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE,127);
            IOWR_ALTERA_AVALON_PIO_DATA(HEX2_BASE,127);
            IOWR_ALTERA_AVALON_PIO_DATA(HEX3_BASE,127);
            IOWR_ALTERA_AVALON_PIO_DATA(HEX4_BASE,127);
            IOWR_ALTERA_AVALON_PIO_DATA(HEX5_BASE,127);
            IOWR_ALTERA_AVALON_PIO_DATA(HEX6_BASE,127);
            IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,127);
        }

        IOWR_ALTERA_AVALON_PIO_DATA(LEDS_BASE, current_value);
        // wait
        if (current_state == 3)
            usleep(250000);

        else if (current_state == 5)
            usleep(125000);
        else
            usleep(50000);

        counter++;
    }

    return 0;

}
//changes output of 7-segment display to move in outside circle
void circleSegments(){

    IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX2_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX3_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX4_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX5_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX6_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,127);


    IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE,126);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,126);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,125);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,123);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,119);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX0_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE,119);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX2_BASE,119);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX2_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX3_BASE,119);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX3_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX4_BASE,119);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX4_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX5_BASE,119);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX5_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX6_BASE,119);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX6_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,119);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,111);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,95);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,126);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX7_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX6_BASE,126);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX6_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX5_BASE,126);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX5_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX4_BASE,126);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX4_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX3_BASE,126);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX3_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX2_BASE,126);
    usleep(125000);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX2_BASE,127);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE,126);
    IOWR_ALTERA_AVALON_PIO_DATA(HEX1_BASE,127);
}

countMax (){
    int l, m, n, o, p, q, r, s
    for(l = 0; i < 10; i++){
        for(m = 0; m < 10; m++){
            for (n = 0; n < 10; n++){
                ..... for the rest of them.

Я не уверен, как закончить этот код, за исключением цикла for, если кто-то может помочь.

Мы используем 7-сегментный дисплей на плате altera DE-115.

0 ответов

Другие вопросы по тегам