Abstract
本文討論如何在Nios II控制8位數的七段顯示器。

Introduction
使用環境:Quartus II 8.0 + Nios II EDS 8.0 + DE2-70 (Cyclone II EP2C70F896C6N)

(原創) 如何在Nios II顯示8位數的七段顯示器? (IC Design) (DE2) (Nios II)討論的是DE2平台,到了DE2-70平台,控制七段顯示器的方式有些改變:

1.七段顯示器多了8個小數點可控制。
2.友晶科技提供了新的七段顯示器ip,其HAL也不太一樣。

本文使用(原創) 哪裡有DE2-70的Nios II reference design可以參考? (SOC) (DE2-70) (Nios II) (SOPC Builder)所提供的範例為基礎討論。

SOPC Builder部分
使用友晶科技所提供SEG7_IF ip

Top Module部分
請參考(原創) 哪裡有DE2-70的Nios II reference design可以參考? (SOC) (DE2-70) (Nios II) (SOPC Builder)

使用HAL控制七段顯示器

將\DE2_70_NIOS_10_seg7\ip\TERASIC_SEG7\software\的SEG7.c與SEG7.h 複製到\DE2_70_NIOS_10_seg7\software\hello_world_0\,必須將SEG7.h與SEG7.c做些修改。

SEG7.h / C

1 #ifndef SEG7_H_2 #define SEG7_H_3 4 #include "alt_types.h"5 6 void SEG7_Clear(void);7 void SEG7_Full(void);8 void SEG7_Hex(alt_u32 Data, alt_u8 point_mask);9 void SEG7_Decimal(alt_u32 Data, alt_u8 point_mask);10 void SEG7_Number(void);11 12 #endif /*SEG7_H_*/

4行

#include "alt_types.h"

增加inlucde alt_types.h,因為alt_u32定義在alt_types.h

6行

void SEG7_Clear(void);void SEG7_Full(void);void SEG7_Hex(alt_u32 Data, alt_u8 point_mask);void SEG7_Decimal(alt_u32 Data, alt_u8 point_mask);void SEG7_Number(void);

提供5個HAL讓我們可以在Nios II用C去控制七段顯示器。

SEG7_Clear():將8個七段顯示器全部清空不顯示(不是0,是完全不顯示)。
SEG7_Full():將8個七段顯示器全部顯示8。
SEG7_Hex():將8個七段顯示器以16進位顯示,第2個參數可控制小數點,如0x10表示顯示第5個小數點。
SEG7_Decimal():將8個七段顯示器以10進位顯示,第2個參數可控制小數點,如0x10表示顯示第5個小數點。
SEG7_Numer(): 將8個七段顯示器從左至右顯示76543210。

SEG7.c / C

1 #include "system.h"2 #include "alt_types.h"3 #include "io.h"4 #include "SEG7.h"5 6 #define SEG7_SET(index, seg_mask) IOWR(SEG7_BASE,index,seg_mask)7 #define SEG7_NUM 88 9 static unsigned char szMap[] = {10   63, 6, 91, 79, 102, 109, 125, 7, 11   127, 111, 119, 124, 57, 94, 121, 11312 };  // 0,1,2,.9, a, b, c, d, e, f13     14 void SEG7_Clear(void) {15   int i;16   17   for(i=0; i<SEG7_NUM; i++)18     SEG7_SET(i, 0x00);19 }20 21 void SEG7_Full(void) {22   int i;23   24   for(i=0; i<SEG7_NUM; i++)25     SEG7_SET(i, 0xFF);26 }27 28 void SEG7_Number(void) {29   int i;30 31   for(i=0;i<SEG7_NUM;i++)32     SEG7_SET(i, szMap[i]);33 }34 35 void SEG7_Hex(alt_u32 Data, alt_u8 point_mask) {36   alt_u8 mask = 0x01;37   alt_u8 seg_mask;38   int i;39     40   seg_mask = 0;41   for(i = 0; i < SEG7_NUM; i++) {42     seg_mask = szMap[Data & 0x0F];43     Data >>= 4;44 45     if (point_mask & mask)46       seg_mask |= 0x80;47       48     mask <<= 1;49     SEG7_SET(i, seg_mask);50   }51 }52 53 void SEG7_Decimal(alt_u32 Data, alt_u8 point_mask) {54   alt_u8 mask = 0x01;55   alt_u8 seg_mask;56   int i;57   seg_mask = 0;58   59   for(i = 0; i < SEG7_NUM; i++) {60     seg_mask = szMap[Data%10];61     Data /= 10;62     63     if (point_mask & mask)64       seg_mask |= 0x80;65       66     mask <<= 1;67     SEG7_SET(i, seg_mask);68   }69 }

1行

#include "system.h"#include "alt_types.h"#include "io.h"#include "SEG7.h"

將原來的include改成如上所示。io.h定義了IOWR()。

hello_world.c / C

1 /* 2 (C) OOMusou 2008 http://oomusou.cnblogs.com3 4 Filename    : hello_world.c5 Compiler    : Nios II gcc6 Description : Demo how to display 7 seg. on DE2-707 Release     : 10/20/2008 1.08 */9 #include <stdio.h>10 #include "system.h"11 #include "unistd.h" // usleep()12 #include "SEG7.h"   // SEG7_Hex()13 14 int main() {15   int i;16   for(i = 0; i != 100; i++)  {17     usleep(1 * 1000 * 1000);18     SEG7_Hex(i, 0x10);19   }20 }

