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

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

QQ登錄

只需一步,快速開(kāi)始

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

無(wú)線幅頻儀制作(WiFi通信)-含STM32源程序,JAVA上位機(jī)與設(shè)計(jì)報(bào)告-國(guó)賽福利

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:189601 發(fā)表于 2017-10-23 13:04 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
國(guó)賽福利四川省一等獎(jiǎng)作品-2017-8
含完整的設(shè)計(jì)文檔,上位機(jī)(JAVA)和下位機(jī)(stm32),程序代碼,用WiFi通信


2017年全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽試題設(shè)計(jì)文檔

遠(yuǎn)程幅頻特性測(cè)試裝置(H題)

【本科組】

摘要:本裝置測(cè)量放大器的幅頻特性,并將數(shù)據(jù)繪成直觀的圖線。系統(tǒng)以32位高性能單片機(jī)STM32F103為主控制器,由數(shù)字式頻率合成器AD9854產(chǎn)生所需信號(hào),通過(guò)鍵盤與OLED顯示屏直觀控制掃頻、點(diǎn)頻等模式與頻率、幅值等參數(shù),產(chǎn)生一路穩(wěn)定幅值的正弦掃頻信號(hào)。信號(hào)通過(guò)自制的0~40dB可調(diào)增益放大器,經(jīng)均值響應(yīng)功率檢波器AD8361檢波后得到直流信號(hào),即放大器輸出信號(hào)的幅值信息;再經(jīng)單片機(jī)內(nèi)部模/數(shù)轉(zhuǎn)換器采樣,處理計(jì)算后,將幅值、頻率信息發(fā)送至Wi-Fi模塊ESP-32,使得局域網(wǎng)內(nèi)的設(shè)備可以獲取幅頻特性數(shù)據(jù)。作品另配有計(jì)算機(jī)應(yīng)用程序和安卓APP,可以方便地顯示幅頻特性曲線,從而實(shí)現(xiàn)放大器的遠(yuǎn)程幅頻特性測(cè)試。

