找回密码
 注册

QQ登录

只需一步,快速开始

搜索

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

[复制链接]
路漫漫 发表于 2020-5-29 01:20:43 | 显示全部楼层 |阅读模式
仿真文件和程序源码 仿真与源码.zip (465.94 KB)
仿真原理图如下(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. }
复制代码
mmars 发表于 2020-7-30 00:27:05 | 显示全部楼层
很强的程序,
wu765932 发表于 2023-7-6 20:25:16 | 显示全部楼层
为啥代码最后的初始清屏被警告无效,电路仿真不出结果
 楼主| 路漫漫 发表于 2023-7-7 12:43:43 | 显示全部楼层
wu765932 发表于 2023-7-6 20:25
为啥代码最后的初始清屏被警告无效,电路仿真不出结果
这个警告,无所谓,忽略这个警告就可以了。另外电路仿真也没问题。
1.png


1.gif

五只海马 发表于 2023-7-10 11:07:00 | 显示全部楼层
学习了,留备,非常感谢
Naive 发表于 2024-6-29 20:03:42 | 显示全部楼层
我的哥,Proteus8.17 不能显示吗?
PixPin_2024-06-29_20-02-59.png
admin 发表于 2024-6-30 00:37:51 | 显示全部楼层
Naive 发表于 2024-6-29 20:03
我的哥,Proteus8.17 不能显示吗?

先把您消耗掉的积分,返还给您了,请注意查收。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-7-25 23:21

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表