導航:首頁 > 操作系統 > 單片機課程設計波形發生器

單片機課程設計波形發生器

發布時間:2022-12-30 06:24:03

單片機波形發生器模擬圖怎麼調節

使用方法按下向上鍵切換波形。按下回車鍵進入頻率設置,輸入數字再按回車後保存,如果不想保存按下ESC鍵退出設置。起始時可能需要調整示波器才能正常顯示波形。頻率可調方波發生器設計,有圖,有代碼,protues模擬,易於實現。
利用數模轉換器PCF8591實現簡易波形發生器(可以輸出正弦波、方波、三角波和鋸齒波。可以通過按鍵選擇波形和頻率。事先用MATLAB生成波形數據,點數越多,波形越逼真)。
PCF8951是一個單電源低功耗的8位CMOS數據採集器件,具有4路模擬輸入,1路模擬輸出,一個串列I2C匯流排介面用來與單片機通信。三個引腳A0,A1,A2,用於編程硬體地址,允許最多8個器件連接到I2C而不需要額外的電路。器件的地址,控制以及數據都是通過I2C匯流排來傳輸。其中引腳1,2,3,4是4路模擬輸入,引腳5,6,7是I2C匯流排的硬體地址,引腳8為數字地,9腳和10腳是I2C匯流排的SDA和SCL。12腳是時鍾選擇引腳,高電平表示外部時鍾輸入,低電平表示使用內部時鍾。14腳是基準源,15腳是DAC的模擬輸出,16腳是供電電源VCC。

⑵ 求用單片機設計的PWM波形發生器(C語言寫的)

我這里有個PWM調光程序不知道對你有沒有用
#include
<reg52.h>
sbit
LED
=
P1^2;
unsigned
char
CYCLE;
//定義周期
該數字X基準定時時間
如果是10
則周期是10
x
0.1ms
unsigned
char
PWM_ON
;//定義高電平時間
void
delay(unsigned
int
cnt)
{
while(--cnt);
}
main()
{
bit
Flag;
TMOD
|=0x01;//定時器設置
0.1ms
in
12M
crystal
TH0=(65536-100)/256;
TL0=(65536-100)%256;//定時0.1mS
IE=
0x82;
//打開中斷
TR0=1;
CYCLE
=
10;//
時間可以調整
這個是10調整
8位PWM就是256步
while(!Flag)
{
delay(20000);
//延時時間,從一個亮度到下一個亮度的間隔時間,速度快就能看到連續效果
PWM_ON++;
//這個使用較長延時,以便能看清楚變化過程
if(PWM_ON
==
CYCLE)
{
//這個里可以添加其他程序
如到最亮時候控制設備
Flag=1;
}
}
while(Flag)
//亮度遞減
同上,是個相反的過程
{
delay(20000);
PWM_ON--;
if(PWM_ON
==
0)
{
Flag=0;
}
}
}
/********************************/
/*
定時中斷
*/
/********************************/
void
tim(void)
interrupt
1
using
1
{
static
unsigned
char
count;
//
TH0=(65536-100)/256;
TL0=(65536-100)%256;//定時0.1mS
if
(count==PWM_ON)
{
LED
=
1;
//燈滅
}
count++;
if(count
==
CYCLE)
{
count=0;
if(PWM_ON!=0)
//如果左右時間是0
保持原來狀態
LED
=
0;//燈亮
}
}

⑶ 單片機波形發生器的課程設計

機波形發生器的課
我明白道理

⑷ 急!!基於單片機設計一個任意波形發生器要求能產生任意波、頻率,幅值可設定並有顯示、方波占空比可調

只要你了解PWM產生機理,原理圖較簡單,你可在網路文庫搜索一下,原程序最好自己學會。只能提供以下幾點建議:
1、可採用單片機定時器的PWM加積分器的方式輸出任意波形,其優點是可輸出任意形狀的波形,缺點是受單片機主頻的影響,輸出信號帶寬較窄。
2、高頻方波可直接輸出,方波輸出接積分器即可輸出三角波。
3、高頻正弦波可採用方波加鎖相環選頻獲取。
4、輸出頻率誤差可達0.1%沒有問題,只要頻率夠低,PWM解析度夠高,電源夠穩定,幅值誤差應該可以達到0.5%甚至更高都沒有問題。

⑸ 「波形發生器」設計

