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

下載本文檔

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

文檔簡介

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

2、 名: </p><p>  學 號: </p><p>  指導教 師: </p><p>  完 成 時 間: 2012 年 4 月 18 日</p><p

3、><b>  課程設計任務書</b></p><p>  指導教師: 教研室主任: </p><p>  年 月 日</p><p><b>  一、概述 </b></p><p><b>  1、設計目的</

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

23、第一元素為80H</p><p>  制成下表:(下表中數(shù)據(jù)以十進制表示)</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)往復,就輸出了一個連續(xù)的正弦波形。</p><p>  只產(chǎn)生一個正弦波是不夠的,我們還要求其頻率和幅值可調(diào)??梢钥匆幌履男┮蛩貢绊戄敵霾ㄐ蔚念l率和幅值</p><p><b

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

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

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

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

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

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

32、利用單脈沖發(fā)生器,當需要設置幅值和頻率時,產(chǎn)生中斷,暫停正在工作的定時器,停止波形輸出,進入外部中斷0中斷服務程序,通過按鍵,對波形進行設置。</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>  三、硬件設計</b></p><p><b>  1.硬件電路</b></p><

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

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

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

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

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

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

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

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

42、><b>  2.運行結果</b></p><p>  系統(tǒng)上電,產(chǎn)生50HZ,-5V~+5V正弦波。按單脈沖發(fā)生鍵,進入設置程序,按鍵盤0鍵決定調(diào)節(jié)頻率還是幅值;按1鍵進行調(diào)節(jié);按2鍵完成設置,開始輸出波形。(圖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>  五、設計總結</b></p><p>  本次設計題目是正弦信號發(fā)生器。用到的硬件有按鍵、數(shù)碼管顯示、譯碼電路、DAC0832、8051單片機。通過這次設計,進一步熟悉了這些硬件的

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

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

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

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

48、系統(tǒng)設計.北京:北京航空航天大學出版社,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 ; 關所有八段管</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鍵功能:輸入頻率還是幅值的轉換</p><p><b>  CPL F0</

78、b></p><p>  JB F0,BB ; ;輸入幅值還是頻率的標志</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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論