使用 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 段显示器。