不知道代码有什么问题,一开始仿真什么都不显示,但是将主函数中 ‘ADC_ResetCalibration(ADC1);’注释后,就开始显示一串0,后来就觉得是不是上拉电阻的问题,就加上了上拉电阻,然后就不是直接显示的一串0,而是闪烁着显示。也检测不到滑动变阻器的改变。求助大佬,不知道是哪的问题。
代码如下:
- #include "stm32f10x.h"
- void GPIO_Config(void);
- void ADC_Config(void);
- void Delay(void);
- void seven(uint16_t value);
- void Display(unsigned char * digit);
- unsigned char discode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90};
- unsigned char digit[4] = {0XC0,0XC0,0XC0,0XC0};
- int main(void)
- {
- uint16_t ad_v=0; //存放转换值
- GPIO_Config();
- ADC_Config();
- GPIO_ResetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3);
- GPIO_Write(GPIOB, 0xc0);
- ADC_Cmd(ADC1, ENABLE);
-
- // ADC_ResetCalibration(ADC1); //重置ADC1校准寄存器
- while(ADC_GetResetCalibrationStatus(ADC1)); //等待重置完成
- ADC_StartCalibration(ADC1); //开始校准ADC1
- while(ADC_GetCalibrationStatus(ADC1)); //等待校准完成
- ADC_SoftwareStartConvCmd(ADC1, ENABLE);//开始软件触发转换
- while(1)
- {
- Display(digit);
- if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC == SET))
- {
- ad_v = ADC_GetConversionValue(ADC1); //获取转换数值
- ad_v&=0x0fff; //保留右对齐的12位}
- seven(ad_v);
- }
- }
- }
- void GPIO_Config(void)
- {
- //结构体
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA, ENABLE);
-
- //七段数码管
- GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- //外部滑动变阻器
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-
- }
- void ADC_Config(void)
- {
- ADC_InitTypeDef ADC_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
- ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
- ADC_InitStructure.ADC_ScanConvMode = DISABLE;
- ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
- ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
- ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
- ADC_InitStructure.ADC_NbrOfChannel = 1;
- ADC_Init(ADC1, &ADC_InitStructure);
- ADC_RegularChannelConfig(ADC1, ADC_Channel_13,1, ADC_SampleTime_55Cycles5);
- }
- void seven(uint16_t value){
-
- digit[0] = value % 10; //个
- digit[1] = (value % 100) /10; //十
- digit[2] = (value % 1000)/100; //百
- digit[3] = value / 1000 ; //千
复制代码 仿真如下:
|