不知道代碼有什么問題,一開始仿真什么都不顯示,但是將主函數中 ‘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 ; //千
復制代碼 仿真如下:
910804920c7ea655eb29386574693f9e.png (49.31 KB, 下載次數: 27)
下載附件
2023-6-2 12:16 上傳
|