1.2.1 課題背景隨著科學技術的迅速發展,數字化技術已滲透到各個領域。智能儀表裝置由於其安全、方便、高效、快捷、智能化等特點,使它在21世紀成為各種科學技術領域和工程實踐的助手。它對於改善現代人類的生活質量,創造、安全、便利的生活空間有著非常重要的意義。隨著電子技術的發展 , 數字化技術在智能儀表 ,外設控制等方面取得了廣泛的運用。其中幅值、波形和頻率可調的智能信號發生器經常要用在各種科學技術領域和工程實踐中。函數信號發生器和示波器、電壓表、頻率計等儀器一樣是最普通、最基本的 ,也是應用最廣泛的電子儀器之一 ,幾乎所有的電參量的測量都需要用到信號發生器 。頻率越高、產生的波形種類越多的發生器性能越好,但器件的成本和技術要求也大大提高。比如:利用專用直接數字合成DDS晶元實現信號發生器。這種信號發生器能產生任意波形並達到很高的頻率,但成本很高。因此,綜合成本和性能等多方面考慮,設計出一款單片集成晶元配合52單片機實現的智能信號發生器是一次非常有意義的嘗試。該種智能信號發生器能產生多種波形信號,達到較高的頻率,易於調試,且有很高的性價比。怎麼樣才能設計出一款內部功能齊全,外圍電路簡單,使用方便的智能信號發生器呢?這就需要用到集成信號發生晶元。隨著半導體晶元製造業的迅速發展和研製水平的飛速提高,出現了很多功能強大且性能可靠的集成信號發生晶元 ,幾乎代替了以前用分立元件搭成的信號發生電路模塊。精密函數發生晶元MAX038就是其中之一,而且在眾多的信號發生晶元中MAX038 晶元的性價比較高 。所以本設計選用精密函數發生晶元MAX038。本設計中,用戶可根據自己的需要,將要輸出的波形種類通過外置鍵盤輸入單片機,調用其相應的子程序,再通過與MAX038相連的可變電阻來調節波形的頻率和占空比,經MAX038輸出到放大電路,最後接到示波器,由示波器顯示產生的波形。這種信號源的頻率改變十分方便 ,而且線路簡單,調試和修理簡捷,性能價格比較高。1.2.2 技術指標本文設計的智能信號發生器的技術指標如下:(1)可以輸出正弦波、矩形波及三角波;(2)輸出方波的占空比可調范圍在10%~90%;(3)輸出信號的頻率穩定度和准確度: ;(4)正弦波非線性失真度 :小於1%;(5)頻率可調范圍:0.1HZ~20MHZ;(6)幅度:6V為了達到這一目標,本課題重點在以下幾個方面展開工作:(1)信號發生器的基本原理及相關技術的研究學習本課題工作初期主要閱讀了大量相關書籍,特別是MAX038晶元的資料,還深入研究了信號發生器的基本原理、技術特點等。在這些工作的基礎上,提出了系統的解決方案,並解決了其中的關鍵技術難題。 (2)硬體系統設計 硬體電路設計主要包括鍵盤電路、單片機外圍電路、MAX038外圍電路(占空比調節、頻率調整電路)、放大電路的設計。根據系統方案的要求,ATMEL公司的8位Flash 單片機AT89C52作為系統的控制核心及數據處理中心,接距陣式鍵盤和MAX038電路部分。 (3)軟體系統設計軟體系統主要包括鍵盤去抖動延時程序、鍵盤掃描程序、波形選擇程序。軟體編程用C51語言。第二章 系統方案及原理框圖2.1 系統方案設計MAX038是單片集成晶元,需要通過單片機的控制實現函數信號的波形選擇。波形選擇由兩個輸入引腳A0 和A1的邏輯電平設定。通過4*4鍵盤輸入要產生的波形的種類,單片機判斷鍵碼並通過兩個I/O口控制MAX038的A0和A1引腳,從而控制MAX038輸出相應的波形。關於占空比調節和頻率調整,為簡單起見,可採用外部電位器調整控制。2.2 系統工作原理及框圖從圖2-1可以看出,系統按功能模塊可分為幾個部分:單片機系統:控制外圍的信號發生晶元,完成波形選擇。外圍電路:實現外圍的信號發生晶元和單片機之間的介面電路。C51程序:編寫單片機外圍信號發生晶元的介面程序,實現單片機函數信號輸出功能。
AT89C52單片機
4*4鍵盤
波形選擇
占空比調節節
MAX038
頻率調整
放大電路
波形輸出
圖2-1 系統原理框圖工作過程為:打開電源開始工作,按復位鍵復位,在鍵盤上輸入所需波形,調用單片機的程序存儲器中其相應的子程序 ,再通過與MAX038相連的可變電阻來調節波形的頻率和占空比,經MAX038輸出到放大電路,最後接到示波器,由示波器顯示產生的波形。第三章 硬體電路設計本章將介紹信號發生器的電路設計原理,對各個功能模塊分別進行討論,主要包括鍵盤電路、單片機外圍電路、MAX038外圍電路(占空比調節、頻率調整電路)、放大電路。3.1 鍵盤電路行列式鍵盤也即矩陣式鍵盤,它由行和列組成,在每個行列的交叉點上放置一個按鍵。4*4鍵盤是一種常見的鍵盤,用在本設計中完全能夠滿足要求。4*4行列式鍵盤共由16個鍵盤組成。圖3-1是鍵盤電路圖。矩陣鍵盤原理:矩陣鍵盤中,一個按鍵按下後會觸發兩個電平信號:X、Y,單片機通過掃描X、Y的值判斷按鍵狀態。
把單片機AT89C52中的P1.0-P1.7埠用8芯排線連接到「4*4行列式鍵盤」區域中的L1-L4、C1-C4埠上。圖3-1 鍵盤電路3.2 單片機外圍電路設計MAX038是單片集成晶元,需要通過單片機的控制實現函數信號的波形選擇。單片機是核心器件之一,通過它對MAX038的設置,實現不同波形的選擇和輸出。由於系統控制方案不太復雜 ,數據量也不太大,我們選用 AT89C52 作為控制系統的核心。它極為常用,價格便宜,易於獲取。3.2.1 單片機外圍電路硬體部分AT89C52是美國Atmel公司生產的低電壓、高性能CMOS 8位單片機,片內含8KB的可
圖 3-2 AT89C52管腳圖反復檫寫的程序存儲器和12B的隨機存取數據存儲器(RAM),器件採用Atmel公司的高密度、非易失性存儲技術生產,兼容標准MCS-51指令系統,片內配置通用8位中央處理器(CPU)和Flash存儲單元,功能強大的AT89C52單片機可靈活應用於各種控制領域。AT89C52單片機屬於AT89C51單片機的增強型,與Intel公司的80C52在引腳排列、硬體組成、工作特點和指令系統等方面兼容。圖 3-2 是AT89C52的管腳圖。其主要工作特性是:片內程序存儲器內含8KB的Flash程序存儲器,可擦寫壽命為1000次;片內數據存儲器內含256位元組的RAM;具有32根可編程I/O口線;具有3個可編程定時器;中斷系統是具有8個中斷源、6個中斷矢量、2個級優先權的中斷結構;串列口是具有一個全雙工的可編程串列通信口;具有一個數據指針DPTR;低功耗工作模式有空閑模式和掉電模式具有可編程的3級程序鎖定位;AT89C52工作電源電壓為5(1+0.2)V,且典型值為5V;AT89C52最高工作頻率為24MHz。單片機正常工作時,都需要有一個時鍾電路和一個復位電路,來構成單片機的最小電路。如圖3-3所示。
(1) 時鍾電路
XTAL0(18腳)和XTAL1(19腳):計算機工作時,是在統一的時鍾脈沖控制下一拍一拍的進行的,這個脈沖是由單片機控制器中的時序電路發出的。單片機的時序就是CPU在執行指令時所需控制信號的時間順序。為了保證各部件間的同步工作。單片機內部電路就在唯一的時鍾信號控制下嚴格地按時序進行工作。要給單片機提供時序要有相關的硬體電路,即振盪器和時鍾電路。因此選擇了內部時鍾方式。利用晶元內部的振盪器,然後在引腳XTAL0和XTAL1兩端跨接晶體或陶瓷諧振器,就構成了穩定的自激振盪器,其發出的脈沖直接送入內部時鍾電路,AT89C52最高工作頻率為24MHz,在本設計中採用11.0592 MHz晶振。外接晶振時,C1和C2值通常選擇為22PF左右。C1,C2對頻率有微調作用。晶體的頻率范圍可在1.2~12MHZ之間選擇。在實際連接中,為了減少寄生電容,更好地保證振盪器穩定、可靠地工作,振盪器和電容應盡可能安裝得與單片機晶元靠近。
(2) 復位電路
RESET( 9腳)是復位, 由圖3-3可以看出,按鍵電平復位電路相當於按復位鍵S1後復位端通過電阻與Vcc電源接通。復位是單片機的初始化操作。單片機在啟動運行時,都需要先復位,其作用是使CPU和系統中其他部件都處於一個確定的初始狀態,並從這個狀態開始工作。因而,復位是一個很重要的操作方式。但單片機本身是不能自動進行復位的,必須配合相應的外部電路來實現。(3) 單片機電源(40腳)是電源:AT89C52工作電源電壓為5(1+0.2)V,且典型值為5V;在線路中,電源去藕是一個關鍵問題。整個線路往往會由於電源引線而產生電路諧振,當有大的瞬時變化時,也會產生尖峰干擾信號。消除這兩種現象的有效辦法就是在片子的電源管腳與地之間加上適當的去藕電容,如圖3-3中的C4。(4) P1、P2口P1口:是一個帶內部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對埠寫「1」,通過內部的上拉電阻把埠拉到高電平,此時可作為輸入口。作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流(IIL)。在圖3-3中,KEY為單片機的外圍4*4鍵盤介面,它和單片機的P1.0~P1.7連接,P1.0~P1.3對應於鍵盤的行1~4,P1.4~P1.7對應鍵盤的列1~4。P2口:P2是一個帶有內部上拉電阻的8位雙向I/O口,P2的輸出緩沖極可驅(吸收或輸出電流)4個TTL邏輯門電路。Flash編程或校驗時,P2也接收高位地址和一些控制信號。在本設計中,單片機的P2.0和P2.1腳和MAX038的A0和A1相連,用於選擇輸出波形種類。
圖3-3 單片機部分硬體電路
3.2.2 單片機外圍模擬電路部分模擬軟體:Proteus7.1A0=0或者1、A1=1,即鍵盤第一行第一列的情況。表示選擇的是正弦波。A0=0、A1=0,即鍵盤第一行第二列的情況,表示選擇的是矩形波;A0=1、A1=0,即鍵盤第一行第三列,表示選擇三角波輸出。D1(A0)D2(A1)選擇的波形暗(0)或者亮(1)亮(1)正弦波暗(0)暗(0)矩形波亮(1)暗(0)三角波表3-1單片機部分模擬結果圖3-4模擬的是A0=0、A1=1,即鍵盤第一行第一列。表示選擇的是正弦波的情況。圖3-4 單片機部分軟體模擬電路3.3 MAX038外圍電路設計3.3.1 MAX038的基本工作原理MAX038是美國Maxim公司的一款高頻率、高精度、低輸出電阻、驅動能力強的函數信號發生器晶元,它是新一代的單片函數信號發生晶元。MAX038內部含有精密帶隙電壓基準、鑒相器和TTL同步輸出,能以最少的外部元件構成波形高頻函數信號發生器,也可以應用於壓控振盪器(PPL)、脈寬調制器、鎖相環、頻率調制器、頻率合成器及FSK信號(正弦波和方波)發生器,是目前較為理想的信號發生集成晶元 。如圖3-5所示MAX038內部主要由振盪器、參考電壓源2.5V、 恆流源250UA發生電路、多路選擇開關 、比較器、相位監測器、輸出緩沖器等電路組成。MAX038是單片精密函數信號產生器 ,它用±5V電源工作 ,基本的振盪器是一個交變地以恆定電流向電容器充電和放電的馳張振盪器 ,同時產生一個三角波和矩形波。通過改變COSC引
腳的外接電容 和流入 引腳的充放電電流的大小來控制輸出信號頻率, 工作頻率范圍為0.1Hz~20MHz。 流入 引腳的電流由加到FADJ 和DADJ 引腳上的電壓來調制, 通過這兩個引腳可用外接電壓信號分別調整頻率和占空比。MAX038內部有一個正弦波形成電路把振盪器的三角波轉變成一個具有等幅的低失真度正弦波。三角波、正弦波和矩形波輸入一個多路器,兩根地址線A0和A1從這三個波形中選出一個。圖3-5 MAX038的內部結構(虛線框內)
MAX038內部有一個2.5V的基準電壓源,由REF引腳輸出。基準電壓源電路由兩個運放LF353及電阻、電容組成,分別組成放大倍數為+1和-1的緩沖器,因而得到 的基準電源。這個電壓源對整機的性能很重要,因為各控制電路均需要參考輸入。圖3-6 MAX038管腳圖鑒相器是作為鎖相環的備用單元,為異或門電路結構,輸入信號一路來自內部差動矩形波OSCA和OSCB,另一路來自外部引腳PD1。鑒相器輸出信號為電流,由PD0引腳輸出,平均值變化范圍為0~550 。當兩路輸入信號的相位差為 時,輸出電流的占空比為50%,平均值為250 。如果構成鎖相環電路,則PDO和FADJ相連,並且對地連接一個電阻 ,同時並聯一個電容 。 決定鑒相器的靈敏度, 則濾除電流中的高頻成分。MAX038的各引腳功能見於表3-2。
表3-2 MAX038引腳功能註:5個GND腳在MAX038內部是不連接的,在電路設計時,需要一個地平面,然後所有5個GND腳連到靠近MAX038器件的地平面上。表3-3是MAX038 地址線A0和A1對波形選擇的取值。
表3-3 MAX038 地址線A0和A1對波形選擇的取值波形選擇由A0和A1兩個輸入引腳的邏輯電平設定:當A0=0或1、A1=1時為正弦波;當A0=0、A1=0時輸出矩形波;當A0=1、A1=0時輸出三角波。MAX038的關鍵特性如下:(1)工作頻率范圍從 0.1HZ~ 20MHZ,各種波形的輸出幅度均為2 V(P-P);(2)能精密地產生三角波、方波、正弦波信號;(3)占空比調節范圍寬, 占空比和頻率均可單獨調節, 互不影響, 占空比最大調節范圍10%~90%;(4)波形失真小, 正弦波失真度低於1%;(5) 採用±5V雙電源供電, 允許有5%變化范圍,電源電流為 80mA , 典型功耗 400 mW, 工作溫度范圍為0~70℃;(6) 內設2.5V電壓基準,利用控制端FADJ、DADJ實現頻率微調和占空比調節;(7)頻率掃描范圍:350倍;(8)輸出電阻:0.1 ;(9)溫度系數: 。MAX038核心部分是一個電流控制的振盪器,通過恆定的電流對外部電容 充電和放電,獲得三角波和方波信號輸出。充、放電電流由流進MAX038的 腳的電流控制,由加在引腳FADJ、DADJ上的電壓調整。電路的振盪頻率為: f= (1-0.2915 )= (1-0.2915 )/ (1)波形的占空比為: (2)當 =0時, 可設為2~750 ,對應中心頻率為350:1的變化范圍;當= 時,調制頻偏為 。控制外部電容 充、放電電流的比值,當 =0時,波形的占空比為50%;當 = 時,占空比為10%~90%。在FADJ和DADJ埠的內部,設置了250 的下拉電流源,可簡化外部電路設計,僅用電阻 (連接引腳FADJ和2.5V基準電壓的可變電阻)和 (連接引腳DADJ和2.5V基準電壓的可變電阻)就可以對頻偏和占空比進行調整。 埠由內部的運放強制為虛地,故僅用電阻 就能調整輸入電流 ,實現中心頻率的調節。3.3.2 占空比調節原理MAX038的DADJ引腳上的電壓可控制波形的占空比 (定義為輸出波形為正時所佔時間的百分數),並且能夠改善正弦波的波形,可進行脈沖寬度調制和產生鋸齒波。當 接地(即 =0)時,由 可得其占空比為50%。當 =±2.3V時,占空比可在 10%~90%范圍內調整;當電壓超過±2.3V 時,將使頻率偏移或引起不穩定。加在DADJ上的電壓: (3)其中: 為 DADJ 引腳上的電壓, 為定義為輸出波形的占空比。由公式(3)可完成的占空比設置。在本設計中要求占空比 在10%~90%的變化范圍,這樣 的范圍為-2.3V~+2.3V之間變化。因為:為內部恆流源; :連接引腳DADJ和2.5V基準電壓的可變電阻。基準電壓 :+2.5V由以上分析,可以計算出要使 的范圍為-2.3V~+2.3V之間變化時 的范圍在0.8K~19.2K 之間變化。所以 可以選擇20K 的可變電阻。綜上,MAX038工作時引腳DADJ電壓的變化可引起電容 充電和放電的相對速率的變化,由此引起矩形波占空比發生變化 ,當 時矩形波占空比為50%,即輸出為方波。 的變化范圍為±2.3V則占空比的變化范圍為10%~90%。所以 ,可使 變化 ,從而改變占空比,這即是設置占空比調節的原理。3.3.3 頻率調整原理(1) 頻率粗調原理由MAX038內部結構及參考文獻[4]可得,當引腳FADJ的電壓 =0時,MAX038輸出信號頻率的計算由式(1)給出: (4)(4)式中, 的計算為 (5) (5)式中 為內部輸出的2.5V恆定參考電壓,可見 時, 輸出信號的頻率完全由內部結構及充電電容 決定。 電流大小在2~750μA內變化,電容大小若為pF量級,則輸出頻率的大小為MHz量級;電容大小若為 μF量級 則輸出頻率的大小為kHz量級;電容大小若為μF量級,則輸出頻率的大小為Hz量級;所以其輸出頻率范圍為0.1Hz~20MHz。由此可通過改變電容 的大小達到大幅度地改變輸出信號頻率,這即是設置頻率粗調的原理。在本設計中要求頻率在0.1HZ~20MHZ的變化范圍,所以選擇電容大小若為pF量級。(2) 頻率細調原理MAX038工作時引腳FADJ的電壓 由參考電壓 及可調電阻 決定 = -250μA× (6)由(6)式得 (7)= 時,代入(7)式得到 的變化范圍為0.4K~19.6K,所以 可以選擇20K 的可變電阻。由(6)式調節 ,可變化FADJ引腳的電壓,其變化范圍為±2.4V。而 的變化可引起電容充電電流的變化 輸出頻率則以(4)式的頻率 為中心頻率,產生±70%左右的變化。由此可通過調節可變電阻 的大小,達到小幅度改變輸出信號的頻率,這即是設置細調輸出信號頻率的原理。綜上所述,MAX038的輸出頻率 由 、 、 三者共同決定,當 =0時 = = / = / * ,實現粗調;當 0時, = (1-0.2915 ),實現細調。3.3.4 MAX038外圍電路
圖 3-7 MAX038外圍電路原理圖由以上的分析,設計出的MAX038部分的電路如圖3-7。SYNC電路具有單獨的電源引線因而可被禁止。 數字電壓 (+5V)電源端,如果沒有用到SYNC的時候 應該懸空。PDI、PDO引腳分別是相位檢波器的輸入和輸出端,在本設計中不用應該接地。3.3.5 MAX038外圍電路注意事項由MAX038實現的信號發生電路是模數混合電路,因此在電路設計和線路板布局上都必須注意。具體有:(1)如果PCB板中,MAX038的模擬電源和數字電源需要分開,在供電時要分別供電,即分別取不同的電源,以防數字信號通過電源線干擾模擬部分;同樣,模擬地和數字地的處理要慎重,萬用板上要用低阻地平面分別將模擬地和數字地連接,再在某點上將兩地相連。(2)信號線要盡量部在焊接面,元件面為地平面,這樣就可減少信號間的干擾,這一點對系統性能的穩定尤為重要,因為系統性能受 、FADJ、COSC、DADJ等引腳周圍的分布電容及信號環境變化的影響特別敏感。此外,這些引腳引線的長度和面積還應盡量短小。(3)由於不同結構的電阻具有不同的寄生電容和寄生電感,因此選擇電阻時,應選用寄生電容和寄生電感小的電阻。推薦使用1%以上精度的金屬膜電阻。(4)在高頻線路中,電源去藕是一個關鍵問題。整個線路往往會由於電源引線而產生電路諧振,當有大的瞬時變化時,也會產生尖峰干擾信號。消除這兩種現象的有效辦法就是在片子的電源管腳與地之間加上適當的去藕電容,一般使用1 以上的優質電容。在許多場合,採用2個電容並聯的方法(並聯一個0.1 電容),則去藕效果更佳。3.4 幅度放大電路
由於MAX038的輸出信號為恆定的2V(P-P),且輸出電流不高,所以必須在輸出級至少有一級的放大電路來提供足夠的輸出電壓和電流,以滿足一般的使用要求。以下是放大電路設計的幾點考慮:圖3-8 放大電路(1) 首先,要求放大電路具有很高的頻寬。因為輸出信號最大基頻為20MHZ,其三角波和矩形波的高次諧波成分很高,只有高頻寬才能得到不失真的輸出波形。(2) 其次,高頻大信號放大要求電路有足夠的輸出電壓轉換速率。(3) 另外,要帶動低阻負載,放大電路的電流輸出能力也是個重要參數。要在10 負載上輸出6V信號,則放大器至少要有60mA的連續電流輸出能力。居於以上要求本設計的放大電路部分如圖3-8。採用低功耗,寬頻,高速運算放大器AD8055提高了放大電路的帶寬和轉換速率,把電壓由原來MAX038輸出的2V放大到6V。而9013和9012構成了「推挽式電路」也叫做互補對稱電路,實現了在靜態時管子不取電流,而在有信號時,T1、T2輪流導電。T1、T2是工作在乙類的放大電路,管耗小,提高了電流,從而提高了效率,而且減少了失真。最後接的電阻是為了防止輸出端的外接負載短路,所以加一個電阻限制電流。3.5 軟體設計軟體需要實現的主要功能是檢測鍵盤的輸入,根據輸入結果選擇輸出相應的波信號。鍵盤操作和對應的輸出如下:輸入按鍵「0」(第一行第一列),得到正弦波;輸入按鍵「1」(第一行第二列),得到矩形波;輸入按鍵「2」(第一行第三列),得到三角波;軟體編程用C51語言,主要包括鍵盤去抖動延時程序、鍵盤掃描程序、波形選擇程序。單片機控制MAX038實現波形輸出的程序流程圖3-9。
開始
初始化
鍵盤掃描
鍵碼為11?
鍵碼為21?
鍵碼為41?
NO
NO
NO
輸出正弦波
輸出矩形波
輸出三角波圖3-9 單片機控制MAX038實現波形輸出的程序流程圖鍵碼為11對應的是第一行第一列的按鍵;鍵碼為21對應的是第一行第二列的按鍵;鍵碼為41對應的是第一行第三列的按鍵。
希望對你能有所幫助。

