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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 15522|回復(fù): 29
打印 上一主題 下一主題
收起左側(cè)

制作STC8A8K64S4A12單片機(jī)示波器 附源程序與PCB原理圖

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:102890 發(fā)表于 2020-10-17 14:13 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
OLED數(shù)字示波器 基于STC8A8K64S4A12單片機(jī) 原作者 老劉愛搗鼓   PCB板是在B站的一個(gè)大佬那下載然后改的 希望大家喜歡

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


單片機(jī)源程序如下:
  1. 簡易示波器
  2.     版本:V0.3
  3.     作者:老劉愛搗鼓
  4.     單片機(jī)型:STC8A8K64S4A12 @27MHz
  5.     老劉愛搗鼓(全網(wǎng)同名)期待您的關(guān)注!
  6.     B站教程(初版):https://www.bilibili.com/video/BV1ai4y1t79R
  7.     B站教程(V0.3):https://www.bilibili.com/video/BV1ai4y1t79R
  8.   操作說明:
  9.         主界面-選項(xiàng)設(shè)置模式:
  10.             單擊編碼器:切換開始/暫停采樣
  11.             雙擊編碼器:切換波形水平滾動(dòng)模式/選項(xiàng)設(shè)置模式
  12.             長按編碼器:進(jìn)入設(shè)置界面
  13.             旋轉(zhuǎn)編碼器:修改當(dāng)前參數(shù)
  14.             按下同時(shí)旋轉(zhuǎn)編碼器:在參數(shù)間切換
  15.             
  16.         主界面-波形水平滾動(dòng)模式:
  17.             單擊編碼器:切換開始/暫停采樣
  18.             雙擊編碼器:切換波形水平滾動(dòng)模式/選項(xiàng)設(shè)置模式
  19.             長按編碼器:進(jìn)入設(shè)置界面
  20.             旋轉(zhuǎn)編碼器:水平滾動(dòng)波形(在暫停采樣狀態(tài)下有效)
  21.             按下同時(shí)旋轉(zhuǎn)編碼器:垂直滾動(dòng)波形(僅在暫停采樣狀態(tài)下有效)
  22.             
  23.         設(shè)置界面:
  24.             單擊編碼器:無效
  25.             雙擊編碼器:無效
  26.             長按編碼器:返回主界面
  27.             旋轉(zhuǎn)編碼器:修改當(dāng)前選項(xiàng)
  28.             按下同時(shí)旋轉(zhuǎn)編碼器:切換選項(xiàng)

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

  56.     保存設(shè)置:長按編碼器退出設(shè)置界面時(shí),設(shè)置界面和主界面的所有參數(shù)被保存到EEPROM

  57.     2020-04-30更新
  58.     1. 增加單次觸發(fā)和普通觸發(fā)功能,可自定義觸發(fā)點(diǎn)用來捕捉波形變化
  59.     2. 按照規(guī)格書要求將ADC采樣端口設(shè)置為高阻輸入
  60.     2020-5-3更新
  61.     1. 增加波形頻率顯示
  62.     2. 使用編碼器水平/垂直滾動(dòng)波形
  63.     3. 使用編碼器垂直縮放波形
  64.     4. 用戶可設(shè)定觸發(fā)電平
  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        //電池電壓采樣分壓系數(shù)*100
  78. #define INT_0 0             //外部中斷0序號(hào),編碼器旋轉(zhuǎn)
  79. #define INT_1 2             //外部中斷1序號(hào),編碼器按下
  80. #define TIMER_0 1           //定時(shí)器0中斷序號(hào)

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

  105.     /* 波形滾動(dòng)模式下正在采樣則禁用外部中斷0(編碼器旋轉(zhuǎn))
  106.        Disable external interrupt 0(Encoder rotation) in waveform scroll mode when sampling*/
  107.     if (ADCRunning && WaveScroll)
  108.         EX0 = 0;

  109.     /* 獲取內(nèi)部參考電壓值
  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.         /* 更新參數(shù)
  135.            Update parameters */
  136.         if (DisplayUpdate)
  137.         {
  138.             DisplayUpdate = 0;
  139.             PlotSettings();
  140.             OLED_Display();
  141.         }
  142.     }

  143.     /* 保存設(shè)置
  144.        Save Settings */
  145.     EA = 0;
  146.     if (OptionChanged)
  147.     {
  148.         OptionChanged = 0;
  149.         ClearDisplay = 0;
  150.         /* 保存設(shè)置并顯示保存狀態(tài)
  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采樣運(yùn)行
  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同時(shí)置位時(shí),不開啟外部中斷0(編碼器旋轉(zhuǎn))
  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.                     /* 分析緩存中完成采樣的采樣數(shù)據(jù)
  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.                         /* 采樣點(diǎn)數(shù)有限,不支持橫向縮放波形,只有時(shí)間區(qū)間與完成采樣的時(shí)間區(qū)間相同才繪制波形
  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,繪制界面時(shí),頻率位置會(huì)顯示****Hz
  258.                         PlotChart();
  259.                     }
  260.                 }
  261.                 /* 只更新屏幕上的參數(shù),波形不變
  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采樣完成 - 單次觸發(fā)
  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運(yùn)行標(biāo)志,停止采樣
  286.         AnalyseData();
  287.         ClearDisplay = 1;
  288.         PlotChart();
  289.         PlotWave();
  290.         OLED_Display();
  291.         IE0 = 0;
  292.         EX0 = 1;
  293.     }

  294.     /*  ADC采樣完成 - 自動(dòng)觸發(fā)或普通觸發(fā)
  295.         ADC Sampling Complete - Auto or Normal Trigger Mode */
  296.     else
  297.     {
  298.         //EX0 = 0;
  299.         ClearDisplay = 1; //置位清空屏幕標(biāo)志
  300.         AnalyseData();    //分析采樣數(shù)據(jù)
  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設(shè)置為高阻
  313.        Set ADC port P0.4, P0.6 as high-impedance */
  314.     P0M1 |= 0x50;
  315.     P0M0 &= ~0x50;

  316.     /* 設(shè)置指示燈端口P1.1為推挽輸出
  317.        Set indicator port P1.1 as push-pull output */
  318.     P0M1 &= ~0x02;
  319.     P0M0 |= 0x02;

  320.     /* 設(shè)置編碼器端口P3.2,P3.3,P3.4為準(zhǔn)雙向
  321.        Set Encoder port P3.2, P3.3, P3.4 as quasi bidirectional */
  322.     P3M1 &= ~0x1C;
  323.     P3M0 &= ~0x1C;

  324.     /* 設(shè)置OLED端口P2.3,P2.4,P2.5,P2.6,P2.7為準(zhǔn)雙向
  325.        Set OLED port P2.3, P2.4, P2.5, P2.6 as quasi bidirectional */
  326.     P2M1 &= ~0xF8;
  327.     P2M0 &= ~0xF8;

  328.     /* 編碼器旋轉(zhuǎn)外部中斷
  329.        Interrupt for rotating of Encoder */
  330.     IT0 = 0; //外部中斷0觸發(fā)方式,上升沿和下降沿
  331.     PX0 = 1; //外部中斷0高優(yōu)先級(jí),可打斷按鍵中斷,用于判斷按下同時(shí)旋轉(zhuǎn)
  332.     EX0 = 1; //開啟外部中斷0

  333.     /* 編碼器按鍵外部中斷
  334.        Interrupt for clicking of Encoder */
  335.     IT1 = 1; //外部中斷1觸發(fā)方式,下降沿
  336.     PX1 = 0; //外部中斷1低優(yōu)先級(jí)
  337.     EX1 = 1; //開啟外部中斷1

  338.     /* 定時(shí)器0,為更新電池電壓信息計(jì)時(shí)
  339.        Timer 0, for updating voltage of battery */
  340.     AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
  341.     TMOD &= 0xF0; //設(shè)置定時(shí)器模式
  342.     TL0 = 0x46;   //設(shè)置定時(shí)初值 //27MHz,25ms
  343.     TH0 = 0x24;   //設(shè)置定時(shí)初值
  344.     TF0 = 0;      //清除TF0標(biāo)志
  345.     ET0 = 1;      //允許定時(shí)器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.         /* 進(jìn)入設(shè)置界面
  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. /* 分析編碼器旋轉(zhuǎn)
  383.    Analyse Rotation of Encoder */
  384. void Scan_EC11(void)
  385. {
  386.     /* 延時(shí)去抖動(dòng)
  387.        Delay to remove jitter */
  388.     Delay500us();

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

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

  402. /* 編碼器旋轉(zhuǎn)中斷
  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標(biāo)志位
  417.     IE0 = 0; //清零外部中斷0標(biāo)志位
  418. }

  419. /* 編碼器點(diǎn)擊中斷
  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.         /*  長按編碼器按鍵 - 切換主界面和設(shè)置界面
  428.             Long presse Encoder - Switch main interface and settings interface */
  429.         if (Delay800ms_Long_Press())
  430.         {
  431.             InSettings = ~InSettings;

  432.             /*  進(jìn)入設(shè)置界面
  433.                 Enter Settings  */
  434.             if (InSettings)
  435.             {
  436.                 DisplayUpdate = 1;
  437.                 UpdateVbat = 1;
  438.                 TF0 = 0; //清零定時(shí)器0溢出標(biāo)志
  439.                 TR0 = 1; //定時(shí)器0開始計(jì)時(shí),開始電池電壓信息更新計(jì)時(shí)
  440.                 IE0 = 0; //清零外部中斷0中斷標(biāo)志
  441.                 EX0 = 1; //開啟外部中斷0(編碼器旋轉(zhuǎn))
  442.             }

  443.             /*  回到主界面
  444.                 Retrurn to main interface   */
  445.             else
  446.             {
  447.                 TR0 = 0; //清零定時(shí)器0溢出標(biāo)志
  448.                 TF0 = 0; //定時(shí)器0停止計(jì)時(shí),停止電池電壓信息更新計(jì)時(shí)
  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.         /*  按住編碼器同時(shí)旋轉(zhuǎn)
  460.             Rotate Encoder while pressing  */
  461.         else if (EC11PressAndRotate)
  462.         {
  463.             /* 由編碼器旋轉(zhuǎn)中斷執(zhí)行操作
  464.                Operations Performed by Interrupt of Encoder Rotation */
  465.         }

  466.         /* 雙擊編碼器按鍵 - 在主界面,滾動(dòng)波形和選項(xiàng)模式之間切換
  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狀態(tài)
  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計(jì)時(shí)
  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. }
復(fù)制代碼

所有資料51hei提供下載:
老劉的示波器2.zip (6.69 MB, 下載次數(shù): 362)
MiniDSO簡易示波器_老劉愛搗鼓.zip (561.99 KB, 下載次數(shù): 299)


評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏43 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:164988 發(fā)表于 2020-10-17 21:50 | 只看該作者
非常喜歡的文章,果斷下載學(xué)習(xí)。謝謝樓主分享!
回復(fù)

使用道具 舉報(bào)

板凳
ID:53978 發(fā)表于 2020-10-18 20:41 | 只看該作者
可以寫個(gè)12864LCD的固件嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:53978 發(fā)表于 2020-10-19 16:48 | 只看該作者
這么好的東西,準(zhǔn)備仿制,也畫了一個(gè)板子,帶USB下載。

51hei截圖20201019164416.jpg (74.97 KB, 下載次數(shù): 137)

51hei截圖20201019164416.jpg
回復(fù)

使用道具 舉報(bào)

5#
ID:409674 發(fā)表于 2020-10-19 19:32 | 只看該作者
我制作后只顯示出界面,不能測(cè)量出波形,還沒有查出什么問題。
回復(fù)

使用道具 舉報(bào)

6#
ID:53978 發(fā)表于 2020-10-20 12:28 | 只看該作者
zxianyu 發(fā)表于 2020-10-19 19:32
我制作后只顯示出界面,不能測(cè)量出波形,還沒有查出什么問題。

問一下樓主什么問題
回復(fù)

使用道具 舉報(bào)

7#
ID:102890 發(fā)表于 2020-10-20 20:41 | 只看該作者
smartphone 發(fā)表于 2020-10-20 12:28
問一下樓主什么問題

看下元件有沒有虛焊的  我做的能用也能測(cè)出波形 有時(shí)間我給你看下視頻 https://www.bilibili.com/video/BV1rZ4y157Qi 這是別人仿制的 https://www.bilibili.com/video/BV1XV411k7UV這是原視頻 你看下
回復(fù)

使用道具 舉報(bào)

8#
ID:53978 發(fā)表于 2020-10-26 09:13 | 只看該作者
測(cè)試了一下非常好,就是屏太小了看不清楚。希望樓主搞搞大尺寸屏驅(qū)動(dòng)
回復(fù)

使用道具 舉報(bào)

9#
ID:536683 發(fā)表于 2020-10-26 17:33 | 只看該作者
太牛了,同類型的屏幕有大的,串行屏,就是貴多了。
回復(fù)

使用道具 舉報(bào)

10#
ID:53978 發(fā)表于 2020-10-26 19:16 | 只看該作者
spi3.5寸彩屏40~50
回復(fù)

使用道具 舉報(bào)

11#
ID:136337 發(fā)表于 2020-10-29 16:47 | 只看該作者
用IIC的屏需要修改哪些地方,手中有IIC的屏
回復(fù)

使用道具 舉報(bào)

12#
ID:840797 發(fā)表于 2020-11-10 16:04 | 只看該作者
對(duì)于一個(gè)初學(xué)者來講,這就是神一般的存在。
回復(fù)

使用道具 舉報(bào)

13#
ID:106977 發(fā)表于 2020-11-11 13:13 | 只看該作者
4寸,8/16位接口,800×480分辨率,60元、τ 寶上有。
回復(fù)

使用道具 舉報(bào)

14#
ID:243748 發(fā)表于 2021-1-2 15:07 來自手機(jī) | 只看該作者
有時(shí)間整一個(gè)玩下
回復(fù)

使用道具 舉報(bào)

15#
ID:243748 發(fā)表于 2021-1-3 22:40 來自手機(jī) | 只看該作者
今天做好了,就是屏太小,看不清楚,
回復(fù)

使用道具 舉報(bào)

16#
ID:872598 發(fā)表于 2021-1-12 15:15 | 只看該作者
建議改大屏發(fā)出來,供大伙參考才是最實(shí)際。
回復(fù)

使用道具 舉報(bào)

17#
ID:128989 發(fā)表于 2021-1-30 02:12 | 只看該作者
指標(biāo)沒差了,測(cè)不到什么東西的
回復(fù)

使用道具 舉報(bào)

18#
ID:239055 發(fā)表于 2021-6-12 08:47 來自手機(jī) | 只看該作者
我看硬件好簡單,就一個(gè)分壓電路,然后怎么形成的波形?有時(shí)間我也弄一個(gè),這樣就不用買了,不過最近單片機(jī)貴好多
回復(fù)

使用道具 舉報(bào)

19#
ID:190298 發(fā)表于 2021-6-12 23:06 | 只看該作者
原來做個(gè)一個(gè),電池電壓 和示波器電壓都比正常高幾倍,不知道怎么回事,示波器隨便一點(diǎn)信號(hào)基本就滿格30V的位置了,什么原因。
回復(fù)

使用道具 舉報(bào)

20#
ID:315554 發(fā)表于 2021-6-22 17:02 | 只看該作者
謝謝分享,有直插款的,焊接易一點(diǎn),晚點(diǎn)找單片機(jī)來試試
回復(fù)

使用道具 舉報(bào)

21#
ID:942056 發(fā)表于 2021-7-2 13:50 來自手機(jī) | 只看該作者
什么時(shí)候?qū)憘(gè)并口屏的
回復(fù)

使用道具 舉報(bào)

22#
ID:507641 發(fā)表于 2021-7-29 01:07 | 只看該作者
先標(biāo)記,等幣夠下來看看學(xué)習(xí)。oled是性價(jià)高
回復(fù)

使用道具 舉報(bào)

23#
ID:914438 發(fā)表于 2021-8-1 13:59 | 只看該作者
謝謝分享,有直插款的,焊接易一點(diǎn),晚點(diǎn)找單片機(jī)來做一個(gè)
回復(fù)

使用道具 舉報(bào)

24#
ID:909736 發(fā)表于 2022-2-11 15:39 來自手機(jī) | 只看該作者
下載裝了一個(gè),直接打開bin文件和hex文件寫入單片機(jī)的,弄完后不顯示,屏是7針oled12864屏,4spi的,知道是什么問題嗎
回復(fù)

使用道具 舉報(bào)

25#
ID:424501 發(fā)表于 2022-2-15 16:06 | 只看該作者
看好OLD的片選端是否接地。
回復(fù)

使用道具 舉報(bào)

26#
ID:983641 發(fā)表于 2022-2-18 12:40 | 只看該作者
是老劉的開源項(xiàng)目?
回復(fù)

使用道具 舉報(bào)

27#
ID:942805 發(fā)表于 2022-3-24 09:39 | 只看該作者
AD圖打不開啊
回復(fù)

使用道具 舉報(bào)

28#
ID:1025950 發(fā)表于 2022-5-12 14:01 | 只看該作者
acben 發(fā)表于 2022-2-11 15:39
下載裝了一個(gè),直接打開bin文件和hex文件寫入單片機(jī)的,弄完后不顯示,屏是7針oled12864屏,4spi的,知道是 ...

你做成功沒?我做成了,有問題可以一起討論
回復(fù)

使用道具 舉報(bào)

29#
ID:1032098 發(fā)表于 2022-6-4 13:00 | 只看該作者
這編能轉(zhuǎn)換成16進(jìn)制的嗎
回復(fù)

使用道具 舉報(bào)

30#
ID:1032098 發(fā)表于 2022-6-4 13:18 | 只看該作者
電池電壓顯示范圍和探針電壓顯示范圍在程序哪里
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美日韩国产 | 国产一卡二卡三卡 | 看av片网站| 国产一区二区不卡 | 亚洲色图综合 | 国产精品国产三级国产播12软件 | 欧美一区二区三区久久精品 | 国产精品一区二区三级 | 欧美一区2区三区3区公司 | 国产精品久久久久久吹潮 | 欧美成人精品一区二区男人看 | 亚洲狠狠爱一区二区三区 | 99re6在线视频 | 日韩欧美不卡 | 97国产精品视频 | 亚洲区一区二区 | 久久精品免费一区二区三 | 亚洲aⅴ | 日韩在线观看网站 | 国产视频福利一区 | 在线一级片 | 黄色日本片 | 欧美亚洲日本 | 国产精品美女www爽爽爽 | 国产精品国产三级国产aⅴ中文 | 视频一区在线观看 | 91一区 | 免费观看成人性生生活片 | 99国内精品| 亚洲激情综合 | 亚洲国产精品视频一区 | 亚洲欧洲日韩精品 中文字幕 | 美国一级黄色片 | 日本不卡一区二区三区 | 中文字幕国产精品 | 中文字幕高清 | www久| 成人av片在线观看 | 亚洲精品视频免费 | 一区二区三区四区视频 | 新91视频网|