一 系統(tǒng)方案
1.1 比較與選擇
本系統(tǒng)主要由控制器、信號(hào)源模塊、放大器模塊、鍵盤顯示模塊、網(wǎng)絡(luò)模塊、電源模塊組成,下面分別論證這幾個(gè)模塊的選擇。
1.1.1 控制器的論證與選擇
方案一:采用51單片機(jī)控制。51系列單片機(jī)是廉價(jià)、易得的微控制器,但由于其采用集中指令結(jié)構(gòu),運(yùn)行速度不夠可觀。在執(zhí)行大型程序時(shí),51單片機(jī)容易顯現(xiàn)出功耗大、不穩(wěn)定的缺點(diǎn)。
方案二:采用FPGA控制。FPGA即現(xiàn)場(chǎng)可編程門陣列,是作為專用集成電路領(lǐng)域中的一種半定制電路而出現(xiàn)的,解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。FPGA一般來(lái)說(shuō)功耗較低。但在開(kāi)發(fā)過(guò)程中往往需要快速增減一些簡(jiǎn)單功能,如串口通信等,而此類功能有可能占用過(guò)多的邏輯門資源,因此采用FPGA開(kāi)發(fā)整個(gè)系統(tǒng)則較為不便。
方案三:采用STM32單片機(jī)控制。STM32系列單片機(jī)具有開(kāi)發(fā)方便、I/O口數(shù)量多等特點(diǎn)。ARM內(nèi)核使得其運(yùn)行速度明顯優(yōu)于51系列單片機(jī)。STM32F103屬于增強(qiáng)型系列,是同類產(chǎn)品中性能最高的產(chǎn)品。
綜合以上兩種方案與實(shí)際情況,選擇方案三。
1.1.2 信號(hào)源的論證與選擇
方案一:采用分立元件和中小規(guī)模集成電路構(gòu)成波形發(fā)生器采用RC串并聯(lián)振蕩器生成正弦信號(hào)。該方案的優(yōu)點(diǎn):技術(shù)成熟,可供參考的資料較多。缺點(diǎn):外圍元器件多,調(diào)試工作量較大,頻率穩(wěn)定度和準(zhǔn)確度差,很難滿足頻率變化的范圍要求,更難準(zhǔn)確地實(shí)現(xiàn)頻率步進(jìn)的要求。
方案二:利用專用直接數(shù)字合成DDS芯片AD9851實(shí)現(xiàn)波形發(fā)生器。AD9851可以產(chǎn)生一個(gè)穩(wěn)定的頻率和相位且可數(shù)字化編程的模擬正弦波輸出。但是該芯片理論上可達(dá)到70MHz,其實(shí)在實(shí)際應(yīng)用中,當(dāng)頻率達(dá)到30MHz時(shí),波形就失真了,而且外圍電路較為復(fù)雜,需耗費(fèi)大量時(shí)間。
方案三:采用AD9854芯片構(gòu)成信號(hào)源。AD9854芯片可產(chǎn)生一高穩(wěn)定的頻率、相位、幅度可編程的正弦和余弦信號(hào),允許輸出的信號(hào)頻率高達(dá)150MHz,而數(shù)字調(diào)制輸出頻率可達(dá)100MHz,滿足項(xiàng)目40M的要求。
綜合以上三種方案,選擇方案三。
1.1.3 放大器模塊的論證與選擇
方案一:選用兩級(jí)電壓反饋運(yùn)算放大器OPA847放大,再由數(shù)字衰減器PE4302衰減。OPA847是寬帶超低噪聲電壓反饋運(yùn)算放大器,常被用于前級(jí)放大,且?guī)捒筛哌_(dá)3.9GHz,噪聲極小。數(shù)字衰減器可以實(shí)現(xiàn)對(duì)DC~4.0GHz信號(hào)產(chǎn)生最大31.5dB的衰減,步進(jìn)為0.5dB,但不可以實(shí)現(xiàn)系統(tǒng)增益連續(xù)可變。
方案二:選擇運(yùn)放AD8009。通過(guò)調(diào)AD8009 R1和Rf,實(shí)驗(yàn)發(fā)現(xiàn)可以實(shí)現(xiàn)單片運(yùn)放0~40dB的要求,但是不能滿足項(xiàng)目輸入阻抗600Ω的要求。
方案三:選擇壓控正益放大器VCA824級(jí)聯(lián),外加AD690調(diào)節(jié)輸入阻抗,滿足項(xiàng)目要求。
綜合以上三種方案,選擇方案三。
1.1.4 鍵盤與顯示模塊的論證與選擇
(1)鍵盤:
方案一:獨(dú)立鍵盤。控制簡(jiǎn)單,但是占用單片機(jī)IO口資源太多。
方案二:矩陣鍵盤。控制較為復(fù)雜,但是占用單片機(jī)IO口資源少。
方案三:周立功鍵盤。控制較為復(fù)雜,操作點(diǎn)單,但功能強(qiáng)大。
(2)顯示器:
方案一:TFT。功能強(qiáng)大,但是用于控制DDS顯得過(guò)于復(fù)雜。
方案二:OLED。IIC通信方式,占用單片機(jī)IO口資源少,滿足需求。
方案三:12864。操作簡(jiǎn)單,但占用單片機(jī)IO口資源多而且費(fèi)電。
綜合以上幾種方案,選擇周立功鍵盤和OLED。
1.1.5 網(wǎng)絡(luò)通信模塊的論證與選擇
方案一:使用ESP-8266作為TCP客戶端,與主機(jī)建立一對(duì)一通信。ESP-8266常被用作單片機(jī)WiFi模塊使用,可以通過(guò)串口傳輸AT指令加以控制。
方案二:使用ESP-32建立TCP服務(wù)端,供局域網(wǎng)內(nèi)其他設(shè)備訪問(wèn)。ESP-32是上海樂(lè)鑫公司出品的性能更強(qiáng)的物聯(lián)網(wǎng)模塊,同時(shí)也可以單獨(dú)作為單片機(jī)使用。另外,設(shè)立TCP服務(wù)端,也使得讓電腦客戶端軟件和手機(jī)APP同時(shí)訪問(wèn)成為可能。
綜合以上兩種方案,選擇方案二。