⑹ 單片機8051設計簡易波形發生器,要求能產生正弦波,方波,三角波,通過鍵盤可改變輸出信號的頻率和幅度

這個網上資料很多的,你可以參考下的,我前幾天也做了個,proteus模擬的,程序如下,希望能幫到你的,有問題可以交流下的
#include<reg51.h>

unsigned char i,sqar_num=128; //最大值100,默認值50
unsigned char cho=0; //0:正弦波。1:方波。2:三角波。3:鋸齒波。
unsigned char num=0;
unsigned char TIME0_H=0xff,TIME0_L=0xdc; //定時器0的初值設置;全局變數.對應正弦波,鋸齒波50HZ
sbit chg= P1^0;
sbit freq_u=P1^1;
sbit freq_d=P1^2;
sbit ty_u=P1^3;
sbit ty_d=P1^4;
sbit cs =P3^7;
bit flag=0;
unsigned int FREQ=50;//初始化頻率,30HZ
unsigned char flag1;

sbit rs=P1^5;
sbit lcdcs=P1^7;
sbit cd=P3^0;
unsigned char TempBuffer[7];

unsigned char value1[]={"Frequency:"};

void delay(unsigned int ms)
{
unsigned int i,j;
for (j=0;j<ms;j++)
for (i=0;i<120;i++);
}

