C语言基于NIOSII的软件开发及流水灯设计

Posted Wlei5206

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言基于NIOSII的软件开发及流水灯设计相关的知识,希望对你有一定的参考价值。

一、Quartus II 12.1 (32-Bit)进行硬件设计

1.所需要的系统元器件组成

2.系统电路图

 

二、Nios II 12.1 Software Build Tools for Eclipse进行软件学号及流水灯设计

1.程序代码

/*
 * "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 "system.h"
#include "altera_avalon_pio_regs.h"
#include "io.h"
#include "unistd.h"
#include "alt_types.h"

typedef unsigned int u16;
typedef unsigned char u8;

#define led_on IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00)
#define led_off IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xff)
#define cs_off IOWR_ALTERA_AVALON_PIO_DATA(DTUBE_CS_RL_BASE,0xff)

u8 csdm[4]={0xf7,0xfb,0xfd,0xfe};
u8 xhdm[4]={0x1e,0x1e,0x14,0x14};

u8 i,j,k,v,h;

void delay(u16 i)
{
	while(i--);
}

void led1()
{
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00);
	delay(50000);
	for(v=0;v<2;v++)
	{
		k=0;
		for(i=0;i<9;i++)
		{
			j=0x01<<i;
			k=k|j;//保留上一状态
			IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,k);
			delay(1000000); //大约延时1s
		}
	}
}

void led2()
{
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00);
	delay(50000);
	for(v=0;v<2;v++)
	{
		for(i=0;i<9;i++)
		{
			j=(0x80>>i);
			IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,j);
			delay(1000000);
		}
	}
}

void led3()
{
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xff);
	delay(50000);
	for(v=0;v<2;v++)
	{
		for(i=0;i<9;i++)
		{
			j=0xff<<i;
			IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,j);
			delay(1000000);
		}
		IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xff);
	}
}

void led4()
{
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xff);
	delay(50000);
	for(v=0;v<2;v++)
	{
		for(i=0;i<9;i++)
		{
			j=0xff>>i;
			IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,j);
			delay(1000000);
		}
		IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xff);
	}
}

void led50()
{
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xff);
	delay(50000);
	for(v=0;v<2;v++)
	{
		k=0x01;
		j=0xff;
		for(i=0;i<8;i++)
		{
			if(i%2==0)
			{
				h=k^j;
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,h);
				k=0x01<<i+2;
				k=k|h;
				delay(1000000);
			}
		}
		j=0x20;
		k=0xff;
		for(i=0;i<8;i++)
		{
			if(i%2!=0)
			{
				h=j^k;
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,h);
				k=0x20<<i+2;
				k=h|k;
				delay(1000000);
			}
		}
		IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0xff);
	}
}

void led5()
{
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00);
	delay(50000);
	for(v=0;v<2;v++)
	{

		h=0x01;
		for(i=0;i<9;i++)
		{
			if(i%2==0)
			{
				k=~h;//保留上一状态
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,k);
				j=0x01<<i+2;
				h=h|j;
				delay(1000000); //大约延时1s
			}
		}
		h=0x02;
		for(i=0;i<9;i++)
				{
					if(i%2==0)
					{
						k=~h;//保留上一状态
						IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,k);
						j=0x02<<i+2;
						h=h|j;
						delay(1000000); //大约延时1s
					}
				}
	}
}

void led6()
{
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00);
	delay(50000);
	for(v=0;v<2;v++)
	{

		j=0x40;
		for(i=0;i<9;i++)
		{
			if(i%2==0)
			{
				k=~j;
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,k);
				j=0x40>>i+2;
				delay(1000000); //大约延时1s
			}
		}
		j=0x80;
		for(i=0;i<9;i++)
				{
					if(i%2==0)
					{
						k=~j;
						IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,k);
						j=0x80>>i+2;
						delay(1000000); //大约延时1s
					}
				}
	}
}

void led7()
{
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00);
	delay(50000);
	for(v=0;v<2;v++)
	{
		for(i=0;i<8;i++)
		{
			if(i%2!=0)
			{
				j=0x80>>i;
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,j);
				delay(1000000);
				k=j<<1;
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,k);
				delay(1000000);
			}
		}
	}
}

void led8()
{
	IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,0x00);
	delay(50000);
	for(v=0;v<2;v++)
	{
		for(i=0;i<8;i++)
		{
			if(i%2!=0)
			{
				j=0x01<<i;
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,j);
				delay(1000000);
				k=j>>1;
				IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,k);
				delay(1000000);
			}
		}
	}
}

void xhxs()
{
	for(i=0;i<4;i++)
	{

		IOWR_ALTERA_AVALON_PIO_DATA(DTUBE_CS_RL_BASE,csdm[i]);
	    IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE,xhdm[i]);
	    delay(100);
	}
	return 0;
}

int main()
{
	led_off;
	  while(1)
	  {
		if(IORD_ALTERA_AVALON_PIO_DATA(SWITCH0_BASE)==0)
		{
			xhxs();
		}
		if(IORD_ALTERA_AVALON_PIO_DATA(SWITCH1_BASE)==0)
		{
			cs_off;
			led1();
			led2();
			led3();
			led4();
			led5();
			led6();
			led7();
			led8();
		}
	  }

	  return 0;
}

2.实验现象

 

 

以上是关于C语言基于NIOSII的软件开发及流水灯设计的主要内容,如果未能解决你的问题,请参考以下文章

51单片机c语言

nios ii处理器为啥只用于FPGA

c语言学生成绩管理系统课程设计

W801基于Lua开发环境下流水灯程序

基于8086方波锯齿波三角波发生器仿真基于8086的LCD1602显示仿真设计基于8086的LED点阵汉字流水显示设计基于8086的LED中文显示屏显示设计-仿真设计资料转发

基于8086方波锯齿波三角波发生器仿真基于8086的LCD1602显示仿真设计基于8086的LED点阵汉字流水显示设计基于8086的LED中文显示屏显示设计-仿真设计资料转发