找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13256|回复: 29
收起左侧

制作STC8A8K64S4A12单片机示波器 附源程序与PCB原理图

  [复制链接]
ID:102890 发表于 2020-10-17 14:13 | 显示全部楼层 |阅读模式
OLED数字示波器 基于STC8A8K64S4A12单片机 原作者 老刘爱捣鼓   PCB板是在B站的一个大佬那下载然后改的 希望大家喜欢
功能.png
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
51hei.png 51hei.png 51hei.png

单片机源程序如下:
  1. 简易示波器
  2.     版本:V0.3
  3.     作者:老刘爱捣鼓
  4.     单片机型:STC8A8K64S4A12 @27MHz
  5.     老刘爱捣鼓(全网同名)期待您的关注!
  6.     B站教程(初版):https://www.bilibili.com/video/BV1ai4y1t79R
  7.     B站教程(V0.3):https://www.bilibili.com/video/BV1ai4y1t79R
  8.   操作说明:
  9.         主界面-选项设置模式:
  10.             单击编码器:切换开始/暂停采样
  11.             双击编码器:切换波形水平滚动模式/选项设置模式
  12.             长按编码器:进入设置界面
  13.             旋转编码器:修改当前参数
  14.             按下同时旋转编码器:在参数间切换
  15.             
  16.         主界面-波形水平滚动模式:
  17.             单击编码器:切换开始/暂停采样
  18.             双击编码器:切换波形水平滚动模式/选项设置模式
  19.             长按编码器:进入设置界面
  20.             旋转编码器:水平滚动波形(在暂停采样状态下有效)
  21.             按下同时旋转编码器:垂直滚动波形(仅在暂停采样状态下有效)
  22.             
  23.         设置界面:
  24.             单击编码器:无效
  25.             双击编码器:无效
  26.             长按编码器:返回主界面
  27.             旋转编码器:修改当前选项
  28.             按下同时旋转编码器:切换选项

  29.     主界面参数:
  30.         横轴时间区间:"500ms", "200ms", "100ms", "50ms", "20ms", "10ms","5ms", "2ms", "1ms", "500us", "200us", "100us"(100us仅在自动触发模式下可用)
  31.         纵轴电压区间:设定电压量程上限,最大30V,顺时针旋转编码器将电压上限设置为0则进入自动量程,逆时针旋转进入手动量程
  32.         触发值:设定触发电压值,触发位置被放在屏幕中心
  33.         触发方向:上下箭头,分别代表上升沿触发和下降沿触发
  34.         触发方式:
  35.             Auto(自动触发)  :连续采样,指示灯始终点亮,通过单击编码器控制启停;触发成功时,触发点位于屏幕中心,触发失败则波形无规律滚动,屏幕左侧显示Fail标志
  36.             Normal(普通触发):等待预采样,待指示灯亮起表示预采样结束,这时可以输入信号;
  37.                               触发成功后,显示波形,并继续等待下次触发;
  38.                               如果有新的触发成功,则自动显示新的波形,如没有新的触发成功则屏幕波形保持并一直等待下次触发;
  39.                               需注意设置正确的触发值,否则一直处于等待触发状态,屏幕不会显示波形
  40.             Single(单次触发):等待预采样,待指示灯亮起表示预采样结束,这时可以输入信号;
  41.                               触发成功后,显示波形,并停止采样,需用户单击编码器开始下次采样        
  42.                               需注意设置正确的触发值,否则一直处于等待触发状态,屏幕不会显示波形
  43.             
  44.     主界面状态显示:        
  45.         Run:正在采样
  46.         Stop:停止采样
  47.         Fail:自动模式下,触发值超出波形范围引起触发失败
  48.         Auto:自动量程
  49.             
  50.     设置界面选项:
  51.         PMode(绘图模式):
  52.             Vector:波形以矢量显示
  53.             Dots  :波形以点阵显示
  54.         LSB(采样系数):分压系数的100倍,比如用10k加2k的电阻进行分压,分压系数为(10+2/2)=6,LSB理论取值为6x100=600,根据实际电阻精度进行微调        
  55.         BRT:OLED亮度

  56.     保存设置:长按编码器退出设置界面时,设置界面和主界面的所有参数被保存到EEPROM

  57.     2020-04-30更新
  58.     1. 增加单次触发和普通触发功能,可自定义触发点用来捕捉波形变化
  59.     2. 按照规格书要求将ADC采样端口设置为高阻输入
  60.     2020-5-3更新
  61.     1. 增加波形频率显示
  62.     2. 使用编码器水平/垂直滚动波形
  63.     3. 使用编码器垂直缩放波形
  64.     4. 用户可设定触发电平
  65. */

  66. #include <reg51.h>
  67. #include "global.h"
  68. #include "delay.h"
  69. #include "adc_stc8.h"
  70. #include "config_stc.h"
  71. #include "settings.h"
  72. #include "chart.h"
  73. #include "ssd1306.h"

  74. // #include "uart.h"
  75. // #include "stdio.h"

  76. #define VBAT_UPDATE_FREQ 40 //电池电压信息的更新频率 VBAT_UPDATE_FREQ*25ms
  77. #define VBAT_LSB 600        //电池电压采样分压系数*100
  78. #define INT_0 0             //外部中断0序号,编码器旋转
  79. #define INT_1 2             //外部中断1序号,编码器按下
  80. #define TIMER_0 1           //定时器0中断序号

  81. void init()
  82. {
  83.     InSettings = 0;         //初始化开机界面
  84.     OptionInSettings = 0;   //初始化设置界面的选项编号
  85.     OptionInChart = 0;      //初始化主界面的选项标号
  86.     WaveScroll = 0;         //清零波形滚动标志
  87.     OptionChanged = 0;      //清零设置修改标志
  88.     ADCRunning = 1;         //置位采样标志
  89.     ADCInterrupt = 0;       //清零ADC中断标志
  90.     ADCComplete = 0;        //清零ADC完成标志
  91.     WaveUpdate = 0;         //清零波形更新标志
  92.     ClearWave = 0;          //清零清除波形标志
  93.     ClearDisplay = 1;       //置位清空屏幕标志
  94.     EC11PressAndRotate = 0; //清零编码器旋转标志
  95.     UpdateVbat = 0;         //清零采样电池电压标志
  96.     ADCComplete = 0;        //清零ADC完成采样标志
  97.     WaveFreq = 0;           //清零波形频率
  98.     TriPos = 50;            //初始化触发点位置
  99.     TriPosOffset = 0;       //初始化触发点偏移量
  100.     TriFail = 0;            //清零触发失败标志
  101.     VMax = 0;               //清零波形电压最大值
  102.     VMin = 0;               //清零波形电压最小值
  103.     WaveLengthSumNum = 0;   //清零波形长度求和次数
  104.     WaveLengthSum = 0;      //清零波形长度求和

  105.     /* 波形滚动模式下正在采样则禁用外部中断0(编码器旋转)
  106.        Disable external interrupt 0(Encoder rotation) in waveform scroll mode when sampling*/
  107.     if (ADCRunning && WaveScroll)
  108.         EX0 = 0;

  109.     /* 获取内部参考电压值
  110.        Get internal reference voltage */
  111.     BGV = GetBGV();
  112. }

  113. void runWhenInSettrings()
  114. {
  115.     P_Ready = 0;
  116.     ClearDisplay = 1;
  117.     while (InSettings)
  118.     {
  119.         /* 更新电池电压信息
  120.            Update voltage infor of battery */
  121.         if (UpdateVbat)
  122.         {
  123.             UpdateVbat = 0;
  124.             VBat = GetVoltage(ADC_BAT, VBAT_LSB);
  125.         }

  126.         /* 更新屏幕亮度
  127.            Update OLED Brightness */
  128.         if (OLED_BrightnessChanged)
  129.         {
  130.             OLED_BrightnessChanged = 0;
  131.             OLED_Write_Command(0x81);
  132.             OLED_Write_Command(OLED_Brightness * 10);
  133.         }

  134.         /* 更新参数
  135.            Update parameters */
  136.         if (DisplayUpdate)
  137.         {
  138.             DisplayUpdate = 0;
  139.             PlotSettings();
  140.             OLED_Display();
  141.         }
  142.     }

  143.     /* 保存设置
  144.        Save Settings */
  145.     EA = 0;
  146.     if (OptionChanged)
  147.     {
  148.         OptionChanged = 0;
  149.         ClearDisplay = 0;
  150.         /* 保存设置并显示保存状态
  151.            Save settings and display saving status*/
  152.         PlotSaveStatus(Save_Options());
  153.         OLED_Display();
  154.         Delay1000ms();
  155.     }

  156.     /* 退出settings后刷新屏幕
  157.        Redraw display after exit settings */
  158.     ClearDisplay = 1;
  159.     PlotChart();
  160.     OLED_Display();
  161.     IE0 = 0;
  162.     IE1 = 0;
  163.     EA = 1;
  164. }

  165. /*
  166.     ADCRuning=1
  167.     |        WaveUpdate=1
  168.     |        |        ClearWave=1
  169.     |        |        ClearWave=0
  170.     |        WaveUpdate=0
  171.     ADCRuning=0
  172.         DisplayUpdate=1
  173.             WaveUpdate=1
  174.             |        ClearWave=1
  175.             |        ClearWave=0
  176.             WaveUpdate=0
  177. */
  178. void runWhenADCInterrupt()
  179. {
  180.     ADCInterrupt = 0;
  181.     P_Ready = 0;

  182.     /* ADC采样运行
  183.        ADC Sampling Running */
  184.     if (ADCRunning)
  185.     {
  186.         EX0 = 0;

  187.         if (WaveUpdate)
  188.         {
  189.             WaveUpdate = 0;
  190.             ClearDisplay = 1;

  191.             /* 清空波形缓存
  192.                Clear waveform in buffer*/
  193.             if (ClearWave)
  194.             {
  195.                 ClearWave = 0;
  196.                 memset(ADCbuf, 0x00, SAMPLE_NUM * 2);
  197.                 WaveFreq = 0;
  198.                 TriFail = 0;
  199.                 VMax = 0;
  200.                 VMin = 0;
  201.                 PlotChart();
  202.             }
  203.             /* 显示缓存中的波形
  204.                Display waveform in buffer*/
  205.             else
  206.             {
  207.                 AnalyseData();
  208.                 PlotChart();
  209.                 PlotWave();
  210.             }
  211.         }
  212.         else
  213.         {
  214.             ClearDisplay = 0;
  215.             PlotChart();
  216.         }
  217.         OLED_Display();

  218.         /* ADCRuning和WaveScroll同时置位时,不开启外部中断0(编码器旋转)
  219.            Not to enable external interrupt 0(Encoder Rotation) when both of ADCRunning and WaveScroll set. */
  220.         if (!WaveScroll)
  221.         {
  222.             IE0 = 0;
  223.             EX0 = 1;
  224.         }
  225.     }

  226.     /* ADC采样停止
  227.        ADC Sampling Stopped */
  228.     else
  229.     {
  230.         while (!ADCRunning && !InSettings)
  231.         {
  232.             if (DisplayUpdate)
  233.             {
  234.                 EX0 = 0;
  235.                 DisplayUpdate = 0;
  236.                 if (WaveUpdate)
  237.                 {
  238.                     WaveUpdate = 0;
  239.                     /* 分析缓存中完成采样的采样数据
  240.                        Analyse completed sampling data in buffer */
  241.                     AnalyseData();
  242.                     ClearDisplay = 1;

  243.                     /* 清空屏幕,绘制波形
  244.                        Clear display and draw waveform */
  245.                     if (ScaleH == ScaleH_tmp)
  246.                     {
  247.                         /* 采样点数有限,不支持横向缩放波形,只有时间区间与完成采样的时间区间相同才绘制波形
  248.                            Since the sampling points limitation, scaling waveform along horizontal is not support.
  249.                            Show waveform only when time scale is same as that when sampling completed */
  250.                         PlotChart();
  251.                         PlotWave();
  252.                     }

  253.                     /* 清空屏幕,不绘制波形
  254.                        Clear display and no waveform */
  255.                     else
  256.                     {
  257.                         WaveFreq = 0; //清零WaveFreq,绘制界面时,频率位置会显示****Hz
  258.                         PlotChart();
  259.                     }
  260.                 }
  261.                 /* 只更新屏幕上的参数,波形不变
  262.                    Update parameters on display only, keep waveform */
  263.                 else
  264.                 {
  265.                     ClearDisplay = 0;
  266.                     PlotChart();
  267.                 }

  268.                 OLED_Display();
  269.                 IE0 = 0;
  270.                 EX0 = 1;
  271.             }
  272.         }
  273.     }
  274. }

  275. void runWhenADCComplete()
  276. {
  277.     /*  ADC采样完成 - 单次触发
  278.         ADC Sampling Complete - Single Trigger Mode */
  279.     if (TriMode == 2)
  280.     {
  281.         EX0 = 0;
  282.         ADCInterrupt = 1;
  283.         DisplayUpdate = 0;
  284.         WaveUpdate = 0;
  285.         ADCRunning = 0; //清零ADC运行标志,停止采样
  286.         AnalyseData();
  287.         ClearDisplay = 1;
  288.         PlotChart();
  289.         PlotWave();
  290.         OLED_Display();
  291.         IE0 = 0;
  292.         EX0 = 1;
  293.     }

  294.     /*  ADC采样完成 - 自动触发或普通触发
  295.         ADC Sampling Complete - Auto or Normal Trigger Mode */
  296.     else
  297.     {
  298.         //EX0 = 0;
  299.         ClearDisplay = 1; //置位清空屏幕标志
  300.         AnalyseData();    //分析采样数据
  301.         PlotChart();      //绘制主界面
  302.         PlotWave();       //绘制波形
  303.         OLED_Display();
  304.         //IE0 = 0;
  305.         //EX0 = 1;
  306.     }
  307. }

  308. /* 程序入口
  309.    Program Entry */
  310. void main()
  311. {
  312.     /* 将ADC端口P0.4,P0.6设置为高阻
  313.        Set ADC port P0.4, P0.6 as high-impedance */
  314.     P0M1 |= 0x50;
  315.     P0M0 &= ~0x50;

  316.     /* 设置指示灯端口P1.1为推挽输出
  317.        Set indicator port P1.1 as push-pull output */
  318.     P0M1 &= ~0x02;
  319.     P0M0 |= 0x02;

  320.     /* 设置编码器端口P3.2,P3.3,P3.4为准双向
  321.        Set Encoder port P3.2, P3.3, P3.4 as quasi bidirectional */
  322.     P3M1 &= ~0x1C;
  323.     P3M0 &= ~0x1C;

  324.     /* 设置OLED端口P2.3,P2.4,P2.5,P2.6,P2.7为准双向
  325.        Set OLED port P2.3, P2.4, P2.5, P2.6 as quasi bidirectional */
  326.     P2M1 &= ~0xF8;
  327.     P2M0 &= ~0xF8;

  328.     /* 编码器旋转外部中断
  329.        Interrupt for rotating of Encoder */
  330.     IT0 = 0; //外部中断0触发方式,上升沿和下降沿
  331.     PX0 = 1; //外部中断0高优先级,可打断按键中断,用于判断按下同时旋转
  332.     EX0 = 1; //开启外部中断0

  333.     /* 编码器按键外部中断
  334.        Interrupt for clicking of Encoder */
  335.     IT1 = 1; //外部中断1触发方式,下降沿
  336.     PX1 = 0; //外部中断1低优先级
  337.     EX1 = 1; //开启外部中断1

  338.     /* 定时器0,为更新电池电压信息计时
  339.        Timer 0, for updating voltage of battery */
  340.     AUXR &= 0x7F; //定时器时钟12T模式
  341.     TMOD &= 0xF0; //设置定时器模式
  342.     TL0 = 0x46;   //设置定时初值 //27MHz,25ms
  343.     TH0 = 0x24;   //设置定时初值
  344.     TF0 = 0;      //清除TF0标志
  345.     ET0 = 1;      //允许定时器0中断

  346.     /* 开总中断
  347.        Enable global interrupt */
  348.     EA = 1;

  349.     //UartInit();

  350.     Read_Options();
  351.     init();
  352.     OLED_Init();
  353.     OLED_SetFontWidth(6);
  354.     PlotChart();
  355.     OLED_Display();

  356.     while (1)
  357.     {
  358.         P_Ready = 0;

  359.         /* 采样波形
  360.            Sampling*/
  361.         GetWaveData();

  362.         /* 进入设置界面
  363.            Enter Settings Interface */
  364.         if (InSettings)
  365.         {
  366.             runWhenInSettrings();
  367.         }

  368.         /* ADC采样中断
  369.            ADC Sampling Interrupt */
  370.         else if (ADCInterrupt)
  371.         {
  372.             runWhenADCInterrupt();
  373.         }

  374.         /* ADC采样完成
  375.            ADC Sampling Complete */
  376.         else
  377.         {
  378.             runWhenADCComplete();
  379.         }
  380.     }
  381. }

  382. /* 分析编码器旋转
  383.    Analyse Rotation of Encoder */
  384. void Scan_EC11(void)
  385. {
  386.     /* 延时去抖动
  387.        Delay to remove jitter */
  388.     Delay500us();

  389.     /* 正转
  390.        Clockwise */
  391.     if (EC11_A != EC11_B)
  392.     {
  393.         Change_Val(1);
  394.     }

  395.     /* 反转
  396.        Anticlockwise */
  397.     else if (EC11_A == EC11_B)
  398.     {
  399.         Change_Val(0);
  400.     }
  401. }

  402. /* 编码器旋转中断
  403.    Interrput for Encoder Rotated */
  404. void INT0_interrupt(void) interrupt INT_0
  405. {
  406.     Delay500us();

  407.     /* 编码器是否被按下
  408.        Whether the Encoder is pressed */
  409.     if (!EC11_KEY)
  410.         EC11PressAndRotate = 1;
  411.     else
  412.         EC11PressAndRotate = 0;

  413.     Scan_EC11();
  414.     ADCInterrupt = 1;
  415.     DisplayUpdate = 1;
  416.     IE1 = 0; //清零外部中断1标志位
  417.     IE0 = 0; //清零外部中断0标志位
  418. }

  419. /* 编码器点击中断
  420.    Interrput for Encoder Pressed */
  421. void INT1_interrupt(void) interrupt INT_1
  422. {
  423.     Delay50ms();
  424.     if (!EC11_KEY)
  425.     {
  426.         EC11PressAndRotate = 0;

  427.         /*  长按编码器按键 - 切换主界面和设置界面
  428.             Long presse Encoder - Switch main interface and settings interface */
  429.         if (Delay800ms_Long_Press())
  430.         {
  431.             InSettings = ~InSettings;

  432.             /*  进入设置界面
  433.                 Enter Settings  */
  434.             if (InSettings)
  435.             {
  436.                 DisplayUpdate = 1;
  437.                 UpdateVbat = 1;
  438.                 TF0 = 0; //清零定时器0溢出标志
  439.                 TR0 = 1; //定时器0开始计时,开始电池电压信息更新计时
  440.                 IE0 = 0; //清零外部中断0中断标志
  441.                 EX0 = 1; //开启外部中断0(编码器旋转)
  442.             }

  443.             /*  回到主界面
  444.                 Retrurn to main interface   */
  445.             else
  446.             {
  447.                 TR0 = 0; //清零定时器0溢出标志
  448.                 TF0 = 0; //定时器0停止计时,停止电池电压信息更新计时
  449.                 WaveFreq = 0;
  450.                 TriFail = 0;
  451.                 VMax = 0;
  452.                 VMin = 0;
  453.                 DisplayUpdate = 1;
  454.                 WaveUpdate = 1;
  455.                 ClearWave = 0;
  456.             }
  457.             ADCInterrupt = 1;
  458.         }

  459.         /*  按住编码器同时旋转
  460.             Rotate Encoder while pressing  */
  461.         else if (EC11PressAndRotate)
  462.         {
  463.             /* 由编码器旋转中断执行操作
  464.                Operations Performed by Interrupt of Encoder Rotation */
  465.         }

  466.         /* 双击编码器按键 - 在主界面,滚动波形和选项模式之间切换
  467.            Double click Encoder - Switch between Waveform Scroll Mode and Parameter Mode in Main Interface */
  468.         else if (Delay300ms_Double_Click())
  469.         {
  470.             /* 主界面
  471.                Main Interface*/
  472.             if (!InSettings)
  473.             {
  474.                 WaveScroll = ~WaveScroll;
  475.                 OptionChanged = 1;
  476.                 ADCInterrupt = 1;
  477.                 DisplayUpdate = 1;
  478.                 ClearWave = 0;
  479.             }
  480.         }

  481.         /*  单击编码器按键 - 在主界面,切换Stop/Run状态
  482.             Single click Encoder - Switch Run/Stop in main interface    */
  483.         else if (!InSettings)
  484.         {
  485.             EX0 = 0;
  486.             ADCRunning = ~ADCRunning;
  487.             if (ADCRunning)
  488.             {
  489.                 WaveUpdate = 1;
  490.                 ClearWave = 1;
  491.             }
  492.             else
  493.             {
  494.                 DisplayUpdate = 1;
  495.                 WaveUpdate = 1;
  496.             }
  497.             ADCInterrupt = 1;
  498.             IE0 = 0;
  499.             IE1 = 0;
  500.         }
  501.     }
  502.     IE1 = 0;
  503. }

  504. /* 为更新Vbat计时
  505.    Timer for updating Vbat */
  506. void TIMER0_interrupt(void) interrupt TIMER_0
  507. {
  508.     static uint8 n;

  509.     if (++n >= VBAT_UPDATE_FREQ)
  510.     {
  511.         n = 0;
  512.         UpdateVbat = 1;
  513.         DisplayUpdate = 1;
  514.     }
  515. }
