SOPC综合实验报告.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SOPC综合实验报告

基于SOPC的数字钟设计 学 院: 计控学院 班 级: 计本121 学 号: 2012021001 姓 名: 钟济强 指导老师: 张浩鹏 设计概述 用Nios II DE2开发板的LCD显示电子钟的日期和时间,LCD分两行显示,第一行显示年月日,第二行显示时分秒。用输入按钮BUTTON来控制LCD行修改,通过Nios II IDE进行软件设计。 设计要求 1.掌握Nios II系统的设计和使用方法; 2.学习通过Nios II IDE进行软件设计的方法; 3.实现在液晶屏上显示时间和日期,并可以对其进行设置。 实验环境 DE2 开发板 QuartusII 7.2 SOPC Builder 7.2 NiosII IDE 7.2 设计方案(总体设计、软件设计、硬件设计) 1. 总体设计要实现以下两个功能: (1). 在液晶屏上显示时间,日期 (2). 对时间、日期能够进行设置 建立新工程clock 2. 硬件系统组成设计 根据系统要实现的功能和开发板配置,需要用到的DE2开发板上的外围器件有: LCD:电子钟显示屏幕 按钮:电子钟设置功能键 CFI Flash存储器:存储软、硬件程序 SDRAM存储器:程序运行时将其导入SDRAM 根据所用到的外设和器件特性,在SOPC Builder中建立系统要添加的模块包括:NiosII CPU定时器,按键PIO,LCD, 外部存储器总线(Avalon三态桥),外部SDRAM控制器,外部Flash接口。 打开SOPC Buider,系统名称为sopc_clock 加入SDRAM组件 加入Flash Memory 组件 加入外部存储器总线(Avalon三态桥) 加入按键PIO 加入LCD 加入NiosII CPU定时器,选择标准型的 元件添加完后,要为每个外设分配及地址和中断请求优先级(IRQ),在System中选择Auto-Assign Base Address和Auto-Assign IRQs命令,这两个命令可分别简单分配外设基地址和中断优先级。然后生成Nios II系统。 然后生成顶层文件,将Nios II系统模块加入到顶层文件中,如图所示原理图 进行引脚锁定,并编译,然后进行硬件下载 3.软件系统设计 要实现系统所需的功能,大量的工作应该集中在软件设计和优化上。电子钟的软件功能主要分为显示、设置和时间算法三大部分。 显示部分的功能包括:显示时间(小时:分钟:秒)和 显示日期(年-月-日) 设置部分的功能包括:设置小时,设置分钟,设置年份,设置月份,设置日期和退出设置。 设置部分的程序主要用在对按键的响应。在编写程序前要对DE2开发板上的四个按键BUTTON功能进行如下分配: (1). 主菜单 BUTTON0:设置选择键,可依次选择设置时、分、秒和年、月、日 BUTTON1:显示日期键 BUTTON2:显示时间键 (2). 子菜单(即进入对某个选项设置后的按键功能): BUTTON1:选项数字增加 BUTTON2:选项数字减少 BUTTON3:退出对选项的设置,返回主菜单 时间算法部分的功能包括:时间累加和确定每个月的最大天数,使年、月、日能正确累加 软件代码 1.count_binary.c的代码: #include count_binary.h //程序每秒钟检测一次按钮的状态,对日期和时间进行设置 #include alt_types.h #include stdio.h #include string.h #include unistd.h #include system.h #include sys/alt_irq.h #include altera_avalon_pio_regs.h #include lcd.h volatile int edge_capture; void LCD_Init() { //LCD初始化 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(char*

文档评论(0)

2266670 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档