SOPC课程设计实验报告(4)

2019-08-03 13:24

IOWR_ALTERA_AVALON_PIO_IRQ_MASK(KEY_BASE,0xff); //允许8个按键中断 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0); //清除中断标志寄存器 alt_irq_register(KEY_IRQ,NULL,Button_Irq_Handler); //注册中断 }

static void display(int num) {

IOWR_ALTERA_AVALON_PIO_DATA(SEL_BASE,0); //数码管位选

IOWR_ALTERA_AVALON_PIO_DATA(DAT_BASE,segtab[num]); //显示倒计时 usleep(1000); }

/*------------------------------------------------------------------ ***********************按键中断处理函数**************************** *-----------------------------------------------------------------*/

static void Button_Irq_Handler(void* context,alt_u32 id) { int i;

for(i=0;i<9;i++) {

num=9-i; display(num);

IOWR_ALTERA_AVALON_PIO_DATA(A_BASE, 1);//蜂鸣器响起 IOWR_ALTERA_AVALON_PIO_DATA(LED1_BASE, 0); IOWR_ALTERA_AVALON_PIO_DATA(LED2_BASE, 1); usleep(500000);

IOWR_ALTERA_AVALON_PIO_DATA(LED2_BASE, 0); usleep(500000); }

IOWR_ALTERA_AVALON_PIO_DATA(A_BASE, 0);//蜂鸣器关闭 IOWR_ALTERA_AVALON_PIO_EDGE_CAP(KEY_BASE,0); num=0;

display(num); }

int main(void) {

printf(\

Button_ISR_Init(); //按键中断初始化

while(1) {

usleep(100000);

IOWR_ALTERA_AVALON_PIO_DATA(LED1_BASE, 1); IOWR_ALTERA_AVALON_PIO_DATA(LED2_BASE, 0); num=0; display(num); } return 0; }

六、设计结果

按键未按下时,处于初始状态:LED1亮,LED2灭,数码管显示为0,蜂鸣器未启动;按键按下之后,LED1灭,LED2闪烁,数码管进入9秒倒计时并且蜂鸣器响;9秒后恢复初始状态。

七、设计问题

设计中遇到了不少问题:

一开始因为延迟原因使得蜂鸣器音乐间断,后来将延迟时间缩短后问题解决;

然后在数码管动态显示时,也存在延时问题,按下按键后数码管在一秒后才进入倒计时,修改程序后问题解决;

八、心得感受

通过本次设计,我们更加熟悉C语言和SOPC,也在自己动手设计中发现了平时所没遇到的很多问题,包括硬件和软件方面的,有一部分是粗心,有一部分确实是不够了解这门技术;因此在设计过程中,我们不断和其他小伙伴探讨后解决了问题,并从他们那里学到了不少东西。


SOPC课程设计实验报告(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:学科竞赛 一年级语文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: