智能儀器課程設(shè)計(jì)_第1頁
智能儀器課程設(shè)計(jì)_第2頁
智能儀器課程設(shè)計(jì)_第3頁
智能儀器課程設(shè)計(jì)_第4頁
智能儀器課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

智能儀器課程設(shè)計(jì)班級(jí):姓名:學(xué)號(hào):目錄一.實(shí)驗(yàn)?zāi)康模?二.實(shí)驗(yàn)要求:3三.硬件原理31.單片機(jī)最小系統(tǒng):32.?dāng)?shù)碼管41.數(shù)碼管功能使用:42.數(shù)碼管說明43數(shù)碼管原理圖53.LED燈54.矩陣按鍵61.矩陣鍵盤的功能使用62.矩陣鍵盤的結(jié)構(gòu)與工作原理65.DA/AD轉(zhuǎn)換PCF859166.I2C總線71.I2C總線基本結(jié)構(gòu):82.雙向傳輸?shù)慕涌谔匦?3.?dāng)?shù)據(jù)的傳送94.I2C總線的數(shù)據(jù)傳送格式:95.總線競爭的仲裁:106.應(yīng)用領(lǐng)域10四.軟件原理101.LED動(dòng)態(tài)顯示101.顯示原理102.鍵盤121.鍵盤掃描原理122.鍵盤掃描子程序12五.設(shè)計(jì)心得14六.參考文獻(xiàn)14七.附錄151.程序15原理圖24PCB25波形發(fā)生器一.實(shí)驗(yàn)?zāi)康模赫莆談?dòng)態(tài)LED顯示及鍵盤設(shè)計(jì)原理,對(duì)智能儀器中最基本的輸入輸出設(shè)備具有感性認(rèn)識(shí)熟練掌握HC6800開發(fā)板的使用通過一個(gè)相當(dāng)對(duì)完整的程序編程,能夠?qū)纹瑱C(jī)知識(shí)和智能儀器的設(shè)計(jì)融會(huì)貫穿,同時(shí)掌握對(duì)智能儀器的軟硬件構(gòu)成及硬件軟化方法。二.實(shí)驗(yàn)要求:顯示亮度大致均勻。按鍵需去抖運(yùn)行程序首先顯示以下內(nèi)容:HELLO通過按鍵顯示相應(yīng)的波形,通過DA輸出。輸出波形時(shí),數(shù)碼管顯示頻率,發(fā)光管指示波形種類。編寫實(shí)驗(yàn)報(bào)告。三.硬件原理1.單片機(jī)最小系統(tǒng):cpu為STC89系列增強(qiáng)型8位單片機(jī),頻率高達(dá)80MHz,可工作于6Clock,32I/O,3定時(shí)器,內(nèi)置WDT、EEPROM。支持ISP,ESD。晶振采用12M/11.0592(可更換)。2.?dāng)?shù)碼管1.數(shù)碼管功能使用:有2組四位動(dòng)態(tài)數(shù)碼管和1個(gè)一位靜態(tài)數(shù)碼管。當(dāng)使用四位動(dòng)態(tài)數(shù)碼管時(shí),用8位排線將J12與單片機(jī)的I/O口腳相連,當(dāng)使用一位靜態(tài)數(shù)碼管時(shí),有兩種連接方式:1.用8P排線將JP3與單片機(jī)的I/O口腳相連,實(shí)現(xiàn)用單片機(jī)I/O腳直接控制數(shù)碼管。2.用8P排線將JP2與JP3相連,然后將JP12用短路冒全部短接,此時(shí)為單片機(jī)控制74HC595,,7HC595再控制數(shù)碼管的動(dòng)態(tài)掃描。2.數(shù)碼管說明數(shù)碼管實(shí)際上是由7個(gè)發(fā)光管組成的8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè),動(dòng)態(tài)掃描顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式。其接口電路是把所有顯示器的8個(gè)筆劃a-h同名端連在一起,而每一個(gè)顯示器的公共極COM是各自獨(dú)立地接受I/O口線控制。CPU向各字段輸出口送出字形碼時(shí),所有顯示器均接收到相同的字形碼,但究竟是那個(gè)顯示器亮,取決于COM端所以就可以自行決定何時(shí)顯示哪一位了。所謂動(dòng)態(tài)掃描就是指我們采用分時(shí)的方法,輪流控制各個(gè)顯示器的COM端,使各個(gè)顯示器輪流點(diǎn)亮。每位顯示器的點(diǎn)亮?xí)r間是極為短暫的(約1ms),但由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余暉效應(yīng),盡管實(shí)際上各位顯示器并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感。3數(shù)碼管原理圖3.LED燈JP1為8路LED燈的接口,使用此功能時(shí),將JP1與JP8-JP11中任何接口相連,即可實(shí)現(xiàn)單片機(jī)控制8路LED。原理圖4.矩陣按鍵1.矩陣鍵盤的功能使用JP4為矩陣鍵盤的接口,p10—P13為行,p14-p16為列。使用8P排線把JP4與JP8-JP11中任何接口相連,實(shí)現(xiàn)矩陣鍵盤的功能。2.矩陣鍵盤的結(jié)構(gòu)與工作原理當(dāng)鍵盤中按鍵數(shù)量較多時(shí)為了減少I/O口德占用,通常將按鍵排列成矩陣形式。在矩陣鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣一個(gè)端口就可以構(gòu)成4*4個(gè)按鍵,比直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,在需要的鍵數(shù)較多時(shí),采用矩陣法來做鍵盤是合理的。矩陣式的鍵盤顯然比直接法復(fù)雜一些,識(shí)別也要復(fù)雜一些。原理圖:5.DA/AD轉(zhuǎn)換PCF8591Pcf8591使用I2C與單片機(jī)通信,(SDA)串行數(shù)據(jù)線,(SCL)串行時(shí)鐘線。AD0和AD1是兩路模擬輸入,改變AD0和AD1位置的電位器,實(shí)現(xiàn)了兩路模擬輸入,在數(shù)碼管中可以看到數(shù)值變化。當(dāng)PCF8591數(shù)模端口數(shù)據(jù)變化時(shí),DA位置的LED亮度隨之改變。PCF8591T介紹:PCF8591是Philips生產(chǎn)的8位分辨率D/A、A/D轉(zhuǎn)換集成芯片,有4路模擬輸入,1路模擬輸出,一個(gè)I2CBUS接口,3個(gè)給硬件編程的腳。通過I2C總線與處理器通信,其價(jià)格低廉,接口簡單,轉(zhuǎn)換控制容易等優(yōu)點(diǎn),在單片機(jī)應(yīng)用系統(tǒng)中得到了廣泛的應(yīng)用。AIN0-AIN3:模擬輸出(A/D轉(zhuǎn)換)AOUT:模擬輸出(D/A轉(zhuǎn)換)A0-A2:硬件設(shè)備地址GND:電源負(fù)極地VREF:參考電壓輸入EXT:振蕩器輸入時(shí),內(nèi)部/外部的切換開關(guān)OSC:振蕩器輸入/輸出SCL:I2CBUS時(shí)鐘輸入SDA:I2CBUS數(shù)據(jù)輸入輸出AGND:模擬地,模擬信號(hào)和基準(zhǔn)電源的參考地原理圖:6.I2C總線I2c總線是一種基于IC器件之間連接的二線制總線。它通過SDA(串行數(shù)據(jù)線)及SCL(串行時(shí)鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識(shí)別每個(gè)器件:不管是單片機(jī),存儲(chǔ)器,LCD驅(qū)動(dòng)器還是鍵盤接口。1.I2C總線基本結(jié)構(gòu):采用I2C總線標(biāo)準(zhǔn)的單片機(jī)IC器件,其內(nèi)部結(jié)構(gòu)不僅有I2C接口電路,而且將內(nèi)部各單元電路電路按功能劃分為若干相對(duì)獨(dú)立的模塊,通過軟件尋址實(shí)現(xiàn)片選,減少了器件片選的連接。CPU不僅能通過指令將某個(gè)功能單元電路掛靠摘離總線,還可對(duì)該單元的工作狀況進(jìn)行檢測,從而實(shí)現(xiàn)對(duì)硬件系統(tǒng)的既簡單又靈活的擴(kuò)展與控制。I2C總線接口電路原理圖:2.雙向傳輸?shù)慕涌谔匦詡鹘y(tǒng)的單片機(jī)串行接口的發(fā)送和接收一般都各用一條線,如MCS51系列的TXD和RXD。而I2C總線則根據(jù)器件的功能通過軟件程序使其可工作于發(fā)送接收方式。當(dāng)某個(gè)器件向總線上發(fā)送信息時(shí),它就是發(fā)送器(也稱主器件),而當(dāng)其從總線上接收信息時(shí),又成為接收器(也叫從器件)。主器件用于啟動(dòng)總線上傳送數(shù)據(jù)并產(chǎn)生時(shí)鐘,以開放送的器件,此時(shí),任何被尋址的器件均本人為是從器件。I2C總線的控制完全由掛接在總線上的主器件送出的地址和數(shù)據(jù)決定。在在總線上,既沒有中心機(jī),也沒有優(yōu)先機(jī)??偩€上主和從(即發(fā)送和接收)的關(guān)系不是一成不變的,而是取決于此時(shí)數(shù)據(jù)傳送的方向。SDA和SCL均為雙向輸入輸出線,通過上拉電阻接正電源。當(dāng)總線空閑時(shí),兩根線都是高電平。;連接總線的器件的輸出級(jí)必須是集電極或漏極開路,以具有“線”與功能。I2C總線的數(shù)據(jù)數(shù)據(jù)傳送速率在標(biāo)準(zhǔn)工作方式下為100kbit/S,在快速方式下,最高傳送速率可達(dá)400kbit/s.在實(shí)際應(yīng)用中,一般只有單片機(jī)能夠發(fā)送CLK,因此,只有單片機(jī)能夠作為主器件,其余I2C器件均為從器件。多單片機(jī)系統(tǒng)通常很少應(yīng)用。I2C總線上的時(shí)鐘信號(hào)在I2C總線上傳送信息時(shí)的時(shí)間同步信號(hào)是由掛接在SCL時(shí)鐘器件的邏輯與完成的。SCl線上由高電平到低電平的跳變將影響這些器件,一旦某個(gè)器件的SCl線跳變?yōu)榈碗娖?,使SCL上的所有器件進(jìn)入低電平期。此時(shí)低電平周期短的器件的時(shí)鐘由低至高的跳變不能影響SCL線的狀態(tài),于是這些器件將進(jìn)入高電平等待的狀態(tài),當(dāng)所有器件的時(shí)鐘信號(hào)都跳變?yōu)楦唠娖綍r(shí),低電平期結(jié)束。SCL線被釋放SCL線被釋放返回高電平,即所有的器件都同時(shí)開始它們的高電平期。其后,第一個(gè)結(jié)束高電平期的器件又將SCL線拉成低電平。這樣就在SCL線上產(chǎn)生一個(gè)同步時(shí)鐘??梢?,時(shí)鐘低電平時(shí)間由時(shí)鐘低電平期最長的器件確定,而時(shí)鐘高電平時(shí)間由時(shí)鐘高電平期最短的器件確定。3.?dāng)?shù)據(jù)的傳送在數(shù)據(jù)傳送過程中,必須確認(rèn)數(shù)據(jù)傳送的開始和結(jié)束。在I2C總線技術(shù)標(biāo)準(zhǔn)中,開始和結(jié)束信號(hào)(也稱啟動(dòng)和停止信號(hào))的定義如圖所示。當(dāng)時(shí)鐘線SCL為高電平時(shí),數(shù)據(jù)線SDA由高電平跳變?yōu)榈碗娖蕉x為"開始"信號(hào);當(dāng)SCL線為高電平時(shí),SDA線發(fā)生低電平到高電平的跳變?yōu)?結(jié)束"信號(hào)。開始和結(jié)束信號(hào)都是由主器件產(chǎn)生。在開始信號(hào)以后,總線即被認(rèn)為處于忙狀態(tài);在結(jié)束信號(hào)以后的一段時(shí)間內(nèi),總線被認(rèn)為是空閑的。4.I2C總線的數(shù)據(jù)傳送格式:在I2C總線開始信號(hào)后,送出的第一個(gè)字節(jié)數(shù)據(jù)是用來選擇器件地址的,其中前七位為地址碼,第八位為方向位,方向位為0表示發(fā)送,即主器件把信息寫到所選擇的從器件;方向位為1表示主器件將從從器件讀信息。開始信號(hào)后,系統(tǒng)中的各個(gè)器件將自己的地址和主器件送到總線上的地址進(jìn)行比擬,如果與主器件發(fā)送到總線上的地址一致,則該器件即為被主器件尋址的器件,其接收信息還是發(fā)送信息則由第八位確定。在I2C總線上每次傳送的數(shù)據(jù)字節(jié)數(shù)不限,但每一個(gè)字節(jié)必須為8位,而且每個(gè)傳送的字節(jié)后面必須跟一個(gè)認(rèn)可位,也叫應(yīng)答位。數(shù)據(jù)的傳送過程:每次都是先傳最高位通常從器件在接收到每個(gè)字節(jié)后都會(huì)做出響應(yīng),即釋放SCL線返回高電平,準(zhǔn)備接受下一個(gè)數(shù)據(jù)字節(jié),主器件可繼續(xù)傳送。如果從器件正在處理一個(gè)實(shí)時(shí)事件而不能接收數(shù)據(jù)時(shí),(例如正在處理一個(gè)內(nèi)部中斷,在這個(gè)中斷處理完之前就不能接受I2C總線上的數(shù)據(jù)字節(jié))可以使時(shí)鐘SCl線保持低電平,從器件必須使SDA保持高電平,此時(shí)主器件產(chǎn)生1個(gè)結(jié)束信號(hào),使傳送異常結(jié)束,迫使主器件處于等待狀態(tài)。當(dāng)從器件處理完畢時(shí),釋放SCL線,主器件繼續(xù)傳送。當(dāng)主器件發(fā)送完一個(gè)字節(jié)的數(shù)據(jù)時(shí),接著發(fā)出對(duì)應(yīng)于SCL線上的一個(gè)時(shí)鐘(ACK)認(rèn)可位,在此時(shí)鐘內(nèi)主器件釋放SDA線一個(gè)字節(jié)傳送結(jié)束,而從器件的響應(yīng)信號(hào)將SDA線拉成低調(diào)平,使SDA在該時(shí)鐘的高電平期間為穩(wěn)定的低電平。從器件的響應(yīng)信號(hào)結(jié)束后,SDA線返回高電平,進(jìn)入下一個(gè)傳送周期。5.總線競爭的仲裁:總線上可能掛接有多個(gè)器件,有時(shí)會(huì)發(fā)生兩個(gè)或多個(gè)主器件想同時(shí)占用總線的情況,例如:多單片機(jī)系統(tǒng)中,可能在某一時(shí)刻有兩個(gè)單片機(jī)要同時(shí)向總線發(fā)送數(shù)據(jù),這種情況叫總線競爭。I2C總線具有多主控能力,可對(duì)發(fā)生在SDA線上的總線競爭進(jìn)行仲裁,其仲裁原則是:當(dāng)多個(gè)主器件同時(shí)想占用總線時(shí),如果某個(gè)主器件發(fā)送高低阿平,而另一個(gè)主器件發(fā)送低電平,則發(fā)送電平與此時(shí)SDA總線電平不符合的那個(gè)器件將自動(dòng)關(guān)閉其輸出級(jí)。總線競爭的仲裁是在兩個(gè)層次上進(jìn)行的。首先是地址位的比擬,從而確保了競爭仲裁的可靠性。由于利用I2C總線上的信息進(jìn)行仲裁,因此不會(huì)造成信息的丟失。6.應(yīng)用領(lǐng)域I2C總線接口器件目前在視頻處理,移動(dòng)通信,等領(lǐng)域采用I2C總線接口器件已經(jīng)比擬普遍。另外,通用的I2C總線接口器件,如帶I2C總線的單片機(jī),RAM,ROM,A/D,D/A,LCD