复制代码

所有资料51hei提供下载:
老刘的示波器2.zip (6.69 MB, 下载次数: 361)

评分

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

查看全部评分

回复

使用道具 举报

ID:164988 发表于 2020-10-17 21:50 | 显示全部楼层
非常喜欢的文章,果断下载学习。谢谢楼主分享!
回复

使用道具 举报

ID:53978 发表于 2020-10-18 20:41 | 显示全部楼层
可以写个12864LCD的固件吗?
回复

使用道具 举报

ID:53978 发表于 2020-10-19 16:48 | 显示全部楼层
这么好的东西,准备仿制,也画了一个板子,带USB下载。
51hei截图20201019164416.jpg
回复

使用道具 举报

ID:409674 发表于 2020-10-19 19:32 | 显示全部楼层
我制作后只显示出界面,不能测量出波形,还没有查出什么问题。
回复

使用道具 举报

ID:53978 发表于 2020-10-20 12:28 | 显示全部楼层
zxianyu 发表于 2020-10-19 19:32
我制作后只显示出界面,不能测量出波形,还没有查出什么问题。

问一下楼主什么问题
回复

使用道具 举报

ID:102890 发表于 2020-10-20 20:41 | 显示全部楼层
smartphone 发表于 2020-10-20 12:28
问一下楼主什么问题

