ARM实训报告五路智能抢答器Word格式文档下载.docx
《ARM实训报告五路智能抢答器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ARM实训报告五路智能抢答器Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
三、实验仪器
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音乐输出
五、实验程序
/****************************************Copyright(c**************************************************
**GuangzouZLG-MCUDevelopmentCo.,LTD.
**graduateschool
**
**
**--------------FileInfo-------------------------------------------------------------------------------
**Filename:
main.c
**LastmodifiedDate:
2004-09-16
**LastVersion:
1.0
**Descriptions:
Themain(functionexampletemplate
**------------------------------------------------------------------------------------------------------
**Createdby:
Chenmingji
**Createddate:
**Version:
Theoriginalversion
**Modifiedby:
Chenxibing
**Modifieddate:
2005-01-14
SPI实验,74HC595驱动7段数码管。
********************************************************************************************************/
#include"
config.h"
music.h"
#defineBEEP1<
<
15//P0.12控制蜂鸣器
#defineHC595_CS(1<
29//P0.29口为74HC595的片选
constuint32LEDS8=(0xFF<
18;
constuint32LED1=(1<
constuint32LED2=(1<
19;
constuint32LED3=(1<
20;
constuint32LED4=(1<
21;
constuint32LED5=(1<
22;
constuint32LED6=(1<
23;
constuint32KEY1=1<
16;
constuint32KEY2=1<
17;
constuint32KEY3=1<
18;
constuint32KEY4=1<
19;
constuint32KEY5=1<
20;
constuint32KEY6=1<
21;
uint32i;
uint8rcv_data;
constuint32HCMM[]=
{
_MI,_SO,_LA,_LA,_SO,_LA,_MI,_RE,
_MI,_SO,_LA,_LA,_SO,_LA,_MI,
_SO,_MI,_RE,_MI,_RE,_DO,_RE,_LA,
_1LA,_RE,_SO,_MI,_RE,_DO,_1LA,
};
constuint32HCMM_L[]=
_8,_8,_8,_16,_16,_8d,_16,_4,
_8,_8,_8,_16,_16,_8,_4,
_4,_4,_16,_16,_16,_16,_8,_4,
_4,_8d,_8,_4,_16,_16,_8d,
/********************************************************************************************************
**函数名称:
DelayNS(
**函数功能:
长软件延时
**入口参数:
dly延时参数,值越大,延时越久
**出口参数:
无
voidDelayNS(uint32dly
{
for(;
dly>
0;
dly--
for(i=0;
i<
50000;
i++;
}
voidDelay(uint32dly
0x7ffff;
voiddingshi(
/*定时器0初始化*/
T0TC=0;
/*定时器设置为0*/
T0PR=0;
/*时钟不分频*/
T0MCR=0x03;
/*设置T0MR0匹配后复位T0TC,并产生中断标志*/
T0MR0=Fpclk*5;
/*5秒钟定时*/
T0TCR=0x01;
/*启动定时器*/
T0IR=0x01;
while((T0IR&
0x01==0;
/*等待定时时间到*/
}
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为低有效
5|//MSTR=1,SPI处于主模式
(0<
6|//LSBF=0,SPI数据传输MSB(位7在先
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]={
//012345
0xC0,0xF9,0xA4,0xB0,0x99,0x92};
music(
{PINSEL0=0x02<
14;
40;
i++
PWMMR0=Fpclk/HCMM[i];
//设置输出频率
PWMLER=0x05;
//更新匹配值后,必须锁存
IO1SET=~((LED_TBL[i]<
IO1CLR=((LED_TBL[i]<
Delay(HCMM_L[i];
main(
使用硬件SPI,74HC595驱动控制7段数码管显示。
**先显示0~F的字模,然后显示LPC2131字样。
intmain(void
{uint8i,k;
//设置SPI管脚连接
PINSEL1=0x00000000;
PINSEL0=0x02<
IO0DIR=BEEP|HC595_CS;
//P1[25:
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%占空比
//PWM0和PWM2匹配锁存
PWMTCR=0x02;
//复位PWMTC
PWMTCR=0x09;
//启动PWM输出
//初始化SPI接口
while(1
if((IO0PIN&
KEY6==0
rcv_data=MSPI_SendData(DISP_TAB[0];
//发送显示数据
IO1CLR=LED6;
DelayNS(20;
IO1SET=LED6;
KEY1==0
{rcv_data=MSPI_SendData(DISP_TAB[1];
//发送显示数据
IO1CLR=LED1;
//LED1点亮
IO1SET=LED1;
//LED1熄灭
dingshi(;
//进入定时程序
spanwhile(((IO0PIN&
KEY6!
=0&
((T0IR&
0x01==0//当按键6未按下且定时时间到
pmusic(;
}//进入音乐输出程序
spanelseif((IO0PIN&
KEY2==0//按键二按下
{rcv_data=MSPI_SendData(DISP_TAB[2];
//span发送显示数据数码显示2
IO1CLR=LED2;
//LED2点亮
//延时
IO1SET=LED2;
//LED2熄灭
while(((IO0PIN&
0x01==0当按键6未按下且定时时间到
music(;
}//进入音乐输出程序
elseif((IO0PIN&
KEY3==0//按键三按下
{rcv_data=MSPI_SendData(DISP_TAB[3];
//发送显示数据数码显示3
IO1CLR=LED3;
//LED3点亮
IO1SET=LED3;
KEY4==0//按键四按下
{rcv_data=MSPI_SendData(DISP_TAB[4];
//发送显示数据数码显示4
IO1CLR=LED4;
//LED4点亮
IO1SET=LED4;
//LED4熄灭
KEY5==0//按键五按下
{rcv_data=MSPI_SendData(DISP_TAB[5];
//发送显示数据数码显示5
IO1CLR=LED5;
//LED5点亮
DelayNS(50;
IO1SET=LED5;
//LED5熄灭
return0;
/*********************************************************************************************************
**EndOfFile
六、实验现象及结果
当程序执行时,LPC2138开发板的LED6闪烁的亮,表示准备开始比赛,当主持人按下按键6(作为开始按键),这时数码管显示数字0,表示进入抢答开始抢答,这时选手1到5谁先按下按键,谁优先抢答到,通过寄存器锁存,数码显示相应选手的号码,且相应的灯就亮,灯亮后延时熄灭,表示选手进入抢答状态的定时状态,定时30s回答,应用定时器0的查询方式当定时时间到了且按键六没按下复位,这时通过PWM2音乐输出且配有流水灯花样,表示此轮抢答结束,此时才能按下按键6才能复位开始新一轮的抢答。
七、实训心得
通过这次实训设计。
我设计电子智能抢答器,采用ARM7中的GPIO、SPI接口、定时器0、脉宽调制PWM等相关知识的结合。
把在学校三年所学知识连成一串。
理论联系实践,体现出大学生动手能力。
通过查资料和搜集有关的文献,培养了自学能力和动手能力。
并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。
在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过实习论文,我们学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题。
把握重点、攻克难关,学到用到、活学活用。
在设计过程中由于时间仓促有很多地方难免存在不足之处,原先定时器定时总不能按预想的工作,后来在老师的指点下终于把问题解决了,并实现了自己原先设想的相关功能,达到了设计的目的,在软件设计中有些功能还尚未开发出来。
但在以后的工作中,我们会严格要求自己,追求完美。
谢辞
当我以学子的身份踏入龙岩学院校门的那天起,便已注定我将在这里度过人生中最美丽的青春年华。
提笔写下“谢辞”,我才惊觉自己即将真正离开,人生亦从此展开新的画卷。
尽管不舍,却更珍惜,因为我的生命中有那么多可爱的人值得感激。
他们使我的大学生活充满了色彩,无论收获、遗憾,对我来说都是一笔宝贵的财富。
四年的大学生活不知不觉中就要过来四分之三了,在这段难忘的生活中,有我许多美好的回忆。
在大学的点点滴滴的美好回忆里,感谢学院给我们提供这个能自我展示的平台,感谢我的指导教师涂二生老师,你从一开始的方向的选定,到最后的实训的圆满的完成,都非常耐心的对我进行指导。
给我提供了大量建议,告诉我应该注意的细节问题,细心的给我指出错误进行修改。
谢谢我的科任老师,从大一到大三是你的悉心教导、孜孜不倦我们才能顺利的完成学业。
我要感谢在我三年的学习中无私传授我知识的各位老师,是你们将自己宝贵的财富无私地奉献给了我们,让我们能在学业上有所成绩;
是你们让我倍感教师职业的伟大,交给我们知识,