(原創) 如何在Nios II顯示8位數的七段顯示器? (SOC) (Nios II) (SOPC Builder) (DE2-70)
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)的更多相关文章
- Windows Server 2012 R2在桌面上顯示我的電腦等圖示
Windows Server 2012 R2在桌面上顯示我的電腦等圖示 從Windows2012開始,微軟取消了服務器桌面個性化選項,如何重新調出配置界面,可以使用微軟命令調出.方法如下: 同時按 ...
- 【原】如何在jQuery中实现闭包
原生JS中,闭包虽好用,但是很难用好,在jQuery中一样,都有一些点需要我们注意.jQuery中使用闭包的常见情况有以下几种: 1.$(document).ready()的参数 我们在写jQuery ...
- (原創) Gvim 個人習慣常用設定 (vim)
不定期更新這篇,因為查詢到好用的設定或者插件就會更新自己的設定. "set nocompatible let $LANG='zh_TW.UTF-8' set langmenu=zh_tw.u ...
- WCF最简单的一次通信(有部分參考,多爲原創)
不廢話,直接上乾貨 1.先创建一个wcf服务库,是服务类库,远程的lib 2.全部按照默认设置,不修改.然后点发布,会出现一个wcf测试客户端,可以看有没有发布成功. 3.msdn的wcf教程还要求输 ...
- 如何在Win10下设置图片的浏览方式为windows照片查看器
小编前些天刚装好了win10,一阵心奋啊,今天刚打开一个图片,却发现图片的默认打开方式是window应用商店的app, 这让我觉得特别不舒服,没有之前windows自带的照片查看器好用,后来我本想进入 ...
- 如何在WIN7_64环境下安装Oracle10g_64位版本
转载请注明出处http://www.cnblogs.com/SharpL/p/4338638.html 1.如果之前安装过Oracle软件,建议完全卸载(究竟有没有必要_不知道_我是这么做的) 2.清 ...
- Nios II的Boot过程分析
目录 1 概述....................................................................... 1 2 几种常见的 ...
- 关于Nios II的启动分析(转载)
原文地址:http://hi.baidu.com/goatdai/item/cc33671545d89243e75e06ad 常用到的存储器包括SDRMA.SRAM.FLASH.Onchip_memo ...
- 如何在niosII中添加i2c外设_winday_新浪博客
如何在niosII中添加i2c外设_winday_新浪博客 如何在niosII中添加i2c外设 winday 摘要:本文说明了如何在niosII添加第三方i2c外设,以供参考. 由于本人使用的Alte ...
随机推荐
- flume客户端模拟数据发送并记录在mysql数据库
这里只是做了简单的demo,并未深研 1.编写PolluteSink 1.1 maven创建项目(pom.xml) <dependencies> <dependency> &l ...
- 1038 Recover the Smallest Number (30分)(贪心)
Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...
- 1036 Boys vs Girls (25分)(水)
1036 Boys vs Girls (25分) This time you are asked to tell the difference between the lowest grade o ...
- Java8 学习笔记--函数式接口
通过之前的函数式接口与lambda表达式的关系那篇文章,大家应该对函数式接口有了一定的了解了,在Java中它是lambda表达式的基础,没有函数式接口就没有办法使用lambda表达式. 函数式接口如此 ...
- 【redis】redis
一.redis简介: 1. reids 也是一个 key-value 存储系统,更加确切地说,它已经是一个非关系型数据库. 2. 关系型. SQL语言. 3. 非关系型. key - value. 4 ...
- 写日志 使用nnlog
import nnlog log=nnlog.Logger(r"/学习/接口自动化/BestTest/10.26/book_server.log",backCount=5,leve ...
- MAC设置开机启动
mac将使用launchctl做为开机启动工具,launchctl将根据plist文件的信息来启动任务.plist脚本一般存放在以下目录: l /Library/LaunchDaemons --> ...
- 28.5 Integer-- int的包装类
* 由于基本数据类型只能做一些简单的操作和运算,所以Java为我们封装了基本数据类型,为每种基本数据类型提供了包装类 * 包装类就是封装了基本数据类型的类,为我们提供了更多复杂的方法和一些变量 * * ...
- 22.1 Extends 继承的 方法重写、@Override的使用、
/* * 继承中成员方法的特点 * 子类中没有这个方法,调用父类的 * 子类中重写了这个方法,调用子类的 * 方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类 ...
- matplotlib 中其他基于Affine2DBase的类
2020-04-11 11:42:22 --Edit by yangray以下所有类(除了BboxTransformToMaxOnly )都直接继承于Affine2DBaseIdentityTrans ...