看下元件有没有虚焊的  我做的能用也能测出波形 有时间我给你看下视频 https://www.bilibili.com/video/BV1rZ4y157Qi 这是别人仿制的 https://www.bilibili.com/video/BV1XV411k7UV这是原视频 你看下
回复

使用道具 举报

ID:53978 发表于 2020-10-26 09:13 | 显示全部楼层
测试了一下非常好,就是屏太小了看不清楚。希望楼主搞搞大尺寸屏驱动
回复

使用道具 举报

ID:536683 发表于 2020-10-26 17:33 | 显示全部楼层
太牛了,同类型的屏幕有大的,串行屏,就是贵多了。
回复

使用道具 举报

ID:53978 发表于 2020-10-26 19:16 | 显示全部楼层
spi3.5寸彩屏40~50
回复

使用道具 举报

ID:136337 发表于 2020-10-29 16:47 | 显示全部楼层
用IIC的屏需要修改哪些地方,手中有IIC的屏
回复

使用道具 举报

ID:840797 发表于 2020-11-10 16:04 | 显示全部楼层
对于一个初学者来讲,这就是神一般的存在。
回复

使用道具 举报

ID:106977 发表于 2020-11-11 13:13 | 显示全部楼层
4寸,8/16位接口,800×480分辨率,60元、τ 宝上有。
回复

