FPGA-CPLD原理及应用课程万年历设计报告

FPGA-CPLD原理及应用课程设计报告
                       
        题目:            万年历设计                       
学院:        信息与电子工程学院
专业:        电子信息工程
学号:          XXXXXXXX
姓名:          XXXXXX         
指导老师:      XXXXXX
时间:  2015.12.20-2015.12.23
一、摘要
设计从系统硬件出发,由CPU、总线、RAM、外接设备等构成SOPC Builder的硬件系统,通过Nios II DE2开发的嵌入式软件编写并嵌入SOPC Builder的硬件中实现万年历的整体开发。通过应用SoPC Builder开发工具,设计者可以摆脱传统的、易于出错的软硬件设计细节,从而达到加快项目开发、缩短开发周期、节约开发成本的目的并具有高集成度、设计灵活和可移植性较好。
关键词:万年历  SOPC  SOPC Builder  Nios II DE2
二、设计要求
用Nios II DE2 开发板的LCD显示电子钟的日期和时间。LCD分两行显示,第1行显示年、月、日;第2行显示时、分、秒。用输入BUTTON[0]来控制LCD行的修改,同时让Nios II DE2开发板上的绿发光二极管亮灭来表示这个选择。当BUTTON[0]按一下后,LEDG3亮,可以修改年、月和日的数字;再按一下BUTTON[0]后,LEDG3灭,可以修改时、分和
秒的数字。
另外用输入按钮BUTTON[3]来控制日期和时间的修改,当处于日期修改方式时,每次按动一次BUTTON[3],依次更换“年”、“月”和“日”的修改。当处于时间修改方式时,每次按动一次BUTTON[3],依次更换“时”、“分”和“秒”的修改。修改对象被选中后,按动BUTTON[2]输入按钮可以增加显示的数字;按动BUTTON[1]输入按钮可以减少显示的数字。
三、设计内容
1、按键信息
BUTTON[3]:“年”、“月”、“日”或“时”、“分”、“秒”切换键
BUTTON[2]:+键
BUTTON[1]:-键
BUTTON[0]:“年”、“月”、“日”与“时”、“分”、“秒”切换键
显示信息
LCD_Line1:显示“年”、“月”、“日”
LCD_Line1:显示“时”、“分”、“秒”
2SOPC Builder 硬件建立
        SOPC Builder是在Quartus II里的SOPC Builder进行的,先建立工程,在SOPC Builder里添加硬件,包括CPU ,jtag_uart ,RAM,LCD,PIO,按键,LED,以及LCD_ON。
3Quartus II硬件处理
    硬件会自动建立一个顶层模块,通过建一个原理图来对对应的硬件进行输入输出的添加,再锁定引脚,编译工程,硬件下载。
4Nios II DE2嵌入软件编写
在Nios II里建立工程,选择相应的模块,编写需要嵌入的软件,添加缺少的头文件对应的宏定义,编译工程,进行软件下载,在观察结果。
四、设计步骤
1、打开Quartus II新建工程
垃圾分类器2、打开SOPC Builder生成相应的硬件如图所示
图1.SoPC配置
    建立好后点击Generate运行,看是否出错,然后点击exit退出。
3、在Quartus II中建立图形文件,调用刚才生成的硬件系统,然后进行引脚配置。
引脚配置图如下:
图2.引脚配置
然后进行编译,生成文件如下图:
3.顶层电路
4、Nios II运行
    打开Nios II IDE2,建立工程,选择count_binary模块,添加一个LCD.h的顶层文件。
LCD.h的顶层文件为:
#ifndef _LCD_H_
#define _LCD_H_
//LCD Module 16*2
#define  lcd_write_cmd(base,data)    IOWR(base, 0, data)
#define  lcd_read_cmd(base)        IORD(base, 1)
#define  lcd_write_data(base,data)    IOWR(base, 2, data)
#define  lcd_read_data(base)        IORD(base, 3)
//==========================
void  LCD_Init();
void  LCD_Show_Text(char*Text);
void  LCD_Line2();
void  LCD_Test();
//=========================
#endif //_LCD_H_
C语言程序代码为:
#include <stdio.h>
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "system.h"
#ifndef _LCD_H_
#define _LCD_H_
//LCD Module 16*2
#define  lcd_write_cmd(base,data)    IOWR(base, 0, data)
#define  lcd_read_cmd(base)        IORD(base, 1)
#define  lcd_write_data(base,data)    IOWR(base, 2, data)
#define  lcd_read_data(base)        IORD(base, 3)
//==========================
void  LCD_Init();
void  LCD_Show_Text(char*Text);
水培鱼缸
void  LCD_Line2();
void  LCD_Test();
//=========================
#endif //_LCD_H_
int year=2015;
int month=12;
int day=23;
int hour=11;
int minute=10;
int second=21;
int selectkey=1;
便携式设备
int selectkeylr=1;
int ms=0;
int KEY=0;
int shift=0,con=0,step=0;
//#include "basic_io.h"
volatile int edge_capture;
void LCD_Init()
{
    lcd_write_cmd(LCD_BASE,0x38);
    usleep(2000);
    lcd_write_cmd(LCD_BASE,0x0C);
    usleep(2000);
防跌倒手环    lcd_write_cmd(LCD_BASE,0x01);
    usleep(2000);
    lcd_write_cmd(LCD_BASE,0x06);
    usleep(2000);
    lcd_write_cmd(LCD_BASE,0x80);
    usleep(2000);
}
void LCD_Show_Text(信号灯作5Gchar*Text)
{
  int i;
  for(i=0;i<strlen(Text);i++)
    {
      lcd_write_data(LCD_BASE,Text[i]);
      usleep(2000);
    }
}
void LCD_Line1()
{
  lcd_write_cmd(LCD_BASE,0x80);
  usleep(2000);
}
void LCD_Line2()
{
芯片怎么烧录程序  lcd_write_cmd(LCD_BASE,0xC0);
  usleep(2000);
}
//==========判断按键=================
int push_button(void){
    if(IORD(KEY_PIO_BASE, 0)==14) {while(1){if(IORD(KEY_PIO_BASE, 0)==15)break;}return 1;}
    if(IORD(KEY_PIO_BASE, 0)==13) {while(1){if(IORD(KEY_PIO_BASE, 0)==15)break;}return 2;}
    if(IORD(KEY_PIO_BASE, 0)==11) {while(1){if(IORD(KEY_PIO_BASE, 0)==15)break;}return 3;}
    if(IORD(KEY_PIO_BASE, 0)==7)  {while(1){if(IORD(KEY_PIO_BASE, 0)==15)break;}return 4;}

本文发布于:2024-09-21 15:35:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/165654.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:硬件   设计   工程   修改   建立
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议