1.2 方案描述
根據(jù)上文得出方案:系統(tǒng)以STM32為主控板,以ZLG鍵盤和OLED屏為交互方式,控制DDS AD9854進(jìn)行掃頻,經(jīng)過(guò)自制的放大器,由均值檢波器AD8361讀出幅值信息。幅頻特性數(shù)據(jù)通過(guò)ESP-32實(shí)現(xiàn)串口透?jìng)鳎商貏e編寫的計(jì)算機(jī)程序和安卓APP接收和繪制。

二 理論分析與計(jì)算2.1 信號(hào)發(fā)生器的電路設(shè)計(jì)

經(jīng)討論后,我們決定采用DDS AD9854。我們按照官方提供的電路,完成了如下設(shè)計(jì)。
圖1 正交掃頻信號(hào)源子系統(tǒng)電路原理圖(大圖見(jiàn)附錄)
2.2 放大器設(shè)計(jì)

為了達(dá)到放大性能、帶寬、輸入阻抗和帶載能力的要求,我們以O(shè)PA690跟隨器為第一級(jí),設(shè)定輸入阻抗600Ω,繼而用兩級(jí)VCA824達(dá)到信號(hào)0~40dB放大的要求。經(jīng)測(cè)試,20MHz下,該系統(tǒng)可完成0~44.6dB連續(xù)可調(diào)的要求。
圖2 放大器系統(tǒng)電路原理圖(大圖見(jiàn)附錄)
2.3 頻率特性測(cè)試儀器
由于示波器有X Y輸入模式,由單片機(jī)DA產(chǎn)生的電壓信息直接輸入通道CH1、CH2,當(dāng)掃描足夠快時(shí),由于視覺(jué)暫留現(xiàn)象,屏幕上便會(huì)留下幅頻特性曲線。
三 電路與程序設(shè)計(jì)

3.1 電路設(shè)計(jì)
圖4系統(tǒng)電路原理圖

3.2 程序設(shè)計(jì)
這里主要對(duì)兩個(gè)設(shè)備進(jìn)行了編程:STM32和ESP-32。STM32使用μVision官方SDK,ESP-32使用新興的嵌入式綜合開(kāi)發(fā)平臺(tái)PlatformIO設(shè)計(jì),也可以在ArduinoIDE內(nèi)進(jìn)行開(kāi)發(fā)。程序詳見(jiàn)附錄2。
計(jì)算機(jī)客戶端采用Java編寫,手機(jī)端APP使用AndroidSDK進(jìn)行設(shè)計(jì)。

5 計(jì)算機(jī)客戶端效果

圖6 安卓客戶端效果


四 測(cè)試方案與測(cè)試結(jié)果
4.1 測(cè)試方案及測(cè)試條件
在未帶放大器網(wǎng)絡(luò)的條件下,采用DDS掃頻,獲得如下數(shù)據(jù):
0,0.476953
1,0.510791
2,0.567187
3,0.678369
4,0.838696
5,0.982910
6,1.115845
7,1.256836
8,1.376074
9,1.508203
10,1.605688
11,1.710425
12,1.741846
13,1.865918
14,1.915869
15,1.962598
16,2.002881
17,2.026245
18,2.062500
19,2.076196
20,2.077808
21,2.106812
22,2.145483
23,2.148706
24,2.154346
25,2.157568
26,2.153540
27,2.156763
28,2.155151
29,2.149512
30,2.132593
31,2.130176
32,2.127759
33,2.129370
34,2.124536
35,2.059277
36,2.039136
37,2.035913
38,2.041553
39,2.021411
40,2.030273
41,2.031079
42,2.027856
43,2.037524
44,2.047998
45,2.046387
46,2.047192
47,2.060083
48,2.080225
49,2.104394
50,2.066528
4.2 測(cè)試結(jié)果完整性
              由于篇幅限制,省略了放大器的數(shù)據(jù)。在之后的測(cè)量中,獲得了放大器的幅頻特性曲線,并在 RIGOL示波器DS1054上正確顯示:

圖6
4.3 測(cè)試結(jié)果分析
測(cè)試初步確定了方案總體正確,甚至使幅頻曲線的部分細(xì)節(jié)得到了正確顯示。但由于示波器DS1054刷新頻率較慢,因此效果仍未達(dá)到最佳狀態(tài)。
附錄1:電路原理圖


圖1   正交掃頻信號(hào)源子系統(tǒng)電路原理圖
圖2 放大器系統(tǒng)電路原理圖

附錄1:部分代碼ESP-32主程序代碼
  1. //2017-08-10
  2. //該程序用于ESP-32建立TCP Server并實(shí)現(xiàn)串口透?jìng)?br />
  3. //修改自ESP-32庫(kù)的Example>WiFi>WiFiTelnetToSerial
  4. //WiFiTelnetToSerial - Example Transparent UART to Telnet Server for ESP32
  5. #include <WiFi.h>
  6. #include <WiFiMulti.h>

  7. WiFiMulti wifiMulti;

  8. //how many clients should be able to telnet to this ESP32
  9. #define MAX_SRV_CLIENTS 3//此處設(shè)置WiFi最大連接數(shù)(請(qǐng)至少允許2個(gè)設(shè)備連接,保證電腦端和安卓端同時(shí)正常運(yùn)行)
  10. const char* ssid = "NUEDC2017-H";//SSID
  11. const char* password = "nuedc2017-h";//密碼

  12. WiFiServer server(2323);//設(shè)備端口(TCP Server服務(wù)器與端口:192.168.0.3:2323)
  13. WiFiClient serverClients[MAX_SRV_CLIENTS];
  14. //此處開(kāi)啟了G16、G17作為串口,此應(yīng)用下可不理會(huì)
  15. HardwareSerial Serial1(2);  // UART1/Serial1 pins 16,17

  16. void setup() {
  17.   Serial.begin(9600);//此處應(yīng)與上位機(jī)波特率一致
  18.   Serial.println("\nConnecting");

  19.   wifiMulti.addAP(ssid, password);
  20.   //wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
  21.   //wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");

  22.   Serial.println("Connecting Wifi ");
  23.   for (int loops = 10; loops > 0; loops--) {
  24.     if (wifiMulti.run() == WL_CONNECTED) {
  25.       Serial.println("");
  26.       Serial.print("WiFi connected ");
  27.       Serial.print("IP address: ");
  28.       Serial.println(WiFi.localIP());
  29.       break;
  30.     }
  31.     else {
  32.       Serial.println(loops);
  33.       delay(1000);
  34.     }
  35.   }
  36.   if (wifiMulti.run() != WL_CONNECTED) {
  37.     Serial.println("WiFi connect failed");
  38.     delay(1000);
  39.     ESP.restart();
  40.   }

  41.   //start UART and the server
  42.   Serial1.begin(9600);
  43.   server.begin();
  44.   server.setNoDelay(true);

  45.   Serial.print("Ready! Use Telnet ");
  46.   Serial.print(WiFi.localIP());
  47.   Serial.println(":2323 to connect");
  48. }

  49. void loop() {
  50.   uint8_t i;
  51.   if (wifiMulti.run() == WL_CONNECTED) {
  52.     //check if there are any new clients
  53.     if (server.hasClient()){
  54.       for(i = 0; i < MAX_SRV_CLIENTS; i++){
  55.         //find free/disconnected spot
  56.         if (!serverClients[i] || !serverClients[i].connected()){
  57.           if(serverClients[i]) serverClients[i].stop();
  58.           serverClients[i] = server.available();
  59.           if (!serverClients[i]) Serial.println("available broken");//?
  60.           Serial.print("New client: ");
  61.           Serial.print(i); Serial.print(' ');
  62.           Serial.println(serverClients[i].remoteIP());
  63.           break;
  64.         }
  65.       }
  66.       if (i >= MAX_SRV_CLIENTS) {
  67.         //no free/disconnected spot so reject
  68.         server.available().stop();
  69.       }
  70.     }
  71.     //check clients for data
  72.     for(i = 0; i < MAX_SRV_CLIENTS; i++){
  73.       if (serverClients[i] && serverClients[i].connected()){
  74.         if(serverClients[i].available()){
  75.           //get data from the telnet client and push it to the UART
  76.           while(serverClients[i].available()) Serial1.write(serverClients[i].read());
  77.         }
  78.       }
  79.       else {
  80.         if (serverClients[i]) {
  81.           serverClients[i].stop();
  82.         }
  83.       }
  84.     }
  85.     //check UART for data
  86.     if(Serial.available()){
  87.       size_t len = Serial.available();
  88.       uint8_t sbuf[len];
  89.       Serial.readBytes(sbuf, len);
  90.       //push UART data to all connected telnet clients
  91.       for(i = 0; i < MAX_SRV_CLIENTS; i++){
  92.         if (serverClients[i] && serverClients[i].connected()){
  93.           serverClients[i].write(sbuf, len);
  94.           delay(1);
  95.         }
  96.       }
  97.     }
  98.   }
  99.   else {
  100.     Serial.println("WiFi not connected!");
  101.     for(i = 0; i < MAX_SRV_CLIENTS; i++) {
  102.       if (serverClients[i]) serverClients[i].stop();
  103.     }
  104.     delay(1000);
  105.   }
  106. }