使用道具 举报

ID:243748 发表于 2021-1-2 15:07 来自手机 | 显示全部楼层
有时间整一个玩下
回复

使用道具 举报

ID:243748 发表于 2021-1-3 22:40 来自手机 | 显示全部楼层
今天做好了,就是屏太小,看不清楚,
回复

使用道具 举报

ID:872598 发表于 2021-1-12 15:15 | 显示全部楼层
建议改大屏发出来,供大伙参考才是最实际。
回复

使用道具 举报

ID:128989 发表于 2021-1-30 02:12 | 显示全部楼层
指标没差了,测不到什么东西的
回复

使用道具 举报

ID:239055 发表于 2021-6-12 08:47 来自手机 | 显示全部楼层
我看硬件好简单,就一个分压电路,然后怎么形成的波形?有时间我也弄一个,这样就不用买了,不过最近单片机贵好多
回复

使用道具 举报

ID:190298 发表于 2021-6-12 23:06 | 显示全部楼层
原来做个一个,电池电压 和示波器电压都比正常高几倍,不知道怎么回事,示波器随便一点信号基本就满格30V的位置了,什么原因。
回复

使用道具 举报

ID:315554 发表于 2021-6-22 17:02 | 显示全部楼层
谢谢分享,有直插款的,焊接易一点,晚点找单片机来试试
回复

