SOPC四路抢答器设计_第1页
SOPC四路抢答器设计_第2页
SOPC四路抢答器设计_第3页
SOPC四路抢答器设计_第4页
SOPC四路抢答器设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科实验报告题目:四路抢答器设计课程名称: SOPC设计与实践 学院(系):信息与通信工程学院 专 业: 电子信息工程 班 级: 学 号: 学生姓名: 成 绩: 2011 年 5 月 14 日题目:四路抢答器设计1 设计要求在娱乐、竞赛类节目中,很多都需要用到抢答器,用来判断是谁第一个抢到答题机会。本设计是四路抢答器,就是可以四个人一块抢答,并且将抢答结果通过LED、数码管、LCD来进行显示。即某一个人按下他对应的按钮后,他身前的LED亮,数码管上显示他对应的号码,LCD显示是第几号选手获得了抢答的机会。并且本设计设有总控制开关,用来控制何时开始抢答。2 设计分析及系统方案设计对于总开关的设计,我采用的是在判断按键操作之前增加一个if语句,如果总开关开启,按键操作才被响应,如果总开关没有开启,按键操作都不被响应。对于按键的判断,我采用的按键中断来实现的,某个按键按下后,中断响应,如果总开关开启,则根据键值进行响应的按键响应,即将对应的LED点亮,数码管上显示需要显示的数字,LCD显示第几位选手抢答成功。为了防止第一位选手抢答后,第二位选手将第一位选手的抢答冲掉,考虑到实际应用,我采用的是在第一位选手按键操作响应后就进行一定时间的延时,从而保证在延时的这段时间,其他的选手不能将第一位选手的按键响应冲掉。3 各功能模块硬件电路设计(1)总体电路图在此系统图中,包含CPU及外围LED、数码管、LCD的连接及引脚配置。(2)SOPC builder配置图此SOPC builder中,加入了20K RAM、16K ROM、四位按键(设置下降沿中断)、一位开关、四位LED、一个七段数码管、一片LCD。4 系统软件设计(1)流程图是开始总开关开启?是否有按键?执行响应的按键响应清空LED、数码管、LCD显示延时是否否(2)源代码:#include system.h#include sys/alt_irq.h#include altera_avalon_pio_regs.h#include alt_types.h#include io.h#include stdio.hvolatile int edge_capture;unsigned char seg_table11=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f;static void handle_key_interrupt(void* context,alt_u32 id) volatile int* edge_capture_ptr=(volatile int*)context; *edge_capture_ptr=IORD(KEY_BASE,3); IOWR(KEY_BASE,3,0);static void init_key_pio() void* edge_capture_ptr=(void*)&edge_capture; IOWR(KEY_BASE,2,0xf); IOWR(KEY_BASE,3,0x0); alt_irq_register(KEY_IRQ,edge_capture_ptr,handle_key_interrupt);int main(void) init_key_pio(); char sw; char Text115= The first one!; char Text215= The second one; char Text315= The third one!; char Text415= The forth one!; char Text515= Please Wait.; int i; int Initial5=0x38,0x0c,0x01,0x06,0x80; for(i=0;i5;i+) IOWR(LCD_16207_0_BASE,0,Initiali); usleep(5000); while(1) IOWR(LCD_16207_0_BASE,0,0x01); sw=IORD(SW_BASE,0); if(sw=1) switch(edge_capture) case 0x08: IOWR(LED_BASE,0,0x08); IOWR(SHU_BASE,0,seg_table1); for(i=0;i15;i+) IOWR(LCD_16207_0_BASE,2,Text1i); usleep(2000); usleep(); break; case 0x04: IOWR(LED_BASE,0,0x04); IOWR(SHU_BASE,0,seg_table2); for(i=0;i15;i+) IOWR(LCD_16207_0_BASE,2,Text2i); usleep(2000); usleep(); break; case 0x02: IOWR(LED_BASE,0,0x02); IOWR(SHU_BASE,0,seg_table3); for(i=0;i15;i+) IOWR(LCD_16207_0_BASE,2,Text3i); usleep(2000); usleep(); break; case 0x01: IOWR(LED_BASE,0,0x01); IOWR(SHU_BASE,0,seg_table4); for(i=0;i15;i+) IOWR(LCD_16207_0_BASE,2,Text4i); usleep(2000); usleep(); break; default: IOWR(LED_BASE,0,0x00); IOWR(SHU_BASE,0,seg_table10); break; else edge_capture=0x00; IOWR(LED_BASE,0,0x00); IOWR(SHU_BASE,0,seg_table10); for(i=0;i15;i+) IOWR(LCD_16207_0_BASE,2,Text5i); usleep(2000); usleep(); 5 系统调试运行结果说明计分析系统运行环境:硬件是Altera公司CycloneII 2C35FPGA DE2开发板,软件是Quartus6.0和NIOS 。系统运行结果:系统运行后,总开关未开启条件下,任何按键都没有用。总开关开启后,按下一个按键后,对应LED亮,数码管显示按键编号,LCD上显示第几个按键,在第一个按键按下的大约5秒钟之内,其他的按键都没有用。总开关关闭,LED和数码管熄灭,LCD显示“Please Waiting”。设计让需完善的地方:当响应按键操作后,会延时大约5秒,而这时如果立马关闭总开关,对应的显示设备不会熄灭,延时之后才会熄灭LED、数码管和改变LCD上的内容。我认为可以通过将总开关也设置成中断,并且优先级高于按键优先级,从而修复这个BUG。6 结论本

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论