久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8553|回復: 25
收起左側

51單片機MINI示波器2.0制作 LQFP48開源文件 PCB與源程序

  [復制鏈接]
ID:816912 發表于 2021-9-27 12:33 | 顯示全部樓層 |閱讀模式
原創作者是:老劉愛搗鼓 大家可以去看他的視頻:https://space.bilibili.com/40587802

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png 51hei.png

制作出來的實物圖如下:
IMG_6298.jpg Main_Interface.jpg operation.jpg Settings_Interface.JPG

單片機源程序如下:
  1. /*
  2.     Mini DSO with STC MCU
  3.     操作說明:
  4.         主界面-選項設置模式:
  5.             單擊編碼器:切換開始/暫停采樣
  6.             雙擊編碼器:切換波形水平滾動模式/選項設置模式
  7.             長按編碼器:進入設置界面
  8.             旋轉編碼器:修改當前參數
  9.             按下同時旋轉編碼器:在參數間切換
  10.             
  11.         主界面-波形水平滾動模式:
  12.             單擊編碼器:切換開始/暫停采樣
  13.             雙擊編碼器:切換波形水平滾動模式/選項設置模式
  14.             長按編碼器:進入設置界面
  15.             旋轉編碼器:水平滾動波形(在暫停采樣狀態下有效)
  16.             按下同時旋轉編碼器:垂直滾動波形(僅在暫停采樣狀態下有效)
  17.             
  18.         設置界面:
  19.             單擊編碼器:無效
  20.             雙擊編碼器:無效
  21.             長按編碼器:返回主界面
  22.             旋轉編碼器:修改當前選項
  23.             按下同時旋轉編碼器:切換選項

  24.     主界面參數:
  25.         橫軸時間區間:"500ms", "200ms", "100ms", "50ms", "20ms", "10ms","5ms", "2ms", "1ms", "500us", "200us", "100us"(100us僅在自動觸發模式下可用)
  26.         縱軸電壓區間:設定電壓量程上限,最大30V,順時針旋轉編碼器將電壓上限設置為0則進入自動量程,逆時針旋轉進入手動量程
  27.         觸發值:設定觸發電壓值,觸發位置被放在屏幕中心
  28.         觸發方向:上下箭頭,分別代表上升沿觸發和下降沿觸發
  29.         觸發方式:
  30.             Auto(自動觸發)  :連續采樣,指示燈始終點亮,通過單擊編碼器控制啟停;觸發成功時,觸發點位于屏幕中心,觸發失敗則波形無規律滾動,屏幕左側顯示Fail標志
  31.             Normal(普通觸發):等待預采樣,待指示燈亮起表示預采樣結束,這時可以輸入信號;
  32.                               觸發成功后,顯示波形,并繼續等待下次觸發;
  33.                               如果有新的觸發成功,則自動顯示新的波形,如沒有新的觸發成功則屏幕波形保持并一直等待下次觸發;
  34.                               需注意設置正確的觸發值,否則一直處于等待觸發狀態,屏幕不會顯示波形
  35.             Single(單次觸發):等待預采樣,待指示燈亮起表示預采樣結束,這時可以輸入信號;
  36.                               觸發成功后,顯示波形,并停止采樣,需用戶單擊編碼器開始下次采樣        
  37.                               需注意設置正確的觸發值,否則一直處于等待觸發狀態,屏幕不會顯示波形
  38.             
  39.     主界面狀態顯示:        
  40.         Run:正在采樣
  41.         Stop:停止采樣
  42.         Fail:自動模式下,觸發值超出波形范圍引起觸發失敗
  43.         Auto:自動量程
  44.             
  45.     設置界面選項:
  46.         PMode(繪圖模式):
  47.             Vector:波形以矢量顯示
  48.             Dots  :波形以點陣顯示
  49.         LSB(采樣系數):分壓系數的100倍,比如用10k加2k的電阻進行分壓,分壓系數為(10+2/2)=6,LSB理論取值為6x100=600,根據實際電阻精度進行微調        
  50.         BRT:OLED亮度

  51.     保存設置:長按編碼器退出設置界面時,設置界面和主界面的所有參數被保存到EEPROM

  52.     2020-04-30更新
  53.     1. 增加單次觸發和普通觸發功能,可自定義觸發點用來捕捉波形變化
  54.     2. 按照規格書要求將ADC采樣端口設置為高阻輸入
  55.     2020-5-3更新
  56.     1. 增加波形頻率顯示
  57.     2. 使用編碼器水平/垂直滾動波形
  58.     3. 使用編碼器垂直縮放波形
  59.     4. 用戶可設定觸發電平
  60. */

  61. #include <reg51.h>
  62. #include "global.h"
  63. #include "delay.h"
  64. #include "adc_stc8.h"
  65. #include "config_stc.h"
  66. #include "settings.h"
  67. #include "chart.h"
  68. #include "ssd1306.h"

  69. // #include "uart.h"
  70. // #include "stdio.h"

  71. #define VBAT_UPDATE_FREQ 40 //電池電壓信息的更新頻率 VBAT_UPDATE_FREQ*25ms
  72. #define VBAT_LSB 600        //電池電壓采樣分壓系數*100
  73. #define INT_0 0             //外部中斷0序號,編碼器旋轉
  74. #define INT_1 2             //外部中斷1序號,編碼器按下
  75. #define TIMER_0 1           //定時器0中斷序號

  76. void init()
  77. {
  78.     InSettings = 0;         //初始化開機界面
  79.     OptionInSettings = 0;   //初始化設置界面的選項編號
  80.     OptionInChart = 0;      //初始化主界面的選項標號
  81.     WaveScroll = 0;         //清零波形滾動標志
  82.     OptionChanged = 0;      //清零設置修改標志
  83.     ADCRunning = 1;         //置位采樣標志
  84.     ADCInterrupt = 0;       //清零ADC中斷標志
  85.     ADCComplete = 0;        //清零ADC完成標志
  86.     WaveUpdate = 0;         //清零波形更新標志
  87.     ClearWave = 0;          //清零清除波形標志
  88.     ClearDisplay = 1;       //置位清空屏幕標志
  89.     EC11PressAndRotate = 0; //清零編碼器旋轉標志
  90.     UpdateVbat = 0;         //清零采樣電池電壓標志
  91.     ADCComplete = 0;        //清零ADC完成采樣標志
  92.     WaveFreq = 0;           //清零波形頻率
  93.     TriPos = 50;            //初始化觸發點位置
  94.     TriPosOffset = 0;       //初始化觸發點偏移量
  95.     TriFail = 0;            //清零觸發失敗標志
  96.     VMax = 0;               //清零波形電壓最大值
  97.     VMin = 0;               //清零波形電壓最小值
  98.     WaveLengthSumNum = 0;   //清零波形長度求和次數
  99.     WaveLengthSum = 0;      //清零波形長度求和

  100.     /* 波形滾動模式下正在采樣則禁用外部中斷0(編碼器旋轉)
  101.        Disable external interrupt 0(Encoder rotation) in waveform scroll mode when sampling*/
  102.     if (ADCRunning && WaveScroll)
  103.         EX0 = 0;

  104.     /* 獲取內部參考電壓值
  105.        Get internal reference voltage */
  106.     BGV = GetBGV();
  107. }

  108. void runWhenInSettrings()
  109. {
  110.     P_Ready = 0;
  111.     ClearDisplay = 1;
  112.     while (InSettings)
  113.     {
  114.         /* 更新電池電壓信息
  115.            Update voltage infor of battery */
  116.         if (UpdateVbat)
  117.         {
  118.             UpdateVbat = 0;
  119.             VBat = GetVoltage(ADC_BAT, VBAT_LSB);
  120.         }

  121.         /* 更新屏幕亮度
  122.            Update OLED Brightness */
  123.         if (OLED_BrightnessChanged)
  124.         {
  125.             OLED_BrightnessChanged = 0;
  126.             OLED_Write_Command(0x81);
  127.             OLED_Write_Command(OLED_Brightness * 10);
  128.         }

  129.         /* 更新參數
  130.            Update parameters */
  131.         if (DisplayUpdate)
  132.         {
  133.             DisplayUpdate = 0;
  134.             PlotSettings();
  135.             OLED_Display();
  136.         }
  137.     }

  138.     /* 保存設置
  139.        Save Settings */
  140.     EA = 0;
  141.     if (OptionChanged)
  142.     {
  143.         OptionChanged = 0;
  144.         ClearDisplay = 0;
  145.         /* 保存設置并顯示保存狀態
  146.            Save settings and display saving status*/
  147.         PlotSaveStatus(Save_Options());
  148.         OLED_Display();
  149.         Delay1000ms();
  150.     }

  151.     /* 退出settings后刷新屏幕
  152.        Redraw display after exit settings */
  153.     ClearDisplay = 1;
  154.     PlotChart();
  155.     OLED_Display();
  156.     IE0 = 0;
  157.     IE1 = 0;
  158.     EA = 1;
  159. }

  160. /*
  161.     ADCRuning=1
  162.     |        WaveUpdate=1
  163.     |        |        ClearWave=1
  164.     |        |        ClearWave=0
  165.     |        WaveUpdate=0
  166.     ADCRuning=0
  167.         DisplayUpdate=1
  168.             WaveUpdate=1
  169.             |        ClearWave=1
  170.             |        ClearWave=0
  171.             WaveUpdate=0
  172. */
  173. void runWhenADCInterrupt()
  174. {
  175.     ADCInterrupt = 0;
  176.     P_Ready = 0;

  177.     /* ADC采樣運行
  178.        ADC Sampling Running */
  179.     if (ADCRunning)
  180.     {
  181.         EX0 = 0;

  182.         if (WaveUpdate)
  183.         {
  184.             WaveUpdate = 0;
  185.             ClearDisplay = 1;

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

  213.         /* ADCRuning和WaveScroll同時置位時,不開啟外部中斷0(編碼器旋轉)
  214.            Not to enable external interrupt 0(Encoder Rotation) when both of ADCRunning and WaveScroll set. */
  215.         if (!WaveScroll)
  216.         {
  217.             IE0 = 0;
  218.             EX0 = 1;
  219.         }
  220.     }

  221.     /* ADC采樣停止
  222.        ADC Sampling Stopped */
  223.     else
  224.     {
  225.         while (!ADCRunning && !InSettings)
  226.         {
  227.             if (DisplayUpdate)
  228.             {
  229.                 EX0 = 0;
  230.                 DisplayUpdate = 0;
  231.                 if (WaveUpdate)
  232.                 {
  233.                     WaveUpdate = 0;
  234.                     /* 分析緩存中完成采樣的采樣數據
  235.                        Analyse completed sampling data in buffer */
  236.                     AnalyseData();
  237.                     ClearDisplay = 1;

  238.                     /* 清空屏幕,繪制波形
  239.                        Clear display and draw waveform */
  240.                     if (ScaleH == ScaleH_tmp)
  241.                     {
  242.                         /* 采樣點數有限,不支持橫向縮放波形,只有時間區間與完成采樣的時間區間相同才繪制波形
  243.                            Since the sampling points limitation, scaling waveform along horizontal is not support.
  244.                            Show waveform only when time scale is same as that when sampling completed */
  245.                         PlotChart();
  246.                         PlotWave();
  247.                     }

  248.                     /* 清空屏幕,不繪制波形
  249.                        Clear display and no waveform */
  250.                     else
  251.                     {
  252.                         WaveFreq = 0; //清零WaveFreq,繪制界面時,頻率位置會顯示****Hz
  253.                         PlotChart();
  254.                     }
  255.                 }
  256.                 /* 只更新屏幕上的參數,波形不變
  257.                    Update parameters on display only, keep waveform */
  258.                 else
  259.                 {
  260.                     ClearDisplay = 0;
  261.                     PlotChart();
  262.                 }

  263.                 OLED_Display();
  264.                 IE0 = 0;
  265.                 EX0 = 1;
  266.             }
  267.         }
  268.     }
  269. }

  270. void runWhenADCComplete()
  271. {
  272.     /*  ADC采樣完成 - 單次觸發
  273.         ADC Sampling Complete - Single Trigger Mode */
  274.     if (TriMode == 2)
  275.     {
  276.         EX0 = 0;
  277.         ADCInterrupt = 1;
  278.         DisplayUpdate = 0;
  279.         WaveUpdate = 0;
  280.         ADCRunning = 0; //清零ADC運行標志,停止采樣
  281.         AnalyseData();
  282.         ClearDisplay = 1;
  283.         PlotChart();
  284.         PlotWave();
  285.         OLED_Display();
  286.         IE0 = 0;
  287.         EX0 = 1;
  288.     }

  289.     /*  ADC采樣完成 - 自動觸發或普通觸發
  290.         ADC Sampling Complete - Auto or Normal Trigger Mode */
  291.     else
  292.     {
  293.         //EX0 = 0;
  294.         ClearDisplay = 1; //置位清空屏幕標志
  295.         AnalyseData();    //分析采樣數據
  296.         PlotChart();      //繪制主界面
  297.         PlotWave();       //繪制波形
  298.         OLED_Display();
  299.         //IE0 = 0;
  300.         //EX0 = 1;
  301.     }
  302. }

  303. /* 程序入口
  304.    Program Entry */
  305. void main()
  306. {
  307.     /* 將ADC端口P0.4,P0.6設置為高阻
  308.        Set ADC port P0.4, P0.6 as high-impedance */
  309.     P0M1 |= 0x50;
  310.     P0M0 &= ~0x50;

  311.     /* 設置指示燈端口P1.1為推挽輸出
  312.        Set indicator port P1.1 as push-pull output */
  313.     P0M1 &= ~0x02;
  314.     P0M0 |= 0x02;

  315.     /* 設置編碼器端口P3.2,P3.3,P3.4為準雙向
  316.        Set Encoder port P3.2, P3.3, P3.4 as quasi bidirectional */
  317.     P3M1 &= ~0x1C;
  318.     P3M0 &= ~0x1C;

  319.     /* 設置OLED端口P2.3,P2.4,P2.5,P2.6,P2.7為準雙向
  320.        Set OLED port P2.3, P2.4, P2.5, P2.6 as quasi bidirectional */
  321.     P2M1 &= ~0xF8;
  322.     P2M0 &= ~0xF8;

  323.     /* 編碼器旋轉外部中斷
  324.        Interrupt for rotating of Encoder */
  325.     IT0 = 0; //外部中斷0觸發方式,上升沿和下降沿
  326.     PX0 = 1; //外部中斷0高優先級,可打斷按鍵中斷,用于判斷按下同時旋轉
  327.     EX0 = 1; //開啟外部中斷0

  328.     /* 編碼器按鍵外部中斷
  329.        Interrupt for clicking of Encoder */
  330.     IT1 = 1; //外部中斷1觸發方式,下降沿
  331.     PX1 = 0; //外部中斷1低優先級
  332.     EX1 = 1; //開啟外部中斷1

  333.     /* 定時器0,為更新電池電壓信息計時
  334.        Timer 0, for updating voltage of battery */
  335.     AUXR &= 0x7F; //定時器時鐘12T模式
  336.     TMOD &= 0xF0; //設置定時器模式
  337.     TL0 = 0x46;   //設置定時初值 //27MHz,25ms
  338.     TH0 = 0x24;   //設置定時初值
  339.     TF0 = 0;      //清除TF0標志
  340.     ET0 = 1;      //允許定時器0中斷

  341.     /* 開總中斷
  342.        Enable global interrupt */
  343.     EA = 1;

  344.     //UartInit();

  345.     Read_Options();
  346.     init();
  347.     OLED_Init();
  348.     OLED_SetFontWidth(6);
  349.     PlotChart();
  350.     OLED_Display();

  351.     while (1)
  352.     {
  353.         P_Ready = 0;

  354.         /* 采樣波形
  355.            Sampling*/
  356.         GetWaveData();

  357.         /* 進入設置界面
  358.            Enter Settings Interface */
  359.         if (InSettings)
  360.         {
  361.             runWhenInSettrings();
  362.         }

  363.         /* ADC采樣中斷
  364.            ADC Sampling Interrupt */
  365.         else if (ADCInterrupt)
  366.         {
  367.             runWhenADCInterrupt();
  368.         }

  369.         /* ADC采樣完成
  370.            ADC Sampling Complete */
  371.         else
  372.         {
  373.             runWhenADCComplete();
  374.         }
  375.     }
  376. }

  377. /* 分析編碼器旋轉
  378.    Analyse Rotation of Encoder */
  379. void Scan_EC11(void)
  380. {
  381.     /* 延時去抖動
  382.        Delay to remove jitter */
  383.     Delay500us();

  384.     /* 正轉
  385.        Clockwise */
  386.     if (EC11_A != EC11_B)
  387.     {
  388.         Change_Val(1);
  389.     }

  390.     /* 反轉
  391.        Anticlockwise */
  392.     else if (EC11_A == EC11_B)
  393.     {
  394.         Change_Val(0);
  395.     }
  396. }

  397. /* 編碼器旋轉中斷
  398.    Interrput for Encoder Rotated */
  399. void INT0_interrupt(void) interrupt INT_0
  400. {
  401.     Delay500us();

  402.     /* 編碼器是否被按下
  403.        Whether the Encoder is pressed */
  404.     if (!EC11_KEY)
  405.         EC11PressAndRotate = 1;
  406.     else
  407.         EC11PressAndRotate = 0;

  408.     Scan_EC11();
  409.     ADCInterrupt = 1;
  410.     DisplayUpdate = 1;
  411.     IE1 = 0; //清零外部中斷1標志位
  412.     IE0 = 0; //清零外部中斷0標志位
  413. }

  414. /* 編碼器點擊中斷
  415.    Interrput for Encoder Pressed */
  416. void INT1_interrupt(void) interrupt INT_1
  417. {
  418.     Delay50ms();
  419.     if (!EC11_KEY)
  420.     {
  421.         EC11PressAndRotate = 0;

  422.         /*  長按編碼器按鍵 - 切換主界面和設置界面
  423.             Long presse Encoder - Switch main interface and settings interface */
  424.         if (Delay800ms_Long_Press())
  425.         {
  426.             InSettings = ~InSettings;

  427.             /*  進入設置界面
  428.                 Enter Settings  */
  429.             if (InSettings)
  430.             {
  431.                 DisplayUpdate = 1;
  432.                 UpdateVbat = 1;
  433.                 TF0 = 0; //清零定時器0溢出標志
  434.                 TR0 = 1; //定時器0開始計時,開始電池電壓信息更新計時
  435.                 IE0 = 0; //清零外部中斷0中斷標志
  436.                 EX0 = 1; //開啟外部中斷0(編碼器旋轉)
  437.             }

  438.             /*  回到主界面
  439.                 Retrurn to main interface   */
  440.             else
  441.             {
  442.                 TR0 = 0; //清零定時器0溢出標志
  443.                 TF0 = 0; //定時器0停止計時,停止電池電壓信息更新計時
  444.                 WaveFreq = 0;
  445.                 TriFail = 0;
  446.                 VMax = 0;
  447.                 VMin = 0;
  448.                 DisplayUpdate = 1;
  449.                 WaveUpdate = 1;
  450.                 ClearWave = 0;
  451.             }
  452.             ADCInterrupt = 1;
  453.         }

  454.         /*  按住編碼器同時旋轉
  455.             Rotate Encoder while pressing  */
  456.         else if (EC11PressAndRotate)
  457.         {
  458.             /* 由編碼器旋轉中斷執行操作
  459.                Operations Performed by Interrupt of Encoder Rotation */
  460.         }

  461.         /* 雙擊編碼器按鍵 - 在主界面,滾動波形和選項模式之間切換
  462.            Double click Encoder - Switch between Waveform Scroll Mode and Parameter Mode in Main Interface */
  463.         else if (Delay300ms_Double_Click())
  464.         {
  465.             /* 主界面
  466.                Main Interface*/
  467.             if (!InSettings)
  468.             {
  469.                 WaveScroll = ~WaveScroll;
  470.                 OptionChanged = 1;
  471.                 ADCInterrupt = 1;
  472.                 DisplayUpdate = 1;
  473.                 ClearWave = 0;
  474.             }
  475.         }

  476.         /*  單擊編碼器按鍵 - 在主界面,切換Stop/Run狀態
  477.             Single click Encoder - Switch Run/Stop in main interface    */
  478.         else if (!InSettings)
  479.         {
  480.             EX0 = 0;
  481.             ADCRunning = ~ADCRunning;
  482.             if (ADCRunning)
  483.             {
  484.                 WaveUpdate = 1;
  485.                 ClearWave = 1;
  486.             }
  487.             else
  488.             {
  489.                 DisplayUpdate = 1;
  490.                 WaveUpdate = 1;
  491.             }
  492.             ADCInterrupt = 1;
  493.             IE0 = 0;
  494.             IE1 = 0;
  495.         }
  496.     }
  497.     IE1 = 0;
  498. }

  499. /* 為更新Vbat計時
  500.    Timer for updating Vbat */
  501. void TIMER0_interrupt(void) interrupt TIMER_0
  502. {
  503.     static uint8 n;

  504.     if (++n >= VBAT_UPDATE_FREQ)
  505.     {
  506.         n = 0;
  507.         UpdateVbat = 1;
  508.         DisplayUpdate = 1;
  509.     }
  510. }
復制代碼

所有資料51hei附件下載(PCB與代碼):
MINI示波器2.0-LQFP48開源文件.7z (4.83 MB, 下載次數: 283)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:258542 發表于 2021-9-28 22:07 | 顯示全部樓層
在b站上見過,很牛逼的一個
回復

使用道具 舉報

ID:61493 發表于 2021-9-29 15:16 | 顯示全部樓層
不錯,那個屏能不能用在大一點的,那個OLED太小了
回復

使用道具 舉報

ID:229641 發表于 2021-10-2 21:11 來自觸屏版 | 顯示全部樓層
有么有iic屏幕的?
回復

使用道具 舉報

ID:804975 發表于 2021-10-4 00:52 | 顯示全部樓層
這個視頻我也看了。
回復

使用道具 舉報

ID:65369 發表于 2021-10-9 09:16 | 顯示全部樓層
這個夠給力了,放在十年前這個也不敢想象的
回復

使用道具 舉報

ID:971289 發表于 2021-10-14 08:46 | 顯示全部樓層
水平相當可以,點贊
回復

使用道具 舉報

ID:229641 發表于 2021-10-14 21:02 來自觸屏版 | 顯示全部樓層
有iic的OLED屏幕版本的嗎?
回復

使用道具 舉報

ID:588154 發表于 2021-10-24 19:29 | 顯示全部樓層
為什么我下載程序的時候一直顯示:正在檢測目標單片機啊?
回復

使用道具 舉報

ID:588154 發表于 2021-10-24 19:30 | 顯示全部樓層
為什么我給單片機燒錄程序的時候一直顯示:正在檢測目標單片機啊?
單片機型號選正確了的、RX和TX也沒接錯。
回復

使用道具 舉報

ID:229830 發表于 2021-11-10 19:09 | 顯示全部樓層
秦_瘦 發表于 2021-10-24 19:30
為什么我給單片機燒錄程序的時候一直顯示:正在檢測目標單片機啊?
單片機型號選正確了的、RX和TX也沒接錯 ...

先點下載,再上電
回復

使用道具 舉報

ID:367875 發表于 2021-11-10 22:14 | 顯示全部樓層
秦_瘦 發表于 2021-10-24 19:29
為什么我下載程序的時候一直顯示:正在檢測目標單片機啊?

單片機要重新上電
回復

使用道具 舉報

ID:230500 發表于 2021-11-26 00:17 | 顯示全部樓層
厲害, 能把51擋32用的 都是軟件高手達人,
回復

使用道具 舉報

ID:3802 發表于 2021-12-10 17:06 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:503691 發表于 2021-12-15 14:45 | 顯示全部樓層
51黑有你更精彩
回復

使用道具 舉報

ID:977861 發表于 2021-12-21 22:41 | 顯示全部樓層
主要技術參數如何?只能玩玩吧
回復

使用道具 舉報

ID:59202 發表于 2022-7-26 17:06 | 顯示全部樓層
就是個玩具,不過初學者可以學習一下
回復

使用道具 舉報

ID:1025635 發表于 2022-7-26 19:28 | 顯示全部樓層
主要技術參數(頻率范圍)等如何
回復

使用道具 舉報

ID:430492 發表于 2022-7-27 08:39 | 顯示全部樓層
這個很大程度還是讓電工們了解一下原理,實用的話還是很有限的。
回復

使用道具 舉報

ID:130135 發表于 2022-9-16 00:24 | 顯示全部樓層
歷害6666, 能把51擋32用的 都是軟件高手達人,
回復

使用道具 舉報

ID:1102669 發表于 2023-12-8 11:18 | 顯示全部樓層
電壓采樣不是很懂。
回復

使用道具 舉報

ID:390438 發表于 2023-12-16 08:13 | 顯示全部樓層
有空做一個,使用鋰電池供電,維修電源時的好助手
回復

使用道具 舉報

ID:165291 發表于 2024-2-2 10:19 | 顯示全部樓層
牛人,嗶哩嗶哩上怎么找你?
回復

使用道具 舉報

ID:95809 發表于 2024-2-3 00:30 來自觸屏版 | 顯示全部樓層
做過一個,就是屏幕太小了,看著費勁。
回復

使用道具 舉報

ID:965040 發表于 2024-4-10 22:12 | 顯示全部樓層
秦_瘦 發表于 2021-10-24 19:30
為什么我給單片機燒錄程序的時候一直顯示:正在檢測目標單片機啊?
單片機型號選正確了的、RX和TX也沒接錯 ...

單片機重新上電,上電下載程序
回復

使用道具 舉報

ID:965040 發表于 2024-4-10 23:07 | 顯示全部樓層
太牛了,大神作品
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产伊人 | 一区二区三区四区不卡视频 | 欧美日韩在线免费观看 | 欧美三级免费观看 | 国产精品综合一区二区 | 精品美女视频在线观看免费软件 | 国产成人精品久久二区二区91 | 日本男人天堂 | 久久久久亚洲精品 | 国产精品永久久久久 | 亚洲一区二区三区四区在线观看 | 一区二区av| 能看的av| 中文字幕一区二区三区不卡 | 国产午夜精品一区二区三区嫩草 | 国产探花在线精品一区二区 | 国产精品免费一区二区三区四区 | 精品国产乱码久久久久久丨区2区 | 免费的av| 欧美综合国产精品久久丁香 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 午夜午夜精品一区二区三区文 | 黄色毛片大全 | 中文字幕第一页在线 | 国产成人精品久久二区二区91 | 亚洲一区二区黄 | 国产精品毛片一区二区在线看 | 久久精品小视频 | 亚洲精品乱码久久久久久久久 | 激情欧美日韩一区二区 | 久久免费香蕉视频 | 国产真实精品久久二三区 | 视频一区二区三区中文字幕 | 最新黄色在线观看 | 日韩精品一区二区三区中文在线 | 欧美成人h版在线观看 | 欧洲成人免费视频 | 就操在线| 色综合美女| 日本午夜精品一区二区三区 | 天天艹逼网 |