完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
利用已经建立的工程模板,在Keil for ARM V5中编写代码,实现如下功能:使用ADC1的通道1进行AD转换,将转换的结果输出到显示屏上。
main.c: #include "stm32f10x.h"#include "delay.h"#include "sys.h"#include "hdg12864.h"#include "stdio.h"#include "adc.h"void dispaly(u16 val);int main(){ u16 adc_val; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); HDG12864_Init(); Adc_Init(); //Draw_word(8,0,2,0,16);// 显示第x个子,从第0行第0列显示 while(1) { adc_val = Get_Adc_Average(1,10); //Draw_word(adc_val,0,2,0,16); dispaly(adc_val); delay_ms(2000); }}void dispaly(u16 val){ u16 temp; temp = val/1000; Draw_word(temp+8,0,2,0,16);//显示千位数 temp = (val/100)%10; Draw_word(temp+8,0,2,16,16);//显示百位数 temp = (val/10)%10; Draw_word(temp+8,0,2,32,16);//显示十位数 temp = val%10; Draw_word(temp+8,0,2,48,16);//显示个位数} adc.c: #include "adc.h"#include "delay.h"void Adc_Init(){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入 GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_DeInit(ADC1); RCC_ADCCLKConfig(RCC_PCLK2_Div6);//分频因子6,72M/6=12Mhz ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE;//单通道 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//单次转换 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//软件触发 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//转换结果右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1;//转换通道1 ADC_Init(ADC1, &ADC_InitStructure); ADC_Cmd(ADC1, ENABLE);//使能ADC ADC_ResetCalibration(ADC1);//复位校准 //while(ADC_GetResetCalibrationStatus(ADC1));//等待校准复位完成 delay_ms(5); ADC_StartCalibration(ADC1);//开启校准 //while(ADC_GetCalibrationStatus(ADC1));//等待校准完成}/*功能:读取ADC1的转换结果输入参数:ch,要读取ADC1的通道返回值:12位的转换结果*/u16 Get_ADC(u8 ch){ u16 temp; ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5); ADC_SoftwareStartConvCmd(ADC1, ENABLE); //启动转换 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//等待转换完成 temp = ADC_GetConversionValue(ADC1); //读取转换的结果 return temp;}/**/u16 Get_Adc_Average(u8 ch,u8 times){ u8 i; u16 avg = 0,temp; for(i = 0;i < times;i ++) { temp = Get_ADC(ch); avg = avg + temp; delay_ms(5); } return (avg/times);} adc.h: #ifndef __ADC_H#define __ADC_H#include "sys.h"void Adc_Init(void);u16 Get_ADC(u8 ch);u16 Get_Adc_Average(u8 ch,u8 times);#endif |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1767 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1069 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
592浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 23:52 , Processed in 0.748681 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号