驅(qū)動(dòng)器等器件,也越來越多的應(yīng)用于計(jì)算機(jī)及自動(dòng)控制系統(tǒng)中。四.軟件原理1.LED動(dòng)態(tài)顯示1.顯示原理LED的靜態(tài)顯示雖然有編程容易,管理簡單等優(yōu)點(diǎn),但靜態(tài)顯示所要占用的IO口資源很多,所以在顯示的LED較多的情況下,一般采用動(dòng)態(tài)顯示方式。數(shù)碼管實(shí)際上是由7個(gè)發(fā)光管組成的8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè),動(dòng)態(tài)掃描顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式。其接口電路是把所有顯示器的8個(gè)筆劃a-h同名端連在一起,而每一個(gè)顯示器的公共極COM是各自獨(dú)立地接受I/O口線控制。CPU向各字段輸出口送出字形碼時(shí),所有顯示器均接收到相同的字形碼,但究竟是那個(gè)顯示器亮,取決于COM端所以就可以自行決定何時(shí)顯示哪一位了。所謂動(dòng)態(tài)掃描就是指我們采用分時(shí)的方法,輪流控制各個(gè)顯示器的COM端,使各個(gè)顯示器輪流點(diǎn)亮。每位顯示器的點(diǎn)亮?xí)r間是極為短暫的(約1ms),但由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余暉效應(yīng),盡管實(shí)際上各位顯示器并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感顯示子程序:#include<reg51.h>#include<intrins.h>sbitLS138A=P2^2; //定義138譯碼器的輸入A腳由控制sbitLS138B=P2^3; //定義138譯碼器的輸入腳B由控制sbitLS138C=P2^4; //定義138譯碼器的輸入腳C由控制voiddelay(unsignedinti);//函數(shù)聲名charDelayCNT;//此表為LED的字模,共陰數(shù)碼管0-9-unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};main(){unsignedinti,LedNumVal=1;unsignedintLedOut[10];DelayCNT=0;while(1)//進(jìn)入循環(huán)狀態(tài){ if(++DelayCNT>=50) { DelayCNT=0; //延時(shí)計(jì)數(shù)每掃描一次加一次 ++LedNumVal;//每隔50個(gè)掃描周期加一次 } LedOut[0]=Disp_Tab[LedNumVal%10000/1000];LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;LedOut[2]=Disp_Tab[LedNumVal%100/10];LedOut[3]=Disp_Tab[LedNumVal%10]; LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80;//百位帶小數(shù)點(diǎn)LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位LedOut[7]=Disp_Tab[LedNumVal%10];//個(gè)位 for(i=0;i<9;i++)//實(shí)現(xiàn)8位動(dòng)態(tài)掃描循環(huán) { P0=LedOut[i];//將字模送到P0口顯示 switch(i) { case0:LS138A=0;LS138B=0;LS138C=0;break; case1:LS138A=1;LS138B=0;LS138C=0;break; case2:LS138A=0;LS138B=1;LS138C=0;break; case3:LS138A=1;LS138B=1;LS138C=0;break; case4:LS138A=0;LS138B=0;LS138C=1;break; case5:LS138A=1;LS138B=0;LS138C=1;break; case6:LS138A=0;LS138B=1;LS138C=1;break; case7:LS138A=1;LS138B=1;LS138C=1;break; } delay(150); }}} voiddelay(unsignedinti){charj;for(i;i>0;i--)for(j=200;j>0;j--);}2.鍵盤1.鍵盤掃描原理在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比方再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵。由此可見,在需要的鍵數(shù)比擬多時(shí),采用矩陣法來做鍵盤是合理的。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時(shí),所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。2.鍵盤掃描子程序#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintuchardis_buf;//顯示緩存uchartemp;ucharkey;//鍵順序嗎#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};unsignedcharcodeLED7Code[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};voiddelay(ucharx){ucharj;while((x--)!=0){for(j=0;j<125;j++){;}}}voidkeyscan(void){ temp=0;P1=0xF0;//高四位輸入行為高電平列為低電平delay(1); temp=P1;//讀P1口temp=temp&0xF0; //屏蔽低四位temp=~((temp>>4)|0xF0); if(temp==1) //p1.4被拉低key=0;elseif(temp==2)//p1.5被拉低key=1;被拉低key=2;elseif(temp==8)//p1.7被拉低key=3;elsekey=16;P1=0x0F;//低四位輸入列為高電平行為低電平delay(1); temp=P1;//讀P1口temp=temp&0x0F;temp=~(temp|0xF0);if(temp==2) //p1.1被拉低key=key+0;elseif(temp==4)//p1.2被拉低key=key+4;elseif(temp==8) //p1.3被拉低key=key+8;elsekey=16; dis_buf=key; //鍵值入顯示緩存dis_buf=dis_buf&0x0f;}voidkeydown(void){ P1=0xF0; if(P1!=0xF0)//判斷按鍵是否按下如果按鈕按下會(huì)拉低P1其中的一個(gè)端口 { keyscan();//調(diào)用按鍵掃描程序}}main(){P0=0xFF;//置P0口P1=0xFF;//置P1口delay(10);//延時(shí)while(1){keydown(); //調(diào)用按鍵判斷檢測程序 P0=LED7Code[dis_buf%16]&0x7f;//LED70x7f為小數(shù)點(diǎn)共陰和共陽此處也是不一樣;%16表示輸出16進(jìn)制}}五.設(shè)計(jì)心得通過這次課程設(shè)計(jì),加深了對(duì)知識(shí)的理解,也非常的清楚的認(rèn)識(shí)了這門課程的重要性,也意識(shí)到了自己在程序設(shè)計(jì)方面的薄弱性。希望在以后的學(xué)習(xí)和工作中能進(jìn)一部的加強(qiáng)自己專業(yè)素質(zhì)和實(shí)踐動(dòng)手能力,并在單片機(jī)程序設(shè)計(jì)語言方面要實(shí)現(xiàn)從匯編語言到C語言的跳轉(zhuǎn)。六.參考文獻(xiàn)1.趙新民,王祁智能儀器設(shè)計(jì)基礎(chǔ)。哈爾濱工業(yè)大學(xué)出版社七.附錄1.程序#include<reg51.h>#include<intrins.h>#define_Nop()_nop_()/*定義空指令*/ #defineucharunsignedchar#defineuintunsignedintucharcodesaw_tab[]={ //每隔數(shù)字8,采取一次 0xc0,0xbc,0xb8,0xb4,0xb0,0xac,0xa8,0xa4,0xa0,0x9c,0x98, 0x94, 0x90,0x8c,0x88,0x84,0x80,0x7c,0x78,0x74,0x70,0x6c,0x68,0x64,0x60,0x5c,0x58,0x54,0x50,0x4c,0x48,0x44,0x40,0x3c,0x38,0x34,0x30,0x2c,0x28,0x24,0x20,0x1c,0x18, 0x14,0x10,0x0c,0x08,0x04,0x00};ucharcodemaichong_tab[]={ 255,255,255,255,255,2550,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};uchardis_buf;//顯示緩存uchartemp;ucharkey,flag=0;//鍵順序嗎#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};sbitLS138A=P2^2; //定義138譯碼器的輸入A腳由控制sbitLS138B=P2^3; //定義138譯碼器的輸入腳B由控制sbitLS138C=P2^4; //定義138譯碼器的輸入腳C由控制voiddelay9(unsignedinti);//函數(shù)聲名charDelayCNT;//此表為LED的字模,共陰數(shù)碼管0-9-unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};unsignedcharcodeDisp_Tab1[]={0x76,0x79,0x38,0x38,0x3f};bitack;/*應(yīng)答標(biāo)志位*/sbitSCL=P2^1;//I2C時(shí)鐘sbitSDA=P2^0;//I2C數(shù)據(jù)voidStart_I2c(){SDA=1;/*發(fā)送起始條件的數(shù)據(jù)信號(hào)*/_Nop();SCL=1;_Nop();/*起始條件建立時(shí)間大于4.7us,延時(shí)*/_Nop();_Nop();_Nop();_Nop();SDA=0;/*發(fā)送起始信號(hào)*/_Nop();/*起始條件鎖定時(shí)間大于4μs*/_Nop();_Nop();_Nop();_Nop();SCL=0;/*鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)*/_Nop();_Nop();}voidStop_I2c(){SDA=0;/*發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)*/_Nop();/*發(fā)送結(jié)束條件的時(shí)鐘信號(hào)*/SCL=1;/*結(jié)束條件建立時(shí)間大于4μs*/_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1;/*發(fā)送I2C總線結(jié)束信號(hào)*/_Nop();_Nop();_Nop();_Nop();}voidSendByte(unsignedcharc){unsignedcharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt++)/*要傳送的數(shù)據(jù)長度為8位*/{if((c<<BitCnt)&0x80)SDA=1;/*判斷發(fā)送位*/elseSDA=0;_Nop();SCL=1;/*置時(shí)鐘線為高,通知被控器開始接收數(shù)據(jù)位*/_Nop();_Nop();/*保證時(shí)鐘高電平周期大于4μs*/_Nop();_Nop();_Nop();SCL=0;}_Nop();_Nop();SDA=1;/*8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位*/_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();if(SDA==1)ack=0;elseack=1;/*判斷是否接收到應(yīng)答信號(hào)*/SCL=0;_Nop();_Nop();}unsignedcharRcvByte(){unsignedcharretc;unsignedcharBitCnt;retc=0;SDA=1;/*置數(shù)據(jù)線為輸入方式*/for(BitCnt=0;BitCnt<8;BitCnt++){_Nop();SCL=0;/*置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/_Nop();_Nop();/*時(shí)鐘低電平周期大于μs*/_Nop();_Nop();_Nop();SCL=1;/*置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/_Nop();_Nop();retc=retc<<1;if(SDA==1)retc=retc+1;/*讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中*/_Nop();_Nop();}SCL=0;_Nop();_Nop();return(retc);}voidAck_I2c(bita){if(a==0)SDA=0;/*在此發(fā)出應(yīng)答或非應(yīng)答信號(hào)*/elseSDA=1;_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();/*時(shí)鐘低電平周期大于4μs*/_Nop();_Nop();_Nop();SCL=0;/*清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收*/_Nop();_Nop();}voiddelay9(unsignedinti){charj;for(i;i>0;i--)for(j=200;j>0;j--);}bitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal){Start_I2c();//啟動(dòng)總線SendByte(sla);//發(fā)送器件地址if(ack==0)return(0);SendByte(c);//發(fā)送控制字節(jié)if(ack==0)return(0);SendByte(Val);//發(fā)送DAC的數(shù)值if(ack==0)return(0);Stop_I2c();//結(jié)束總線return(1);}voiddelay(uintx){ucharj;while((x--)!=0){for(j=0;j<125;j++){;}}}voidkeyscan(void){ temp=0;P1=0xF0;//高四位輸入行為高電平列為低電平delay(1); temp=P1;//讀P1口temp=temp&0xF0; //屏蔽低四位temp=~((temp>>4)|0xF0); if(temp==1) //p1.4被拉低key=0;elseif(temp==2)//p1.5被拉低key=1;elseif(temp==4)//p1.6被拉低key=2;elseif(temp==8)//p1.7被拉低key=3;elsekey=16;P1=0x0F;//低四位輸入列為高電平行為低電平delay(1); temp=P1;//讀P1口temp=temp&0x0F;temp=~(temp|0xF0);if(temp==2) //p1.1被拉低key=key+0;elseif(temp==4)//p1.2被拉低key=key+4;elseif(temp==8) //p1.3被拉低key=key+8;elsekey=16; dis_buf=key; //鍵值入顯示緩存dis_buf=dis_buf&0x0f;}voidkeydown(void){ P1=0xF0; if(P1!=0xF0)//判斷按鍵是否按下如果按鈕按下會(huì)拉低P1其中的一個(gè)端口 { keyscan();//調(diào)用按鍵掃描程序}}voiddelay5(unsignedinttime){for(time;time>0;time--);}voidbmain(){uinth=50;P0=0xFF;//置P0口P1=0xFF;//置P1口delay(10);//延時(shí)while(h--){ unsignedinti;unsignedintLedOut[10]; LedOut[0]=Disp_Tab[key%10000/1000]; LedOut[1]=Disp_Tab[key%1000/100]|0x80; LedOut[2]=Disp_Tab[key%100/10]; LedOut[3]=Disp_Tab[key%10]; LedOut[4]=Disp_Tab[key%10000/1000]; //千位 LedOut[5]=Disp_Tab[key%1000/100]|0x80;//百位帶小數(shù)點(diǎn) LedOut[6]=Disp_Tab[key%100/10]; //十位 LedOut[7]=Disp_Tab[key%10];//個(gè)位for(i=0;i<9;i++)//實(shí)現(xiàn)8位動(dòng)態(tài)掃描循環(huán) { P0=LedOut[i];//將字模送到P0口顯示 switch(i) //使用switch語句控制位選 { case0:LS138A=0;LS138B=0;LS138C=0;break; case1:LS138A=1;LS138B=0;LS138C=0;break; case2:LS138A=0;LS138B=1;LS138C=0;break; case3:LS138A=1;LS138B=1;LS138C=0;break; case4:LS138A=0;LS138B=0;LS138C=1;break; case5:LS138A=1;LS138B=0;LS138C=1;break; case6:LS138A=0;LS138B=1;LS138C=1;break; case7:LS138A=1;LS138B=1;LS138C=1;break; } delay9(150); }}}voidsaw(){longintl;for(l=0;l<50;){l++; DACconversion(0x90,0x40,saw_tab[l]);//databyte}}voidmaichong(){longintl;for(l=0;l<216;){l=l+2; DACconversion(0x90,0x40,maichong_tab[l]);//databyte}}main(){ uinth=50;P0=0xFF;//置P0口P1=0xFF;//置P1口delay(10) while(h--) { unsignedinti;unsignedintLedOut1[10]; LedOut1[0]=Disp_Tab1[0]; LedOut1[1]=Disp_Tab1[1]; LedOut1[2]=Disp_Tab1[2]; LedOut1[3]=Disp_Tab1[3]; LedOut1[4]=Disp_Tab1[4]; LedOut1[5]=Disp_Tab1[5]; for(i=0;i<5;i++)//實(shí)現(xiàn)8位動(dòng)態(tài)掃描循環(huán) { P0=LedOut1[i];//將字模送到P0口顯示 switch(i) //使用switch語句控制位選 { case0:LS138A=0;LS138B=0;LS138C=0;break; case1:LS138A=1;LS138B=0;LS138C=0;break; case2:LS138A=0;LS138B=1;LS138C=0;break; case3:LS138A=1;LS138B=1;LS138C=0;break; case4:LS138A=0;LS138B=0;LS138C=1;break; case5:LS138A=1;LS138B=0;LS138C=1;break; case6:LS138A=0;LS138B=1;LS138C=1;break; case7:LS138A=1;LS138B=1;LS138C=1;break; } delay9(150); }} while(1) { keydown(); //調(diào)用按鍵判斷檢測程序 bmain(); if(key==0) { while(1) { saw(); keydown(); //調(diào)用按鍵判斷檢測程序 if(key!=0) break; } } elseif(key==1) { while(1) { maichong(); keydown(); //調(diào)用按鍵判斷檢測程序 if(key!=1) break; } } }}原理圖PCB

