單片機(jī)課程設(shè)計---正弦波發(fā)生器_第1頁
已閱讀1頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  課程設(shè)計報告(論文)</p><p>  設(shè)計名稱: 單片機(jī)技術(shù)課程設(shè)計 </p><p>  設(shè)計地點: 單片機(jī)實驗室(教7209) </p><p>  班 級: B09221 </p><p>  姓

2、 名: </p><p>  學(xué) 號: </p><p>  指導(dǎo)教 師: </p><p>  完 成 時 間: 2012 年 4 月 18 日</p><p

3、><b>  課程設(shè)計任務(wù)書</b></p><p>  指導(dǎo)教師: 教研室主任: </p><p>  年 月 日</p><p><b>  一、概述 </b></p><p><b>  1、設(shè)計目的</

4、b></p><p> ?、?了解單片機(jī)系統(tǒng)中實現(xiàn)D/A(數(shù)字、模擬)轉(zhuǎn)換的原理及方法</p><p> ?、?詳細(xì)了解D/A轉(zhuǎn)換芯片0832的性能及編程方法</p><p> ?、?了解單片機(jī)系統(tǒng)中擴(kuò)展D/A轉(zhuǎn)換的基本原理,了解單片機(jī)如何盡行數(shù)據(jù)采集</p><p> ?、?掌握DAC0832,AT89C51輸入/輸出接口電路設(shè)計方法

5、</p><p> ?、?掌握DAC0832轉(zhuǎn)換實現(xiàn)的程序設(shè)計方法</p><p> ?、?掌握WAVE 軟件的操作,掌握單片機(jī)程序設(shè)計的流程</p><p><b>  2、設(shè)計要求</b></p><p>  ① 正弦波頻率范圍:1HZ~100HZ,100HZ~1000HZ</p><p> 

6、?、?頻率步進(jìn)值:1HZ~100HZ檔步進(jìn)是10HZ,100HZ~1000HZ檔步進(jìn)是100HZ</p><p> ?、?輸出電壓:1~5V幅值可調(diào)(1V步進(jìn))</p><p>  ④ 具有顯示輸出波形頻率和幅度的功能 </p><p><b> ?、?顯示位數(shù):6位</b></p><p><b>  ⑥ 鍵

7、盤設(shè)置頻率值</b></p><p>  二、方案設(shè)計與論證(設(shè)計思路、題目分析、解決方法)</p><p><b>  1.編程語言的選擇</b></p><p>  進(jìn)行單片機(jī)開發(fā),既可以用C語言,也可以用匯編語言。在本設(shè)計中選擇合適的語言進(jìn)行設(shè)計很重要。</p><p>  匯編語言是一種用文字助記符來

8、表示機(jī)器指令的符號語言。其主要優(yōu)點是占用資源少,執(zhí)行效率高。但是不同的CPU,其匯編語言可能有所差異,所以不易移植。C語言是一種結(jié)構(gòu)化的高級語言。其優(yōu)點是可讀性好,移植容易,是一種普遍使用的計算機(jī)語言,缺點是占用資源較多,沒有匯編語言執(zhí)行效率高。</p><p>  對于目前普遍使用RISC架構(gòu)的8位單片機(jī)來說,其內(nèi)部ROM、 RAM、STACK等資源有限,如果使用C語言編寫,一條C語言編譯后就會變成很多機(jī)器碼

9、,很容易出現(xiàn)ROM空間不夠、堆棧溢出等問題。而匯編語言,一條指令就對應(yīng)一條機(jī)器碼,每一步的執(zhí)行動作都很清楚,并且程序大小和堆棧條用情況都容易控制,調(diào)試起來也比較方便。</p><p>  就正弦波發(fā)生器設(shè)計而言,對程序指令執(zhí)行的精度、時間要求比較嚴(yán)格,因此本次設(shè)計采用匯編語言進(jìn)行編程較為合理。</p><p>  2.如何利用單片機(jī)進(jìn)行控制輸出-5V~+5V電壓</p>&l

10、t;p>  -5V~+5V為模擬量輸出,單片機(jī)本身并不具備此功能,單片機(jī)只能進(jìn)行數(shù)字量輸出,因此需要用到DAC(數(shù)模轉(zhuǎn)換)芯片</p><p>  DAC0832簡要介紹</p><p>  DAC轉(zhuǎn)換器是一種將數(shù)字量轉(zhuǎn)換成模擬量的器件,其特點是接受、保持和轉(zhuǎn)換的是數(shù)字信息,不存在溫度和事件的漂移問題,因此電路的抗干擾性能較好。DAC0832是8位分辨率的D/A轉(zhuǎn)換集成芯片,它具有價

