基于ARM7的竞答器设计(附完整源代码).doc

上传人:rrsccc 文档编号:8936398 上传时间:2021-01-26 格式:DOC 页数:12 大小:322KB
返回 下载 相关 举报
基于ARM7的竞答器设计(附完整源代码).doc_第1页
第1页 / 共12页
基于ARM7的竞答器设计(附完整源代码).doc_第2页
第2页 / 共12页
基于ARM7的竞答器设计(附完整源代码).doc_第3页
第3页 / 共12页
基于ARM7的竞答器设计(附完整源代码).doc_第4页
第4页 / 共12页
基于ARM7的竞答器设计(附完整源代码).doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《基于ARM7的竞答器设计(附完整源代码).doc》由会员分享,可在线阅读,更多相关《基于ARM7的竞答器设计(附完整源代码).doc(12页珍藏版)》请在三一文库上搜索。

1、嵌入式期末设计报告 题 目:四位竞答器 日 期:2016年1月4日目录一、设计功能描述3二、设计框图41、总体框图42、算法流程图4三、软件设计51、循环显示流水灯52、外部中断EINT0设置53、数码管函数54、定时器设置65、抢答检测6四、硬件设计61、蜂鸣管脚62、按键电路73、LED管脚7五、测试8六、总结8七、源代码8一、设计功能描述本设计总体上是一个四位竞答器(支持四位选手),具备以下功能:1、在竞答开始之前,显示流水灯图样; 2、利用外部中断EINT0实现竞答开始控制:关闭流水灯,开始进入竞答倒计时;3、主持人按下开始竞答键后,数码管进行5S倒计时,当数码管显示为0时,选手开始竞

2、答;4、竞答完成后,数码管显示竞答选手的编号,仅对应的LED灯亮;5、当有选手抢答时,蜂鸣器响,数码管显示竞答选手编号;6、完成一轮竞答后,竞答系统自动返回流水灯图样,并等待下一轮竞答。二、设计框图1、总体框图LED灯数码管LPC2131最小系统蜂鸣器按键2、算法流程图三、软件设计1、循环显示流水灯初始化时:x=18;while(1) data=MSPI_SendData(DISP_TAB0);/数码管初始化显示为0;IO1CLR=1x;/LED灯亮x=x+1;delay(300);IO1SET=0xffffffff;/LED灯灭if(x=26) x=18; 2、外部中断EINT0设置EXTM

3、ODE=0x00;/设置为电平触发EXTPOLAR=0x00;/低电平有效IRQEnable();/使能IRQ中断VICIntSelect=0x00000000; /设置所有中断分配为IRQ中断VICDdefVectAddr=(int)IRQ_Eint0; /设置服务地址EXTINT=0x01;/清除中断VICIntEnable=10x0e;/使能EINT0中断3、数码管函数/MSPI_SendData(DISP_TABcounter);/ 数码管显示/*捕获功能*/* 此表为LED0F以及L、P的字模 */uint8 const DISP_TAB19 = / 0 1 2 3 4 5 6 7

4、8 9 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,/ A b C d E F0x88, 0x83, 0xC6, 0xA1,0x86, 0x8E,/ L P C 0xC7, 0x8C,0xC6 ; void MSPI_Init(void) PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00001500; / 设置管脚连接SPISPI_SPCCR = 0x52; / 设置SPI 时钟分频SPI_SPCR = (0 3) | / CPHA = 0, 数据在SCK 的第一个时钟沿采样(1 4) | / CPOL =

5、 1, SCK 为低有效(1 5) | / MSTR = 1, SPI 处于主模式(0 6) | / LSBF = 0, SPI 数据传输MSB (位7)在先(0 7); / SPIE = 0, SPI 中断被禁止 uint8 MSPI_SendData(uint8 data) IO0CLR =IO0CLR|HC595_CS; / 片选74HC595SPI_SPDR = data;while( 0 = (SPI_SPSR & 0x80); / 等待SPIF 置位,即等待数据发送完毕IO0SET = IO0SET|HC595_CS;return(SPI_SPDR);4、定时器设置注:在进入外部中

6、断时,才开启使能计数数/定时器,T0TCR=0x01; T0CTCR=0x00;/工作在定时器模式 T0TC=0; T0PR=99;/100分频 T0MCR=0x03;/复位TOTC,并产生中断 T0MR0=Fpclk/100;5、抢答检测为了竞答公平,需要进行抢答检测。抢答检测主要是为了防止有选手在倒计时时,按住按键不动,为此,在倒计时跳变为0那一刻,读取KEY2-KEY5的状态,判断是否有抢答情况。四、硬件设计1、蜂鸣管脚2、按键电路3、LED管脚五、测试将编译好的代码通过JLINK-FLASH烧录入LPC2131芯片。经过测试,电路运行、实验效果与设计要求一致。六、总结1、为了竞答的公平

7、性,引入了抢答检测这一步。因为有选手可以一直按住按键不动。在倒计时未到0前,用户按下按键是无效的。因而只需要检测跳变为0前那瞬间的管脚状态,如果选手是按住不动的话,就可以检测出来。2、本设计运用了定时器、中断技术、数码管显示等技术,并把蜂鸣器、LED灯、按键也运用进入。从分利用了所学知识。3、设计前,本人先画好系统框图以及流程图再编写代码,因而编写代码过程较为顺利,编译错误较少。4、因为一轮竞答后自动进入下一轮,因为需要重新初始化。刚开始时没考虑到,因为下一轮竞答不正常,修正后程序可以正确运行。七、源代码/抢答器#includeconfig.h#define HC595_CS (129)/ P

8、0.29为74HC595的片选引脚/按键const uint32 beep=17;const uint32 KEY1=116;const uint32 KEY2=117;const uint32 KEY3=118;const uint32 KEY4=119;const uint32 KEY5=120;const uint32 KEY6=121;/LED灯 分别对应五位抢答选手,最先按下按键者对应的灯亮const uint32 LED1=118;const uint32 LED2=119;const uint32 LED3=120;const uint32 LED4=121;const uint

9、32 LED5=122;const uint32 LED6=123;const uint32 LED7=124;const uint32 LED8=10;dly-) for(i=0;i5000;i+);/数码管显示电路/MSPI_SendData(DISP_TABcounter);/ 数码管显示/*捕获功能*/* 此表为LED0F以及L、P的字模 */uint8 const DISP_TAB19 = / 0 1 2 3 4 5 6 7 8 9 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,/ A b C d E F0x88, 0x83,

