_GPIOCIRM-AF盟氏Tiph_AEI6EKABLEj;
2按键配置:
控制按键的端口:
PA15和PB4~7。
使能APB2总线上的GPIOA
以及GPIOB时钟,根据参数配置对应引脚
"按鞋曲K3K4_K5-
RCCAP32PeriphClockCrod(RCCJLP32Feripb&FIOBrENABLER;"使能蛍口对钟
〃_E拉豔入
"IO口速岌为
〃桎希设定参数初始比
GPIOInitStructure.GPIOPin=GPIOPin4|GPIOPin5|GPIOPinG|GPIOPin7;
GPIOInitStruct口工巴尼肌口讯口已亡=GPIO_Hod.e_IPU;
GPIOInitStracture.GPIOSpeed■GPI0_Sp-eed_2HHz:
GPIOInlt(GPIOB,.4GPIOInlcStT\icCurei;
//A15K1
RCC_JlP32PerlpiicioCkcn.d(RCC_AT32Eeilp31_^IOArENABLE];
GPIQ_I^ltStruc^Jie.GPIO_ein=GFIQ^Fin^lS;
GPIO^IniuStrucwre.GPIo2Mode=GPIQ_Ho5e_IPU;//上拉输入
GPIcTln士匸Srrncr口氓上口匸呂戶“=GPT0_5peed_5MH2;"2口纯度为龙曲忑
GPIOInit(SPTOArtGPIOInitStzucture);
3蜂鸣器:
控制蜂鸣器的端口为PB&APB2总线上GPIOB时钟已经使能可省
略,根据参数配置PB8端口
//E32
"推挽输出
"TO口速盏为SOKHe
〃根据设定参数初始化
〃蜂鸣器3PI0_InitSti,ictuie,GPI0_Pin-GPIOPi^S;
GPIOInit-St-neture.GFIOMode=GFIOMadeOutPF;GPIO_InitStructure.GPIO_Speed=GPIO_5peed_5OMHz;
GFIOI^ic(GEICE*i&PICInitStiucrure):
4数码管配置:
控制数码管的端口:
PE0~13p使能APB2总线上的GPIOE时
钟,根据参数配置对应引脚
voidCvoid)
GEIC_Ini「【ypeDef;
RCCAP32PerlphClo匚]cCmd(RUG_云FEZF£tipb_GFrJEFENABLE);J/-贷能F®FG^J时許NixietnUeGPIO^GPIOPin-0x3fff;//PEO-PE15
Nixierube2fiP10■GPIo2Mode=GFIO_Mode_Oat-_PP;//奉挠输出
N13£i*rilbe2Gpro-GproZs^eed=GPIC^SpeZd^aMHz;丿/工。
口速度为£0曲立
GPIC_InitTGPIOEf£Mixieti^e_GPZCT;_"根捋怎走参勲初始叱
5定时器配置:
voidtxmerset(void}
H
Tinf.£3*5^1aitlypeEsfTIH_r^e5ft5^St^Gt^eF
|//TIME272M
TIM_TlmeBastStructure.TIM_Per丄口赳-?
;
Z,II4_TiiLe3aseStz:
u.ct口:
r色“T工14_P:
r色mu良丄皂i:
=~-i
TIH_TiiEe3aseStru.cc口二巳■二工M.ClocIrDivision=IIH_CKD_DIV1;
TIH_Tin-已BaseStructure.riM_Caun匸昌三阿口毋巳=7IM_CounterMede_Up;TIM[Tiir上弓电Iiiit(TTH2,fIM_Iir.eBaseStructi:
re>:
TIN2cie&rFlag{TIM2.rTIH_FLAQ2DPdate);
TIM_ITC口nfig(T工止”TIMITUpdate,52JA3LE.7
TIHCm(TJM2fDISABLE);
具体设计
按键扫描设计:
当按键按下时,对应的10口为低电平,没有按下时为高电平
3-
uintStKeyScan(GFIO_TypeDef*GPIOx^uint16_tGPIO_Fin_x)Htin匸三_t
I---_--
if(GPIOReadlnputDaEaBit(GPIOx,GPIO^Pinx)―KEYON)
{
delay_ins(35);
if(GPlO_ReadInputDataBlt(GPIOk,G?
IO_Pin_x)=KE¥_ON)
i~-~~
returnKEYON;
}_
elac
{
returnKEY_OFF;
}
)
returnKEYOFF;
}_
数码管显示设计:
c:
.ir?
i9_diiplay(1,t-irzisdiaolay(2,E^rnadiaplay(3,
千頁十
a/lCCC^LC):
打
SPIOE->BSRR=s«L€|s;
"小数点
deU/(L);
二二rzimdisplay(4,a%10);
vcidNixie:
ubeligh-(uSnunru8
case1;f©10£->0»|=0^C01«:
;e?
ICE->ER=l=:
'Kjc-OfjFICE->BRB|=Ox:
:
'f:
;GPIflE^fl5RR|=
ase2:
(S,I0E->B5RR|-OlOODKO;GPI0E-)£HH|-0x3d00rBEHttTBHH|=OxCOf:
;CTKE->B5RH|=Nixi^itMca];
cue3:
(9I«->B5RR|«nxDOt]l«10;G?
ICZ-)fiRR|-DxlbQO;jPICi->BRt|-OxODfE;»IOZ^B3Rfi|-Hixi[x[第:
±];
case4;(fflOE->B5BR|=Ox«El«ll;GPKEJBRR|=0翊加半GPKX-3KU|=DxGDff;GPWEr>E5ER|=Blxie-i[daci];
5:
(亞1尢->^5茨-戶.x31:
_«12;C?
IC!
->EK=HlfL:
SPlOE-JSRfl±.k.j^!
;PICE->E£RI.|=血上匚工[弗泊]:
rase(Sn«->0OT|=ajOC5:
«:
3;t?
ICE-^RR=:
-xlfjDr:
PTOE-5BH1|=血门兰;SPME-〉貼碾|=Rixie\[da-a];
tieikUtreat;!
lirsak;}
bjsak:
)
br-at;|
翕知Wcr*d<
//恠次轮流显示数字
voldtum5_d.Laplay1,i^trum)(_
tiSn=
far(n=3;n<6;n+-1
{
delay
(1);
Nixietube_lj.ght(二,nuit);
超声波测距设计:
给TRIG至少10us的高电平信号,使用定时器中断法获得
ECHO输入端PC7低电平持续时间,即为超声波一来回所用时间如(黄线为ECHO输入信号,测出低电平所用时间)算出物体和超声波测距模块之间距离。
int翠匸Distance(丿三一算髭塞
GPIOFesetEita(GPIOC,3PIC_?
iL_S};//£生起產注信寻delay(5}?
_
GFI0_5etBitsIGFIOC,3PIC_?
in_G);厂反相战丸器先J后1
while(GPIORsadInputDaca:
ic(GEIO;fGPIC_Pin_7)==0)//S受疑g翻
(—--
TIMCnc(rrM2,ENABLE};
count=r;
1
Millie(GPIOR=atHnnurEacafiit(GPIO:
fGPI0_Pin_7)==:
)./芟爰筑±L
{一--
]HfftuGemimt«l,7;//Djstuce=((71+1}/72*10^]*(9+1)*Go™t*a4(}/2*100Q=Gaunt*!
.?
;
leu-irnDutan?
e;
|)
报警功能设计:
在进入数码管显示前对当前距离进行判断若小于报警距离则
启动蜂鸣器
"wiiiled)//进入超离波测距
{aDistance=getDistance()+10;
if(sDist&nssov)
{GPIO_SetBits(GPIO3,GPI0_Pin_E>;
delay[10};
GPIO_Res&EBits(GPIOSrGFIO_Pin_3):
}~~~
di3palv2tsDistance):
if(KeyScan(GPIOBrGPIO_Pin_^)=KEY_OK){goro3;
实验结果分析
实验结果
使用超声波测距模块、按键、蜂鸣器等实现了距离测量系统的设计,本设计
可实时测距以及暂停显示当前距离,实现了对距离的测量,具体功能如下:
1距离报警值的设置:
程序启动先进入报警值设置,通过按下按键KEY3KEY4分别使得报警值增大和
减小。
报警值会在数码管上显示,默认报警值为。
2实时测距系统:
此时程序循环获取当前距离并显示在数码管上,同时根据当前距离与距离报警值
选择是否启动蜂鸣器,若当前距离小于报警值则启动蜂鸣器。
此时按下KEY2则
进入距离保持状态。
3距离测量系统
此时超声波传感器暂停,数码管上保持显示上一时刻距离,按下KEY5可进入实
时距离测量,按下KEY1则会返回报警值设置。
结果分析
试验达到了预期的效果,实现了两种模式下的距离测量及两种模式的相互切
换,并实现距离报警值的设定与显示,当前距离小于报警值时进行报警。
误差在
5mm以内
实际距离与超声波测量距离
测量距离/cm
理论距离/cm
误差/mm
3
2
11
2
20
2
30
3
33
1
40
3
总结
实验中遇到的问题及解决办法
1数码管显示距离值时无小数点。
给需要显示小数点的数字的显示码“与”小数点显示码0x80再显示即可加
上小数点。
2每次按键设置报警值是报警值跳动太快
增加按键扫描函数里的延时即可。
试验心得
本次实验设计学会了如何熟练使用HC-SR04超声波测距模块、定时器、数码管等设备,加深了对寄存器,中断,库函数等的理解。
这次实验让我明白,遇到问题不要慌张,可以一步一步去测试是哪里出现问题,再重点解决。
多在网上查找资料,一步一步让实验成功