unsigned char code sin_num[]={
0x80,0x82,0x85,0x88,0x8b,0x8e,0x91,0x94,0x97,0x9a,0x9d,0xa0,0xa3,0xa6,
0xa9,0xac,0xaf,0xb2,0xb6,0xb9,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,
0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,
0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,
0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,
0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,
0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,
0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,
0x83,0x80,
0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,
0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,
0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,
0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,
0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,
0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,
0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,
0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,
0x76,0x79,0x7c,0x80
/* 135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
*/
};
unsigned code sanjiao_num[]=
{
0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,
36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,
70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,
104,106,108,110,112,114,116,118,120,122,124,126,128,130,
132,134,136,138,140,142,144,146,148,150,152,154,158,160,162,164,166,168,170,
172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,
212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,
252,254,255,254,252,250,248,246,244,242,240,238,236,234,232,230,228,226,224,222,220,
218,216,214,212,210,208,206,204,202,200,198,196,194,192,190,188,186,184,182,180,178,
176,174,172,170,168,166,164,162,160,158,154,152,150,148,146,144, 142,140,138,136,134,
132,130,128,126,124,122,120,118,116,114,112,110,108,106,104,102,100,98,96,94,92,90,88,
86,84,82,80,78,76,74,72,70,68,66,64,62,60,58,56,54,52,50,48,46,44,42,40,38,36,
34,32,30,28,26,24,22,20,18,16,14,12,10,8,6,4,2,0,

};

