标题: STM32f103c8t6/c6t6简易示波器程序,0.91'OLED屏显示 [打印本页]

作者: 的沈娇妮    时间: 2021-7-4 23:58
标题: STM32f103c8t6/c6t6简易示波器程序,0.91'OLED屏显示
主要功能描述:可以设置4种采样频率,利用GPIO-PIN-5外部中断来选择(1、2、3、4循环),实验中抗干扰较弱,可以尝试加一个上拉电阻。能观察波形的频率范围大概在300至5KHZ,过低的频率需要自己再修改相关分频和时钟;输入电压需要保证大于0,如果小于零需要设计分压电路来抬高输入电压,为了匹配需要测量的波形需要调整显示函数的参数;另外OLED也只是完成波形的显示,没有坐标轴等,需要自己修改添加。

主函数部分代码如下:
#include "delay.h"
#include "sys.h"
#include "stdio.h"
#include "oled.h"
#include "interrupt.h"
#include "ad.h"
#include "stdlib.h"
  u16 resurt;
  ADC_NODE* Top;
  ADC_NODE* Tail;
        ADC_NODE* InitNode;
        ADC_NODE ADC_data[128];
  unsigned char c=1;
  void ShowVoltage(float Voltage,u8 startX,u8 startY);

int main(void)
{
  ADC_NODE* GetResult;
        unsigned char a, b;
        float Voltages;
        
   delay_init();
         OLED_Init();                        /
         OLED_Clear();
   ExitOn();        //GPIOA_PIN_5
         ADC_DATA_Init();
         ADC_init(RCC_PCLK2_Div8);
while(1)
{
            ADC_Control(0);
            GetResult = Tail; // change every 26.5us
            GetResult = GetResult->next->next;
                        for(a=1; a<129;a++){
                                OLED_ClearLine(a);
                                //Voltages = (float)resurt*3.3/4096;
                                //Voltages = 16+15*sin(0.1*a);
                                b = (char)(GetResult->data*70/4096);
                     OLED_DrawP(a,b-33);
                                GetResult = GetResult->next;
                        }
                        ADC_Control(1);
                        delay_ms(50);
                }
}


   void EXTI9_5_IRQHandler(void){
                 c++;
                 if(c==5) c=0;
                 switch (c){
                         case 1: ADC_init(RCC_PCLK2_Div2);break;
                         case 2: ADC_init(RCC_PCLK2_Div4);break;
                         case 3: ADC_init(RCC_PCLK2_Div6);break;
                         case 4: ADC_init(RCC_PCLK2_Div8);break;
                 };
                 EXTI_ClearITPendingBit(Z_Line);
}

其中有一些头文件和代码没有在主程序中使用到,是学习和测试时写的可以删掉,仅保留示波器源程序。
接线说明:
A6接SCK ,A7接SDA,OLED接3.3V(注意不是0.96寸的OLED!)
电压输入接A1,需要共地,外部中断为A5。
代码下载: STM32f103c8t6简易示波器.7z (194.01 KB, 下载次数: 170)

作者: 的沈娇妮    时间: 2021-7-7 00:13
显示效果如图

IMG_20210704_233225.jpg (1.07 MB, 下载次数: 96)

IMG_20210704_233225.jpg





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1