11、格低廉、接口簡單及轉(zhuǎn)換控制容易等特點。它由8位輸入鎖存器、8位DAC寄存器、8位DIA轉(zhuǎn)換電路及轉(zhuǎn)換控制電路組成,能和CPU數(shù)據(jù)總線直接連接,屬中速轉(zhuǎn)換器,大約在1uS內(nèi)將一個數(shù)字量轉(zhuǎn)換成模擬量輸出。</p><p>  DAC0832的結(jié)構(gòu)</p><p>  D0~D7: 8位數(shù)據(jù)輸入線,TTL電平,有效時間應(yīng)大于90nS(否則鎖存器的數(shù)據(jù)會出錯);</p><p&

12、gt;  ILE:數(shù)據(jù)鎖存允許控制信號輸入線,高電平有效;</p><p>  CS:片選信號輸入線(選通數(shù)據(jù)鎖存器),低電平有效;</p><p>  WR1:數(shù)據(jù)鎖存器寫選通輸入線,負(fù)脈沖(賣寬應(yīng)大于500nS)有效。由ILE、CS、WR1的邏輯組合產(chǎn)生LE1,當(dāng)LE1為高電平時,數(shù)據(jù)鎖存器狀態(tài)隨輸入數(shù)據(jù)線變換,LE1的負(fù)跳變時將輸入數(shù)據(jù)鎖存;</p><p>

13、  XFER: 數(shù)據(jù)傳輸控制信號輸入線,低電平有效,負(fù)脈沖(脈寬應(yīng)大于500nS)有效;</p><p>  WR2:DAC寄存器選通輸入線,負(fù)脈沖(脈寬應(yīng)大于500nS)有效。由WR1、XFER的邏輯組合產(chǎn)生LE2,當(dāng)LE2為高電平時,DAC寄存器的輸出隨寄存器的輸入而變化,LE2的負(fù)跳變時將數(shù)據(jù)鎖存器的內(nèi)容打入DAC寄存器并開始D/A轉(zhuǎn)換。</p><p>  IOUT1:電流輸出端1

14、,其值隨DAC寄存器的內(nèi)容線性變化;</p><p>  IOUT2:電流輸出段2,其值與IOUT1值之和為一常數(shù);</p><p>  Rfb:反饋信號輸入線,改變Rfb端外接電阻值可調(diào)整轉(zhuǎn)換滿量程度;</p><p>  Vcc:電源輸入端,Vcc的范圍為+5V~+5V;</p><p>  VREF:基準(zhǔn)電壓輸入線,VREF的范圍為-1

15、0V~+10V;</p><p>  AGND:模擬信號地;</p><p>  DGND:數(shù)字信號地;</p><p>  0832的引腳圖和內(nèi)部結(jié)構(gòu)圖如圖1、圖2所示</p><p>  圖1 DAC0832引腳圖</p><p>  圖2 DAC0832內(nèi)部結(jié)構(gòu)圖</p><p>  

16、DAC0832的三種工作方式</p><p><b>  1、直通方式</b></p><p>  直通方式是使DAC0832內(nèi)部的兩個寄存器(輸入寄存器和DAC寄存器)處于不鎖存狀態(tài),數(shù)據(jù)一旦到達(dá)輸入端DI7~DI0,就直接送入D/A轉(zhuǎn)換器,被轉(zhuǎn)換成模擬量。當(dāng)ILE為高電平,CS和WR1、WR2和XFER端都接數(shù)字帝,這時鎖存信號LE1、LE2均為高電平,輸入寄存器

17、和DAC寄存器均處于不鎖存狀態(tài),即直通方式。</p><p><b>  2、單緩沖方式</b></p><p>  單緩沖方式就是使兩個寄存器中的一個處于緩沖方式,另一個處于鎖存方式,數(shù)據(jù)只同故宮一級緩沖器送入D/A轉(zhuǎn)換器。通的做法是將CS和XFER均姐弟,使DAC寄存器處于直通凡事,而把ILE接高電平,接端口地址譯碼信號。WR1接CPU系統(tǒng)總顯線的IOW信號,是輸

18、入寄存器處于鎖存方式。但換種方式只需執(zhí)行一次寫操作即可完成D/A轉(zhuǎn)換。一般不需要多個模擬量同時輸出,可采用單緩沖方式。</p><p><b>  3、雙緩沖方式</b></p><p>  雙緩沖方式就是使兩個寄存器均處于鎖存方式,數(shù)據(jù)要經(jīng)過兩級鎖存(即兩級緩沖)后再送入D/A轉(zhuǎn)換器,就是說,要執(zhí)行兩次寫操作才能完成一次D/A轉(zhuǎn)換。只要將ILE接高電平,WR1和WR

