基于STM32的ADC仿真+OLED显示源程序+Proteus仿真

[复制链接]
查看156 | 回复1 | 2020-5-29 01:20:43 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
013815m2gmitphg2bihpsm.png
部分源码:
  1. #include "stm32f10x.h"
  2. u8 wd=0;      
  3. u8 sd=0;      
  4. unsigned char a[80] ;
  5. unsigned char DHT[5];
  6. float ADC_Data = 0 ;
  7.   void ADC1_GPIO_Config(void){
  8.     GPIO_InitTypeDef GPIO_InitStructure;
  9.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE);        //使能ADC1,GPIOC时钟
  10.          
  11.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //
  12.     //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//为什么没有配置这个????
  13.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;        //模拟输入
  14.     GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PC4
  15.       
  16.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //
  17.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//为什么没有配置这个????
  18.    
  19.     GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PC4
  20. }


  21. void ADC_Config(void)
  22. {
  23.       

  24.   ADC_InitTypeDef ADC_InitStructure;//ADC结构体变量//注意在一个语句快内变量的声明要放在可执行语句的前面,否则出错,因此要放在ADC1_GPIO_Config();前面
  25.   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在独立模式
  26.   ADC_InitStructure.ADC_ScanConvMode =        DISABLE; //使能扫描
  27.   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC转换工作在连续模式
  28.   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由软件控制转换,不使用外部触发
  29.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//转换数据右对齐
  30.   ADC_InitStructure.ADC_NbrOfChannel = 1;//转换通道为1
  31.   ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
  32.       
  33.   ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
  34.   //ADC1选择信道14,音序等级1,采样时间55.5个周期
  35. //  ADC_DMACmd(ADC1, ENABLE);//使能ADC1模块DMA
  36.   ADC_Cmd(ADC1, ENABLE);//使能ADC1
  37.         ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
  38.   ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  39. //  ADC_ResetCalibration(ADC1); //重置.(复位).ADC1校准寄存器
  40. //  while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成
  41. //  ADC_StartCalibration(ADC1);//开始ADC1校准
  42. //  while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成
  43. //  ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开始转换
  44. }
  45. int main(void)
  46. {         
  47.          int i = 0 ;
  48.          
  49.          delay_init()        ;

  50.    LCD_Init() ;
  51.          
  52.          
  53.          Key_Init() ;              //按键初始化
  54.          
  55.          NVIC_Config() ;           //中断配置
  56. //         
  57.          TIME3_init() ;            //定时器配置
  58.           ADC1_GPIO_Config() ;
  59.          ADC_Config() ;
  60.       
  61.    while(1)
  62.          {                 
  63.                  GPIO_SetBits(GPIOA,GPIO_Pin_7) ;
  64.                  if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_8) == 1)
  65.                  {
  66.                         ADC_Data = ADC_GetConversionValue(ADC1);

  67.                         Display();                      //菜单显示
  68.                  }else
  69.                  {
  70.                         LCD_Fill(0x00);  //初始清屏
  71.                  }
  72.                
  73.                         
  74.                  
  75.         }                       
  76.          
  77. }
复制代码
仿真文件和程序源码: 闹钟仿真和源码.7z (297.18 KB, 售价: 1 工控币)
回复

使用道具 举报

mmars | 2020-7-30 00:27:05 | 显示全部楼层
很强的程序,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则