10、0xC6, 0xA1,0x86, 0x8E,/ L P C 0xC7, 0x8C,0xC6 ; void MSPI_Init(void) PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00001500; / 设置管脚连接SPISPI_SPCCR = 0x52; / 设置SPI 时钟分频SPI_SPCR = (0 3) | / CPHA = 0, 数据在SCK 的第一个时钟沿采样(1 4) | / CPOL = 1, SCK 为低有效(1 5) | / MSTR = 1, SPI 处于主模式(0 6) | / LSBF = 0, SPI 数据传输MSB (位7)在先(

11、0 7); / SPIE = 0, SPI 中断被禁止 uint8 MSPI_SendData(uint8 data) IO0CLR =IO0CLR|HC595_CS; / 片选74HC595SPI_SPDR = data;while( 0 = (SPI_SPSR & 0x80); / 等待SPIF 置位,即等待数据发送完毕IO0SET = IO0SET|HC595_CS;return(SPI_SPDR);/中断服务程序void _irq IRQ_Eint0(void) T0TCR=0x01;/开启计数器功能 IO1SET=0xffffffff; while(1) if(T0IR&0x01)=

12、1) T0IR=0x01;data=MSPI_SendData(DISP_TAB5-count);count=count+1;if(count=6) count=0;T0TCR=0x00; y=IO0PIN;w=1; if(y&KEY2)=0|(y&KEY3)=0|(y&KEY4)=0|(y&KEY5)=0) w=0; while(a) if(a%2=0) IO0CLR=beep; else IO0SET=beep; a=a-1; delay(100); a=20; break; delay(100); while(w) y=IO0PIN; if(y&KEY2)=0|(y&KEY3)=0|(y

13、&KEY4)=0|(y&KEY5)=0) w=0; if(y&KEY2)=0)data=MSPI_SendData(DISP_TAB1);IO1CLR=LED1; if(y&KEY3)=0)data=MSPI_SendData(DISP_TAB2);IO1CLR=LED2; if(y&KEY4)=0)data=MSPI_SendData(DISP_TAB3);IO1CLR=LED3; if(y&KEY5)=0)data=MSPI_SendData(DISP_TAB4);IO1CLR=LED4;delay(10000);while(EXTINT&0x01)!=0) EXTINT=0x01; VI

14、CVectAddr=0;int main() uint32 x=18; PINSEL0=0x00000000; PINSEL1=0x00000001;/设置P0.16 即key1为中断ENIT0; IO0DIR=HC595_CS|beep; MSPI_Init(); IO1DIR=LED1|LED2|LED3|LED4|LED5|LED6|LED7|LED8; IO1SET=IO1SET|LED1|LED2|LED3|LED4|LED5|LED6|LED7|LED8; IO0SET=IO0SET|beep; T0CTCR=0x00;/工作在定时器模式 T0TC=0; T0PR=99;/100分

15、频 T0MCR=0x03;/复位TOTC,并产生中断 T0MR0=Fpclk/100; EXTMODE=0x00;/设置为电平触发 EXTPOLAR=0x00;/低电平有效 IRQEnable(); VICIntSelect=0x00000000;/设置所有中断分配为IRQ中断 VICDefVectAddr=(int)IRQ_Eint0;/设置服务地址 EXTINT=0x01;/清除中断 VICIntEnable=10x0e;/使能EINT0中断 while(1) data=MSPI_SendData(DISP_TAB0);/数码管初始化显示为0;IO1CLR=1x;/LED灯亮x=x+1;delay(300);IO1SET=0xffffffff;/LED灯灭if(x=26) x=18;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1