版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、智能儀器課程設(shè)計班 級:姓 名:學(xué) 號:目錄一實驗?zāi)康模?二實驗要求:3三硬件原理3單片機(jī)最小系統(tǒng):3數(shù)碼管4.數(shù)碼管功能使用:4.數(shù)碼管說明4數(shù)碼管原理圖5.led燈5矩陣按鍵61矩陣鍵盤的功能使用62.矩陣鍵盤的結(jié)構(gòu)與工作原理6.da/ad轉(zhuǎn)換 pcf85916i2c總線7i2c總線基本結(jié)構(gòu):82.雙向傳輸?shù)慕涌谔匦?數(shù)據(jù)的傳送9.i2c總線的數(shù)據(jù)傳送格式:9.總線競爭的仲裁:10應(yīng)用領(lǐng)域10四軟件原理10動態(tài)顯示10顯示原理10鍵盤12鍵盤掃描原理12鍵盤掃描子程序12五設(shè)計心得14六參考文獻(xiàn)14七附錄15程序15原理圖2425波形發(fā)生器一實驗?zāi)康模?. 掌握動態(tài)led顯示及鍵盤設(shè)計原理
2、,對智能儀器中最基本的輸入輸出設(shè)備具有感性認(rèn)識2. 熟練掌握hc6800開發(fā)板的使用3. 通過一個相當(dāng)對完整的程序編程,能夠?qū)纹瑱C(jī)知識和智能儀器的設(shè)計融會貫通,同時掌握對智能儀器的軟硬件構(gòu)成及硬件軟化方法。二實驗要求:1 顯示亮度大致均勻。2 按鍵需去抖3 運行程序首先顯示以下內(nèi)容:hello4 通過按鍵顯示相應(yīng)的波形,通過輸出。5 輸出波形時,數(shù)碼管顯示頻率,發(fā)光管指示波形種類。6 編寫實驗報告。三硬件原理 單片機(jī)最小系統(tǒng):cpu 為stc89系列增強(qiáng)型8位單片機(jī),頻率高達(dá)80mhz,可工作于6clock,32i/o,3定時器,內(nèi)置wdt、eeprom。支持,。晶振采用(可更換)。數(shù)碼管.
3、數(shù)碼管功能使用: 有2 組四位動態(tài)數(shù)碼管和1個一位靜態(tài)數(shù)碼管。當(dāng)使用四位動態(tài)數(shù)碼管時,用8位排線將j12與單片機(jī)的i/o口腳相連,當(dāng)使用一位靜態(tài)數(shù)碼管時,有兩種連接方式:1.用8p排線將jp3與單片機(jī)的i/o口腳相連,實現(xiàn)用單片機(jī)i/o腳直接控制數(shù)碼管。2.用8p排線將jp2與jp3相連,然后將jp12用短路冒全部短接,此時為單片機(jī)控制74hc595,,7hc595再控制數(shù)碼管的動態(tài)掃描。.數(shù)碼管說明數(shù)碼管實際上是由7個發(fā)光管組成的8字形構(gòu)成的,加上小數(shù)點就是8個,動態(tài)掃描顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式。其接口電路是把所有顯示器的8個筆劃a-h同名端連在一起,而每一個顯示器的公共
4、極com是各自獨立地接受i/o口線控制。cpu向各字段輸出口送出字形碼時,所有顯示器均接收到相同的字形碼,但究竟是那個顯示器亮,取決于com端所以就可以自行決定何時顯示哪一位了。所謂動態(tài)掃描就是指我們采用分時的方法,輪流控制各個顯示器的com端,使各個顯示器輪流點亮。每位顯示器的點亮?xí)r間是極為短暫的(約1ms),但由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余暉效應(yīng),盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感。數(shù)碼管原理圖.led燈jp1為8路led燈的接口,使用此功能時,將jp1與jp8-jp11中任何接口相連,即可實現(xiàn)單片機(jī)控制8路led
5、。原理圖矩陣按鍵1矩陣鍵盤的功能使用jp4為矩陣鍵盤的接口,p10p13為行,p14-p16為列。使用8p排線把jp4與jp8-jp11中任何接口相連,實現(xiàn)矩陣鍵盤的功能。2.矩陣鍵盤的結(jié)構(gòu)與工作原理當(dāng)鍵盤中按鍵數(shù)量較多時為了減少i/o口德占用,通常將按鍵排列成矩陣形式。在矩陣鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣一個端口就可以構(gòu)成4*4個按鍵,比直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,在需要的鍵數(shù)較多時,采用矩陣法來做鍵盤是合理的。矩陣式的鍵盤顯然比直接法復(fù)雜一些,識別也要復(fù)雜一些。原理圖:.da/ad轉(zhuǎn)換 pcf8591pcf8591
6、使用i2c與單片機(jī)通信,p2.1(sda)串行數(shù)據(jù)線,p2.0(scl)串行時鐘線。ad0和ad1是兩路模擬輸入,改變ad0和ad1位置的電位器,實現(xiàn)了兩路模擬輸入,在數(shù)碼管中可以看到數(shù)值變化。當(dāng)pcf8591數(shù)模端口數(shù)據(jù)變化時,da位置的led亮度隨之改變。pcf8591t介紹:pcf8591是philips生產(chǎn)的8位分辨率d/a、a/d轉(zhuǎn)換集成芯片,有4路模擬輸入,1路模擬輸出,一個i2cbus接口,3個給硬件編程的腳。通過i2c總線與處理器通信,其價格低廉,接口簡單,轉(zhuǎn)換控制容易等優(yōu)點,在單片機(jī)應(yīng)用系統(tǒng)中得到了廣泛的應(yīng)用。ain0-ain3:模擬輸出(a/d轉(zhuǎn)換)aout:模擬輸出(d/
7、a轉(zhuǎn)換)a0-a2:硬件設(shè)備地址gnd:電源負(fù)極地vref:參考電壓輸入ext:振蕩器輸入時,內(nèi)部/外部的切換開關(guān)osc:振蕩器輸入/輸出scl:i2c bus時鐘輸入sda:i2cbus 數(shù)據(jù)輸入輸出agnd:模擬地,模擬信號和基準(zhǔn)電源的參考地原理圖:i2c總線i2c總線是一種基于ic器件之間連接的二線制總線。它通過sda(串行數(shù)據(jù)線)及scl(串行時鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件:不管是單片機(jī),存儲器,lcd驅(qū)動器還是鍵盤接口。i2c總線基本結(jié)構(gòu):采用i2c總線標(biāo)準(zhǔn)的單片機(jī)ic器件,其內(nèi)部結(jié)構(gòu)不僅有i2c接口電路,而且將內(nèi)部各單元電路電路按功能劃分為若干
8、相對獨立的模塊,通過軟件尋址實現(xiàn)片選,減少了器件片選的連接。cpu不僅能通過指令將某個功能單元電路掛靠摘離總線,還可對該單元的工作狀況進(jìn)行檢測,從而實現(xiàn)對硬件系統(tǒng)的既簡單又靈活的擴(kuò)展與控制。i2c總線接口電路原理圖:2.雙向傳輸?shù)慕涌谔匦詡鹘y(tǒng)的單片機(jī)串行接口的發(fā)送和接收一般都各用一條線,如mcs51系列的txd和rxd。而i2c總線則根據(jù)器件的功能通過軟件程序使其可工作于發(fā)送接收方式。當(dāng)某個器件向總線上發(fā)送信息時,它就是發(fā)送器(也稱主器件),而當(dāng)其從總線上接收信息時,又成為接收器(也叫從器件)。主器件用于啟動總線上傳送數(shù)據(jù)并產(chǎn)生時鐘,以開放送的器件,此時,任何被尋址的器件均本人為是從器件。i2
9、c總線的控制完全由掛接在總線上的主器件送出的地址和數(shù)據(jù)決定。在在總線上,既沒有中心機(jī),也沒有優(yōu)先機(jī)。 總線上主和從(即發(fā)送和接收)的關(guān)系不是一成不變的,而是取決于此時數(shù)據(jù)傳送的方向。sda和scl均為雙向輸入輸出線,通過上拉電阻接正電源。當(dāng)總線空閑時,兩根線都是高電平。;連接總線的器件的輸出級必須是集電極或漏極開路,以具有“線”與功能。i2c總線的數(shù)據(jù)數(shù)據(jù)傳送速率在標(biāo)準(zhǔn)工作方式下為100kbit/s,在快速方式下,最高傳送速率可達(dá)400kbit/s. 在實際應(yīng)用中,一般只有單片機(jī)能夠發(fā)送clk,因此,只有單片機(jī)能夠作為主器件,其余i2c器件均為從器件。多單片機(jī)系統(tǒng)通常很少應(yīng)用。i2c總線上的時
10、鐘信號在i2c總線上傳送信息時的時間同步信號是由掛接在scl時鐘器件的邏輯與完成的。scl線上由高電平到低電平的跳變將影響這些器件,一旦某個器件的scl線跳變?yōu)榈碗娖?,使scl上的所有器件進(jìn)入低電平期。此時低電平周期短的器件的時鐘由低至高的跳變不能影響scl線的狀態(tài),于是這些器件將進(jìn)入高電平等待的狀態(tài),當(dāng)所有器件的時鐘信號都跳變?yōu)楦唠娖綍r,低電平期結(jié)束。scl線被釋放scl 線被釋放返回高電平,即所有的器件都同時開始它們的高電平期。其后,第一個結(jié)束高電平期的器件又將 scl 線拉成低電平。這樣就在 scl 線上產(chǎn)生一個同步時鐘??梢姡瑫r鐘低電平時間由時鐘低電平 期最長的器件確定,而時鐘高電平時
11、間由時鐘高電平期最短的器件確定。 數(shù)據(jù)的傳送 在數(shù)據(jù)傳送過程中,必須確認(rèn)數(shù)據(jù)傳送的開始和結(jié)束。在 i2c 總線技術(shù)規(guī) 范中,開始和結(jié)束信號(也稱啟動和停止信號)的定義如圖 所示。當(dāng)時鐘線 scl 為高電平時,數(shù)據(jù)線 sda 由高電平跳變?yōu)榈碗娖蕉x為開始信號;當(dāng) scl 線為高電平時,sda 線發(fā)生低電平到高電平的跳變?yōu)榻Y(jié)束信號。開始和結(jié)束信號都是由主器件產(chǎn)生。在開 始信號以后,總線即被認(rèn)為處于忙狀態(tài);在結(jié)束信號以后的一段時間內(nèi),總線被認(rèn)為是空 閑的。.i2c總線的數(shù)據(jù)傳送格式:在i2c總線開始信號后,送出的第一個字節(jié)數(shù)據(jù)是用來選擇器件地址的,其中前七位為地址碼,第八位為方向位,方向位為0表示
12、發(fā)送,即主器件把信息寫到所選擇的從器件;方向位為1表示主器件將從從器件讀信息。開始信號后,系統(tǒng)中的各個器件將自己的地址和主器件送到總線上的地址進(jìn)行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即為被主器件尋址的器件,其接收信息還是發(fā)送信息則由第八位確定。 在i2c總線上每次傳送的數(shù)據(jù)字節(jié)數(shù)不限,但每一個字節(jié)必須為8位,而且每個傳送的字節(jié)后面必須跟一個認(rèn)可位,也叫應(yīng)答位。數(shù)據(jù)的傳送過程:每次都是先傳最高位通常從器件在接收到每個字節(jié)后都會做出響應(yīng),即釋放scl線返回高電平,準(zhǔn)備接受下一個數(shù)據(jù)字節(jié),主器件可繼續(xù)傳送。如果從器件正在處理一個實時事件而不能接收數(shù)據(jù)時,(例如正在處理一個內(nèi)部中斷,在這
13、個中斷處理完之前就不能接受i2c總線上的數(shù)據(jù)字節(jié))可以使時鐘scl線保持低電平,從器件必須使sda保持高電平,此時主器件產(chǎn)生1個結(jié)束信號,使傳送異常結(jié)束,迫使主器件處于等待狀態(tài)。當(dāng)從器件處理完畢時,釋放scl線,主器件繼續(xù)傳送。當(dāng)主器件發(fā)送完一個字節(jié)的數(shù)據(jù)時,接著發(fā)出對應(yīng)于scl線上的一個時鐘(ack)認(rèn)可位,在此時鐘內(nèi)主器件釋放sda線一個字節(jié)傳送結(jié)束,而從器件的響應(yīng)信號將sda線拉成低調(diào)平,使sda在該時鐘的高電平期間為穩(wěn)定的低電平。從器件的響應(yīng)信號結(jié)束后,sda線返回高電平,進(jìn)入下一個傳送周期。.總線競爭的仲裁:總線上可能掛接有多個器件,有時會發(fā)生兩個或多個主器件想同時占用總線的情況,例
14、如:多單片機(jī)系統(tǒng)中,可能在某一時刻有兩個單片機(jī)要同時向總線發(fā)送數(shù)據(jù),這種情況叫總線競爭。i2c總線具有多主控能力,可對發(fā)生在sda線上的總線競爭進(jìn)行仲裁,其仲裁原則是:當(dāng)多個主器件同時想占用總線時,如果某個主器件發(fā)送高低阿平,而另一個主器件發(fā)送低電平,則發(fā)送電平與此時sda總線電平不符合的那個器件將自動關(guān)閉其輸出級??偩€競爭的仲裁是在兩個層次上進(jìn)行的。首先是地址位的比較,從而確保了競爭仲裁的可靠性。由于利用i2c總線上的信息進(jìn)行仲裁,因此不會造成信息的丟失。應(yīng)用領(lǐng)域i2c總線接口器件目前在視頻處理,移動通信,等領(lǐng)域采用i2c總線接口器件已經(jīng)比較普遍。另外,通用的i2c總線接口器件,如帶i2c總
15、線的單片機(jī),ram,rom,a/d,d/a,lcd驅(qū)動器等器件,也越來越多的應(yīng)用于計算機(jī)及自動控制系統(tǒng)中。四軟件原理動態(tài)顯示顯示原理的靜態(tài)顯示雖然有編程容易,管理簡單等優(yōu)點,但靜態(tài)顯示所要占用的口資源很多,所以在顯示的較多的情況下,一般采用動態(tài)顯示方式。數(shù)碼管實際上是由7個發(fā)光管組成的8字形構(gòu)成的,加上小數(shù)點就是8個,動態(tài)掃描顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式。其接口電路是把所有顯示器的8個筆劃a-h同名端連在一起,而每一個顯示器的公共極com是各自獨立地接受i/o口線控制。cpu向各字段輸出口送出字形碼時,所有顯示器均接收到相同的字形碼,但究竟是那個顯示器亮,取決于com端所以就可
16、以自行決定何時顯示哪一位了。所謂動態(tài)掃描就是指我們采用分時的方法,輪流控制各個顯示器的com端,使各個顯示器輪流點亮。每位顯示器的點亮?xí)r間是極為短暫的(約1ms),但由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余暉效應(yīng),盡管實際上各位顯示器并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感顯示子程序:#include #include sbit ls138a = p22; /定義138譯碼器的輸入a腳由p2.2控制 sbit ls138b = p23; /定義138譯碼器的輸入腳b由p2.3控制sbit ls138c = p24; /定義138譯碼器的輸入腳c由p2.4
17、控制void delay(unsigned int i); /函數(shù)聲名char delaycnt; /此表為 led 的字模, 共陰數(shù)碼管 0-9 - unsigned char code disp_tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; main() unsigned int i,lednumval=1 ; unsigned int ledout10; delaycnt=0; while(1) /進(jìn)入循環(huán)狀態(tài) if(+delaycnt=50) delaycnt=0; /延時計數(shù) 每掃描一次加一次 +lednu
18、mval; /每隔50個掃描周期加一次 ledout0=disp_tablednumval%10000/1000; ledout1=disp_tablednumval%1000/100|0x80; ledout2=disp_tablednumval%100/10; ledout3=disp_tablednumval%10; ledout4=disp_tablednumval%10000/1000; /千位 ledout5=disp_tablednumval%1000/100|0x80; /百位帶小數(shù)點 ledout6=disp_tablednumval%100/10; /十位 ledout7=
19、disp_tablednumval%10; /個位 for( i=0; i 0; i-) for(j = 200; j 0; j-);鍵盤鍵盤掃描原理在鍵盤中按鍵數(shù)量較多時,為了減少i/o口的占用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口就可以構(gòu)成4*4=16個按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤是合理的。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,列
20、線通過電阻接正電源,并將行線所接的單片機(jī)的i/o口作為輸出端,而列線所接的i/o口則作為輸入。這樣,當(dāng)按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。鍵盤掃描子程序#include #include #define uchar unsigned char#define uint unsigned intuchar dis_buf; /顯示緩存uchar temp;uchar key; /鍵順序嗎void delay0(uchar x); /x*0.14ms#define delaynop
21、(); _nop_();_nop_();_nop_();_nop_();unsigned char code led7code = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delay(uchar x) uchar j; while(x-)!=0) for(j=0;j4)|0xf0); if(temp=1) / p1.4 被拉低 key=0; else if(temp=2) / p1.5 被拉低 key=1; else if(temp=4) / p1.6 被拉低 ke
22、y=2; else if(temp=8) / p1.7 被拉低 key=3; else key=16; p1=0x0f; /低四位輸入 列為高電平 行為低電平 delay(1);temp=p1; /讀p1口 temp=temp&0x0f; temp=(temp|0xf0); if(temp=2) / p1.1 被拉低 key=key+0; else if(temp=4) / p1.2 被拉低 key=key+4; else if(temp=8)/ p1.3 被拉低 key=key+8; else key=16; dis_buf = key; /鍵值入顯示緩存 dis_buf = dis_buf
23、 & 0x0f; void keydown(void) p1=0xf0;if(p1!=0xf0) /判斷按鍵是否按下 如果按鈕按下 會拉低p1其中的一個端口 keyscan(); /調(diào)用按鍵掃描程序 main() p0=0xff; /置p0口 p1=0xff; /置p1口 delay(10); /延時 while(1) keydown(); /調(diào)用按鍵判斷檢測程序 p0 = led7codedis_buf%16&0x7f; /led7 0x7f為小數(shù)點 共陰和共陽此處也是不一樣; %16表示輸出16進(jìn)制 五設(shè)計心得通過這次課程設(shè)計,加深了對知識的理解,也非常的清楚的認(rèn)識了這門課程的重要性,也意
24、識到了自己在程序設(shè)計方面的薄弱性。希望在以后的學(xué)習(xí)和工作中能進(jìn)一部的加強(qiáng)自己專業(yè)素質(zhì)和實踐動手能力,并在單片機(jī)程序設(shè)計語言方面要實現(xiàn)從匯編語言到 c 語言的跳轉(zhuǎn)。六參考文獻(xiàn)趙新民,王祁智能儀器設(shè)計基礎(chǔ)。哈爾濱工業(yè)大學(xué)出版社七附錄程序#include #include #define _nop() _nop_() /*定義空指令*/ #define uchar unsigned char#define uint unsigned int uchar code saw_tab= /每隔數(shù)字8,采取一次0xc0,0xbc,0xb8,0xb4,0xb0,0xac,0xa8,0xa4,0xa0,0x9c
25、,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;uchar code maichong_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
26、,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,
27、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,;uchar dis_buf; /顯示緩存uchar temp;uchar key,flag=0; /鍵順序嗎void delay0(uchar x); /x*0.14ms#define delaynop(); _nop_();_nop_();_nop_();_nop_();sbit ls138a = p22; /定義138譯碼器的輸入a腳由p2.2控制 sbit ls138b = p23; /定義138
28、譯碼器的輸入腳b由p2.3控制sbit ls138c = p24; /定義138譯碼器的輸入腳c由p2.4控制void delay9(unsigned int i); /函數(shù)聲名char delaycnt; /此表為 led 的字模, 共陰數(shù)碼管 0-9 - unsigned char code disp_tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; unsigned char code disp_tab1 = 0x76,0x79,0x38,0x38,0x3f;bit ack; /*應(yīng)答標(biāo)志位*/sbit scl=p
29、21; /i2c 時鐘 sbit sda=p20; /i2c 數(shù)據(jù) void start_i2c() sda=1; /*發(fā)送起始條件的數(shù)據(jù)信號*/ _nop(); scl=1; _nop(); /*起始條件建立時間大于4.7us,延時*/ _nop(); _nop(); _nop(); _nop(); sda=0; /*發(fā)送起始信號*/ _nop(); /* 起始條件鎖定時間大于4s*/ _nop(); _nop(); _nop(); _nop(); scl=0; /*鉗住i2c總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) */ _nop(); _nop();void stop_i2c() sda=0; /*發(fā)送
30、結(jié)束條件的數(shù)據(jù)信號*/ _nop(); /*發(fā)送結(jié)束條件的時鐘信號*/ scl=1; /*結(jié)束條件建立時間大于4s*/ _nop(); _nop(); _nop(); _nop(); _nop(); sda=1; /*發(fā)送i2c總線結(jié)束信號*/ _nop(); _nop(); _nop(); _nop();void sendbyte(unsigned char c) unsigned char bitcnt; for(bitcnt=0;bitcnt8;bitcnt+) /*要傳送的數(shù)據(jù)長度為8位*/ if(cbitcnt)&0x80)sda=1; /*判斷發(fā)送位*/ else sda=0; _
31、nop(); scl=1; /*置時鐘線為高,通知被控器開始接收數(shù)據(jù)位*/ _nop(); _nop(); /*保證時鐘高電平周期大于4s*/ _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; else ack=1; /*判斷是否接收到應(yīng)答信號*/ scl=0; _nop(); _nop();unsigned char rcvbyte() unsigned char
32、 retc; unsigned char bitcnt; retc=0; sda=1; /*置數(shù)據(jù)線為輸入方式*/ for(bitcnt=0;bitcnt8;bitcnt+) _nop(); scl=0; /*置時鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/ _nop(); _nop(); /*時鐘低電平周期大于4.7s*/ _nop(); _nop(); _nop(); scl=1; /*置時鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/ _nop(); _nop(); retc=retc 0; i-) for(j = 200; j 0; j-);bit dacconversion(unsigned char sla,un
33、signed char c, unsigned char val) start_i2c(); /啟動總線 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);void delay(uint x) uchar j; while(x-)!=0) for(j=0;j4)|0xf0); if(temp=1) / p1.4 被拉低 key=0;
34、else if(temp=2) / p1.5 被拉低 key=1; else if(temp=4) / p1.6 被拉低 key=2; else if(temp=8) / p1.7 被拉低 key=3; else key=16; p1=0x0f; /低四位輸入 列為高電平 行為低電平 delay(1);temp=p1; /讀p1口 temp=temp&0x0f; temp=(temp|0xf0); if(temp=2) / p1.1 被拉低 key=key+0; else if(temp=4) / p1.2 被拉低 key=key+4; else if(temp=8)/ p1.3 被拉低 ke
35、y=key+8; else key=16; dis_buf = key; /鍵值入顯示緩存 dis_buf = dis_buf & 0x0f; void keydown(void) p1=0xf0;if(p1!=0xf0) /判斷按鍵是否按下 如果按鈕按下 會拉低p1其中的一個端口 keyscan(); /調(diào)用按鍵掃描程序 void delay5(unsigned int time) for(time;time0;time-); void bmain() uint h=50; p0=0xff; /置p0口 p1=0xff; /置p1口 delay(10); /延時 while(h-) unsi
36、gned int i; unsigned int ledout10;ledout0=disp_tabkey%10000/1000; ledout1=disp_tabkey%1000/100|0x80; ledout2=disp_tabkey%100/10; ledout3=disp_tabkey%10; ledout4=disp_tabkey%10000/1000; /千位 ledout5=disp_tabkey%1000/100|0x80; /百位帶小數(shù)點 ledout6=disp_tabkey%100/10; /十位 ledout7=disp_tabkey%10; /個位 for( i=0; i9; i+) /實現(xiàn)8位動態(tài)掃描循環(huán) p0 = ledouti; /將字模送到p0口顯示 switch(i) /使用switch 語句控制位選 case 0:ls138a=0; ls138b=0; ls138c=0; break; case 1:ls138a=1; ls138b=0; ls138c=0; break; case 2:ls138a=0; ls138b=1; ls138c=0; break; case 3:ls138a=1; ls138b=1; ls138c=0; break; case
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人教B版選修1生物上冊月考試卷含答案
- 2025年外研版七年級生物上冊月考試卷含答案
- 2025年教科新版八年級地理上冊階段測試試卷含答案
- 2025年人教A版六年級數(shù)學(xué)上冊階段測試試卷含答案
- 2025至2031年中國PVC星空輪行業(yè)投資前景及策略咨詢研究報告
- 2025年外研銜接版高一數(shù)學(xué)下冊月考試卷含答案
- 2025年滬教新版高一數(shù)學(xué)上冊月考試卷含答案
- 2025年外研銜接版七年級數(shù)學(xué)上冊月考試卷含答案
- 2025至2030年中國腸炎菌克數(shù)據(jù)監(jiān)測研究報告
- 花卉綠植物流合同模板六
- 英語名著閱讀老人與海教學(xué)課件(the-old-man-and-the-sea-)
- 學(xué)校食品安全知識培訓(xùn)課件
- 全國醫(yī)學(xué)博士英語統(tǒng)一考試詞匯表(10000詞全) - 打印版
- 最新《會計職業(yè)道德》課件
- DB64∕T 1776-2021 水土保持生態(tài)監(jiān)測站點建設(shè)與監(jiān)測技術(shù)規(guī)范
- ?中醫(yī)院醫(yī)院等級復(fù)評實施方案
- 數(shù)學(xué)-九宮數(shù)獨100題(附答案)
- 理正深基坑之鋼板樁受力計算
- 學(xué)校年級組管理經(jīng)驗
- 10KV高壓環(huán)網(wǎng)柜(交接)試驗
- 未來水電工程建設(shè)抽水蓄能電站BIM項目解決方案
評論
0/150
提交評論