19、2接CPU的IOW,CS和XFER分別接兩個不同的I/O地址譯碼信號即可。</p><p>  在本設(shè)計中,令0832工作在單緩沖方式,其片選端接138譯碼器單元的CS1,其地址為0x9000H。</p><p>  DAC0832的輸出方式</p><p>  DAC0832為電流型輸出,若需要電壓輸出可使用運(yùn)算放大器構(gòu)成單極性輸出和雙極性,圖3 中a、b分別為0

20、832的單極性輸出和雙極性輸出的電路連接方式。若采用單極性輸出,則只能產(chǎn)生0V~5V電壓,不能得到既有正脈波又有負(fù)脈波的正弦波。因此本設(shè)計采用DAC0832的雙極性輸出,其輸出電壓為-5~+5V;當(dāng)DI0~DI7為0000000B時輸出-5V,為10000000B時輸出0V,為11111111B是輸出+5V。這樣可以產(chǎn)生既有正脈波又有服脈波的正弦波。</p><p>  圖3 DAC0832的單極性輸出和雙極性輸

21、出</p><p><b>  3.如何產(chǎn)生正弦波</b></p><p>  (a) (b)</p><p><b>  圖4 正弦波的分解</b></p><p>  用單片機(jī)控制DAC0832來產(chǎn)生正弦波有個問題,就是數(shù)模轉(zhuǎn)換總是有其分辨率的,輸

22、出的電壓并不是連續(xù)變化的。例如:8位DAC輸出為-5V~+5V,那么分辨率就是:,所以產(chǎn)生的正弦波會有一定的誤差。</p><p>  如何利用單片機(jī)控制DAC0832產(chǎn)生正弦波呢?我們可以先把一個正弦波按橫軸等間距分別為若干個點(如圖 4分為51個點)。把每個點電壓幅值所對應(yīng)的8位二進(jìn)制數(shù)值做成表,放在CPU的ROM中。例如:圖4中左起第一個點幅值是0V,對應(yīng)的送給DAC0832的8位二進(jìn)制數(shù)為80H,所以表的

23、第一元素為80H</p><p>  制成下表:(下表中數(shù)據(jù)以十進(jìn)制表示)</p><p>  TAB1: DB 128, 144, 160, 175, 190, 203, 216, 227, 236, 244, 250, 254, 255, 255, 254, 250, 244, 236, 227, 216,

24、 203, 190, 175, 160, 144, 128, 112, 96, 81, 66, 53, 40, 29, 20, 12, 6, 2, 0, 0, 2, 6, 12, 20, 29, 40, 53, 66, 81, 96, 112, 128

25、</p><p>  先取表中第一個元素送給0832,0832輸出第一個電壓0V,再取第二個數(shù)送給0832輸出下一個電壓,依次類推,取到表的最后一個元素時,從頭開始取表的第一個元素。循環(huán)往復(fù),就輸出了一個連續(xù)的正弦波形。</p><p>  只產(chǎn)生一個正弦波是不夠的,我們還要求其頻率和幅值可調(diào)??梢钥匆幌履男┮蛩貢绊戄敵霾ㄐ蔚念l率和幅值</p><p><b

26、>  頻率的影響因素</b></p><p>  由圖4可知,該正弦波的頻率 (為所取的兩個點之間的間隔),所以只要改變就可以改變輸出波形的頻率。</p><p>  我采用的方案是:用一個定時器,每隔產(chǎn)生一次中斷,在中斷服務(wù)程序里控制DAC0832輸出。如果想要改變只要改變定時器的時間就行了。也就改變了輸出波形的頻率。</p><p>  采用這

27、個方案需要驗證兩個問題:</p><p> ?、?本設(shè)計要求輸出頻率在1HZ~1000HZ可調(diào),所以定時器的定時時間需要達(dá)到S,即定時器的定時時間要在S之間可調(diào),并且其分辨率滿足要求。經(jīng)驗證51單片機(jī)的定時器0工作在方式1時,其性能滿足要求,故采用定時器的方案可行。</p><p> ?、?不可能無限小,假設(shè)單片機(jī)晶振為6MHZ,那么定時器的分辨率為2S即0.000002S。單片機(jī)執(zhí)行指令

28、是需要時間的,當(dāng)定時器溢出產(chǎn)生中斷時,需要執(zhí)行一系列指令,包括對斷點地址進(jìn)行壓棧、給PC賦值等操作,都是需要占用時間的,這一部分占用的時間是不可避免的。除此之外,進(jìn)入中斷服務(wù)子程序中,順序執(zhí)行里面的程序,在執(zhí)行MOVX @DPTR,A 給DAC0832送數(shù)據(jù)讓其輸出電壓之前會有一些必須的程序,包括賦初值給定時器的TH0和TL0,查表程序等。綜合上面幾個因素,這時定時器的定時時間并不是理論上計算出的時間,而大于這個時間,這樣輸出波形的頻率