使用SEG7_Hex()從1數到100。

完整程式碼下載
DE2_70_NIOS_10_seg7.7z

Conclusion
七段顯示器是大家常用的debug工具,無論是寫Verilog或是寫C,利用友晶提供的TERASIC_SEG7 ip,我們也可以在Nios II利用C控制七段顯示器。

See Also
(原創) 如何在Nios II顯示8位數的七段顯示器? (IC Design) (DE2) (Nios II)
(原創) 哪裡有DE2-70的Nios II reference design可以參考? (SOC) (DE2-70) (Nios II) (SOPC Builder)

(原創) 如何在Nios II顯示8位數的七段顯示器? (SOC) (Nios II) (SOPC Builder) (DE2-70)的更多相关文章

  1. Windows Server 2012 R2在桌面上顯示我的電腦等圖示

    Windows Server 2012 R2在桌面上顯示我的電腦等圖示   從Windows2012開始,微軟取消了服務器桌面個性化選項,如何重新調出配置界面,可以使用微軟命令調出.方法如下: 同時按 ...

  2. 【原】如何在jQuery中实现闭包

    原生JS中,闭包虽好用,但是很难用好,在jQuery中一样,都有一些点需要我们注意.jQuery中使用闭包的常见情况有以下几种: 1.$(document).ready()的参数 我们在写jQuery ...

  3. (原創) Gvim 個人習慣常用設定 (vim)

    不定期更新這篇,因為查詢到好用的設定或者插件就會更新自己的設定. "set nocompatible let $LANG='zh_TW.UTF-8' set langmenu=zh_tw.u ...

  4. WCF最简单的一次通信(有部分參考,多爲原創)

    不廢話,直接上乾貨 1.先创建一个wcf服务库,是服务类库,远程的lib 2.全部按照默认设置,不修改.然后点发布,会出现一个wcf测试客户端,可以看有没有发布成功. 3.msdn的wcf教程还要求输 ...

  5. 如何在Win10下设置图片的浏览方式为windows照片查看器

    小编前些天刚装好了win10,一阵心奋啊,今天刚打开一个图片,却发现图片的默认打开方式是window应用商店的app, 这让我觉得特别不舒服,没有之前windows自带的照片查看器好用,后来我本想进入 ...

  6. 如何在WIN7_64环境下安装Oracle10g_64位版本

    转载请注明出处http://www.cnblogs.com/SharpL/p/4338638.html 1.如果之前安装过Oracle软件,建议完全卸载(究竟有没有必要_不知道_我是这么做的) 2.清 ...

  7. Nios II的Boot过程分析

    目录 1       概述....................................................................... 1 2       几种常见的 ...

  8. 关于Nios II的启动分析(转载)

    原文地址:http://hi.baidu.com/goatdai/item/cc33671545d89243e75e06ad 常用到的存储器包括SDRMA.SRAM.FLASH.Onchip_memo ...

  9. 如何在niosII中添加i2c外设_winday_新浪博客

    如何在niosII中添加i2c外设_winday_新浪博客 如何在niosII中添加i2c外设 winday 摘要:本文说明了如何在niosII添加第三方i2c外设,以供参考. 由于本人使用的Alte ...

随机推荐

  1. RHCS概述

    RHCS概述 创建RHCS集群环境 创建高可用Apache服务 1 创建RHCS集群环境 1.1 问题 准备四台KVM虚拟机,其三台作为集群节点,一台安装luci并配置iSCSI存储服务,实现如下功能 ...

  2. C语言atoi函数

    目录 1.包含头文件 2.函数声明 3.功能说明 4.示例 5.其它说明 6.版权声明 C语言提供了一系列函数把字符串转换为整数:atoi.atol.atoll和atoq. 1.包含头文件 #incl ...

  3. rest_framework-序列化-1

    序列化 定义模型类 from django.db import models # Create your models here. class StuModel(models.Model): SEX_ ...

  4. 数据结构-Python 字典

    字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示 d = ...

  5. "四号标题"组件:<h4> —— 快应用组件库H-UI

     <import name="h4" src="../Common/ui/h-ui/text/c_h4"></import> < ...

  6. https的秘钥公钥以及之间的会话流程

      一 共享秘钥 1.1 概念 共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙. 1.2 共享秘钥在HTTP传输中的缺点 以共享密钥方式加密时 ...

  7. 自己总结 :并发队列ConcurrentLinkedQueue、阻塞队列AraayBlockingQueue、阻塞队列LinkedBlockingQueue 区别 和 使用场景总结

    并发队列ConcurrentLinkedQueue.阻塞队列AraayBlockingQueue.阻塞队列LinkedBlockingQueue 区别 和  使用场景总结 分类: Java2013-0 ...

  8. 用Python介绍了企业资产情况的数据爬取、分析与展示。

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:张耀杰 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  9. CSS属性中的display属性浅谈;

    首先我们要知道什么是块级元素和行内元素有什么区别: 承接上篇文章:(浅谈HTML和body标签) 块级元素:浏览器解析为独占一行的元素(例如:div.table.ul等.),浏览器会在该元素的前后显示 ...

  10. 多窗体及窗体之间传值 以及listview的使用

    三中打开窗口窗体状态: 1   messagebox.show 类型  特点: 从窗口form 1里打开另一个窗体form2,form2不关闭的情况下form1 不能操作:代码如下: private ...