復(fù)制代碼

stm32單片機(jī)下位機(jī)源程序如下:

  1. #include "stm32f10x.h"
  2. #include "LED_TEST_VET6.H"
  3. #include "delay.h"
  4. #include "dac.h"
  5. #include "math.h"
  6. #include "adc.h"
  7. #include "usart.h"
  8. #include "AD9854.h"
  9. #include "zlg7290.h"
  10. #include "exti.h"
  11. #include "oled.h"

  12. #define Vppin_up 409
  13. #define Vppin_low 1
  14. #define sweep_step_up 2000
  15. #define sweep_step_low 10
  16. int Vppin100mv[50]={98,98,99,101,100,101,102,103,104,105,
  17.                                         106,107,105,108,108,108,109,109,110,110,
  18.                                         110,111,113,113,113,113,113,113,113,113,
  19.                                         112,111,109,108,107,105,104,103,102,101,
  20.                                         101,101,101,101,101,101,101,104,105,107};

  21. float Vpp_num[50];
  22. char Mode=4;
  23. //PB5 INT ;PB7 SDA; PB6 SCL
  24. float Mhz=1.0;
  25. float Vpp=0;
  26. int Vppin=5;//5~100mv
  27. int sweep_step=1000;//Khz
  28. float sweep_start=1;
  29. float sweep_end=50;
  30.                                        
  31. void sweep(void);
  32. void Test_key(void);
  33. void num_goback(void);
  34. float GetVpp(void);
  35. float GetVpp1(void);
  36. void sweep3(void);
  37. void sweep_100mv(void);
  38. void sweep3_100mv(void);
  39. int main(void)
  40. {               

  41.          
  42.         LED_Init();//初始化
  43.         delay_init();

  44.         OLED_Init();                        //初始化OLED  
  45.         OLED_Clear();  
  46.         Dac1_Init();//DAC通道1初始化        
  47.         Dac2_Init();//DAC通道2初始化        

  48.         EXTIX_Init();
  49.         uart_init(9600);
  50.         AD9854_Init();
  51. //        AD9854_SetSine_double(27000000,1844);
  52.         Adc_Init();
  53.         ZLG7290_Init();
  54.         while(1)
  55.         {
  56.                 if(Mode==1)
  57.         AD9854_SetSine_double(Mhz*1000000,Vppin*10);
  58.                 if(Mode==2)
  59.                         sweep();
  60.                 if(Mode==3)
  61.                         sweep3_100mv();
  62.                 if(Mode==4)
  63.                         sweep_100mv();
  64.         }
  65. }
  66. float GetVpp()//PA1
  67. {        u16 adcx;
  68.         float temp;
  69.         adcx=Get_Adc_Average(ADC_Channel_1,10);
  70.         temp=(float)adcx*(3.3/4096);
  71. return temp;
  72. }        
  73. float GetVpp1()//PA0
  74. {        u16 adcx;
  75.         float temp;
  76.         adcx=Get_Adc_Average(ADC_Channel_0,10);
  77.         temp=(float)adcx*(3.3/4096);
  78. return temp;
  79. }

  80. void sweep()
  81. {
  82. for(Mhz=sweep_start;Mhz<sweep_end;Mhz=sweep_step/1000.0+Mhz)
  83.         {
  84.         AD9854_SetSine_double(Mhz*1000000.0,Vppin*10);
  85.                 delay_ms(10);
  86.         }
  87. for(Mhz=sweep_end;Mhz>sweep_start;Mhz=-sweep_step/1000.0+Mhz)        
  88.         {
  89.         AD9854_SetSine_double(Mhz*1000000.0,Vppin*10);
  90.                 delay_ms(10);
  91.         }
  92. }
  93. void sweep_100mv()
  94. {
  95.         char i=0;
  96.         {
  97.         for(i=1;i<=50;i++)
  98.         {AD9854_SetSine_double(i*1000000.0,Vppin100mv[i-1]*10);
  99.         Vpp=GetVpp();
  100.         printf("A%d,%f\r\n",i,Vpp);
  101.         printf("A%f,%f\r\n",i+0.5,Vpp);        
  102.         OLED_ShowNum(48,4,Vpp,4,16);
  103.         OLED_ShowNum(48,2,i,4,16);
  104.         }
  105.         for(i=50;i>1;i--)
  106.         {AD9854_SetSine_double(i*1000000.0,Vppin100mv[i-1]*10);
  107.         Vpp=GetVpp();
  108.         printf("A%d,%f\r\n",i,Vpp);
  109.         printf("A%f,%f\r\n",i+0.5,Vpp);        
  110.         OLED_ShowNum(48,4,Vpp,4,16);
  111.         OLED_ShowNum(48,2,i,4,16);
  112.         }
  113.         }
  114. }
  115. void sweep3_100mv()
  116. {
  117.         u8 i;
  118.         u8 j;
  119.         {
  120.         for(i=1;i<=50;i++)
  121.         {AD9854_SetSine_double(i*1000000.0,Vppin100mv[i-1]*10);
  122.         Vpp=GetVpp();
  123.         Vpp_num[i-1]=Vpp;
  124.         OLED_ShowNum(48,4,Vpp,4,16);
  125.         OLED_ShowNum(48,2,i,4,16);
  126.         }
  127.         
  128. for(j=0;j<200;j++)
  129. {
  130.         for(i=1;i<50;i++)
  131.         {
  132.         Dac1_Set_Vol(i*66);//PA4
  133.         Dac2_Set_Vol((Vpp_num[i-1]-0.5)*1650);//PA5
  134.         delay_us(100);
  135.         }
  136. }
  137.         
  138. //        for(i=50;i>1;i--)
  139. //        {AD9854_SetSine_double(i*1000000.0,Vppin100mv[i-1]*10);
  140. //        Vpp=GetVpp();
  141. //        Vpp_num[i-1]=Vpp;

  142. //        }
  143. //        for(i=50;i>1;i--)
  144. //        {
  145. //        Dac1_Set_Vol(i*66);//PA4
  146. //        Dac2_Set_Vol((Vpp_num[i-1]-0.5)*1650);//PA5
  147. //        delay_us(100);
  148. //        }
  149.         }
  150. }
  151. void Test_key()
  152. {
  153. u8 KeyValue=0;
  154. u8 RepeatCnt=0;
  155. u8 FnKeyValue=0;
  156.         ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);
  157.         ZLG7290_ReadReg(ZLG7290_RepeatCnt,&RepeatCnt);
  158.         ZLG7290_ReadReg(ZLG7290_FunctionKey,&FnKeyValue);
  159. {                        AD9854_Init();
  160. printf("%d\r\n",KeyValue);
  161. if(Mode==1)//點(diǎn)頻
  162. {
  163.         switch (KeyValue)
  164.         {
  165.         case 4:
  166.                 Mhz++;
  167.                 break;
  168.         case 3:        
  169.                 Mhz--;
  170.                 break;
  171.         case 2:
  172.                 Vppin+=1;
  173.         break;
  174.         case 1:
  175.                 Vppin-=1;
  176.         break;
  177.         
  178.         case 20:
  179.                 Mhz+=10;
  180.         break;
  181.         case 19:
  182.                 Mhz-=10;
  183.         break;
  184.         case 18:
  185.                 Vppin+=10;
  186.         break;
  187.         case 17:
  188.                 Vppin-=10;
  189.         break;
  190.         }

  191.         num_goback();
  192.         OLED_ShowNum(48,2,Mhz,4,16);
  193.         OLED_ShowNum(48,4,Vppin,4,16);
  194. }

  195. if(Mode==2)
  196. {
  197.         if(FnKeyValue==255)
  198.         {
  199.                 switch (KeyValue)
  200.                 {
  201.                 case 4:
  202.                         sweep_step+=10;;
  203.                         break;
  204.                 case 3:        
  205.                         sweep_step-=10;
  206.                         break;
  207.                 case 2:
  208.                         Vppin+=1;
  209.                 break;
  210.                 case 1:
  211.                         Vppin-=1;
  212.                 break;
  213.                 case 20:
  214.                         sweep_step+=100;
  215.                 break;
  216.                 case 19:
  217.                         sweep_step-=100;
  218.                 break;
  219.                 case 18:
  220.                         Vppin+=10;
  221.                 break;
  222.                 case 17:
  223.                         Vppin-=10;
  224.                 break;
  225.                 }
  226.         num_goback();
  227.         OLED_ShowNum(48,2,sweep_step,4,16);
  228.         OLED_ShowNum(48,4,Vppin,4,16);
  229.         }
  230.         if(FnKeyValue==254)//調(diào)范圍
  231.         {        switch (KeyValue)
  232.                 {
  233.                 case 4:
  234.                         sweep_start+=1;
  235.                         break;
  236.                 case 3:        
  237.                         sweep_start-=1;
  238.                         break;
  239.                 case 2:
  240.                         sweep_end+=1;
  241.                 break;
  242.                 case 1:
  243.                         sweep_end-=1;
  244.                 break;
  245.                 case 20:
  246.                         sweep_start+=10;
  247.                 break;
  248.                 case 19:
  249.                         sweep_start-=10;
  250.                 break;
  251.                 case 18:
  252.                         sweep_end+=10;
  253.                 break;
  254.                 case 17:
  255.                         sweep_end-=10;
  256.                 break;
  257.                
  258.                 }        
  259.                 num_goback();
  260.                 OLED_ShowNum(48,6,sweep_start,2,16);        
  261.                 OLED_ShowNum(72,6,sweep_end,2,16);        
  262.         }
  263. }
  264. if(KeyValue>=9&&KeyValue<=12)
  265. {
  266. OLED_Clear();
  267. switch (KeyValue)
  268. {        
  269.         case 12:
  270.                 Mode=1;
  271.                 showCinese_byrow(0,0,0,"45860");
  272.                 showCinese_byrow(0,1,0,"018");
  273.                 showCinese_byrow(0,2,0,"238");
  274.                 OLED_ShowNum(48,2,Mhz,4,16);
  275.                 OLED_ShowNum(48,4,Vppin,4,16);
  276.                 OLED_ShowString(96,2,"Mhz",16);
  277.                 OLED_ShowString(96,4,"mV",16);

  278. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………

復(fù)制代碼



全部資料下載(含完整的源碼與word格式的文檔):
無(wú)線幅頻儀設(shè)計(jì)資料.7z (4.46 MB, 下載次數(shù): 130) 求評(píng)分鼓勵(lì)O(∩_∩)O


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:229137 發(fā)表于 2017-11-7 14:55 | 只看該作者
正好準(zhǔn)備用AD9854
回復(fù)

使用道具 舉報(bào)

板凳
ID:124548 發(fā)表于 2018-5-22 20:40 | 只看該作者
謝謝分享!
回復(fù)

使用道具 舉報(bào)

地板
ID:68875 發(fā)表于 2018-6-24 19:31 | 只看該作者

謝謝分享
回復(fù)

使用道具 舉報(bào)

5#
ID:134415 發(fā)表于 2018-9-13 10:16 | 只看該作者
很好的資料,剛好電賽可以用到,謝謝分享!
回復(fù)

使用道具 舉報(bào)

6#
ID:258360 發(fā)表于 2018-9-27 11:20 | 只看該作者
樓主,請(qǐng)問(wèn)你的VCA824電路是怎么接的?單電源好像手冊(cè)都沒(méi)有參考電路
回復(fù)

使用道具 舉報(bào)

7#
ID:481555 發(fā)表于 2019-3-1 23:52 | 只看該作者
17年大二,因?yàn)橛惺聸](méi)參加這次比賽
回復(fù)

使用道具 舉報(bào)

8#
ID:499266 發(fā)表于 2019-7-20 21:35 | 只看該作者
謝謝樓主分享。樓主很棒
回復(fù)

使用道具 舉報(bào)

9#
ID:486544 發(fā)表于 2019-7-25 20:22 | 只看該作者
上位機(jī)源代碼有嗎 學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

10#
ID:282095 發(fā)表于 2019-7-26 01:01 | 只看該作者
感謝分享 太棒了
回復(fù)

使用道具 舉報(bào)

11#
ID:189601 發(fā)表于 2019-8-3 18:49 | 只看該作者
王修宇 發(fā)表于 2019-7-25 20:22
上位機(jī)源代碼有嗎 學(xué)習(xí)一下

參考http://www.zg4o1577.cn/bbs/dpj-96630-1.html
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩国产一区二区三区 | 四虎影院在线播放 | 国产中文字幕网 | 亚洲成人在线免费 | 97国产精品 | 免费看爱爱视频 | 视频第一区| 日韩中文字幕区 | 久久久久久久久久久蜜桃 | 99久久免费精品视频 | 一区二区三区电影在线观看 | 亚洲视频在线免费观看 | 日本精品一区二区三区在线观看视频 | 337p日韩| 天堂网中文字幕在线观看 | 午夜视频在线 | 九九综合九九 | 色综合久久久 | 97精品一区二区 | 国产精品免费一区二区 | 亚洲一区二区三区视频 | 韩国av影院| 国产成人精品区一区二区不卡 | 日韩网站在线观看 | 毛片在线免费 | 精品欧美一区二区三区久久久 | 日韩中文字幕一区二区 | 天天干天天爱天天操 | 精品国产成人 | 免费视频久久 | 蜜桃视频成人 | 成人免费观看视频 | 中文字幕av网站 | 久久国产激情视频 | 国产精品中文字幕在线 | 亚洲 自拍 另类 欧美 丝袜 | 国产激情视频 | 国产中的精品av涩差av | 91日b| 综合婷婷 | 毛片av免费看 |