数码管显示课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);