版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課程設(shè)計(jì)報(bào)告(論文)</p><p> 設(shè)計(jì)名稱(chēng): 單片機(jī)技術(shù)課程設(shè)計(jì) </p><p> 設(shè)計(jì)地點(diǎn): 單片機(jī)實(shí)驗(yàn)室(教7209) </p><p> 班 級(jí): B09221 </p><p> 姓
2、 名: </p><p> 學(xué) 號(hào): </p><p> 指導(dǎo)教 師: </p><p> 完 成 時(shí) 間: 2012 年 4 月 18 日</p><p
3、><b> 課程設(shè)計(jì)任務(wù)書(shū)</b></p><p> 指導(dǎo)教師: 教研室主任: </p><p> 年 月 日</p><p><b> 一、概述 </b></p><p><b> 1、設(shè)計(jì)目的</
4、b></p><p> ?、?了解單片機(jī)系統(tǒng)中實(shí)現(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è)計(jì)方法
5、</p><p> ?、?掌握DAC0832轉(zhuǎn)換實(shí)現(xiàn)的程序設(shè)計(jì)方法</p><p> ?、?掌握WAVE 軟件的操作,掌握單片機(jī)程序設(shè)計(jì)的流程</p><p><b> 2、設(shè)計(jì)要求</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、盤(pán)設(shè)置頻率值</b></p><p> 二、方案設(shè)計(jì)與論證(設(shè)計(jì)思路、題目分析、解決方法)</p><p><b> 1.編程語(yǔ)言的選擇</b></p><p> 進(jìn)行單片機(jī)開(kāi)發(fā),既可以用C語(yǔ)言,也可以用匯編語(yǔ)言。在本設(shè)計(jì)中選擇合適的語(yǔ)言進(jìn)行設(shè)計(jì)很重要。</p><p> 匯編語(yǔ)言是一種用文字助記符來(lái)
8、表示機(jī)器指令的符號(hào)語(yǔ)言。其主要優(yōu)點(diǎn)是占用資源少,執(zhí)行效率高。但是不同的CPU,其匯編語(yǔ)言可能有所差異,所以不易移植。C語(yǔ)言是一種結(jié)構(gòu)化的高級(jí)語(yǔ)言。其優(yōu)點(diǎn)是可讀性好,移植容易,是一種普遍使用的計(jì)算機(jī)語(yǔ)言,缺點(diǎn)是占用資源較多,沒(méi)有匯編語(yǔ)言執(zhí)行效率高。</p><p> 對(duì)于目前普遍使用RISC架構(gòu)的8位單片機(jī)來(lái)說(shuō),其內(nèi)部ROM、 RAM、STACK等資源有限,如果使用C語(yǔ)言編寫(xiě),一條C語(yǔ)言編譯后就會(huì)變成很多機(jī)器碼
9、,很容易出現(xiàn)ROM空間不夠、堆棧溢出等問(wèn)題。而匯編語(yǔ)言,一條指令就對(duì)應(yīng)一條機(jī)器碼,每一步的執(zhí)行動(dòng)作都很清楚,并且程序大小和堆棧條用情況都容易控制,調(diào)試起來(lái)也比較方便。</p><p> 就正弦波發(fā)生器設(shè)計(jì)而言,對(duì)程序指令執(zhí)行的精度、時(shí)間要求比較嚴(yán)格,因此本次設(shè)計(jì)采用匯編語(yǔ)言進(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簡(jiǎn)要介紹</p><p> DAC轉(zhuǎn)換器是一種將數(shù)字量轉(zhuǎn)換成模擬量的器件,其特點(diǎn)是接受、保持和轉(zhuǎn)換的是數(shù)字信息,不存在溫度和事件的漂移問(wèn)題,因此電路的抗干擾性能較好。DAC0832是8位分辨率的D/A轉(zhuǎn)換集成芯片,它具有價(jià)
11、格低廉、接口簡(jiǎn)單及轉(zhuǎn)換控制容易等特點(diǎn)。它由8位輸入鎖存器、8位DAC寄存器、8位DIA轉(zhuǎn)換電路及轉(zhuǎn)換控制電路組成,能和CPU數(shù)據(jù)總線(xiàn)直接連接,屬中速轉(zhuǎn)換器,大約在1uS內(nèi)將一個(gè)數(shù)字量轉(zhuǎn)換成模擬量輸出。</p><p> DAC0832的結(jié)構(gòu)</p><p> D0~D7: 8位數(shù)據(jù)輸入線(xiàn),TTL電平,有效時(shí)間應(yīng)大于90nS(否則鎖存器的數(shù)據(jù)會(huì)出錯(cuò));</p><p&
12、gt; ILE:數(shù)據(jù)鎖存允許控制信號(hào)輸入線(xiàn),高電平有效;</p><p> CS:片選信號(hào)輸入線(xiàn)(選通數(shù)據(jù)鎖存器),低電平有效;</p><p> WR1:數(shù)據(jù)鎖存器寫(xiě)選通輸入線(xiàn),負(fù)脈沖(賣(mài)寬應(yīng)大于500nS)有效。由ILE、CS、WR1的邏輯組合產(chǎn)生LE1,當(dāng)LE1為高電平時(shí),數(shù)據(jù)鎖存器狀態(tài)隨輸入數(shù)據(jù)線(xiàn)變換,LE1的負(fù)跳變時(shí)將輸入數(shù)據(jù)鎖存;</p><p>
13、 XFER: 數(shù)據(jù)傳輸控制信號(hào)輸入線(xiàn),低電平有效,負(fù)脈沖(脈寬應(yīng)大于500nS)有效;</p><p> WR2:DAC寄存器選通輸入線(xiàn),負(fù)脈沖(脈寬應(yīng)大于500nS)有效。由WR1、XFER的邏輯組合產(chǎn)生LE2,當(dāng)LE2為高電平時(shí),DAC寄存器的輸出隨寄存器的輸入而變化,LE2的負(fù)跳變時(shí)將數(shù)據(jù)鎖存器的內(nèi)容打入DAC寄存器并開(kāi)始D/A轉(zhuǎn)換。</p><p> IOUT1:電流輸出端1
14、,其值隨DAC寄存器的內(nèi)容線(xiàn)性變化;</p><p> IOUT2:電流輸出段2,其值與IOUT1值之和為一常數(shù);</p><p> Rfb:反饋信號(hào)輸入線(xiàn),改變Rfb端外接電阻值可調(diào)整轉(zhuǎn)換滿(mǎn)量程度;</p><p> Vcc:電源輸入端,Vcc的范圍為+5V~+5V;</p><p> VREF:基準(zhǔn)電壓輸入線(xiàn),VREF的范圍為-1
15、0V~+10V;</p><p> AGND:模擬信號(hào)地;</p><p> DGND:數(shù)字信號(hào)地;</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)部的兩個(gè)寄存器(輸入寄存器和DAC寄存器)處于不鎖存狀態(tài),數(shù)據(jù)一旦到達(dá)輸入端DI7~DI0,就直接送入D/A轉(zhuǎn)換器,被轉(zhuǎn)換成模擬量。當(dāng)ILE為高電平,CS和WR1、WR2和XFER端都接數(shù)字帝,這時(shí)鎖存信號(hào)LE1、LE2均為高電平,輸入寄存器
17、和DAC寄存器均處于不鎖存狀態(tài),即直通方式。</p><p><b> 2、單緩沖方式</b></p><p> 單緩沖方式就是使兩個(gè)寄存器中的一個(gè)處于緩沖方式,另一個(gè)處于鎖存方式,數(shù)據(jù)只同故宮一級(jí)緩沖器送入D/A轉(zhuǎn)換器。通的做法是將CS和XFER均姐弟,使DAC寄存器處于直通凡事,而把ILE接高電平,接端口地址譯碼信號(hào)。WR1接CPU系統(tǒng)總顯線(xiàn)的IOW信號(hào),是輸
18、入寄存器處于鎖存方式。但換種方式只需執(zhí)行一次寫(xiě)操作即可完成D/A轉(zhuǎn)換。一般不需要多個(gè)模擬量同時(shí)輸出,可采用單緩沖方式。</p><p><b> 3、雙緩沖方式</b></p><p> 雙緩沖方式就是使兩個(gè)寄存器均處于鎖存方式,數(shù)據(jù)要經(jīng)過(guò)兩級(jí)鎖存(即兩級(jí)緩沖)后再送入D/A轉(zhuǎn)換器,就是說(shuō),要執(zhí)行兩次寫(xiě)操作才能完成一次D/A轉(zhuǎn)換。只要將ILE接高電平,WR1和WR
19、2接CPU的IOW,CS和XFER分別接兩個(gè)不同的I/O地址譯碼信號(hào)即可。</p><p> 在本設(shè)計(jì)中,令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è)計(jì)采用DAC0832的雙極性輸出,其輸出電壓為-5~+5V;當(dāng)DI0~DI7為0000000B時(shí)輸出-5V,為10000000B時(shí)輸出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> 用單片機(jī)控制DAC0832來(lái)產(chǎn)生正弦波有個(gè)問(wèn)題,就是數(shù)模轉(zhuǎn)換總是有其分辨率的,輸
22、出的電壓并不是連續(xù)變化的。例如:8位DAC輸出為-5V~+5V,那么分辨率就是:,所以產(chǎn)生的正弦波會(huì)有一定的誤差。</p><p> 如何利用單片機(jī)控制DAC0832產(chǎn)生正弦波呢?我們可以先把一個(gè)正弦波按橫軸等間距分別為若干個(gè)點(diǎn)(如圖 4分為51個(gè)點(diǎn))。把每個(gè)點(diǎn)電壓幅值所對(duì)應(yīng)的8位二進(jìn)制數(shù)值做成表,放在CPU的ROM中。例如:圖4中左起第一個(gè)點(diǎn)幅值是0V,對(duì)應(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> 先取表中第一個(gè)元素送給0832,0832輸出第一個(gè)電壓0V,再取第二個(gè)數(shù)送給0832輸出下一個(gè)電壓,依次類(lèi)推,取到表的最后一個(gè)元素時(shí),從頭開(kāi)始取表的第一個(gè)元素。循環(huán)往復(fù),就輸出了一個(gè)連續(xù)的正弦波形。</p><p> 只產(chǎn)生一個(gè)正弦波是不夠的,我們還要求其頻率和幅值可調(diào)??梢钥匆幌履男┮蛩貢?huì)影響輸出波形的頻率和幅值</p><p><b
26、> 頻率的影響因素</b></p><p> 由圖4可知,該正弦波的頻率 (為所取的兩個(gè)點(diǎn)之間的間隔),所以只要改變就可以改變輸出波形的頻率。</p><p> 我采用的方案是:用一個(gè)定時(shí)器,每隔產(chǎn)生一次中斷,在中斷服務(wù)程序里控制DAC0832輸出。如果想要改變只要改變定時(shí)器的時(shí)間就行了。也就改變了輸出波形的頻率。</p><p> 采用這
27、個(gè)方案需要驗(yàn)證兩個(gè)問(wèn)題:</p><p> ① 本設(shè)計(jì)要求輸出頻率在1HZ~1000HZ可調(diào),所以定時(shí)器的定時(shí)時(shí)間需要達(dá)到S,即定時(shí)器的定時(shí)時(shí)間要在S之間可調(diào),并且其分辨率滿(mǎn)足要求。經(jīng)驗(yàn)證51單片機(jī)的定時(shí)器0工作在方式1時(shí),其性能滿(mǎn)足要求,故采用定時(shí)器的方案可行。</p><p> ?、?不可能無(wú)限小,假設(shè)單片機(jī)晶振為6MHZ,那么定時(shí)器的分辨率為2S即0.000002S。單片機(jī)執(zhí)行指令
28、是需要時(shí)間的,當(dāng)定時(shí)器溢出產(chǎn)生中斷時(shí),需要執(zhí)行一系列指令,包括對(duì)斷點(diǎn)地址進(jìn)行壓棧、給PC賦值等操作,都是需要占用時(shí)間的,這一部分占用的時(shí)間是不可避免的。除此之外,進(jìn)入中斷服務(wù)子程序中,順序執(zhí)行里面的程序,在執(zhí)行MOVX @DPTR,A 給DAC0832送數(shù)據(jù)讓其輸出電壓之前會(huì)有一些必須的程序,包括賦初值給定時(shí)器的TH0和TL0,查表程序等。綜合上面幾個(gè)因素,這時(shí)定時(shí)器的定時(shí)時(shí)間并不是理論上計(jì)算出的時(shí)間,而大于這個(gè)時(shí)間,這樣輸出波形的頻率
29、就會(huì)有誤差。為了減小誤差,第一,盡量減少定時(shí)中斷服務(wù)程序中的指令,以減少其占用的時(shí)間;第二:給TH0,TL0幅值時(shí),減去延時(shí)的時(shí)間,以抵消掉指令占用的時(shí)間。</p><p><b> 幅值的影響因素</b></p><p> 從前面介紹的DAC0832的原理可知,只要改變DAC0832數(shù)字量輸入就可以改變其輸出模擬量的幅度。由于產(chǎn)生波形的幅度是在存儲(chǔ)于單片機(jī)內(nèi)部R
30、OM的表中,按順序取出的。因此我們需要從新建立一個(gè)表,這樣定時(shí)中斷服務(wù)程序中,該表所查的表,就改變了輸出波形的幅度。本設(shè)計(jì)要求幅值1V~5V可調(diào),因此需要建立5個(gè)表。</p><p> 建立5個(gè)表的時(shí)候如果一個(gè)元素一個(gè)元素的算,未免太麻煩。可以用MATLAB分別算出5個(gè)表,然后粘貼到程序中,稍作修改就可以使用(圖5為輸出幅值為4V時(shí)表的計(jì)算方法算法)。</p><p><b>
31、 算法:</b></p><p> ?。║為需要得的到的幅值,此時(shí)b數(shù)組就是對(duì)應(yīng)的表)</p><p> 圖5 表的計(jì)算方法(輸出幅值為4V時(shí))</p><p> 綜合上面改變頻率和幅值的方法,就可以得到符合本設(shè)計(jì)的設(shè)計(jì)要求的波形。</p><p> 3.頻率與幅值的設(shè)置</p><p> 方案:
32、利用單脈沖發(fā)生器,當(dāng)需要設(shè)置幅值和頻率時(shí),產(chǎn)生中斷,暫停正在工作的定時(shí)器,停止波形輸出,進(jìn)入外部中斷0中斷服務(wù)程序,通過(guò)按鍵,對(duì)波形進(jìn)行設(shè)置。</p><p> 按鍵0:頻率/幅值切換;</p><p> 按鍵1:頻率/幅值增加;</p><p> 按鍵2:退出外部中斷,開(kāi)啟定時(shí)器,輸出波形</p><p><b> 4.鍵
33、盤(pán)與顯示</b></p><p> 利用WAVE6000 實(shí)驗(yàn)環(huán)境中的顯示程序和鍵盤(pán)掃描電路及程序。改程序提供了三個(gè)子程序:TestKey;GetKey;DispLedBuf。</p><p><b> 三、硬件設(shè)計(jì)</b></p><p><b> 1.硬件電路</b></p><
34、p> 本設(shè)計(jì)由單片機(jī)、D/A轉(zhuǎn)換電路、鍵盤(pán)及顯示電路幾個(gè)組成部分,各部分采用的電路形式及主要器件確定如下:</p><p><b> ?。?)單片機(jī)部分</b></p><p> 選用89C51單片機(jī)作為主機(jī),同時(shí)要設(shè)計(jì)89C51單片機(jī)的晶振電路和復(fù)位電路,具體電路略。</p><p> ?。?)D/A轉(zhuǎn)換電路部分</p>
35、<p> 直接利用單片機(jī)實(shí)驗(yàn)箱上的D/A轉(zhuǎn)換電路正弦波信號(hào)的輸出。電路如圖6所示。</p><p> 圖6 DAC0832連接電路</p><p> ?。?)按鍵與顯示部分</p><p> 直接利用單片機(jī)試驗(yàn)箱上的按鍵與顯示電路。如圖7、圖8所示</p><p> 圖7 顯示器電路連接圖</p><
36、p> 圖8 鍵盤(pán)電路連接圖</p><p><b> 四、程序設(shè)計(jì) </b></p><p><b> 1.程序流程圖</b></p><p><b> 主程序流程圖:</b></p><p> 定時(shí)器0中斷服務(wù)程序流程圖:</p><p
37、> 圖10定時(shí)器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> 定時(shí)器0中斷服務(wù)程序:每隔一定時(shí)間按次序查表,把相應(yīng)數(shù)值送給DAC0832進(jìn)行數(shù)模轉(zhuǎn)換,實(shí)現(xiàn)正弦波輸出。</p><p> 外部中斷0中斷服務(wù)程序:配合按鍵掃描程序和數(shù)碼管顯示程序,對(duì)正弦波參數(shù)進(jìn)行設(shè)置。</p><p><b> 3.硬件
39、資源分配表</b></p><p><b> 四、運(yùn)行結(jié)果分析</b></p><p> 1.軟硬件調(diào)試(出現(xiàn)的問(wèn)題、如何解決。。。)</p><p> 搭建PROTEUS仿真電路,進(jìn)行軟件模擬仿真(圖12)</p><p> 圖12 PROTEUS仿真電路</p><p>
40、 此電路和實(shí)際電路有差異,主要用于前期的軟件仿真,基本的波形發(fā)生,測(cè)試MATLAB軟件計(jì)算出的數(shù)值運(yùn)行后是否滿(mǎn)足設(shè)計(jì)要求。</p><p> 此外,我還用此電路測(cè)試了取不同點(diǎn)數(shù)時(shí),波形差異。分別測(cè)試了30點(diǎn)、50點(diǎn)、70點(diǎn)以及100點(diǎn),點(diǎn)數(shù)越多越接近正弦,點(diǎn)數(shù)越少失真越嚴(yán)重。但是點(diǎn)數(shù)過(guò)多,所能達(dá)到的頻率最低值越大,不能滿(mǎn)足本設(shè)計(jì)中頻率達(dá)到1000HZ的要求。經(jīng)試驗(yàn),取50點(diǎn)可以達(dá)到最好的效果,是頻率達(dá)到要求,波
41、形又不失真嚴(yán)重。</p><p> 前期仿真完成后,進(jìn)行上機(jī)調(diào)試。</p><p> 起初,加上鍵盤(pán)顯示程序時(shí),鍵盤(pán)和顯示程序時(shí)鐘程序始終不正常。</p><p> 經(jīng)老師指點(diǎn),改變思路,在進(jìn)行頻率和幅度設(shè)置時(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è)置程序,按鍵盤(pán)0鍵決定調(diào)節(jié)頻率還是幅值;按1鍵進(jìn)行調(diào)節(jié);按2鍵完成設(shè)置,開(kāi)始輸出波形。(圖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è)計(jì)總結(jié)</b></p><p> 本次設(shè)計(jì)題目是正弦信號(hào)發(fā)生器。用到的硬件有按鍵、數(shù)碼管顯示、譯碼電路、DAC0832、8051單片機(jī)。通過(guò)這次設(shè)計(jì),進(jìn)一步熟悉了這些硬件的
44、用法。熟悉了WAVE編程軟件的使用。對(duì)匯編語(yǔ)言進(jìn)行單片機(jī)程序設(shè)計(jì)有了更深一步的認(rèn)識(shí)。</p><p> 完成本次設(shè)計(jì)后,學(xué)到了一種新的編程思路:大量的應(yīng)用查表的方式進(jìn)行程序設(shè)計(jì),可以有效的增加程序執(zhí)行的效率,縮短其執(zhí)行時(shí)間,一些對(duì)程序執(zhí)行時(shí)間有嚴(yán)格要求的場(chǎng)合,可以用此思路進(jìn)行設(shè)計(jì)。當(dāng)然,查表方式進(jìn)行程序設(shè)計(jì)亦有其缺點(diǎn):占用大量的內(nèi)部ROM空間,對(duì)于一些內(nèi)部ROM空間不是很充足的單片機(jī),過(guò)多的表可能導(dǎo)致ROM空間
45、不足。因此,進(jìn)行程序設(shè)計(jì)時(shí)要將查表方式和算法方式進(jìn)行綜合考慮,選擇效率較高的方式進(jìn)行設(shè)計(jì),也可以將兩種方式有效結(jié)合起來(lái)。</p><p> 此次設(shè)計(jì)能順利完成,要感謝李老師的指導(dǎo),在加入鍵盤(pán)和顯示程序時(shí),遇到了困難,是李老師的指導(dǎo),使我走出了泥潭。</p><p><b> 六、參考資料</b></p><p> [1] 胡宴如. 高頻電
46、子線(xiàn)路[M].高教出版社. 2001.9:12-19 </p><p> [2] 盧屹. 數(shù)字鎖相環(huán)的參數(shù)設(shè)計(jì)及其應(yīng)用[J] 通信技術(shù)2001,(9):12-15</p><p> [3] 涂時(shí)亮等. 單片微機(jī)軟件設(shè)計(jì)技術(shù).重慶:科學(xué)技術(shù)文獻(xiàn)出版社重慶分社,1988</p><p> [4] 張志良. 單片機(jī)原理及控制技術(shù).北京:機(jī)械工業(yè)出版社,2001<
47、;/p><p> [5] 徐君毅等,單片微型計(jì)算機(jī)原理與應(yīng)用.上海:上??茖W(xué)技術(shù)版社,1988</p><p> [6] 成都木馬科技. 單片機(jī)原理及應(yīng)用.北京:北京希望電子出版社,1988</p><p> [7] 宋培義等.單片機(jī)原理、接口技術(shù)及應(yīng)用.北京:中國(guó)廣播電視出版社,1999</p><p> [8] 何利民.I2C總線(xiàn)應(yīng)用
48、系統(tǒng)設(shè)計(jì).北京:北京航空航天大學(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án)讀入口</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個(gè)八段管</p><p> mov r2, #00100000b ; 從左邊開(kāi)始顯示</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 ; 輸出線(xiàn)置為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 ; 沒(méi)有鍵按下
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; ;禁止定時(shí)器中斷,不再產(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 ;;檢測(cè)按鍵</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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 正弦波發(fā)生器課程設(shè)計(jì)
- 基于單片機(jī)的正弦波發(fā)生器的設(shè)計(jì)
- 正弦波信號(hào)發(fā)生器課程設(shè)計(jì)
- dsp課程設(shè)計(jì)---正弦波信號(hào)發(fā)生器
- 基于dsp正弦波發(fā)生器課程設(shè)計(jì)
- dsp課程設(shè)計(jì)---正弦波信號(hào)發(fā)生器報(bào)告
- 51單片機(jī)與0832波形發(fā)生器鋸齒波、三角波、正弦波
- 電子課程設(shè)計(jì)--方波_三角波_正弦波發(fā)生器
- 單片機(jī)課程設(shè)計(jì)--- 三角波發(fā)生器
- 單片機(jī)課程設(shè)計(jì)(波形發(fā)生器)
- 單片機(jī)課程設(shè)計(jì)---波形發(fā)生器
- 單片機(jī)課程設(shè)計(jì)—波形發(fā)生器
- 課程設(shè)計(jì)--單片機(jī)波形發(fā)生器
- 單片機(jī)課程設(shè)計(jì)-波形發(fā)生器
- eda課程報(bào)告---正弦波信號(hào)發(fā)生器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-pwm波信號(hào)發(fā)生器的研制
- 模電課程設(shè)計(jì)報(bào)告-- 正弦波方波三角波發(fā)生器
- 單片機(jī)課程設(shè)計(jì)(簡(jiǎn)易函數(shù)發(fā)生器)
- 單片機(jī)課程設(shè)計(jì)報(bào)告(信號(hào)發(fā)生器)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--波形發(fā)生器
評(píng)論
0/150
提交評(píng)論