基于單片機(jī)的函數(shù)信號(hào)發(fā)生器設(shè)計(jì).doc
基于單片機(jī)的函數(shù)信號(hào)發(fā)生器設(shè)計(jì)所用元器件:元器件數(shù)量(個(gè))電阻3電容9STC89C52芯片1DAC0832芯片1MAX232芯片1按鍵7OP07運(yùn)算放大器1LED發(fā)光二極管1LCD1602液晶屏幕1晶振1電位器1芯片底座4排阻1電解電容2排針若干跳線(xiàn)若干基于單片機(jī)的函數(shù)信號(hào)發(fā)生器1.設(shè)計(jì)目的1學(xué)習(xí)使用keil編程,使用Altium Designer繪制原理圖;2使用單片機(jī)產(chǎn)生正弦波、方波、三角波、鋸齒波并可通過(guò)按鍵對(duì)波形切換、幅值和頻率的調(diào)整;3學(xué)習(xí)使用示波器顯示波形;2.設(shè)計(jì)原理基于單片機(jī)的函數(shù)發(fā)生器原理以STC89C51為整個(gè)函數(shù)發(fā)生器的核心部分,通過(guò)編寫(xiě)程序和執(zhí)行程序,運(yùn)用示波器顯示出四種波形,分別是正弦波、三角波、方波和鋸齒波。本設(shè)計(jì)擁有五個(gè)按鍵,分別實(shí)現(xiàn)波形的切換,改變波形的頻率和幅值的大小。芯片DAC0832將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)輸出并通過(guò)外接運(yùn)算放大器OP07實(shí)現(xiàn)電流向電壓的轉(zhuǎn)換,最后通過(guò)示波器顯示出波形。3.設(shè)計(jì)內(nèi)容3.1基本設(shè)計(jì)內(nèi)容本次設(shè)計(jì)的主要內(nèi)容是設(shè)計(jì)一個(gè)基于單片的函數(shù)信號(hào)發(fā)生器實(shí)現(xiàn)正弦波、三角波、方波和鋸齒波。利用單片機(jī)設(shè)計(jì)程序,使其能夠通過(guò)按鍵有效切換四種波形,并且實(shí)現(xiàn)波形幅值和頻率的調(diào)整滿(mǎn)足本設(shè)計(jì)的要求,進(jìn)行硬件系統(tǒng)和軟件系統(tǒng)的設(shè)計(jì),最后調(diào)試完成本次設(shè)計(jì)。LCD1602液晶顯示波形種類(lèi)、幅值以及頻率。頻率的可調(diào)范圍在110HZ,幅值可調(diào)范圍在15V。顯示屏上顯示參數(shù),第一行顯示波形。第二行左邊顯示波形頻率,右邊顯示波形幅值。本設(shè)計(jì)由五個(gè)功能按鍵,分別進(jìn)行波形切換,加減幅值和加減頻率。電壓在示波器上顯示,硬件原理示意圖,如圖1.1所示。顯示電路單片機(jī)D/A轉(zhuǎn)換電路放大電路按鍵復(fù)位電路波形輸出圖1.1 硬件原理設(shè)計(jì)圖3.2模塊設(shè)計(jì)3.2.1單片機(jī)最小系統(tǒng)模塊本設(shè)計(jì)STC89C51為整個(gè)函數(shù)發(fā)生器的核心部分,單片機(jī)、時(shí)鐘電路和復(fù)位電路構(gòu)成單片機(jī)的最小系統(tǒng),如圖2.1所示。圖2.1單片機(jī)最小系統(tǒng)模塊原理圖晶體諧振器是時(shí)鐘電路的重要組成部分,將晶體諧振器放入電路,上電后它會(huì)產(chǎn)生機(jī)械振蕩,單片機(jī)憑借晶體諧振器的頻率運(yùn)行所設(shè)計(jì)出來(lái)的頻率,所以說(shuō)晶體諧振器的頻率是單片機(jī)操作時(shí)間規(guī)律,保證單片機(jī)平穩(wěn)的工作。晶體諧振器是控制CPU的時(shí)鐘頻率的。頻率控制運(yùn)行速度。晶體諧振器雖然是振蕩電路的一部分,但是它自身不會(huì)產(chǎn)生震蕩,它會(huì)有一個(gè)固定的頻率,然后與外圍電路發(fā)生諧振。諧振的產(chǎn)生需要晶體諧振器固定頻率和外圍電路的頻率一致,如果差距大,或者根本對(duì)不上則會(huì)使電路不在振蕩。單片機(jī)會(huì)根據(jù)實(shí)際所能承受的晶體諧振器頻率來(lái)選擇自己的運(yùn)行頻率,不會(huì)因?yàn)榫w諧振器頻率快單片機(jī)運(yùn)行就快,頻率慢單片機(jī)運(yùn)行速度就會(huì)降低。復(fù)位電路包含一個(gè)電容、兩個(gè)電阻包括一個(gè)接地電阻和一個(gè)復(fù)位按鍵,電容和電阻采用值為10F和10K。復(fù)位電路讓單片機(jī)回到原始工作狀態(tài),RST復(fù)位引腳高電平有效,高電平有效的持續(xù)時(shí)間應(yīng)為24個(gè)時(shí)鐘周期以上,才能有效復(fù)位。根據(jù)公式電容的充電時(shí)間為t=R*C,則電容的充電時(shí)間為100ms,充滿(mǎn)使得單片機(jī)復(fù)位。電容充滿(mǎn),與地相接的的電阻電壓、電流都降為零,在開(kāi)機(jī)上電的0.1s鐘內(nèi),單片機(jī)系統(tǒng)會(huì)自動(dòng)復(fù)位,在單片機(jī)工作期間,按下復(fù)位按鍵,電容放電,接地電阻出現(xiàn)電壓,單片機(jī)復(fù)位松開(kāi)按鍵,電容充電,幾個(gè)毫秒之后單片機(jī)開(kāi)始工作。3.2.2顯示模塊LCD1602能同時(shí)顯示32個(gè)字符。LCD1602采用的是數(shù)據(jù)并行接法,特點(diǎn)主要是使用方便,需要很多的I/O口,函數(shù)發(fā)生器設(shè)計(jì)中I/O口是夠用的,所以可以使用這種數(shù)據(jù)傳輸方式。八位的數(shù)據(jù)賦給I/O口。讀取數(shù)據(jù)時(shí)也只要讀取整個(gè)I/O口。LCD1602顯示模塊,如圖2.2所示。圖2.2顯示模塊原理圖3.2.3 D/A轉(zhuǎn)換電路DA轉(zhuǎn)換模塊由DAC0832、OP07運(yùn)算放大電路組成,DAC0832作為函數(shù)發(fā)生器數(shù)模轉(zhuǎn)換模塊的核心芯片,轉(zhuǎn)換時(shí)間為1us,工作電壓為+5v+15v,基準(zhǔn)電壓為正負(fù)10v。它主要由兩個(gè)8為寄存器和一個(gè)8位D/A轉(zhuǎn)換器組成,片內(nèi)有輸入數(shù)據(jù)寄存器,所以芯片可以直接與單片機(jī)相接。DAC0832以電流的形式輸出信號(hào),所以需要在Iout后接一個(gè)OP07運(yùn)算放大器,把輸出電流信號(hào)轉(zhuǎn)換成電壓的形式,供示波器顯示,在信號(hào)輸出之前OP07輸出口接一個(gè)電阻和一個(gè)電容組成一個(gè)簡(jiǎn)單的濾波電路,用來(lái)抑制其他雜波,得到正常信號(hào)。D/A轉(zhuǎn)換模塊,如圖2.3所示。圖2.3 D/A轉(zhuǎn)換模塊原理圖3.2.4提供運(yùn)放電源電路DAC0832輸出的是電流信號(hào),要將電流轉(zhuǎn)換成電壓,OP07運(yùn)算放大器需要提供正負(fù)10v的電壓,在單片機(jī)與計(jì)算機(jī)通信時(shí)需要加電平轉(zhuǎn)換芯片,MAX232可以完成電平轉(zhuǎn)換功能,因此MAX232芯片上可以找到正、負(fù)電壓。根據(jù)測(cè)量,MAX232芯片的2、6引腳分別輸出+10v和-10v左右的電壓,所以可以作為運(yùn)算放大器OP07的電源電壓,分別接在運(yùn)放兩端,MAX232芯片,如圖2.4所示。圖2.4 MAX232原理圖4.硬件設(shè)計(jì)調(diào)試4.1測(cè)試儀器為確保硬件和軟件的正確性及完善性,需要一些測(cè)試儀器進(jìn)行調(diào)試,硬件調(diào)試所需儀器如表3.1所示:表3.1測(cè)試儀器表硬件調(diào)試所需儀器數(shù)量電腦1臺(tái)萬(wàn)用表1個(gè)USB線(xiàn)1條示波器1臺(tái)連接板子和示波器的探頭線(xiàn)1條4.2硬件調(diào)試過(guò)程硬件調(diào)試是設(shè)計(jì)是否能成功的關(guān)鍵,通過(guò)調(diào)試可以檢查板子是否能正確運(yùn)行以及檢測(cè)設(shè)計(jì)功能是否按要求實(shí)現(xiàn)。畫(huà)原理圖很多細(xì)節(jié)需要注意,原理圖的正確性很重要,這關(guān)系到板子的焊接和實(shí)現(xiàn),原理圖布局劃線(xiàn)最好規(guī)整,本設(shè)計(jì)需要焊接的元器件不多,但焊接時(shí)還是需要認(rèn)真檢查特別注意的,比如短距離焊點(diǎn)的焊接方法,或是線(xiàn)與線(xiàn)之間很近,線(xiàn)與焊盤(pán)之間距離太小,線(xiàn)細(xì)易斷等。在線(xiàn)密集的地方避免焊接在一起,同時(shí)還要避免虛焊、短路、斷路等現(xiàn)象。按照原理圖有順序的焊接器件,從低到高焊接,芯片的焊接需要注意,不可將芯片直接焊上。在焊接的時(shí)候看見(jiàn)虛斷的線(xiàn)路,需要用焊錫補(bǔ),在拉焊錫時(shí)為了避免影響其他的線(xiàn)路,在拉完焊錫的路徑上進(jìn)行檢測(cè),檢查相關(guān)電路的連通和無(wú)關(guān)電路的隔斷,找出問(wèn)題電路線(xiàn),并及時(shí)改正。在焊完電路以后檢查電路的可實(shí)際操作性是一定需要的,因?yàn)樵诤附拥臅r(shí)候芯片很容易出現(xiàn)問(wèn)題,板子上有些元件接口還加有跳線(xiàn),需要檢查是否有正確連接,有無(wú)短路、斷路、線(xiàn)的連通性,跳線(xiàn)有沒(méi)有松動(dòng)等,對(duì)照電路圖按照順序逐一對(duì)照檢查。板子實(shí)物圖,如圖3.1所示。圖3.1 板子實(shí)物圖上電后,板子上的最小系統(tǒng)的復(fù)位按鍵,按下是否能復(fù)位,LED燈點(diǎn)亮。檢測(cè)完畢后在進(jìn)行下一步的調(diào)試工作。板子通電時(shí)不要急于把重要的芯片插上,更不能將芯片或電源插反,若電路出現(xiàn)問(wèn)題很有可能將芯片燒壞。通電后查看顯示屏能否正常顯示。若板子出現(xiàn)異?,F(xiàn)象,例如異常氣味、出現(xiàn)煙霧和器件發(fā)燙等現(xiàn)象,立即切斷電源。如果測(cè)試沒(méi)有任何問(wèn)題,硬件也確定是好的,結(jié)束硬件調(diào)試下載正確程序,并連接示波器。(1)板子上電后,通過(guò)示波器顯示頻率為1HZ,幅值為5V的正弦波。圖3.2 正弦波實(shí)現(xiàn)圖(2)通過(guò)按鍵,實(shí)現(xiàn)頻率和幅值的調(diào)整,示波器上顯示調(diào)整后的正弦波波形,頻率為5HZ,幅值為2V。圖3.3 正弦波實(shí)現(xiàn)圖(3)通過(guò)波形切換按鍵,將正弦波波形切換到三角波波形,并通過(guò)示波器上顯示頻率為5HZ,幅值為2V三角波波形。圖3.4三角波實(shí)現(xiàn)圖(4)通過(guò)波形切換按鍵,將三角波波形切換到方弦波波形,并通過(guò)示波器上顯示頻率為5HZ,幅值為2V方波波形。 圖3.5 方波實(shí)現(xiàn)圖(5)通過(guò)波形切換按鍵,將方弦波波形切換到鋸齒波波形,并通過(guò)示波器上顯示頻率為5HZ,幅值為2V方波波形。圖3.6 鋸齒波實(shí)現(xiàn)圖4.3 調(diào)試所遇問(wèn)題及解決辦法將元器件根據(jù)原理圖焊接在板子上后,給板子上電,單片機(jī)最小系統(tǒng)沒(méi)有異常,液晶顯示屏正常,MAX232芯片在上電幾分鐘后芯片發(fā)燙,立刻切斷電源,并檢查原理圖各個(gè)引腳是否焊接正確,地和電源是否焊接錯(cuò)誤,檢查有無(wú)短路現(xiàn)象,發(fā)現(xiàn)無(wú)誤,再次上電,其他模塊正常運(yùn)作,MAX232芯片仍然發(fā)燙,斷電后將芯片取下,給板子供電,用萬(wàn)用表測(cè)量DAC0832輸出引腳,萬(wàn)用表顯示有電流輸出,可以確定DAC0832芯片正常運(yùn)作。這時(shí)將MAX232換下,換成一個(gè)升壓模塊電路,對(duì)OP07運(yùn)放提供正負(fù)電壓,將模塊接入后,上電,發(fā)現(xiàn)幾分鐘后升壓模塊也迅速發(fā)燙,切斷電源將模塊取下,這時(shí)通過(guò)查找資料后發(fā)現(xiàn)OP07正負(fù)10V引腳接反,這時(shí)將OP07運(yùn)放的正負(fù)電源輸入端口引腳反過(guò)來(lái),將MAX232芯片的6引腳與運(yùn)放OP07的4引腳相接,之后再將MAX232芯片的2引腳與運(yùn)放OP07的7引腳相接。4.4調(diào)試結(jié)果通過(guò)對(duì)軟件和硬件的檢查,反復(fù)的修改和調(diào)試,上電后,電源指示燈正常亮,LCD1602液晶顯示屏可以正常顯示波形種類(lèi)、幅值和頻率大小,按下按鍵后,相應(yīng)的顯示屏顯示的內(nèi)容會(huì)有所改變,示波器顯示正確的波形,本設(shè)計(jì)可以手動(dòng)復(fù)位。5.軟件調(diào)試基于單片機(jī)函數(shù)信號(hào)發(fā)生器是由硬件和軟件來(lái)相互結(jié)合實(shí)現(xiàn)的,任一部分存在問(wèn)題都會(huì)影響總體功能,達(dá)不到預(yù)期效果。在本設(shè)計(jì)確定硬件電路沒(méi)有問(wèn)題以后,就開(kāi)始對(duì)軟件的調(diào)試了。由于軟硬件相互結(jié)合,根據(jù)題目要求設(shè)計(jì)硬件電路,查看相關(guān)資料以及整合相關(guān)電路功能及性能,將硬件電路設(shè)計(jì)出來(lái),確定好硬件電路后,根據(jù)要實(shí)現(xiàn)的硬件功能,軟件設(shè)計(jì)也會(huì)逐步確定下來(lái)。根據(jù)函數(shù)發(fā)生器所要實(shí)現(xiàn)的具體功能設(shè)計(jì)出合理的程序結(jié)構(gòu)。單片機(jī)的軟件設(shè)計(jì)調(diào)試主要有兩種,一是使用軟件仿真進(jìn)行調(diào)試,運(yùn)用計(jì)算機(jī)軟件區(qū)模擬單片機(jī)環(huán)境的指令執(zhí)行,并虛擬單片機(jī)內(nèi)部資源從而實(shí)現(xiàn)功能演示。另外一種就是通過(guò)軟硬件結(jié)合來(lái)進(jìn)行程序的調(diào)試,使用Keil軟件編譯好程序下載到單片機(jī)中,然后在系統(tǒng)中觀察軟件功能是否實(shí)現(xiàn)。在本次設(shè)計(jì)中我們先使用proteus對(duì)本設(shè)計(jì)進(jìn)行仿真,之后再運(yùn)用軟硬結(jié)合下載進(jìn)單片機(jī)的方式完成本次設(shè)計(jì)。6.心得體會(huì)為期兩周的單片機(jī)實(shí)訓(xùn)結(jié)束了,我們小組學(xué)到了很多東西。隨著電子技術(shù)的發(fā)展,特別是隨著大規(guī)模集成電路的產(chǎn)生,給人們的生活帶來(lái)了根本性的變化,我們學(xué)習(xí)了單片機(jī)這門(mén)課程,感覺(jué)是有點(diǎn)難,不過(guò)在學(xué)習(xí)中,我才發(fā)現(xiàn)學(xué)習(xí)單片機(jī)不僅僅需要軟件的知識(shí),還需要硬件的知識(shí)。單片機(jī)是一門(mén)很好的學(xué)問(wèn),需要我們?nèi)ャ@研它。說(shuō)起本次設(shè)計(jì),我認(rèn)為最重要的就是做好設(shè)計(jì)的預(yù)習(xí),認(rèn)真的研究老師給的題目,選一個(gè)小組成員都感興趣的題目。其次,老師在實(shí)驗(yàn)課上的講解要認(rèn)真的去聽(tīng)去想,因?yàn)橹挥卸济靼琢?,做起設(shè)計(jì)就會(huì)事半功倍,如果沒(méi)弄明白,就迷迷糊糊的去選題目做設(shè)計(jì),到頭來(lái)一點(diǎn)收獲也沒(méi)有。最后,要重視程序的規(guī)范,便于修改,也要注重程序的調(diào)試,掌握其方法。在全組人竭盡全力,程序編寫(xiě)成功,這是我們共同努力的結(jié)果,在享受我們成果之時(shí),不得不感慨單片機(jī)的重要性,所以為期兩周的單片機(jī)課程設(shè)計(jì)沒(méi)有浪費(fèi)我們學(xué)到了很多知識(shí),本次設(shè)計(jì)和課堂上老師所講的內(nèi)容有所相似,需要我們?cè)诮Y(jié)合所學(xué)只是上進(jìn)一步升華。也讓我們對(duì)單片機(jī)有了更深一步的了解,雖然最后結(jié)果是出來(lái)了,可這與老師的精心指導(dǎo)是分不開(kāi)的她引導(dǎo)我們的思路,所以老師是功不可沒(méi)的。總而言之,單片機(jī)課程設(shè)計(jì)對(duì)于我們有很大的幫助,我們從中受益匪淺。附錄1原理圖Protues仿真圖附錄2源程序#include"reg52.h"#define uchar unsigned char#define uint unsigned intsbit key1=P10;sbit key2=P11;sbit key3=P12;sbit key4=P13;sbit key5=P14;sbit lcden=P34;sbit lcdrs=P35;sbit dacwr=P36;uchar flag,freq,size; / 分別用來(lái)標(biāo)記波的種類(lèi)、頻率HZ、幅值Vuchar num,key; /定義數(shù)組元素、以及是否有按鍵按下uint value; /定時(shí)器裝初值uchar lcd_table="wave:"uchar lcd_table1="fre:"uchar lcd_table2="amp:"uchar lcd_table3="sin" /LCD波形種類(lèi)數(shù)組uchar code sin_table64=0x00,0x03,0x06,0x0a,0x10,0x17,0x1e,0x27,0x30,0x3b,0x46,0x51,0x5d,0x69,0x76,0x83,0x8f,0x9c,0xa8,0xb3,0xbf,0xc9,0xd3,0xdc,0xe4,0xec,0xf2,0xf7,0xfb,0xfe,0xff,0xff,0xff,0xfc,0xf9,0xf5,0xef,0xe8,0xe1,0xd8,0xce,0xc4,0xb9,0xae,0xa2,0x96,0x89,0x7d,0x70,0x64,0x58,0x4c,0x41,0x36,0x2c,0x23,0x1b,0x14,0x0d,0x08,0x04,0x01,0x00,0x00; /正弦波uchar code tri_table64=0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78,0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0xe0,0xe8,0xf0,0xf8,0xfe,0xf6,0xee,0xe6,0xde,0xd6,0xce,0xc6,0xbe,0xb6,0xae,0xa6,0x9e,0x96,0x8e,0x86,0x7e,0x76,0x6e,0x66,0x5e,0x56,0x4e,0x46,0x3e,0x36,0x2e,0x26,0x1e,0x16,0x0e,0x06; /三角波uchar code zig_table64=0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c,0x20,0x24,0x28,0x2c,0x30,0x34,0x38,0x3c,0x40,0x44,0x48,0x4c,0x50,0x54,0x58,0x5c,0x60,0x64,0x68,0x6c,0x70,0x74,0x78,0x7c,0x80,0x84,0x88,0x8c,0x90,0x94,0x98,0x9c,0xa0,0xa4,0xa8,0xac,0xb0,0xb4,0xb8,0xbc,0xc0,0xc4,0xc8,0xcc,0xd0,0xd4,0xd8,0xdc,0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc; /鋸齒波uchar code squ_table64=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff; /方波void delayms(uchar xms) uchar i,j; for(i=xms;i>0;i-) for(j=110;j>0;j-);void write_com(uchar com) /液晶寫(xiě)指令 lcdrs=0; P0=com; delayms(2); lcden=1; delayms(2); lcden=0;void write_data(uchar date) /液晶寫(xiě)數(shù)據(jù) lcdrs=1; P0=date; delayms(2); lcden=1; delayms(2); lcden=0;void lcd_init() /液晶初始化 lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01);void init() key=1;value=15625; /按鍵標(biāo)志位、定時(shí)初值(1450微秒為人工減小誤差值)初始化 flag=1;freq=1;size=5; /變量初始化,初始產(chǎn)生正弦波,頻率為1HZ,幅值為5V dacwr=0;/0832初始化 TMOD=0x01; /定時(shí)器T0初始化 TH0=(65536-value+1400)/256;/頻率為1HZ時(shí),每點(diǎn)之間隔15625微秒 TL0=(65536-value+1400)%256; EA=1; ET0=1; TR0=1;void keyscan() if(key1=0) /key1選擇波形 delayms(5); if(key1=0) while(!key1); key=1; flag+; /flag為1、2、3、4時(shí),分別對(duì)應(yīng)正弦方波、三角方波、鋸齒方波、方波 if(flag>=5)flag=1; if(key2=0) /頻率增大 delayms(5); if(key2=0) while(!key2); key=1; freq+; if(freq>10)freq=1; value=1000000/(freq*64); if(key3=0) /頻率減小 delayms(5); if(key3=0) while(!key3); key=1; freq-; if(freq<1)freq=10; value=1000000/(freq*64); if(key4=0) /幅值增大 delayms(10); if(key4=0) while(!key4); key=1; size+; if(size>5)size=1; if(key5=0) /幅值減小 delayms(10); if(key5=0) while(!key5); key=1; size-; if(size<1)size=5; void gene_wave() switch(flag) case 1:P2=sin_tablenum*size/5;lcd_table30=s;lcd_table31=i;lcd_table32=n;break; case 2:P2=tri_tablenum*size/5;lcd_table30=t;lcd_table31=r;lcd_table32=i;break; case 3:P2=zig_tablenum*size/5;lcd_table30=z;lcd_table31=i;lcd_table32=g;break; case 4:P2=squ_tablenum*size/5;lcd_table30=s;lcd_table31=q;lcd_table32=u;break; default:P2=sin_tablenum*size/5;lcd_table30=s;lcd_table31=i;lcd_table32=n; void lcd_display() uchar i,ge,shi; lcd_init(); key=0; /置按鍵標(biāo)志位為0 shi=freq/10; ge=freq%10; write_com(0x80); /第一行:顯示波形 for(i=0;i<5;i+) write_data(lcd_tablei); for(i=0;i<3;i+) write_data(lcd_table3i); write_com(0x80+0x40); /第二行:顯示頻率和振幅 for(i=0;i<4;i+) write_data(lcd_table1i); write_data(shi+0x30); write_data(ge+0x30); write_data(H); write_data(Z); for(i=0;i<2;i+) write_data( ); for(i=0;i<4;i+) write_data(lcd_table2i); write_data(size+0x30); write_data(v);void main() init(); while(1) keyscan(); if(key) lcd_display(); void T0_time()interrupt 1 TL0=(65536-value+1400)%256; TH0=(65536-value+1400)/256; num+; if(num>=64) num=0; gene_wave();