29、就會有誤差。為了減小誤差,第一,盡量減少定時中斷服務(wù)程序中的指令,以減少其占用的時間;第二:給TH0,TL0幅值時,減去延時的時間,以抵消掉指令占用的時間。</p><p><b>  幅值的影響因素</b></p><p>  從前面介紹的DAC0832的原理可知,只要改變DAC0832數(shù)字量輸入就可以改變其輸出模擬量的幅度。由于產(chǎn)生波形的幅度是在存儲于單片機(jī)內(nèi)部R

30、OM的表中,按順序取出的。因此我們需要從新建立一個表,這樣定時中斷服務(wù)程序中,該表所查的表,就改變了輸出波形的幅度。本設(shè)計要求幅值1V~5V可調(diào),因此需要建立5個表。</p><p>  建立5個表的時候如果一個元素一個元素的算,未免太麻煩??梢杂肕ATLAB分別算出5個表,然后粘貼到程序中,稍作修改就可以使用(圖5為輸出幅值為4V時表的計算方法算法)。</p><p><b>

31、  算法:</b></p><p>  (U為需要得的到的幅值,此時b數(shù)組就是對應(yīng)的表)</p><p>  圖5 表的計算方法(輸出幅值為4V時)</p><p>  綜合上面改變頻率和幅值的方法,就可以得到符合本設(shè)計的設(shè)計要求的波形。</p><p>  3.頻率與幅值的設(shè)置</p><p>  方案:

32、利用單脈沖發(fā)生器,當(dāng)需要設(shè)置幅值和頻率時,產(chǎn)生中斷,暫停正在工作的定時器,停止波形輸出,進(jìn)入外部中斷0中斷服務(wù)程序,通過按鍵,對波形進(jìn)行設(shè)置。</p><p>  按鍵0:頻率/幅值切換;</p><p>  按鍵1:頻率/幅值增加;</p><p>  按鍵2:退出外部中斷,開啟定時器,輸出波形</p><p><b>  4.鍵

33、盤與顯示</b></p><p>  利用WAVE6000 實驗環(huán)境中的顯示程序和鍵盤掃描電路及程序。改程序提供了三個子程序:TestKey;GetKey;DispLedBuf。</p><p><b>  三、硬件設(shè)計</b></p><p><b>  1.硬件電路</b></p><

34、p>  本設(shè)計由單片機(jī)、D/A轉(zhuǎn)換電路、鍵盤及顯示電路幾個組成部分,各部分采用的電路形式及主要器件確定如下:</p><p><b> ?。?)單片機(jī)部分</b></p><p>  選用89C51單片機(jī)作為主機(jī),同時要設(shè)計89C51單片機(jī)的晶振電路和復(fù)位電路,具體電路略。</p><p>  (2)D/A轉(zhuǎn)換電路部分</p>

35、<p>  直接利用單片機(jī)實驗箱上的D/A轉(zhuǎn)換電路正弦波信號的輸出。電路如圖6所示。</p><p>  圖6 DAC0832連接電路</p><p>  (3)按鍵與顯示部分</p><p>  直接利用單片機(jī)試驗箱上的按鍵與顯示電路。如圖7、圖8所示</p><p>  圖7 顯示器電路連接圖</p><

36、p>  圖8 鍵盤電路連接圖</p><p><b>  四、程序設(shè)計 </b></p><p><b>  1.程序流程圖</b></p><p><b>  主程序流程圖:</b></p><p>  定時器0中斷服務(wù)程序流程圖:</p><p

37、>  圖10定時器0中斷服務(wù)程序流程圖</p><p><b>  外部中斷0</b></p><p><b>  中斷服務(wù)程序</b></p><p><b>  流程圖:</b></p><p><b>  2.程序模塊功能</b></p&

38、gt;<p>  主程序:進(jìn)行一系列初始化后,主程序最后停在SJMP $等待。</p><p>  定時器0中斷服務(wù)程序:每隔一定時間按次序查表,把相應(yīng)數(shù)值送給DAC0832進(jìn)行數(shù)模轉(zhuǎn)換,實現(xiàn)正弦波輸出。</p><p>  外部中斷0中斷服務(wù)程序:配合按鍵掃描程序和數(shù)碼管顯示程序,對正弦波參數(shù)進(jìn)行設(shè)置。</p><p><b>  3.硬件

39、資源分配表</b></p><p><b>  四、運(yùn)行結(jié)果分析</b></p><p>  1.軟硬件調(diào)試(出現(xiàn)的問題、如何解決。。。)</p><p>  搭建PROTEUS仿真電路,進(jìn)行軟件模擬仿真(圖12)</p><p>  圖12 PROTEUS仿真電路</p><p> 

