Программирование платы 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.