SOPC的7段数码管计数GXCIDESOPC平台Word格式文档下载.docx
- 文档编号:19703747
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:21
- 大小:391.39KB
SOPC的7段数码管计数GXCIDESOPC平台Word格式文档下载.docx
《SOPC的7段数码管计数GXCIDESOPC平台Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SOPC的7段数码管计数GXCIDESOPC平台Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
4、完全编译后,通过JTAG端口,烧录到试验箱中:
8
5、NIOSII8.0IDE中进行软件编译:
6、编译完成后,选择RUNASniosⅡhardware:
9
五、实验结果(实验箱截图):
10
六、心得体会。
七、程序:
11
1、主程序:
seven_seg.c11
2、CH452_I2C.h13
3、define.h16
4、key.c17
5、key.h19
通过Quartus
中SOPC工具,构建开发板硬件,以及NIOSII8.0IDE编译软件程序,在实验箱(GX-SOC/SOPC-CIDE综合创新开发试验平台)控制7段数码管,实现以下功能:
1、按键1:
控制7段数码管从0~999按照一秒加1操作;
2、按键2:
控制7段数码管从0~999按照一秒减1操作;
3、按键3:
控制7段数码管加1或者减1操作停止。
添加实验范例cide_c2中的完整硬件,对本次实验需要使用到的硬件进行剪裁,仅留下必须的最小硬件系统。
软件方面,使用到i2c总线读取、ch452芯片的7段数码管。
程序需要完成按键的判断,实现该按键对应的操作。
控制程序使用C语言编程。
1、学习应用i2c总线的读写方式;
2、运用ch452芯片的数码管显示功能。
(剪裁前)
(剪裁后)
管脚分配,可以使用文本方式修改,在记录管脚分配的QSF文件中,保留以下文本即可:
set_location_assignmentPIN_L1-toclk_sys
set_location_assignmentPIN_L2-toreset
set_location_assignmentPIN_R5-tosdram_addr[0]
set_location_assignmentPIN_U2-tosdram_addr[1]
set_location_assignmentPIN_U1-tosdram_addr[2]
set_location_assignmentPIN_T2-tosdram_addr[3]
set_location_assignmentPIN_T1-tosdram_addr[4]
set_location_assignmentPIN_R2-tosdram_addr[5]
set_location_assignmentPIN_R1-tosdram_addr[6]
set_location_assignmentPIN_P6-tosdram_addr[7]
set_location_assignmentPIN_P5-tosdram_addr[8]
set_location_assignmentPIN_P3-tosdram_addr[9]
set_location_assignmentPIN_R6-tosdram_addr[10]
set_location_assignmentPIN_N4-tosdram_addr[11]
set_location_assignmentPIN_V2-tosdram_ba[0]
set_location_assignmentPIN_V1-tosdram_ba[1]
set_location_assignmentPIN_U3-tosdram_nCAS
set_location_assignmentPIN_N6-tosdram_CKE
set_location_assignmentPIN_T6-tosdram_nCS
set_location_assignmentPIN_V4-tosdram_data[0]
set_location_assignmentPIN_W5-tosdram_data[1]
set_location_assignmentPIN_Y4-tosdram_data[2]
set_location_assignmentPIN_Y3-tosdram_data[3]
set_location_assignmentPIN_W4-tosdram_data[4]
set_location_assignmentPIN_W3-tosdram_data[5]
set_location_assignmentPIN_Y2-tosdram_data[6]
set_location_assignmentPIN_Y1-tosdram_data[7]
set_location_assignmentPIN_P1-tosdram_data[8]
set_location_assignmentPIN_N2-tosdram_data[9]
set_location_assignmentPIN_N1-tosdram_data[10]
set_location_assignmentPIN_M6-tosdram_data[11]
set_location_assignmentPIN_M5-tosdram_data[12]
set_location_assignmentPIN_J2-tosdram_data[13]
set_location_assignmentPIN_J1-tosdram_data[14]
set_location_assignmentPIN_J4-tosdram_data[15]
set_location_assignmentPIN_W2-tosdram_DQM[0]
set_location_assignmentPIN_P2-tosdram_DQM[1]
set_location_assignmentPIN_T3-tosdram_nRAS
set_location_assignmentPIN_W1-tosdram_nWE
set_location_assignmentPIN_C14-tosram_nCS1
set_location_assignmentPIN_U4-tosdram_clk
set_location_assignmentPIN_Y20-tobutton_pio[7]
set_location_assignmentPIN_Y21-tobutton_pio[6]
set_location_assignmentPIN_Y22-tobutton_pio[5]
set_location_assignmentPIN_W22-tobutton_pio[4]
set_location_assignmentPIN_N21-tobutton_pio[3]
set_location_assignmentPIN_R18-tobutton_pio[2]
set_location_assignmentPIN_AB17-tobutton_pio[1]
set_location_assignmentPIN_U18-tobutton_pio[0]
set_location_assignmentPIN_AA14-tokey_INT_n
set_location_assignmentPIN_Y18-toscl
set_location_assignmentPIN_AA19-tosda
set_location_assignmentPIN_AB13-toseg_key_scl
set_location_assignmentPIN_AA12-toseg_key_sda
建立工程,把所有使用到的程序添加到工程文件下,进行编译
这门课程在开始的时候毫无头绪,不知从何下手,然后经过慢慢学习了解,才开始对SOPC稍微有了整体概念、思路。
通过这学期的学期,有了很到收获:
首先,通过学习,使自己对课本上的知识可以应用于实际,使得理论与实际相结合,加深自己对课本上的知识更好的理解,同事事实也锻炼了个人动手能力,对quartusⅡniosⅡ等仿真软件操作达到学以致用。
在设计中遇到了很多问题,在张老师的辛勤指导下,得以解决。
最后对自己有过帮助的同学和老师表示感谢!
seven_seg.c
#include"
system.h"
alt_types.h"
altera_avalon_pio_regs.h"
define.h"
CH452_I2C.h"
key.h"
priv/alt_busy_sleep.h"
sys/alt_irq.h"
#defineADDKEY1//
#defineDECREASEKEY2//
#defineSTOPKEY3//
intmain(void)
{
alt_u8KeyVlaue;
inti;
KeyPIOInit();
KeyIntEnable();
CH452_Write(CH452_SYSON2);
//两线制方式,如果SDA用做按键中断输出,那么命令应该为(0x04,0x23)
CH452_Write(CH452_BCD);
//BCD译码,8个数码管
while
(1)
{
KeyVlaue=GetKeyValue();
switch(KeyVlaue)
caseADD:
{
if(KeyVlaue==DECREASE)
break;
elseif(KeyVlaue==STOP)
else
if(i>
999)
i=0;
else
i+=1;
}
alt_busy_sleep(100000);
CH452_Write(CH452_DIG2|i/100);
CH452_Write(CH452_DIG1|i/10%10);
CH452_Write(CH452_DIG0|i%10);
caseDECREASE:
if(KeyVlaue==ADD)
{if(i<
=0)
i=999;
i-=1;
}
caseSTOP:
elseif(KeyVlaue==DECREASE)
elsei=i;
}
2、CH452_I2C.h
#include<
stdio.h>
voidCH452_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);
IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);
//usleep(3);
voidCH452_I2c_Stop_2(void)//操作结束
IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);
voidack()//确认
IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE,0);
voidCH452_I2c_WrByte(unsignedchardat)//写一个字节数据
unsignedchartemp_number;
unsignedchari;
intdelay;
for(i=0;
i<
8;
i++){
temp_number=dat>
>
7;
IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE,temp_number);
for(delay=0;
delay<
5;
delay++);
dat=dat<
<
1;
unsignedcharCH452_I2c_RdByte(void)//读一个字节数据
unsignedchari=8;
unsignedcharDATA_received=0;
while(i--){
DATA_received<
=1;
for(delay=0;
DATA_received|=IORD_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE);
returnDATA_received;
voidCH452_Write(unsignedshortcmd)//写命令
CH452_I2c_Start_2();
/*启动总线*/
#ifdefENABLE_2_CH452//若有两个CH452并连
CH452_I2c_WrByte((unsignedchar)(cmd>
7)&
CH452_I2C_MASK|CH452_I2C_ADDR0);
//CH452的ADDR=0时
#else
CH452_I2C_MASK|CH452_I2C_ADDR1);
//CH452的ADDR=1时(默认)
#endif
ack();
CH452_I2c_WrByte((unsignedchar)cmd);
/*发送数据*/
CH452_I2c_Stop_2();
/*结束总线*/
unsignedcharCH452_Read(void)//读取按键
unsignedcharkeycode;
CH452_I2c_WrByte((unsignedchar)(CH452_GET_KEY>
CH452_I2C_MASK|0x01|CH452_I2C_ADDR1);
//若有两个CH452并连,当ADDR=0时,需修改为CH452_I2C_ADDR0
keycode=CH452_I2c_RdByte();
/*读取数据*/
return(keycode);
3、define.h
#ifndef_DEFINE_H_
#define_DEFINE_H_
#endif//_DEFINE_H_
#defineCH452_NOP0x0000//空操作
#defineCH452_RESET0x0201//复位
#defineCH452_LEVEL0x0100//加载光柱值
#defineCH452_CLR_BIT0x0180//段位清0
#defineCH452_SET_BIT0x01C0//段位置1
#defineCH452_SLEEP0x0202//进入睡眠状态
#defineCH452_LEFTMOV0x0300//设置移动方式-作移
#defineCH452_LEFTCYC0x0301//设置移动方式-左循
#defineCH452_RIGHTMOV0x0302//设置移动方式-右移
#defineCH452_RIGHTCYC0x0303//设置移动方式-右循
#defineCH452_SELF_BCD0x0380//自定义BCD码
#defineCH452_SYSOFF0x0400//关显示、键盘
#defineCH452_SYSON10x0401//开显示
#defineCH452_SYSON20x0403//开显示、键盘
#defineCH452_SYSON2W0x0423//开显示、键盘,真正2线接口
#defineCH452_DSP0x0500//设置默认显示方式
#defineCH452_BCD0x0580//设置BCD译码方式
#defineCH452_TWINKLE0x0600//设置闪烁控制
#defineCH452_GET_KEY0x0700//获取按键
#defineCH452_DIG00x0800//数码管位0显示,需另加8位数据
#defineCH452_DIG10x0900//数码管位1显示,需另加8位数据
#defineCH452_DIG20x0a00//数码管位2显示,需另加8位数据
#defineCH452_DIG30x0b00//数码管位3显示,需另加8位数据
#defineCH452_DIG40x0c00//数码管位4显示,需另加8位数据
#defineCH452_DIG50x0d00//数码管位5显示,需另加8位数据
#define
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SOPC 数码管 计数 GXCIDESOPC 平台