使用道具 举报

ID:942056 发表于 2021-7-2 13:50 来自手机 | 显示全部楼层
什么时候写个并口屏的
回复

使用道具 举报

ID:507641 发表于 2021-7-29 01:07 | 显示全部楼层
先标记,等币够下来看看学习。oled是性价高
回复

使用道具 举报

ID:914438 发表于 2021-8-1 13:59 | 显示全部楼层
谢谢分享,有直插款的,焊接易一点,晚点找单片机来做一个
回复

使用道具 举报

ID:909736 发表于 2022-2-11 15:39 来自手机 | 显示全部楼层
下载装了一个,直接打开bin文件和hex文件写入单片机的,弄完后不显示,屏是7针oled12864屏,4spi的,知道是什么问题吗
回复

使用道具 举报

ID:424501 发表于 2022-2-15 16:06 | 显示全部楼层
看好OLD的片选端是否接地。
回复

使用道具 举报

ID:983641 发表于 2022-2-18 12:40 | 显示全部楼层
是老刘的开源项目?
回复

使用道具 举报

ID:942805 发表于 2022-3-24 09:39 | 显示全部楼层
AD图打不开啊
回复

使用道具 举报

ID:1025950 发表于 2022-5-12 14:01 | 显示全部楼层
acben 发表于 2022-2-11 15:39
下载装了一个,直接打开bin文件和hex文件写入单片机的,弄完后不显示,屏是7针oled12864屏,4spi的,知道是 ...

你做成功没?我做成了,有问题可以一起讨论
回复

使用道具 举报

ID:1032098 发表于 2022-6-4 13:00 | 显示全部楼层
这编能转换成16进制的吗
回复

使用道具 举报

ID:1032098 发表于 2022-6-4 13:18 | 显示全部楼层
电池电压显示范围和探针电压显示范围在程序哪里
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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