//調節部分——頻率
void freq_ud(void)
{
unsigned int temp;
if(freq_d==0)
{ FREQ--; }
else if(freq_u==0)
{ FREQ++; }
temp=0xffff-3906/FREQ; //切換後頻率為50HZ 65336-10^6/(256*FREQ)
// temp=0xffff-1953/FREQ;
TIME0_H=temp/256;
TIME0_L=temp%256;

}
//調節部分——方波的占空比
void ty_ud(void) //方波也採用512次中斷構成一個周期。
{
if(ty_d==0&sqar_num>0)
sqar_num--;
else if(ty_u==0&sqar_num<255)
sqar_num++;

}
//波形發生函數
void sint(void)
{
// char num=0;
// if(!flag)
{
cs=0;P2=sin_num[num++];cs=1;
if(num==255){num=0;}
}
/* else if(flag)
{
cs=0;P2=sin_num[num--];cs=1;
if(num==0){num=0;flag=0;}

} */
}

void square(void)
{
if(i++<sqar_num) {cs=0;P2=0XFF;cs=1;}
else{cs=0;P2=0X00;cs=1;}
}
void triangle(void)
{
cs=0;P2=num++;cs=1;
}
void stw(void)
{
cs=0;P2=sanjiao_num[num++];cs=1;
if(num==255){num=0;flag=1;}
}