40、 此電路和實際電路有差異,主要用于前期的軟件仿真,基本的波形發(fā)生,測試MATLAB軟件計算出的數(shù)值運(yùn)行后是否滿足設(shè)計要求。</p><p>  此外,我還用此電路測試了取不同點數(shù)時,波形差異。分別測試了30點、50點、70點以及100點,點數(shù)越多越接近正弦,點數(shù)越少失真越嚴(yán)重。但是點數(shù)過多,所能達(dá)到的頻率最低值越大,不能滿足本設(shè)計中頻率達(dá)到1000HZ的要求。經(jīng)試驗,取50點可以達(dá)到最好的效果,是頻率達(dá)到要求,波

41、形又不失真嚴(yán)重。</p><p>  前期仿真完成后,進(jìn)行上機(jī)調(diào)試。</p><p>  起初,加上鍵盤顯示程序時,鍵盤和顯示程序時鐘程序始終不正常。</p><p>  經(jīng)老師指點,改變思路,在進(jìn)行頻率和幅度設(shè)置時,關(guān)掉波形發(fā)生功能。</p><p><b>  順利完成調(diào)試。</b></p><p

42、><b>  2.運(yùn)行結(jié)果</b></p><p>  系統(tǒng)上電,產(chǎn)生50HZ,-5V~+5V正弦波。按單脈沖發(fā)生鍵,進(jìn)入設(shè)置程序,按鍵盤0鍵決定調(diào)節(jié)頻率還是幅值;按1鍵進(jìn)行調(diào)節(jié);按2鍵完成設(shè)置,開始輸出波形。(圖13、圖14、圖15、圖16分別為幾種不同頻率和幅值的輸出波形)</p><p>  圖13 正弦波(100HZ,-5V~+5V)</p>

43、<p>  圖13 正弦波(100HZ,-4V~+4V)</p><p>  圖14 正弦波(200HZ,-4V~+4V)</p><p><b>  五、設(shè)計總結(jié)</b></p><p>  本次設(shè)計題目是正弦信號發(fā)生器。用到的硬件有按鍵、數(shù)碼管顯示、譯碼電路、DAC0832、8051單片機(jī)。通過這次設(shè)計,進(jìn)一步熟悉了這些硬件的

44、用法。熟悉了WAVE編程軟件的使用。對匯編語言進(jìn)行單片機(jī)程序設(shè)計有了更深一步的認(rèn)識。</p><p>  完成本次設(shè)計后,學(xué)到了一種新的編程思路:大量的應(yīng)用查表的方式進(jìn)行程序設(shè)計,可以有效的增加程序執(zhí)行的效率,縮短其執(zhí)行時間,一些對程序執(zhí)行時間有嚴(yán)格要求的場合,可以用此思路進(jìn)行設(shè)計。當(dāng)然,查表方式進(jìn)行程序設(shè)計亦有其缺點:占用大量的內(nèi)部ROM空間,對于一些內(nèi)部ROM空間不是很充足的單片機(jī),過多的表可能導(dǎo)致ROM空間

45、不足。因此,進(jìn)行程序設(shè)計時要將查表方式和算法方式進(jìn)行綜合考慮,選擇效率較高的方式進(jìn)行設(shè)計,也可以將兩種方式有效結(jié)合起來。</p><p>  此次設(shè)計能順利完成,要感謝李老師的指導(dǎo),在加入鍵盤和顯示程序時,遇到了困難,是李老師的指導(dǎo),使我走出了泥潭。</p><p><b>  六、參考資料</b></p><p>  [1] 胡宴如. 高頻電

46、子線路[M].高教出版社. 2001.9:12-19 </p><p>  [2] 盧屹. 數(shù)字鎖相環(huán)的參數(shù)設(shè)計及其應(yīng)用[J] 通信技術(shù)2001,(9):12-15</p><p>  [3] 涂時亮等. 單片微機(jī)軟件設(shè)計技術(shù).重慶:科學(xué)技術(shù)文獻(xiàn)出版社重慶分社,1988</p><p>  [4] 張志良. 單片機(jī)原理及控制技術(shù).北京:機(jī)械工業(yè)出版社,2001<

47、;/p><p>  [5] 徐君毅等,單片微型計算機(jī)原理與應(yīng)用.上海:上??茖W(xué)技術(shù)版社,1988</p><p>  [6] 成都木馬科技. 單片機(jī)原理及應(yīng)用.北京:北京希望電子出版社,1988</p><p>  [7] 宋培義等.單片機(jī)原理、接口技術(shù)及應(yīng)用.北京:中國廣播電視出版社,1999</p><p>  [8] 何利民.I2C總線應(yīng)用

48、系統(tǒng)設(shè)計.北京:北京航空航天大學(xué)出版社,1994</p><p><b>  附錄:源程序</b></p><p><b>  ORG 0000H</b></p><p><b>  AJMP MAIN</b></p><p><b>  ORG 0003H<

