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. flume客户端模拟数据发送并记录在mysql数据库

    这里只是做了简单的demo,并未深研 1.编写PolluteSink 1.1 maven创建项目(pom.xml) <dependencies> <dependency> &l ...

  2. 1038 Recover the Smallest Number (30分)(贪心)

    Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...

  3. 1036 Boys vs Girls (25分)(水)

    1036 Boys vs Girls (25分)   This time you are asked to tell the difference between the lowest grade o ...

  4. Java8 学习笔记--函数式接口

    通过之前的函数式接口与lambda表达式的关系那篇文章,大家应该对函数式接口有了一定的了解了,在Java中它是lambda表达式的基础,没有函数式接口就没有办法使用lambda表达式. 函数式接口如此 ...

  5. 【redis】redis

    一.redis简介: 1. reids 也是一个 key-value 存储系统,更加确切地说,它已经是一个非关系型数据库. 2. 关系型. SQL语言. 3. 非关系型. key - value. 4 ...

  6. 写日志 使用nnlog

    import nnlog log=nnlog.Logger(r"/学习/接口自动化/BestTest/10.26/book_server.log",backCount=5,leve ...

  7. MAC设置开机启动

    mac将使用launchctl做为开机启动工具,launchctl将根据plist文件的信息来启动任务.plist脚本一般存放在以下目录: l /Library/LaunchDaemons --> ...

  8. 28.5 Integer-- int的包装类

    * 由于基本数据类型只能做一些简单的操作和运算,所以Java为我们封装了基本数据类型,为每种基本数据类型提供了包装类 * 包装类就是封装了基本数据类型的类,为我们提供了更多复杂的方法和一些变量 * * ...

  9. 22.1 Extends 继承的 方法重写、@Override的使用、

    /* * 继承中成员方法的特点 * 子类中没有这个方法,调用父类的 * 子类中重写了这个方法,调用子类的 * 方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类 ...

  10. matplotlib 中其他基于Affine2DBase的类

    2020-04-11 11:42:22 --Edit by yangray以下所有类(除了BboxTransformToMaxOnly )都直接继承于Affine2DBaseIdentityTrans ...