0

使用 7 段显示器对 DE-115 板进行编程以从 0 计数到 99,999,999

我完成了 7 段显示器的编码以在 250 毫秒时进行随机设计,在 125 毫秒时围绕显示器的外边缘转一圈,现在当我将其设置为 50 毫秒时,我需要编码计数器从 0 到 99,999,999 并重复。我想了解如何做到这一点的基本想法。我知道我将在 for 循环中使用 for 循环。我假设会有一个 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 循环除外。

我们在 altera DE-115 板上使用 7 段显示器。

4

0 回答 0