49、/b></p><p>  LJMP WBZD0</p><p><b>  ORG 000BH</b></p><p>  LJMP DSZD0</p><p><b>  ORG 0030H</b></p><p>  CU EQU 09H</p>

50、<p>  CTH0 EQU 10H</p><p>  CTL0 EQU 11H</p><p>  CHZ EQU 12H</p><p>  CDPH EQU 13H</p><p>  OUTBIT equ 08002h ; 位控制口</p><p>  OUTSEG

51、equ 08004h ; 段控制口</p><p>  IN equ 08001h ; 鍵盤讀入口</p><p>  LEDBuf equ 60h ; 顯示緩沖</p><p>  MAIN: MOV CHZ,#0</p><p>  MOV A,#00H</p><p>  MOV D

52、PTR,#09000H</p><p>  MOV TMOD,#11H</p><p>  MOV TH0,#0FFH</p><p>  MOV TL0,#0EDH</p><p><b>  SETB EA</b></p><p><b>  SETB ET0</b>&l

53、t;/p><p><b>  SETB ET1</b></p><p><b>  SETB EX1</b></p><p><b>  SETB IT0</b></p><p><b>  SETB IT1</b></p><p> 

54、 MOV CDPH,#09H</p><p><b>  SETB EX0</b></p><p>  MOV CTH0,#0FFH</p><p>  MOV CTL0,#0FH</p><p><b>  SETB TR0</b></p><p><b>

55、;  SJMP $</b></p><p>  Delay: mov r7, #0</p><p>  DelayLoop:</p><p>  djnz r7, DelayLoop</p><p>  djnz r6, DelayLoop</p><p><b>  ret</

56、b></p><p>  DisplayLED:</p><p>  mov r0, #LEDBuf</p><p>  mov r1, #6 ; 共6個八段管</p><p>  mov r2, #00100000b ; 從左邊開始顯示</p><p><b>  Lo

57、op:</b></p><p>  mov dptr, #OUTBIT</p><p>  mov a, #0</p><p>  movx @dptr, a ; 關(guān)所有八段管</p><p>  mov a, @r0</p><p>  mov dptr, #OUTSEG&

58、lt;/p><p>  movx @dptr, a</p><p>  mov dptr, #OUTBIT</p><p>  mov a, r2</p><p>  movx @dptr, a ; 顯示一位八段管</p><p>  mov r6, #1</p><p&g

59、t;  call Delay</p><p>  mov a, r2 ; 顯示下一位</p><p><b>  rr a</b></p><p>  mov r2, a</p><p><b>  inc r0</b></p><p>

60、;  djnz r1, Loop</p><p><b>  ret</b></p><p><b>  TestKey:</b></p><p>  mov dptr, #OUTBIT</p><p>  mov a, #0</p><p>  movx @dp

61、tr, a ; 輸出線置為0</p><p>  mov dptr, #IN</p><p>  movx a, @dptr ; 讀入鍵狀態(tài)</p><p><b>  cpl a</b></p><p>  anl a, #0fh ; 高四位不用</p&g

62、t;<p><b>  ret</b></p><p><b>  GetKey:</b></p><p>  mov dptr, #OUTBIT</p><p>  mov P2, dph</p><p>  mov r0, #Low(IN)</p><

63、;p>  mov r1, #00100000b</p><p>  mov r2, #6</p><p><b>  KLoop:</b></p><p>  mov a, r1 ; 找出鍵所在列</p><p><b>  cpl a</b></p&

64、gt;<p>  movx @dptr, a</p><p><b>  cpl a</b></p><p><b>  rr a</b></p><p>  mov r1, a ; 下一列</p><p>  movx a, @r0</p&

65、gt;<p><b>  cpl a</b></p><p>  anl a, #0fh</p><p>  jnz Goon1 ; 該列有鍵入</p><p>  djnz r2, KLoop</p><p>  mov r2, #0ffh ; 沒有鍵按下

66、, 返回 0ffh</p><p>  sjmp Exit</p><p><b>  Goon1:</b></p><p>  mov r1, a ; 鍵值 = 列 X 4 + 行</p><p>  mov a, r2</p><p><b>  dec

67、 a</b></p><p><b>  rl a</b></p><p><b>  rl a</b></p><p>  mov r2, a ; r2 = (r2-1)*4</p><p>  mov a, r1 ; r

68、1中為讀入的行值</p><p>  mov r1, #4</p><p><b>  LoopC:</b></p><p>  rrc a ; 移位找出所在行</p><p>  jc Exit</p><p>  inc r2

69、 ; r2 = r2+ 行值</p><p>  djnz r1, LoopC</p><p><b>  Exit:</b></p><p>  mov a, r2 ; 取出鍵碼</p><p>  mov dptr, #KeyTable</p><p>  m

