黄明哲 基于SoPC的万年历设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(shift==2){//修改时间 if(con==0){hour+=step;if(hour>=24||hour<0)hour=0;} else if(con==1){minute+=step;if(minute>=60||minute<0) minute=0;} else if(con==2){second +=step;if(second>=60||second<0) second=0;}
if(IORD(KEY_PIO_BASE, 0)==7) {while(1){if(IORD(KEY_PIO_BASE, 0)==15)break;}return 4;}
else return 0; }
//==========判断按键=============ቤተ መጻሕፍቲ ባይዱ===
//==========修改时间================= void modify(void) {
三、设计内容
1、按键信息 BUTTON[3]:“年”、“月”、“日”或“时”、“分”、“秒”切换键 BUTTON[2]:+键 BUTTON[1]:-键 BUTTON[0]:“年”、“月”、“日”与“时”、“分”、“秒”切换键
显示信息 LCD_Line1:显示“年”、“月”、“日” LCD_Line1:显示“时”、“分”、“秒”
2
山东工商学院
set_location_assignment PIN_N2 -to clk set_location_assignment PIN_V18 -to led[3] set_location_assignment PIN_W19 -to led[2] set_location_assignment PIN_AF22 -to led[1] set_location_assignment PIN_AE22 -to led[0] set_location_assignment PIN_W26 -to KEY[3] set_location_assignment PIN_P23 -to KEY[2] set_location_assignment PIN_N23 -to KEY[1] set_location_assignment PIN_G26 -to KEY[0] set_location_assignment PIN_K4 -to LCD_RW set_location_assignment PIN_K3 -to LCD_EN set_location_assignment PIN_K1 -to LCD_RS set_location_assignment PIN_L4 -to LCD_ON set_location_assignment PIN_J1 -to LCD_DATA[0] set_location_assignment PIN_J2 -to LCD_DATA[1] set_location_assignment PIN_H1 -to LCD_DATA[2] set_location_assignment PIN_H2 -to LCD_DATA[3] set_location_assignment PIN_J4 -to LCD_DATA[4] set_location_assignment PIN_J3 -to LCD_DATA[5] set_location_assignment PIN_H4 -to LCD_DATA[6] set_location_assignment PIN_H3 -to LCD_DATA[7] 然后进行编译,在 Quartus I 下生成文件如下图:
另外用输入按钮 BUTTON[3]来控制日期和时间的修改,当处于日期修改方 式时,每次按动一次 BUTTON[3],依次更换“年”、“月”和“日”的修改。当处于时 间修改方式时,每次按动一次 BUTTON[3],依次更换“时”、“分”和“秒”的修改。 修改对象被选中后,按动 BUTTON[2]输入按钮可以增加显示的数字;按动 BUTTON[1]输入按钮可以减少显示的数字。
FPGA-CPLD 原理及应用课程设计报告
题目:
基于 SoPC 万年历设计
学院:
信息与电子工程学院
专业:
电科 111
学号:
1105B208
姓名:
黄明哲
指导老师: 张守祥
时间: 2014.6.19--2014.6.21
山东工商学院
课程设计报告
一、摘要
设计从系统硬件出发,由 CPU、总线、RAM、外接设备等构成 SOPC Builder 的硬件系统,通过 Nios II DE2 开发的嵌入式软件编写并嵌入 SOPC Builder 的硬 件中实现万年历的整体开发。通过应用 SoPC Builder 开发工具,设计者可以摆脱 传统的、易于出错的软硬件设计细节,从而达到加快项目开发、缩短开发周期、 节约开发成本的目的并具有高集成度、设计灵活和可移植性较好。 关键词:万年历 SOPC SOPC Builder Nios II DE2
lcd_write_data(LCD_16207_0_BASE,Text[i]); usleep(2000); } } void LCD_Line1() { lcd_write_cmd(LCD_16207_0_BASE,0x80); usleep(2000); } void LCD_Line2() { lcd_write_cmd(LCD_16207_0_BASE,0xC0); usleep(2000); }
二、设计要求
用 Nios II DE2 开发板的 LCD 显示电子钟的日期和时间。LCD 分两行显示, 第 1 行显示年、月、日;第 2 行显示时、分、秒。用输入 BUTTON[0]来控制 LCD 行的修改,同时让 Nios II DE2 开发板上的绿色发光二极管亮灭来表示这个选择。 当 BUTTON[0]按一下后,LEDG3 亮,可以修改年、月和日的数字;再按一下 BUTTON[0]后,LEDG3 灭,可以修改时、分和秒的数字。
#define lcd_read_cmd(base)
IORD(base, 1)
#define lcd_write_data(base,data) IOWR(base, 2, data)
4
山东工商学院
#define lcd_read_data(base)
IORD(base, 3)
//==========================
1
山东工商学院
课程设计报告
2、SOPC Builder 硬件建立 SOPC Builder 是在 Quartus II 里的 SOPC Builder 进行的,先建立工程,
在 SOPC Builder 里添加硬件,包括 CPU ,jtag_uart ,RAM,LCD,PIO, 按键,LED,以及 LCD_ON。 3、Quartus II 硬件处理 硬件会自动建立一个顶层模块,通过建一个原理图来对对应的硬件进行输 入输出的添加,再锁定引脚,编译工程,硬件下载。 4、Nios II DE2 嵌入软件编写 在 Nios II 里建立工程,选择相应的模块,编写需要嵌入的软件,添加缺少 的头文件对应的宏定义,编译工程,进行软件下载,在观察结果。
课程设计报告
3
山东工商学院
课程设计报告
图 2. 顶层电路
4、Nios II 运行 打开 Nios II IDE2,建立工程,选择 count_binary 模块,添加一个 LCD.h 的
顶层文件。 LCD.h 的顶层文件为:
#ifndef _LCD_H_
#define _LCD_H_
//LCD Module 16*2
void LCD_Init();
void LCD_Show_Text(char*Text);
void LCD_Line2();
void LCD_Test();
//=========================
#endif //_LCD_H_
int year=2014; int month=6; int day=21; int hour=9; int minute=25; int second=30; int selectkey=1; int selectkeylr=1; int ms=0; int KEY=0;
#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)
IORD(base, 3)
//==========================
void LCD_Init();
void LCD_Show_Text(char*Text);
void LCD_Line2();
void LCD_Test();
//=========================
#endif //_LCD_H_ 程序:
#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)
int shift=0,con=0,step=0;
//#include "basic_io.h" volatile int edge_capture;
void LCD_Init() {
lcd_write_cmd(LCD_16207_0_BASE,0x38);
5
课程设计报告
山东工商学院
usleep(2000); lcd_write_cmd(LCD_16207_0_BASE,0x0C); usleep(2000); lcd_write_cmd(LCD_16207_0_BASE,0x01); usleep(2000); lcd_write_cmd(LCD_16207_0_BASE,0x06); usleep(2000); lcd_write_cmd(LCD_16207_0_BASE,0x80); usleep(2000); } void LCD_Show_Text(char*Text) { int i; for(i=0;i<strlen(Text);i++) {
四、设计步骤
1、打开 Quartus II 新建工程 2、打开 SOPC Builder 生成相应的硬件如图所示
图 1.SoPC 配置
建立好后点击 Generate 运行,看是否出错,然后点击 exit 退出。 3、调用刚才生成的硬件系统,在 Quartus II 中建立图形文件,然后进行引脚锁
定。 引脚锁定引脚文件如下: #Setup.tcl #Setup pin setting set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
6
课程设计报告
山东工商学院
课程设计报告
//==========判断按键================= 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;}
相关文档
最新文档