数码管显示课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

片上系统技术课程设计

题目:数码管的显示

学号:

姓名:

班级:

教师:

日期:

目录

一.实验前的准备 (3)

二.实验目的 (3)

三.实验设备 (3)

四.实验内容 (3)

五.实验原理 (3)

六.管脚分配 (4)

七.实验步骤 (4)

八.实验原理图: (5)

九.实验程序代码: (6)

(1)CH452_I2C.h代码 (6)

(2)Define.h代码 (8)

(3)key.h代码 (10)

(4)Key.c代码 (10)

(5)Seven_seg.c代码 (12)

十.结果分析: (15)

十一.个人体会与总结: (16)

一.实验前的准备

打开实验箱开关,连接好JTAG下载线,将开发平台上的MODUL_SEL组合开关的1、2、7拨上,3、4、5、6、8拨下,使两个共阳极数码管显示为C2。

二.实验目的

(1)熟悉并学习运用I2C总线的读写方式。

(2)运用CH452芯片的数码管显示功能,熟悉两线制访问CH452芯片的工作原理。

三.实验设备

硬件:PC机

GX-CIDE-SOC/SOPC综合创新开发实验平台

GX-CIDE-SOC/SOPC综合创新开发实验平台核心板

软件:Quartus II 8.0

Nios II 8.0

四.实验内容

用七段数码管前三位显示000-999,计数周期为1s;按F1进行加1操作并用数码管显示。按F2计数停止,并显示当前数。按F3进行减1操作;当数从000-999时再加1变为000;当数从999-000时再减1变为999。

五.实验原理

根据I2C总线时序要求,对CH452进行操作,送地址,送控制字,送数据。数码管显示是以BCD译码方式显示。

六.管脚分配

七.实验步骤

(1)打开Quartus II 8.0,打开工程cide_c2,进行SOPC操作,裁剪所需要的内容,综合一下再分配管脚。

(2)启动Nios II IDE并新建一个空白C/C++工程,命名为smm,在SOPC Builder System中选择之前建立好的硬件系统cide_c2.ptf。

(3)转换工程路径,将提供的参考程序seven_seg.c,CH452_I2C.h,define.h

加入到建立好的Nios II工程中,修改程序代码符合实验要求。(4)在System Library设置页中,把程序和数据区都指定为sdram。(5)在Quartus II中下载文件,编译整个工程,查找语法错误。(6)全速运行程序,按下按键观察数码管的显示。

八.实验原理图:

九.实验程序代码:

(1)CH452_I2C.h代码

#include"system.h"

#include"altera_avalon_pio_regs.h"

#include"alt_types.h"

#include"priv/alt_busy_sleep.h"

#include

#include"sys/alt_irq.h"

#include"define.h"

void CH452_I2c_Start_2(void) // 操作起始,两线制方式,SDA用做中断输出,使用以下两个函数

{

IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SCL_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE, 1);

usleep(5);

IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE, 0);

usleep(5);

IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE, 0);

//usleep(3);

}

void CH452_I2c_Stop_2(void) // 操作结束

{

IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SCL_BASE, 1);

IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE, 0);

IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE, 1);

usleep(5);

IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE, 1);

usleep(5);

IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE, 0) ;

}

void ack()//确认

{

IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE, 0);

IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SCL_BASE, 1);

相关文档
最新文档