70、ovc a, @a+dptr</p><p>  mov r2, a</p><p>  WaitRelease:</p><p>  mov dptr, #OUTBIT ; 等鍵釋放</p><p><b>  clr a</b></p><p>  movx @dptr, a

71、</p><p>  mov r6, #10</p><p>  call Delay</p><p>  call TestKey</p><p>  jnz WaitRelease</p><p>  mov a, r2</p><p><b>  ret</

72、b></p><p>  KeyTable: ; 鍵碼定義</p><p>  db 16h, 15h, 14h, 0ffh</p><p>  db 13h, 12h, 11h, 10h</p><p>  db 0dh, 0ch, 0bh, 0ah</p><

73、;p>  db 0eh, 03h, 06h, 09h</p><p>  db 0fh, 02h, 05h, 08h</p><p>  db 00h, 01h, 04h, 07h</p><p>  LEDMAP: ; 八段管顯示碼</p><p>  db 3fh, 06h, 5bh

74、, 4fh, 66h, 6dh, 7dh, 07h</p><p>  db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h</p><p><b>  WBZD0 :</b></p><p>  CLR ET0; ;禁止定時器中斷,不再產(chǎn)生波形</p><p&

75、gt;  CLR F0 ; ;flag</p><p>  mov LEDBuf+0, #0h ; 顯示 8.8.8.8.</p><p>  mov LEDBuf+1, #0h</p><p>  mov LEDBuf+2, #0h</p><p>  mov LEDBuf+3, #0h&

76、lt;/p><p>  mov LEDBuf+4, #0</p><p>  mov LEDBuf+5, #0</p><p>  K1: CALL DisplayLED ; ;顯示程序</p><p>  call TestKey ;;檢測按鍵</p><p><b>  J

77、Z K1</b></p><p>  call GetKey ; ;獲取鍵值</p><p>  ANL A,#0FH</p><p>  CJNE A,#0,NE1 ;;判斷是否按下0鍵,0鍵功能:輸入頻率還是幅值的轉(zhuǎn)換</p><p><b>  CPL F0</

78、b></p><p>  JB F0,BB ; ;輸入幅值還是頻率的標(biāo)志</p><p>  MOV LEDBuf+0, #71H</p><p><b>  SJMP BB1</b></p><p>  BB: MOV LEDBuf+0, #00111110B</p&g

79、t;<p>  BB1:LJMP K1</p><p>  NE1:CJNE A,#1,EE</p><p><b>  SJMP CC</b></p><p>  EE:LJMP NE2</p><p>  CC:JB F0,AF</p><p>  MOV A

80、,CU</p><p>  MOV DPTR,#TABSJH ;CTH0里面內(nèi)容TH0,CTL0里面內(nèi)容TL0</p><p>  MOVC A,@A+DPTR</p><p>  MOV CTH0,A</p><p>  MOV A,CU</p><p>  MOV DPTR,#TABSJL&

81、lt;/p><p>  MOVC A,@A+DPTR </p><p>  MOV CTL0,A</p><p><b>  INC CU</b></p><p>  MOV A,CU</p><p>  CJNE A,#21,S1</p><p>  MO

82、V CU,#0</p><p><b>  S1: </b></p><p>  mov LEDBuf+1, #0h</p><p>  mov LEDBuf+2, #0h</p><p>  mov LEDBuf+3, #0h</p><p>  mov LEDBu

83、f+4, #0</p><p>  mov LEDBuf+5, #0</p><p>  MOV A,CU</p><p>  MOV DPTR,#TAB7SEG6</p><p>  MOVC A,@A+DPTR</p><p>  MOV LEDBuf+5,A</p><p&g

84、t;  MOV A,CU</p><p>  MOV DPTR,#TAB7SEG5</p><p>  MOVC A,@A+DPTR</p><p>  MOV LEDBuf+4,A</p><p>  MOV A,CU</p><p>  MOV DPTR,#TAB7SEG4</p>

85、<p>  MOVC A,@A+DPTR</p><p>  MOV LEDBuf+3,A</p><p>  MOV A,CU</p><p>  MOV DPTR,#TAB7SEG3</p><p>  MOVC A,@A+DPTR</p><p>  MOV LEDBuf+2,A

86、</p><p><b>  SJMP K1</b></p><p><b>  AF:</b></p><p><b>  INC CHZ</b></p><p><b>  MOV A,CHZ</b></p><p>  CJ

87、NE A,#1,MM1</p><p>  MOV CDPH,#0CH</p><p><b>  SJMP W1</b></p><p>  MM1: CJNE A,#2,MM2</p><p>  MOV CDPH,#0BH</p><p><b>  SJMP W1</b&

88、gt;</p><p><b>  MM2:</b></p><p>  CJNE A,#3,MM3</p><p>  MOV CDPH,#0AH</p><p><b>  SJMP W1</b></p><p>  MM3: CJNE A,#4,MM4</p&g

