找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4670|回复: 1
收起左侧

STM32f103c8t6/c6t6简易示波器程序,0.91'OLED屏显示

  [复制链接]
ID:338727 发表于 2021-7-4 23:58 | 显示全部楼层 |阅读模式
主要功能描述:可以设置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, 下载次数: 155)

评分

参与人数 1黑币 +80 收起 理由
admin + 80 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:338727 发表于 2021-7-7 00:13 来自手机 | 显示全部楼层
显示效果如图
IMG_20210704_233225.jpg
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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