//1602顯示開始
void write_command(unsigned char command)
{
rs=0;
P0=command;
lcdcs=1;
lcdcs=0;
}

void write_data(unsigned char data0)
{
rs=1;
P0=data0;
lcdcs=1;
lcdcs=0;
}

void init_1602()
{
delay(1);
write_command(0x38);
delay(1);
write_command(0x0c);
delay(1);
write_command(0x06);
delay(1);
}
//1602顯示結束

/*******************頻率值轉換為字元串**********************/
void temp_to_str()
{

TempBuffer[0]=FREQ/1000+'0'; //千位
TempBuffer[1]=FREQ%1000/100+'0'; //百位
TempBuffer[2]=FREQ%1000%100/10+'0';//十位
TempBuffer[3]=FREQ%1000%100%10+'0';//個位
TempBuffer[4]='H';
TempBuffer[5]='Z';
TempBuffer[6]='\0';
}
void main()
{
TMOD=0X01;
TH0=0xff;
TL0=0xd9;
IT0=1; //設置中斷觸發方式,下降沿
EA=1;
EX0=1;
ET0=1;
IP=0X01; //鍵盤中斷級別高
init_1602();//初始化lcd
write_command(0x80);//液晶顯示位置
delay(1);
for (i=0;i<sizeof(value1)-1;i++)
{
write_data(value1[i]);
delay(1);
}

TR0=1;
while(1)
{
show_frequency();
}
}

⑺ 基於單片機的波形發生器原理

波形發生器一般是由DA轉換器(或PWM濾波信號)定時輸出某一電壓,由一系列包含波形各時間點電壓信息的輸出組成一個完整的波形,一般算好一個周期的波形數據存儲起來,單片機一個周期一個周期連續輸出;由點輸出的時間間隔調整頻率。
波形的周期T由一個周期的輸出點數N和點之間的時間間t隔確定,T=N*t,頻率就為1/T;在輸出點數一定時,由點之間的時間間隔(決定DA輸出頻率)調整波形頻率,上面的公式估計就是調整DA輸出頻率的。

⑻ 單片機波

#include<reg52.h> //包含頭文件
#include<intrins.h>
#define uchar unsigned char //宏定義
#define uint unsigned int
sbit s1=P3^5; //定義按鍵的介面
sbit s2=P3^6;
sbit s3=P3^7;
sbit s4=P3^4;
sbit s5=P2^3;
sbit led0=P3^0; //定義四個LED,分別表示不同的波形
sbit led1=P3^1;
sbit led2=P3^2;
sbit led3=P3^3;