論大學(xué)生寫作能力寫作能力是對(duì)自己所積累的信息進(jìn)行選擇、提取、加工、改造并將之形成為書面文字的能力。積累是寫作的基礎(chǔ),積累越厚實(shí),寫作就越有基礎(chǔ),文章就能根深葉茂開奇葩。沒有積累,胸?zé)o點(diǎn)墨,怎么也不會(huì)寫出作文來的。寫作能力是每個(gè)大學(xué)生必須具備的能力。從目前高校整體情況上看,大學(xué)生的寫作能力較為欠缺。一、大學(xué)生應(yīng)用文寫作能力的定義那么,大學(xué)生的寫作能力究竟是指什么呢?葉圣陶先生曾經(jīng)說過,“大學(xué)畢業(yè)生不一定能寫小說詩歌,但是一定要寫工作和生活中實(shí)用的文章,而且非寫得既通順又扎實(shí)不可。”對(duì)于大學(xué)生的寫作能力應(yīng)包含什么,可能有多種理解,但從葉圣陶先生的談話中,我認(rèn)為:大學(xué)生寫作能力應(yīng)包括應(yīng)用寫作能力和文學(xué)寫作能力,而前者是必須的,后者是“不一定”要具備,能具備則更好。眾所周知,對(duì)于大學(xué)生來說,是要寫畢業(yè)論文的,我認(rèn)為寫作論文的能力可以包含在應(yīng)用寫作能力之中。大學(xué)生寫作能力的體現(xiàn),也往往是在撰寫畢業(yè)論文中

溫馨提示

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

評(píng)論

0/150

提交評(píng)論