89、t;<p>  MOV CDPH,#09H</p><p><b>  SJMP W1</b></p><p>  MM4: MOV CDPH,#0DH</p><p>  MOV CHZ,#0</p><p><b>  SJMP W1</b></p><p&g

90、t;  W1: mov LEDBuf+1, #0h</p><p>  mov LEDBuf+2, #0h</p><p>  mov LEDBuf+3, #0h</p><p>  mov LEDBuf+4, #0</p><p>  mov LEDBuf+5, #0</p><p>  MOV

91、 DPTR,#TAB7SEG1</p><p>  MOV A,CHZ</p><p>  MOVC A,@A+DPTR</p><p>  MOV LEDBuf+5,A</p><p><b>  LJMP K1</b></p><p>  NE2: CJNE A,#2,NE3<

92、/p><p>  SJMP MEND</p><p>  NE3: LJMP K1</p><p>  MEND: SETB ET0;</p><p><b>  RETI</b></p><p><b>  DSZD0:</b></p><p> 

93、 MOV TH0,CTH0</p><p>  MOV TL0,CTL0</p><p>  MOV DPH,CDPH</p><p>  MOV DPL,#0</p><p><b>  MOV A,R0</b></p><p>  MOVC A,@A+DPTR</p><p

94、>  MOV DPTR,#09000H</p><p>  MOVX @DPTR,A</p><p><b>  INC R0</b></p><p>  CJNE R0,#50,LL</p><p><b>  MOV R0,#0</b></p><p><b&

95、gt;  LL: RETI</b></p><p>  TAB7SEG1:DB 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h</p><p>  DB 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h</p><p>  TAB7SEG2:DB 0H ,0H ,0H ,0H ,0H ,0H

96、,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0</p><p>  TAB7SEG3:DB 0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,06H,0</p><p>  TAB7SEG4:DB 0H ,0H ,0

97、H ,0H ,0H ,0H ,0H ,0H ,0H ,0H ,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH ,0</p><p>  TAB7SEG5:DB 0H ,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,0</p><p>  TAB7SEG

98、6:DB 06H ,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,3FH,0</p><p>  TABSJH:DB 0F8H,0FCH,0FDH,0FEH,0FEH,0FEH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH<

99、/p><p>  TABSJL:DB 30H,18H,65H,0CH,70H,0B2H,0E2H,06H,21H,38H,38H,9cH,0bdH,0ceH,0D8H,0DEH,0E3H,0E7H,0E9H,0ECH</p><p><b>  ORG 0900H</b></p><p>  TAB1: DB 128, 144, 160

100、, 175, 190, 203, 216, 227, 236, 244, 250, 254, 255, 255, 254, 250, 244, 236, 227, 216, 203, 190, 175, 160, 144, 128, 112, 96, 81, 66, 53, 40, 29, 20,

101、12, 6, 2, 0, 0, 2, 6, 12, 20, 29, 40, 53, 66, 81, 96, 112, 128 </p><p><b>  ORG 0A00H</b></p><p>  TAB2: DB 128, 140, 153

102、, 165, 176, 186, 196, 205, 212, 218, 223, 226, 227, 227, 226, 223, 218, 212, 205, 196, 186, 176, 165, 153, 140, 128, 116, 103, 91, 80, 70, 60, 51, 44,

103、 38, 33, 30, 29, 29, 30, 33, 38, 44, 51, 60, 70, 80, 91, 103, 116, 128</p><p><b>  ORG 0B00H</b></p><p>  TAB3: DB 128, 137, 146, 1

104、54, 162, 170, 176, 183, 188, 192, 195, 198, 199, 199, 198, 195, 192, 188, 183, 176, 170, 162, 154, 146, 137, 128, 119, 110, 102, 94, 86, 80, 73, 68, 64,

105、 61, 58, 57, 57, 58, 61, 64, 68, 73, 80, 86, 94, 102, 110, 119, 128</p><p><b>  ORG 0C00H</b></p><p>  TAB4: DB 128, 133, 138, 144,

106、 148, 153, 157, 161, 164, 166, 168, 169, 170, 170, 169, 168, 166, 164, 161, 157, 153, 148, 144, 138, 133, 128, 123, 118, 112, 108, 103, 99, 95, 92, 90,

107、 88, 87, 86, 86, 87, 88, 90, 92, 95, 99, 103, 108, 112, 118, 123, 128</p><p><b>  ORG 0D00H</b></p><p>  TAB5: DB 128, 130, 131, 133,

108、 135, 136, 137, 138, 139, 140, 141, 141, 142, 142, 141, 141, 140, 139, 138, 137, 136, 135, 133, 131, 130, 128, 126, 125, 123, 121, 120, 119, 118, 117, 116, 115,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論