ARM五路抢答器实训报告.docx
- 文档编号:9847889
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:23
- 大小:1,008.38KB
ARM五路抢答器实训报告.docx
《ARM五路抢答器实训报告.docx》由会员分享,可在线阅读,更多相关《ARM五路抢答器实训报告.docx(23页珍藏版)》请在冰点文库上搜索。
ARM五路抢答器实训报告
物理与机电学院课程设计报告
课程名称:
微型计算机原理与接口技术
系部:
物理与机电工程学院
专业班级:
07电子信息工程
(1)班
学生姓名:
×××
指导教师:
×××
完成时间:
2010年5月21日
报告成绩:
评阅意见:
评阅教师日期
五路智能抢答器
摘要:
电子智能抢答在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。
如果在抢答中,靠视觉是很难判断出哪组先答题。
利用嵌入式系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。
由于ARM7的开发板的按键只有六个,为了现象比较清晰的观察和操作的易于控制,抢答组数在五组以内任意使用,本系统设计为模块形式采用ARM7的2138开发板与PC机的链接来实现的,系统工作原理本系统采用ARM7的2138开发板模块作为核心。
控制系统的五个模块分别为:
显示模块、显示驱动模块、定时器模块、抢答开关按键模块、蜂鸣器输出模块。
关键词:
按键;显示;驱动;抢答;定时
一、设计任务与要求:
1)设计一个容纳5组参赛队的智能式的抢答器,每组设置一抢答按钮供抢答者使用,分别为1、2、3、4、5号选手。
2)设置一个系统清除和抢答控制开关按钮S,该开关由主持人控制,为6号键。
3)选手抢答前有6秒的倒计时,从5倒计到0,到0时开始抢答,在显示0之前抢答无效。
4)抢答器具有锁存与显示功能。
选手按动按钮,锁存相应的编号,并在LED数码管上显示号码,同时亮相应号的流水灯。
其他选手无法抢答。
优先抢答选手的编号一直保持到主持人将系统清除为止。
5)抢答器具有定时抢答功能。
当主持人启动"开始"键后,定时器进行计时,定时20秒。
6)参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,流水灯输出且音乐输出“康定情歌”歌曲,显示器上显示选手的号码,并保持到主持人将系统清除为止,音乐输出完后主持人才能按复位键开始重新一轮的抢答。
7)当多个人在同一时间按下抢答键时,数码显示依次显示强选手的号码,蜂鸣器报警,抢答无效。
主持人可以按复位键开始重新开始倒计时抢答。
二、实训目的
本次实训使用LPC2131的SPI接口作为主机向74HC595发送数据,数据内容由7段数码管显示,再加上GPIO输入实验的按键输入检测,由自己编程实现程序检测按键状态时,控制蜂鸣器蜂鸣和对应号的流水灯来,(即表示此号队抢答到),进而进入定时状态抢答,用定时器0实现20s定时,查询标志位等待定时时间到达,表示此一轮抢答完毕,音乐输出,而后按键复位开始新一轮的抢答。
如此不断的循环下去,实现了智能抢答的效果。
在本次实验中,参赛选手由按键1~5表示,主持人按键由按键6表示即复位和开始按键。
通过本次的实验,能使自己了解并掌握定时器查询方式和中断的用法和SPI的7段数码管显示用法,还有就是更熟练地应用GPIO口,以设计生活中实用的抢答来培养自己的思维和加强自己的系统设计能力。
三、实验仪器
1、装有ADS1.2及EasyJTAG仿真器的电脑一台
2、ARM7开发板一块
四、实验原理
(一)、GPIO的相关原理
4.1.4、GPIO——蜂鸣器控制
如果跳线JP11选择蜂鸣器,当P0.7输出低电平,蜂鸣器蜂鸣,当P0.7输出高电平时,蜂鸣器停止蜂鸣。
实验利用P0.7的输出功能,控制蜂鸣器,程序设置PINSEL0使P0.7链接GPIO,并通过IO0DIR将其设置输出状态,然后通过IO0CLR和IO0SET清零和置位P0.7口,控制蜂鸣器。
4.1.5、GPIO输出——单路LED控制
实验程序首先设置管脚链接GPIO,接着设置P1.18口为输出模式,然后通过IO1CLR和IO1SET控制盘.18,驱动LED1的亮灭。
4.1.6、GPIO输出——多路LED控制
当跳线JP12全部选择LED8~LED1后,P1.25~P1.18分别控制这8路LED,就可以进行流水灯实验。
(二)、SPI接口相关原理
4.2.1、概述
4.2.2、特性
4.2.3、管脚描述
4.2.4、结构
4.2.5、SPI基本操作
4.2.6、SPI——7段数码显示
(三)、定时器0相关原理
4.3.1、概述
4.3.2、特性
4.3.3、结构
4.3.4、功能框图
4.3.5、定时器查询
(四)、脉宽调制相关原理
4.4.1、概述
4.4.2、特性
4.4.3、管脚描述
4.4.4、结构
4.4.5、基本操作
4.4.6、PWM音乐输出
五、实验总流程图如下所示
六、实验程序
#include"config.h"
#include"music.h"
#defineBEEP1<<7//P0.7控制蜂鸣器
#defineHC595_CS(1<<29//P0.29口为74HC595的片选
constuint32KYES8=(0x3F<<16;
constuint32LEDS8=(0x3F<<16;
constuint32LED1=(1<<18;
constuint32LED2=(1<<19;
constuint32LED3=(1<<20;
constuint32LED4=(1<<21;
constuint32LED5=(1<<22;
constuint32LED6=(1<<23;
uint8constDISP_TAB1[6]={0x92,0x99,0xB0,0xA4,0xF9,0xC0};
//倒计时显示5到0
constuint32KYE[]={
0x03,0x05,0x09,0x11,0x06,0x0A,0x12,0x0C,0x14,//两个人同时按下按键时
0x18
};
#defineKEY11<<16
#defineKEY21<<17
#defineKEY31<<18
#defineKEY41<<19
#defineKEY51<<20
#defineKEY61<<21
uint32i;
uint8rcv_data;
constuint32HCMM[]=
{
_MI,_SO,_LA,_LA,_SO,_LA,_MI,_RE,
_MI,_SO,_LA,_LA,_SO,_LA,_MI,
_MI,_SO,_LA,_LA,_SO,_LA,_MI,_RE,
_SO,_MI,_RE,_MI,_RE,_DO,_RE,_LA,
_1LA,_RE,_SO,_MI,_RE,_DO,_1LA,
_SO,_MI,_RE,_MI,_RE,_DO,_RE,_LA,
_1LA,_RE,_SO,_MI,_RE,_DO,_1LA,
_SO,_MI,_RE,_MI,_RE,_DO,_RE,_LA,
};
constuint32HCMM_L[]=
{
_8,_8,_8,_16,_16,_8d,_16,_4,
_8,_8,_8,_16,_16,_8,_4,
_8,_8,_8,_16,_16,_8d,_16,_4,
_4,_4,_16,_16,_16,_16,_8,_4,
_4,_8d,_8,_4,_16,_16,_8d,
_4,_4,_16,_16,_16,_16,_8,_4,
_4,_8d,_8,_4,_16,_16,_8d,
_4,_4,_16,_16,_16,_16,_8,_4,
};
/********************************************************************************************************
**函数名称:
DelayNS(
**函数功能:
长软件延时
**入口参数:
dly延时参数,值越大,延时越久
**出口参数:
无
********************************************************************************************************/
voidDelayNS(uint32dly
{
uint32i;
for(;dly>0;dly--
for(i=0;i<50000;i++;
}
voidDelay(uint32dly
{
uint32i;
for(;dly>0;dly--
for(i=0;i<0x7ffff;i++;
}
voiddingshi(
{
/*定时器0初始化*/
T0TC=0;/*定时器设置为0*/
T0PR=0;/*时钟不分频*/
T0MCR=0x03;/*设置T0MR0匹配后复位T0TC,并产生中断标志*/
T0MR0=Fpclk*20;/*20秒钟定时*/
T0TCR=0x01;/*启动定时器*/
T0IR=0x01;//开启中断
while((T0IR&0x01==0;/*等待定时时间到*/
T0IR=0x01;
}
/********************************************************************************************************
**函数名称:
MSPI_Init(
**函数功能:
初始化SPI接口,设置为主机。
**入口参数:
无
**出口参数:
无
*********************************************************************************************************/
voidMSPI_Init(void
{
PINSEL0=0x00005500;//设置管脚连接SPI
PINSEL2=PINSEL2&(~0x08;//P1[25:
16]连接GPIO
SPCCR=0x52;//设置SPI时钟分频
SPCR=(0<<3|//CPHA=0,数据在SCK的第一个时钟沿采样
(1<<4|//CPOL=1,SCK为低有效
(1<<5|//MSTR=1,SPI处于主模式
(0<<6|//LSBF=0,SPI数据传输MSB(位7在先
(0<<7;//SPIE=0,SPI中断被禁止
}
/********************************************************************************************************
**函数名称:
MSPI_SendData(
**函数功能:
向SPI总线发送数据。
**入口参数:
data待发送的数据
**出口参数:
返回值为读取的数据
********************************************************************************************************/
uint8MSPI_SendData(uint8data
{
IOCLR=HC595_CS;//片选74HC595
SPI_SPDR=data;
while(0==(SPI_SPSR&0x80;//等待SPIF置位,即等待数据发送完毕
IOSET=HC595_CS;
return(SPI_SPDR;
}
constuint32LED_TBL[]={
0x00,0xFF,//全部熄灭后,再全部点亮
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,//依次逐个点亮
0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,//依次逐个叠加
0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,//依次逐个递减
0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,//两个靠拢后分开
0x81,0xC3,0xE7,0xFF,0xFF,0xE7,0xC3,0x81};//从两边叠加后递减
/*此表为LED0~F以及L、P的字模*/
uint8constDISP_TAB[6]={0xC0,0xF9,0xA4,0xB0,0x99,0x92};
//012345
voidmusic(
{
PINSEL0=0x02<<14;
for(i=0;i<40;i++
{
PWMMR0=Fpclk/HCMM[i];//设置输出频率
PWMLER=0x05;//更新匹配值后,必须锁存
IO1SET=~((LED_TBL[i]<<18;
IO1CLR=((LED_TBL[i]<<18;
Delay(HCMM_L[i];
}
PINSEL0=0x00005500;
}
/********************************************************************************************************
**函数名称:
main(
**函数功能:
使用硬件SPI,74HC595驱动控制7段数码管显示。
**先显示0~F的字模,然后显示LPC2131字样。
********************************************************************************************************/
intmain(void
{
uint32temp;
PINSEL0=0x00005500;//设置SPI管脚连接
PINSEL1=0x00000000;
PINSEL0=0x02<<14;
IO0DIR=BEEP|HC595_CS;
PINSEL2=PINSEL2&(~0x08;//P1[25:
16]连接GPIO
IO1DIR=LEDS8;//设置LED1控制口为输出
MSPI_Init(;
IO1SET=LEDS8;
IO0SET=BEEP;
PWMPR=0x00;//不分频,计数频率为Fpclk
PWMMCR=0x02;//设置PWMMR0匹配时复位PWMTC
PWMPCR=0x0400;//允许PWM2输出,单边PWM
PWMMR0=Fpclk/500;
PWMMR2=PWMMR0/2;//50%占空比
PWMLER=0x05;//PWM0和PWM2匹配锁存
PWMTCR=0x02;//复位PWMTC
PWMTCR=0x09;//启动PWM输出
MSPI_Init(;//初始化SPI接口
while(1
{
IO1CLR=LED6;
DelayNS(20;
IO1SET=LED6;
DelayNS(20;
if((IO0PIN&KEY6==0
{
for(i=0;i<6;i++
{
rcv_data=MSPI_SendData(DISP_TAB1[i];
DelayNS(100;
};
if(i==6i=0;
temp=0;
while(temp==0
{
temp=(~(IO0PIN&(0x1f<<16&(0x1f<<16;
}
if((temp&KEY1!
=0//按键一按下
{
DelayNS(20;
if((temp&KEY1!
=0
{IO1SET=LEDS8;
MSPI_SendData(DISP_TAB[1];//发送显示数据
IO1CLR=LED1;//LED1点亮
DelayNS(200;
IO1SET=LED1;//LED1熄灭
dingshi(;//进入定时程序
while(((IO0PIN&KEY6!
=0&((T0IR&0x01==0
//当按键6未按下且定时时间到
music(;
IOCLR=HC595_CS;
}}//进入音乐输出程序
if((temp&KEY2!
=0//按键二按下
{DelayNS(20;
if((temp&KEY2!
=0
{IO1SET=LEDS8;
rcv_data=MSPI_SendData(DISP_TAB[2];//发送显示数据数码显示2
IO1CLR=LED2;//LED2点亮
DelayNS(20;//延时
IO1SET=LED2;//LED2熄灭
DelayNS(20;
dingshi(;//进入定时程序
while(((IO0PIN&KEY6!
=0&((T0IR&0x01==0
//当按键6未按下且定时时间到
music(;
}}//进入音乐输出程序
if((temp&KEY3!
=0//按键三按下
{IO1SET=LEDS8;
rcv_data=MSPI_SendData(DISP_TAB[3];//发送显示数据数码显示3
IO1CLR=LED3;//LED3点亮
DelayNS(50;//延时
IO1SET=LED3;//LED3熄灭
DelayNS(50;
dingshi(;//进入定时程序
while(((IO0PIN&KEY6!
=0&((T0IR&0x01==0
//当按键6未按下且定时时间到
music(;
}//进入音乐输出程序
if((temp&KEY4!
=0//按键四按下
{
rcv_data=MSPI_SendData(DISP_TAB[4];//发送显示数据数码显示4
IO1CLR=LED4;//LED4点亮
DelayNS(20;//延时
IO1SET=LED4;//LED4熄灭
DelayNS(20;
dingshi(;//进入定时程序
while(((IO0PIN&KEY6!
=0&((T0IR&0x01==0
//当按键6未按下且定时时间到
music(;
}//进入音乐输出程序
if((temp&KEY5!
=0//按键五按下
{IO1SET=LEDS8;
rcv_data=MSPI_SendData(DISP_TAB[5];//发送显示数据数码显示5
IO1CLR=LED5;//LED5点亮
DelayNS(20;//延时
IO1SET=LED5;//LED5熄灭
DelayNS(20;
dingshi(;//进入定时程序
while(((IO0PIN&KEY6!
=0&((T0IR&0x01==0
//当按键6未按下且定时时间到
music(;
}//进入音乐输出程序
}
elseif(((temp&KEY1!
=0&((temp&KEY2!
=0
{DelayNS(20;
if(((temp&KEY1!
=0&((temp&KEY2!
=0
{rcv_data=MSPI_SendData(DISP_TAB[5];//发送显示数据数码显示2
IO1CLR=LED1;//LED1点亮
IO1CLR=LED2;
IO0CLR=BEEP;
DelayNS(10;
IO1SET=LED1;//LED1点亮
IO1SET=LED2;
IO0SET=BEEP;
}}
}
return0;
}
七、实验现象及结果
当程序执行时,LPC2138开发板的LED6闪烁的亮,表示准备开始比赛,当主持人按下按键6(作为开始按键),这时数码管开始显示倒计时数字5~0,当数码管显示0时,表示进入抢答开始抢答,这时选手1到5谁先按下按键,谁优先抢答到,通过寄存器锁存,数码显示相应选手的号码,且相应的灯就亮,灯亮后延时熄灭,表示选手进入抢答状态的定时状态,定时20s回答,应用定时器0的查询方式当定时时间到了且按键六没按下复位,这时通过PWM2音乐输出且配有流水灯花样,表示此轮抢答结束,此时才能按下按键6才能复位开始新一轮的抢答。
若是多位选手在同一时间按下按键时,蜂鸣器报警,数码管一次显示这几位选手的编号,此种抢答无效,主持人可以按下按键6复位重新抢答。
八、实训心得
1、通过这次实训设计。
我设计电子智能抢答器,采用ARM7中的GPIO、SPI接口、定时器0、脉宽调制PWM等相关知识的结合。
2、开始设计时只想着怎么把所做过实验的功能尽量加进去,却忽略了抢答器的公平性和实用性。
在老师的讲解和指导下我们实训的后期主要把重点转移到如何解决低概率事件发生上,如几个人在同一时间按下按键时,虽然概率很小,但也不能排除这种情况的发生,为体现抢答的公平性我们把此种情况列为无效抢答,此种情况发生时蜂鸣器鸣叫警报。
3、通过这次实训学会了理论联系实践。
开始自己有很多好设想,可是真正要用到所学知识让它实现这些功能其实并很难,没有想象中的容易。
4、通过查资料和搜集有关的文献,培养了自学能力和动手能力。
并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。
九、参考文献
[1]周立功张华主编,《深入浅出ARM7—LPC213X/214X(上册》北京航空航天大学出版社
[2]赖于树主编,《ARM微机处理器与应用开发》电子工业出版社
[3]刘岚尹永李京蔚主编,《基于ARM的嵌入式系统开发》电子工业出版社
[4]张绮文谢建雄谢劲心主编,《ARM嵌入式常用模块与综合系统设计实例精讲》电子工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 抢答 器实训 报告