sbit lcdrs=P2^7; //液晶控制引腳,還有一個控制腳是RW,因為我們只需要向液晶里寫數據系那是就好了,所以,我們直接將RW引腳接地
sbit lcden=P2^6;
char num,boxing,u; //定義全局變數
uchar pinlv=100,bujin=1,bujin1=1; //頻率初始值是10Hz,步進值默認是0.1,顯示步進值變數
uchar code table[]="0123456789"; //定義顯示的數組
uchar code table1[]="Fout= Wave form:"; //初始化顯示字元
unsigned int m,pwm=50; //定義變數 m
int a,b,h,num1; //定義全局變數
//自定義字元
uchar code zifu[]={ //此數組內數據為液晶上顯示波形符號的自定義字元
0x0e,0x11,0x11,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x11,0x11,0x0e,0x00, //正弦波 0 1
0x00,0x07,0x04,0x04,0x04,0x04,0x1c,0x00,
0x00,0x1c,0x04,0x04,0x04,0x04,0x07,0x00, //矩形波 2 3
0x00,0x01,0x02,0x04,0x08,0x10,0x00,0x00,
0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00, //三角波 4 5
0x00,0x01,0x03,0x05,0x09,0x11,0x00,0x00, //鋸齒波 6
};
uchar code sin[64]={ //此數組內的數據為,da輸出對應電壓值對應的數字量,0是0V,255是5V
135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
}; //正弦波取碼
uchar code juxing[64]={ //一個周期是采樣64個點, 所以數組內是64個數據
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
}; //矩形波取碼
uchar code sanjiao[64]={
0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
}; //三角波取碼
uchar code juchi[64]={
0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
}; //鋸齒波取碼
void delay(uint xms) //延時函數
{
int a,b;
for(a=xms;a>0;a--)
for(b=110;b>0;b--);
}
void write_com(uchar com) //寫命令函數
{
lcdrs=0;
P0=com;
delay(1);
lcden=0;
delay(1);
lcden=1;
}
void write_date(uchar date) //寫數據函數
{
lcdrs=0;
P0=date;
delay(1);
lcden=0;
delay(1);
lcden=1;
}
//自定義字元集
void Lcd_ram()
{
uint i,j,k=0,temp=0x04;
for(i=0;i<7;i++)
{
for(j=0;j<8;j++)
{
write_com(temp+j);
write_date(zifu[k]);
k++;
}
temp=temp+8;
}
}
void init_lcd() //初始化函數
{
uchar i;
lcden=0; //默認開始狀態為關使能端,見時序圖
Lcd_ram();
write_com(0x01); //顯示清屏,將上次的內容清除,默認為0x01.
write_com(0x0f);
write_com(0x38); //顯示模式設置,默認為0x38,不用變。
write_com(0x0c); //顯示功能設置0x0f為開顯示,顯示游標,游標閃爍;0x0c為開顯示,不顯游標,游標不閃
write_com(0x06); //設置游標狀態默認0x06,為讀一個字元游標加1.
write_com(0x80); //設置初始化數據指針,是在讀指令的操作里進行的
for(i=10;i<20;i++) //顯示初始化
{
write_date(table1[i]); //顯示第一行字元
}
write_com(0x80+40); //選擇第二行
for(i=0;i<9;i++)
{
write_date(table1[i]); //顯示第二行字元
}
write_com(0x80+10); //選擇第一行第十個位置
write_date(0);
write_date(1);
write_date(0);
write_date(1);
write_date(0);
write_date(1); //顯示自定義的波形圖案
write_com(0x80+40+9); //選擇第二行第九個位置
write_date(' ');
write_date('1');
write_date('0');
write_date('.');
write_date('0');
write_date('H');
write_date('z'); //顯示初始的頻率值
}
void initclock() //定時器初始化函數
{
TMOD=0x01; //定時器的工作方式
TH0=a;
TL0=b; //定時器賦初值
EA=1; //打開中斷總開關
ET0=1; //打開定時器允許中斷開關
TR0=1; //打開定時器定時開關
}
void display() //顯示函數
{
uchar qian,,shi,ge; //定義變數用於顯示
qian=pinlv/1000; //將頻率值拆成一位的數據,將數據除以1000,得到的商是一位數,賦值給qian
=pinlv%1000/100; //將頻率除以1000的余數再除以100就得到了頻率的百位,賦值給
shi=pinlv%1000%100/10; //同上,得到頻率的十位
ge=pinlv%1000/100%10;
write_com(0x80+40+9); //選中第二行第九個位置
if(qian==0) //千位如果為0
write_date(' '); //不顯示
else //千位不為0
write_date(table[qian]); //正常顯示千位
if(qian==0&&==0) //千位和百位都為0
write_date(' '); //百位不顯示
else //不都為0
write_date(table[]); //百位正常顯示
write_date(table[shi]); //顯示十位數
write_date('.'); //顯示小數點
write_date(table[ge]); //顯示個位
write_date('H'); //顯示頻率的單位Hz
write_date('z');
if(boxing==0) //判斷波形為正弦波
{
write_com(0x80+10); //選中一行頻率圖案位置
write_date(0); //顯示正弦波圖案
write_date(1);
write_date(0);
write_date(1);
write_date(0);
write_date(1);
led3=1;
led0=0; //點亮正弦波指示燈
}
if(boxing==1) //注釋同上
{
write_com(0x80+10);
write_date(2);
write_date(3);
write_date(2);
write_date(3);
write_date(2);
write_date(3);
led0=1;
led1=0;
}

if(boxing==2)
{
write_com(0x80+10);
write_date(4);
write_date(5);
write_date(4);
write_date(5);
write_date(4);
write_date(5);
led1=1;
led2=0;
}
if(boxing==3)
{
write_com(0x80+10);
write_date(6);
write_date(6);
write_date(6);
write_date(6);
write_date(6);
write_date(6);
led2=1;
led3=0;
}
}
void keyscan() //頻率調節鍵盤檢測函數
{
if(s1==0) //加按鍵是否按下
{
EA=0; //關閉中斷
while(!s1); //按鍵松開
pinlv+=bujin; //頻率以步進值加
if(pinlv>1000) //最大加到100Hz
{
pinlv=100; //100Hz
}
display(); //顯示函數
m=65536-(15000/pinlv);//計算頻率
/*頻率值最小是10Hz,pinlv的值是100(因為要顯示小數點後一位),150000/100=1500,這個1500就是定時器需要計時的,單位是us,65536-1500得到的是定時器的初值,
先不管初值,先看定時時間,1500us,一個波形的周期是由64個定時組成的,所以,一個波形周期就是64*1500us=96000,也就是96ms,約等
於100ms,也就是10Hz的頻率*/
a=m/256; //將定時器的初值賦值給變數
b=m%256;
EA=1; //打開中斷總開關
}
if(s2==0) //減按鍵按下
{
EA=0;
while(!s2);
pinlv-=bujin; //頻率以步進值減
if(pinlv<100)
{
pinlv=100;
}
display();
m=65536-(15000/pinlv);
a=m/256;
b=m%256;
EA=1;
}
if(s3==0) //波形切換按鍵
{
EA=0;
while(!s3);
boxing++; //波形切換
if(boxing>=4) //4種波形
{
boxing=0;
}
display();
EA=1;
}
if(s5==0) //PWM切換按鍵
{
EA=0;
while(!s5);
pwm+=10;
if(pwm>90)
{
pwm=10;
}
// display();
EA=1;
}
}
void bujindisplay() //步進值設置界面顯示程序
{
uint ,shi,ge; //定義步進值 百十個位
=bujin1/100; //將步進值除以100得到百位,也就是頻率值的十位,因為有一個小數位
shi=bujin1%100/10; //將步進值除以100的余數除以十得到十位
ge=bujin1%100%10; //取餘10後得到個位,也就是頻率步進值的小數點後一位
write_com(0x80+11); //選中液晶第一行第十一列
if(==0) //百位是否為0
write_date(' '); //百位不顯示
else //百位不為0
write_date(table[]); //顯示百位數據
write_date(table[shi]); //顯示十位數據
write_date('.'); //顯示小數點
write_date(table[ge]); //顯示個位,也就是小數點後一位
}
void bujinjiance() //步進值設置鍵盤程序
{
if(s4==0) //步進設置按鍵按下
{
delay(5); //延時去抖
if(s4==0) //再次判斷按鍵
{
while(!s4); //按鍵釋放,按鍵松開才繼續向下執行
h++; //變數加
if(h==1) //進入設置狀態時
{
write_com(0x01); //清屏
write_com(0x80); //初始化顯示步進設置界面
write_date('S');delay(1); //step value
write_date('t');delay(1);
write_date('e');delay(1);
write_date('p');delay(1);
write_date(' ');delay(1);
write_date('v');delay(1);
write_date('a');delay(1);
write_date('l');delay(1);
write_date('u');delay(1);
write_date('e');delay(1);
write_date(':');delay(1);
bujin1=bujin; //步進值賦值給臨時變數

bujindisplay(); //顯示步進值
}
if(h==2) //退出設置
{
h=0; //清零
bujin=bujin1; //設置好的臨時步進值賦值給步進變數

init_lcd(); //初始化液晶顯示
initclock(); //定時器初始化
display(); //調用顯示程序
}
}
}
if(h==1) //設置步進值時
{
if(s1==0) //加按鍵按下
{
delay(5); //延時去抖
if(s1==0) //再次判斷
{
while(!s1); //按鍵釋放
bujin1++; //步進值加1
if(bujin1>=101) //步進值最大100,也就是10.0Hz
{
bujin1=1; //超過最大值就恢復到0.1Hz
}
bujindisplay(); //步進顯示
}
}
if(s2==0) //減按鍵,注釋同上
{
delay(5);
if(s2==0)
{
while(!s2);
bujin1--; //步進減
if(bujin1<=0)
{
bujin1=100;
}
bujindisplay();
}
}
}
}
void main() //主函數
{
init_lcd(); //調用初始化程序
m=65536-(15000/pinlv); //定時器初值
a=m/256;
b=m%256;
initclock(); //定時器初始化
led0=0; //點亮第一個波形指示燈
while(1) //進入while循環,括弧內為1,一直成立,所以也叫死循環,程序不會跳出,一直在內執行
{
if(h==0) //正常模式不是步進調節
{
keyscan(); //掃描按鍵
// display();
}

bujinjiance(); //掃描步進調節程序
switch(boxing) //選擇波形
{
case 0 : P1=sin[u]; break; //正弦波
case 1 : //矩形波
if(u<pwm*64/100)P1=255;
else
P1=0;
break;
case 2 : P1=sanjiao[u]; break; //三角波
case 3 : P1=juchi[u]; break; //鋸齒波
}
}
}
void T0_time()interrupt 1 //定時器
{
TH0=a;
TL0=b;
u++; //變數加
if(u>=64) //一個周期采樣64個點, 所以加到64就清零
u=0; //u清零
//根據不同的初值,定時器定時時間不同,達到不同頻率的目的
}

閱讀全文

與單片機課程設計波形發生器相關的資料

熱點內容
蘋果平板如何開啟隱私單個app 瀏覽:704
空調壓縮機一開就停止 瀏覽:528
如何下載虎牙app 瀏覽:847
日語年號的演算法 瀏覽:955
dev裡面的編譯日誌咋調出來 瀏覽:298
php函數引用返回 瀏覽:816
文件夾和文件夾的創建 瀏覽:259
香港加密貨幣牌照 瀏覽:838
程序員鼓勵自己的代碼 瀏覽:393
計算機網路原理pdf 瀏覽:752
吃雞國際體驗服為什麼伺服器繁忙 瀏覽:94
php中sleep 瀏覽:490
vr怎麼看視頻演算法 瀏覽:86
手機app如何申報個人所得稅零申報 瀏覽:694
如何截獲手機app連接的ip 瀏覽:331
冰箱壓縮機是否需要電容 瀏覽:346
python列表每一行數據求和 瀏覽:275
自己有一台伺服器可以玩什麼 瀏覽:657
社會學波普諾pdf 瀏覽:584
解壓做食物的小視頻 瀏覽:760