版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
12023/2/4單片機原理與應(yīng)用電子課件第9
章串行總線接口技術(shù)2023/2/42本章主要內(nèi)容9.1SPI串行總線接口技術(shù)9.2I2C總線接口技術(shù)9.3單總線(1-wire)接口2023/2/43第9章串行總線接口技術(shù)
由于數(shù)據(jù)的串行傳輸連線少,因而采用串行總線擴展技術(shù)可以使系統(tǒng)的硬件設(shè)計簡化,系統(tǒng)的體積減小,同時,系統(tǒng)的更改和擴充更為容易。目前,單片機應(yīng)用系統(tǒng)中常用的串行擴展總線有:I2C(InterICBUS)總線、SPI(SerialPeripheralInterface)總線、Microwire總線及單總線(1-WireBUS)。串行擴展總線的應(yīng)用是單片機目前發(fā)展的一種趨勢。AT89系列單片機利用自身的通用并行線可以模擬多種串行總線時序信號,因此可以充分利用各種串行接口芯片資源。本章主要介紹I2C總線、SPI總線及單總線(1-WireBUS)的基本知識、常用的串行總線接口器件及和單片機的接口應(yīng)用。2023/2/449.1SPI串行總線接口技術(shù)9.1.1SPI串行總線簡介SPI接口的全稱是“SerialPeripheralInterface”,意為串行外圍接口,是Motorola首先在其MC68HCXX系列處理器上定義的。SPI總線系統(tǒng)是一種同步串行外設(shè)接口,它可以使MCU與各種外圍設(shè)備以串行方式進行通信以交換信息。SPI總線系統(tǒng)可直接與各個廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接接口,該接口一般包括以下四種信號:MOSI–主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入MISO–主器件數(shù)據(jù)輸入,從器件數(shù)據(jù)輸出SCLK–時鐘信號,由主器件產(chǎn)生/ss–從器件使能信號,由主器件控制
2023/2/45
SPI接口是在CPU和外圍低速器件之間進行同步串行數(shù)據(jù)傳輸,在主器件的移位脈沖下,數(shù)據(jù)按位傳輸,高位在前,低位在后,為全雙工通信,數(shù)據(jù)傳輸速度總體來說比I2C總線要快,速度可達(dá)到幾Mbps。
對于大多數(shù)不帶SPI串行總線接口的AT89系列單片機來說,可以使用軟件來模擬SPI的操作,包括串行時鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出。2023/2/469.1.2SPI串行接口A/D轉(zhuǎn)換器TLC549及其軟硬件設(shè)計
TLC549是美國德州儀器公司生產(chǎn)的8位串行A/D轉(zhuǎn)換器芯片,通過SPI接口與單片機連接,從CLK輸入的頻率最高可達(dá)1.1MHz。
TLC549具有4MHz的片內(nèi)系統(tǒng)時鐘,片內(nèi)具有采樣保持電路,A/D轉(zhuǎn)換時間最長17μs,最高轉(zhuǎn)換速率為40000次/s。TLC549的電源范圍為+3V-+6V,功耗小于15Mw,總失調(diào)誤差最大為±0.5LSB,適用于電池供電的便攜式儀表及低成本高性能的系統(tǒng)中。2023/2/471.引腳功能TLC549有8個引腳,如圖9-1所示。各引腳功能說明如下:REF+:正基準(zhǔn)電壓輸入端,2.5V≤REF+≤VCC+0.1V。REF-:負(fù)基準(zhǔn)電壓輸入端,-0.1V≤REF-≤2.5V,且要求REF+-REF-≥1V。在要求不高時,也可將REF-接地,REF+接VCC。AIN:模擬信號輸入端,0≤AIN≤VCC,當(dāng)AIN≥REF+時,轉(zhuǎn)換結(jié)果為全"1"(FFH),AIN≤REF-時,轉(zhuǎn)換結(jié)果為全“0”(00H)。/CS:芯片選擇輸入端,低電平有效。DO:數(shù)據(jù)串行輸出端,輸出時高位在前,低位在后。CLK:外部時鐘輸入端,最高頻率可達(dá)1.1MHz。圖9-1TLC549引腳圖
2023/2/482.TLC549的時序TLC549的時序如圖9-2所示。/CS變?yōu)榈碗娖綍r,TLC549芯片被選中,同時從DO端輸出前次轉(zhuǎn)換結(jié)果的最高有效位A7;
接著自CLK端輸入8個外部時鐘信號,前7個CLK信號輸出上次轉(zhuǎn)換結(jié)果的A6-A7位。
在第4個CLK信號由高至低的跳變之后,片內(nèi)采樣/保持電路對輸入模擬量采樣開始,第8個CLK信號的下降沿使片內(nèi)采樣/保持電路進入保持狀態(tài)并啟動本次A/D開始轉(zhuǎn)換。圖9-2TLC549的時序2023/2/49TLC549沒有啟動控制端,只要讀走前一次數(shù)據(jù)后馬上就進行新的轉(zhuǎn)換,轉(zhuǎn)換完成后就進入保持狀態(tài),轉(zhuǎn)換時間為36個系統(tǒng)時鐘周期,最大為17uS。沒有轉(zhuǎn)換完成標(biāo)志信號,只要采用延時操作即可控制每次讀取數(shù)據(jù)的操作。3.TLC549與單片機的接口TLC549與單片機的連接如圖9-3所示。采用P1.0~P1.2連接TLC549的串行接口。圖9-3TLC549與單片機的硬件連接2023/2/410A/D轉(zhuǎn)換的匯編語言程序:DOBITP1.2CLKBITP1.1CSBITP1.0…TLC549_AD:CLRA;TLC549A/D轉(zhuǎn)換子程序,轉(zhuǎn)換結(jié)果在A中 CLRCLK MOVR5,#08HCLRCS;選中TLC549LOOP:SETBCLK;產(chǎn)生時鐘
NOPNOP NOP NOPMOVC,DO;讀取A/D轉(zhuǎn)換的一位數(shù)據(jù)
RLCA;左移進入A CLRCLK2023/2/411
NOP NOP DJNZR5,LOOP;判8次數(shù)據(jù)是否讀完
SETBCS SETBCLK RET2023/2/412A/D轉(zhuǎn)換的C語言程序:sbitDO=P1^2sbitCLK=P1^1sbitCS=P1^0bdataUnsignedcharaddata;sbitadin0=addata^0;…unsignedcharTLC549_ad(void)/*A/D轉(zhuǎn)換程序*/{unsignedchari;Clk=0;CS=0;/*令CS為低選中TLC549*/_nop_();
2023/2/413for(i=0;i<8;i++)/*循環(huán)讀取8位A/D轉(zhuǎn)換結(jié)果*/{CLK=1;/*令CLK引腳為高,產(chǎn)生時鐘*/delay();/*延時*/adin0=DO;/*讀取A/D轉(zhuǎn)換后數(shù)據(jù)線的一位數(shù)據(jù)*/addata=addata<<1;/*左移一位,先讀取為高位,后讀為低位*/CLK=0;/*令CLK恢復(fù)為0*/_nop_();_nop_();}returnaddata;/*返回A/D轉(zhuǎn)換值*/}voiddelay(){unsignedchari;for(i=0;i<20;i++)}2023/2/4144.簡易數(shù)字電壓表的設(shè)計舉例利用TLC549A/D轉(zhuǎn)換器設(shè)計一個簡易數(shù)字電壓表,用4位LED顯示器將被測電壓顯示出來,測量范圍為0.000V-5.000V。將TLC549的、CLK、DO接到單片機的三條I/O口線,REF+、REF-直接接到Vcc、GND,模擬輸入AIN接電位器的中心抽頭,調(diào)節(jié)電位器即可改變被測輸入電壓值,硬件連接如圖9-4所示。
圖9-4簡易數(shù)字電壓表硬件連接圖2023/2/415軟件設(shè)計的基本思路:程序首先通過調(diào)用TLC549_ad(),讀取A/D轉(zhuǎn)換結(jié)果存入addata,然后按公式u=addata/255×5000(mV)計算電壓值,再將u轉(zhuǎn)換為4位BCD碼送顯示緩沖區(qū),并調(diào)用顯示程序disp_ad()將其轉(zhuǎn)換為字型碼顯示出來,顯示格式為x.xxxx,單位為v。程序請參照課本.2023/2/4169.1.3SPI串行接口D/A轉(zhuǎn)換器TLC5615及其軟硬件設(shè)計TLC5615是SPI接口的10位電壓輸出的D/A轉(zhuǎn)換器,通過3根串行總線就可以完成10位數(shù)據(jù)的串行輸入,易于和工業(yè)標(biāo)準(zhǔn)的微處理器或單片機接口,適用于電池供電的測量儀表、移動電話以及工業(yè)控制場合。其主要特點如下:5V單電源工作;3線串行接口;DAC輸出的最大電壓為2倍基準(zhǔn)輸入電壓;上電時內(nèi)部自動復(fù)位,確??梢灾貜?fù)啟動;功耗低,最大功耗為1.75mW。2023/2/4171.TLC5615的內(nèi)部結(jié)構(gòu)和引腳功能
TLC5615的內(nèi)部結(jié)構(gòu)如圖9-5所示,內(nèi)部包含:一個電壓跟隨器為參考電壓端REFIN提供高輸入阻抗;10位DAC×2電路提供最大值為2倍于REFIN的輸出;一個16位移位寄存器,接受串行移入的二進制數(shù),并且有一個級聯(lián)的數(shù)據(jù)輸出端DOUT;并行輸入輸出的10位DAC寄存器,為10位DAC電路提供待轉(zhuǎn)換的二進制數(shù)據(jù)。
圖9-5TLC5615的內(nèi)部結(jié)構(gòu)2023/2/418TLC5615的引腳如圖9-6所示,各引腳功能如下:DIN:串行二進制數(shù)輸入端SCLK:串行時鐘輸入端/CS:芯片選擇,低有效DOUT:菊花鏈的串行數(shù)據(jù)輸出端(用于多芯片的級聯(lián))REFIN:基準(zhǔn)電壓輸入端OUT:DAC模擬電壓輸出端圖9-6TLC5615的引腳2023/2/4192、TLC5615的時序TLC5615的時序如圖9-7所示。/CS當(dāng)為低電平時,在每一個SCLK時鐘的上升沿從DIN引腳移入一位數(shù)據(jù),高位在前,低位在后。經(jīng)16個時鐘后,/CS的上升沿將16位移位寄存器的10位有效數(shù)據(jù)鎖存到10位DAC寄存器,供DAC電路進行轉(zhuǎn)換。
圖9-7TLC5615的時序2023/2/42016位數(shù)據(jù)的高4位和低2位不會被轉(zhuǎn)換,待轉(zhuǎn)換數(shù)據(jù)輸入的格式見表9-1:輸入序號12345678910111213141516輸入數(shù)據(jù)××××D9D8D7D6D5D4D3D2D1D000設(shè)n為待轉(zhuǎn)換的數(shù)字量,VREFIN為基準(zhǔn)輸入電壓,則轉(zhuǎn)換后的輸出電壓:VOUT=2×VREFIN×n/1024表9-1D/A轉(zhuǎn)換數(shù)據(jù)輸入格式2023/2/4213.TLC5615與單片機的接口TLC5615與單片機的硬件如圖9-7所示,將TLC5615的SCLK、、DIN分別與單片機的P1.0、P1.1、P1.2相連,基準(zhǔn)電壓接+5V。圖9-8TLC5615與單片機的硬件連接
2023/2/422D/A轉(zhuǎn)換匯編語言程序:設(shè)要轉(zhuǎn)換的數(shù)據(jù)放在R7R6中,R7為高8位,R6低8位DINBITP1.2;引腳定義CSBITP1.1SCLKBITP1.0…TLC5615_DA:CLRC ;將R7R6中數(shù)據(jù)左移2位(16位數(shù)據(jù)的最低2位添00)RLCR6RLCR7CLRCRLCR6RLCR7SETBCS;初始化片選信號為高
CLRSCLK;初始化時鐘為低
CLRDIN ;D/A數(shù)據(jù)線置低
CLRCS ;選中TLC5615,開始啟動D/AMOVR5,#16 ;將16位數(shù)據(jù)從DIN端移進內(nèi)部的16位移位寄存器2023/2/423
LOOP:RLCR6 ;R7R6中數(shù)據(jù)左移一位,最高位進入CYRLCR7MOVDIN,C ;將數(shù)據(jù)送到DIN引腳
SETBSCLK;送時鐘
NOPNOPNOPCLRSCLK;NOPNOPNOP DJNZR5,LOOP SETBCS;D/A片選拉高,10位有效數(shù)據(jù)鎖存到DAC寄存器,開始轉(zhuǎn)換
RET
2023/2/424D/A轉(zhuǎn)換C語言程序:sbitDA_clk=P1^0;/*引腳定義*/sbitDA_cs=P1^1; sbitDA_in=P1^2;…voiddelay_s(unsignedcharn) /*延時*/{unsignedchari;
for(i=0;i<n;i++);
}voidTLC5615_DA_conver(unsignedintDA_data)/*D/A轉(zhuǎn)換程序*/{unsignedchari;
DA_data=DA_data<<2;/*將數(shù)據(jù)左移2位(最低2位添00)*/DA_cs=1; /*初始化片選信號為高*/DA_clk=0; /*初始化時鐘為低*/DA_in=0;/*D/A數(shù)據(jù)線置低*/DA_cs=0; /*選中TLC5615,開始啟動D/A*/for(i=0;i<16;i++)/*將16位數(shù)據(jù)從DIN端移進內(nèi)部的16位移位寄存器*/2023/2/425{DA_data=DA_data<<1;/*左移一位,最高位進入CY*/DA_in=CY; /*將數(shù)據(jù)送到DIN引腳*/DA_clk=1;delay_s(0x02);/*送時鐘*/DA_clk=0;delay_s(0x02);
}DA_cs=1;/*片選拉高,10位數(shù)據(jù)鎖存到DAC寄存器,開始轉(zhuǎn)換*/delay_s(0x20); }2023/2/4264.用TLC5615設(shè)計簡易信號發(fā)生器
圖9-9是用TLC5615設(shè)計簡易信號發(fā)生器的硬件接口電路。系統(tǒng)實現(xiàn)上電后產(chǎn)生矩形波,當(dāng)S1按下時產(chǎn)生正弦波,當(dāng)S2按下時產(chǎn)生三角波。
圖9-9簡易信號發(fā)生器的硬件接口電路
程序略2023/2/4279.2I2C總線接口技術(shù)I2C總線是PHLIPS公司推出的一種高性能芯片間簡單、雙向二線制同步串行總線,數(shù)據(jù)傳輸時只需兩根信號線,一根是雙向數(shù)據(jù)線SDA,另一根是時鐘線SCL,所有連接到I2C總線上的串行器件,其數(shù)據(jù)線都連接到總線的SDA上,時鐘線則連接到總線的SCL上。9.2.1I2C總線簡介1.I2C總線的主要特點有:總線只有兩根線,即串行時鐘線(SCL)和串行數(shù)據(jù)線(SDA),這在設(shè)計中大大減少了硬件接口。
2023/2/428每個連接到總線上的器件都有一個用于識別的器件地址,器件地址由芯片內(nèi)部硬件電路和外部地址引腳同時決定,避免了片選線的連接方法,并建立簡單的主從關(guān)系,每個器件既可以作為發(fā)送器,又可以作為接收器。
同步時鐘允許器件以不同的波特率進行通信。同步時鐘可以作為停止或重新啟動串行口發(fā)送的握手信號。
串行的數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá)3.4Mbit/s。連接到同一總線的集成電路數(shù)只受400pF的最大總線電容的限制。
2023/2/4292.I2C總線系統(tǒng)結(jié)構(gòu)
I2C總線的系統(tǒng)結(jié)構(gòu)如圖9-10所示。采用I2C總線標(biāo)準(zhǔn)的器件均并聯(lián)在總線上,內(nèi)部都有I2C接口電路,用于實現(xiàn)和I2C總線的連接。I2C總線上的每一個從器件均有一個唯一的地址,用于識別不同的器件。
圖9-10I2C總線的系統(tǒng)結(jié)構(gòu)2023/2/4303.I2C總線的工作時序當(dāng)I2C總線沒有進行信息傳送時,數(shù)據(jù)線(SDA)和時鐘線(SCL)都為高電平時。當(dāng)主控制器向某個器件傳送信息時,首先應(yīng)向總線送開始信號,然后才能傳送信息,當(dāng)信息傳送結(jié)束時應(yīng)送結(jié)束信號,如圖9-11所示。圖9-11I2C總線的工作時序2023/2/431開始信號和結(jié)束信號規(guī)定如下:開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。結(jié)束信號:SCL為高電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。開始信號和結(jié)束信號之間傳送的是信息,信息的字節(jié)數(shù)沒有限制,但每個字節(jié)必須為8位,高位在前,低位在后。數(shù)據(jù)線SDA上每一位信息狀態(tài)的改變只能發(fā)生在時鐘線SCL為低電平的期間,因為SCL高電平期間SDA狀態(tài)的改變已經(jīng)被用來表示開始信號和結(jié)束信號。每個字節(jié)后面必須接收一個應(yīng)答信號(ACK),ACK是從控制器在接收到8位數(shù)據(jù)后向主控制器發(fā)出的特定的低電平脈沖,用以表示已收到數(shù)據(jù)。主控制器接收到應(yīng)答信號(ACK)后,可根據(jù)實際情況作出是否繼續(xù)傳遞信號的判斷。若未收到ACK,則判斷為從控制器出現(xiàn)故障。
2023/2/432
主控制器每次傳送的信息的第一個字節(jié)必須是器件地址碼,第二個字節(jié)為器件單元地址,用于實現(xiàn)選擇所操作的器件的內(nèi)部單元,從第三個字節(jié)開始為傳送的數(shù)據(jù)。其中器件地址碼格式如表9-2所示。表9-2I2C總線上器件地址碼格式D7D6D5D4D3D2D1D0器件類型碼片選R/W2023/2/433I2C總線上的每一個從器件均有一個唯一的地址,每次主器件發(fā)出起始信號后,必須接著發(fā)出一個字節(jié)的器件地址,以選取掛在總線上的某一從器件并控制總線的傳輸方向。器件類型碼:表示器件的類型,出廠時根據(jù)PHILIPS公司的I2C規(guī)程確定,比如對于24C02芯片來說,器件標(biāo)識地址為1010。片選地址:當(dāng)總線上有多片同類器件時,只有器件引腳A2~A0的電平與器件地址中A2~A0同相的器件才能被選中。R/W操作控制位,為1表示讀操作,為0表示寫操作。說明:器件地址只表明選擇掛在總線的哪一個器件及數(shù)據(jù)傳送方向,而器件內(nèi)部的地址是由編程者在傳送第一個數(shù)據(jù)時指定的,即第一個數(shù)據(jù)為器件內(nèi)的子地址。
2023/2/4344.I2C總線讀、寫操作
(1)當(dāng)前地址讀該操作將從所選器件當(dāng)前地址執(zhí)行讀操作,讀的字節(jié)數(shù)不指定,格式見表9-3所示
表9-3當(dāng)前地址讀操作格式
S控制碼(R/W=1)A數(shù)據(jù)1A數(shù)據(jù)2AP(2)指定單元讀該操作將從所選器件指定地址讀,讀的字節(jié)數(shù)不指定,格式見表9-4所示。
表9-4指定地址讀操作格式
S控制碼(R/W=0)A器件單元地址AS控制碼(R/W=1)A數(shù)據(jù)1A數(shù)據(jù)2AP2023/2/435
(3)指定單元寫該操作將從所選器件指定地址寫,寫的字節(jié)數(shù)不指定,格式見表9-5所示。表9-5指定地址寫操作格式S控制碼(R/W=0)A器件單元地址A數(shù)據(jù)1A數(shù)據(jù)2AP其中:S表示開始信號,A表示應(yīng)答信號,P表示結(jié)束信號。
2023/2/4369.2.2用I/O口模擬I2C總線操作子程序目前不少的單片機內(nèi)部集成了I2C總線接口,如MCS-51系列的8XC550、8XC552、8XC571等,低價位的單片機內(nèi)部雖然沒有集成I2C總線接口,但可以通過軟件實現(xiàn)I2C總線操作。
假設(shè)采用89S51單片機,晶振頻率為12MHz,即機器周期為1us,使用P1.0作為數(shù)據(jù)線SDA,P1.1作為時鐘線SCL。SCLBITP1.1 ;匯編語言定義端口SDABITP1.0sbitSDA=P1^0;//C語言定義端口sbitSCL=P1^1;bitack;//應(yīng)答標(biāo)志位,有應(yīng)答為1,無應(yīng)答為0#defineDELAY5US_nop_();_nop_();_nop_();_nop_();_nop_();
根據(jù)I2C總線數(shù)據(jù)傳送的典型信號時序要求,可用單片機I/O口線產(chǎn)生起始信號、停止信號、應(yīng)答信號、非應(yīng)答信號等。匯編語言和C語言程序如下:2023/2/4371.產(chǎn)生起始信號S匯編語言程序:
START:SETBSDA ;發(fā)送起始條件數(shù)據(jù)信號
SETB SCL ;發(fā)送起始條件的時鐘信號
NOP NOP NOP NOP CLR SDA ;發(fā)送起始信號(SCL為高,SDA發(fā)生由高到低)
NOP NOP NOP NOP NOP CLR SCL RET2023/2/438C語言程序:voidstart() {SDA=1; /*將SDA、SCL置為1*/SCL=1;DELAY5US;/*延時5us*/SDA=0;/*SCL為高時,SDA由高變低*/DELAY5US;SCL=0; /*SCL變低,準(zhǔn)備發(fā)送或接收數(shù)據(jù)*/}2023/2/4392.產(chǎn)生停止信號S
匯編語言程序:STOP:CLRSDA ;發(fā)送停止條件的數(shù)據(jù)信號SETBSCL ;發(fā)送停止條件的時鐘信號NOPNOPNOPNOPNOP SETBSDA ;發(fā)送I2C總線停止信號(SCL為高,SDA發(fā)生由低到高)
NOPNOPNOPNOP CLRSCLCLRSDARET2023/2/440C語言程序:voidstop() {SDA=0;/*將SDA清0,SCL置1*/SCL=1;DELAY5US; SDA=1; /*當(dāng)SCL為高電平時,SDA由低變高*/DELAY5US;SCL=0;}2023/2/4413.發(fā)送應(yīng)答信號ACK匯編語言程序:MACK:CLRSDA;發(fā)送應(yīng)答信號MACKSETBSCLNOPNOPNOPNOPNOPCLRSCLSETBSDARET2023/2/442C語言程序:voidack(void)/*產(chǎn)生應(yīng)答信號*/{SDA=0;/*SDA先清0,發(fā)應(yīng)答信號*/SCL=1; /*SCL由低變高,產(chǎn)生一個時鐘*/DELAY5US;/*延時5us*/SCL=0;/*SCL變低,以便繼續(xù)接收*/SDA=1;}2023/2/4434.發(fā)送非應(yīng)答信號NACK匯編語言程序:NACK:SETBSDA;發(fā)送應(yīng)答信號NACKSETBSCLNOPNOPNOP NOPNOPCLRSCLCLRSDARET2023/2/444C語言程序:voidnack(void){SDA=1;/*DA先置1,發(fā)非應(yīng)答信號*/SCL=1; /*SCL由低變高,產(chǎn)生一個時鐘*/DELAY5US;SCL=0;/*時鐘線SCL恢復(fù)到低電平*/SDA=0;}2023/2/4455.應(yīng)答檢測子程序CACK匯編語言程序(F0=1通信失敗):CACK:SETBSDA;發(fā)送應(yīng)答信號CACKSETBSCLCLRF0MOVC,SDAJNCCENDSETBF0CEND:CLRSCL RET2023/2/446C語言程序:voidcack(void){SDA=1;/*SDA先置1,發(fā)非應(yīng)答信號*/SCL=1;/*SCL由低變高,產(chǎn)生一個時鐘*
DELAY5US;ack=0;if(SDA=1)ack=1;SCL=0;/*時鐘線SCL恢復(fù)到低電平*/}2023/2/4476.向I2C總線發(fā)送一個字節(jié)
匯編語言程序:;從A中取一個字節(jié)數(shù)據(jù)寫向I2C總線WRITE_BYTE:MOVR7,#8 ;寫8位WRITE_LOOP:RLCA;發(fā)送A中數(shù)據(jù)
MOVSDA,C SETBSCL NOP NOP NOP NOP NOP CLRSCL DJNZR7,WRITE_LOOPRET2023/2/448C語言程序:/*將指針P指向的一個字節(jié)數(shù)據(jù)發(fā)送*/voidSendByte(uchar*p){ucharn,temp;temp=*p;for(n=0;n<8;n++)/*一字節(jié)為8位,循環(huán)8次*/{if(temp&0x80)SDA=1;/*將數(shù)據(jù)線SDA置1或清0*/elseSDA=0;NOPSCL=1;/*置SCL為高,通知從機開始接收數(shù)據(jù)*/DELAY5US;SCL=0;/*SCL變低,準(zhǔn)備發(fā)送下一位數(shù)據(jù)*/temp=temp<<1;/*準(zhǔn)備下一位要發(fā)送的數(shù)據(jù)*/}}2023/2/4497.從I2C總線接收一個字節(jié)數(shù)據(jù)匯編語言程序:;從I2C總線接收一個字節(jié)數(shù)據(jù)放在A中RDBYTE:MOVR7,#8 ;寫8位RD_LOOP:SETBSDASETBSCL NOP;延時5μs NOP NOP NOP NOP NOP MOVC,SDA;采樣SDA線上的數(shù)據(jù)到cy MOVA,R2;R2為接收數(shù)據(jù)的緩沖寄存器RLCA;將cy中的數(shù)據(jù)左移進A中MOVR2,A;數(shù)據(jù)送回緩沖寄存器R2CLRSCLDJNZR7,RD_LOOPRET2023/2/450C語言程序:/*接收一個字節(jié)數(shù)據(jù)放在P指向單元*/ucharRcvByte(uchar*P) {ucharn,temp;for(n=0;n<8;n++) /*一字節(jié)為8位,循環(huán)8次*/{SDA=1;/*置數(shù)據(jù)線SDA為高,進入接收方式*/SCL=1;/*SCL由低變高,產(chǎn)生一個時鐘*/DELAY5US;temp=temp<<1;if(SDA=1)temp=temp︱0X01ELSEtemp=temp&0xfe;SCL=0;/*時鐘線SCL清0*/}*p=temp;}2023/2/4518.向有子地址器件發(fā)送多個字節(jié)以上介紹的都是I2C總線的基本操作,I2C總線完整的數(shù)據(jù)傳輸是由以上操作組合而成。設(shè)某從器件的寫地址為sla,如果希望向該器件由子地址suba開始的單元連續(xù)寫入n個字節(jié)的數(shù)據(jù)dat1、dat2、……datn,相應(yīng)的操作過程如圖9-12所示。有陰影部分表示數(shù)據(jù)由主器件向從器件傳送,無陰影部分表示數(shù)據(jù)由從器件向主器件傳送。圖9-12向有子地址器件發(fā)送多個字節(jié)的操作過程匯編語言程序:;多字節(jié)寫操作子程序WNBYTE;入口參數(shù):R7寫入的字節(jié)數(shù),R0寫入數(shù)據(jù)的首地址,R2從器件地址,R3從器件內(nèi)部地址2023/2/452WNBYTE:MOVA,R3; LCALLSTART LCALLWRITE_BYTE LCALLCACK JBF0,WRBYTEMOVA,R2 LCALLWRITE_BYTELCALLCACKJBF0,WRBYTEWRDA:MOVA,@R0LCALLWRITE_BYTELCALLCACKJBF0,WRBYTEINCR0DJNZR7,WRDALCALLSTOPRET2023/2/453C語言程序:/*多字節(jié)寫操作子程序WNBYTE入口參數(shù):n寫入的字節(jié)數(shù),S0寫入數(shù)據(jù)的首地址,S3從器件地址,S2從器件地址內(nèi)部地址*/voidSendnbyte(uchar*s3,uchar*s2,uchar*s0,ucharn){uchari;loop:start(); /*發(fā)起始信號,啟動總線*/SendByte(s3); /*發(fā)送從器件地址*/cack(); if(ack)gotoloopSendByte(s2); /*發(fā)送器件子地址*/cack(); if(ack)gotoloopfor(i=0;i<n;i++) /*循環(huán)n次*/{SendByte(s0);/*發(fā)送一個字節(jié)數(shù)據(jù)*/cack(); if(ack)gotoloops0++; /*指向下一個字節(jié)*/}stop();/*發(fā)結(jié)束信號,結(jié)束本次數(shù)據(jù)傳送*/}2023/2/4549.向有子地址器件讀取多個字節(jié)
主機首先發(fā)送起始信號、從器件地址sla和希望讀取的字節(jié)數(shù)據(jù)所在從器件子地址suba,執(zhí)行一次寫操作,在從器件應(yīng)答之后,主器件重新發(fā)送起始信號和從器件讀地址sla+1,從器件響應(yīng)并發(fā)送應(yīng)答信號后,輸出主機所要求的一個字節(jié)數(shù)據(jù)dat1,主器件隨后發(fā)送應(yīng)答信號ACK,以后從器件每輸出一個字節(jié)數(shù)據(jù),主機均回送ACK應(yīng)答,當(dāng)從器件輸出最后一個字節(jié)數(shù)據(jù)datn后,主機回送非應(yīng)答信號,接著發(fā)送停止信號結(jié)束總線傳送,相應(yīng)的操作過程如圖9-13所示。圖9-13向有子地址器件讀取多個字節(jié)的操作過程2023/2/455匯編語言程序:;多字節(jié)讀操作子程序RNBYTE;入口參數(shù):R7寫入的字節(jié)數(shù),R0寫入數(shù)據(jù)的首地址,R2從器件地址內(nèi)部地址,R3從器件寫地址,R4從器件讀地址RNBYTE:LCALLSTARTMOVA,R3 ;取從器件寫地址LCALLWRITE_BYTE ;寫從器件地址LCALLCACK ;檢測應(yīng)答信號JBF0,RNBYTE ;無應(yīng)答重新開始MOVA,R2 ;取從器件地址內(nèi)部地址LCALLWRITE_BYTELCALLCACKJBF0,RNBYTELCALLSTART2023/2/456MOVA,R4 ;取從器件讀地址LCALLWRITE_BYTELCALLCACKJBF0,RNBYTERDN:LCALLRDBYTE ;接收一個字節(jié)數(shù)據(jù)MOV@R0,A DJNZR7,ACKLCALLMNACK ;接收完發(fā)非應(yīng)答信號LCALLSTOPACK:LCALLMACK;沒接收完發(fā)應(yīng)答信號INCR0SJMPRDN2023/2/457C語言程序:/*多字節(jié)讀操作子程序RNBYTE/*入口參數(shù):n寫入的字節(jié)數(shù),s0讀數(shù)據(jù)存放的首地址,s2從器件地址內(nèi)部地址,s3從器件寫地址,s4從器件讀地址*/viodRcvnbyte(uchar*s3,uchar*s4,uchar*s2,uchar*s0,ucharn){loop:start();/*發(fā)起始信號,啟動總線*/ SendByte(s3);/*發(fā)送從器件地址*/Cack();/*應(yīng)答檢測*/if(ack)/*如果沒能應(yīng)答,重新開始*/gotoloopSendByte(s2);/*發(fā)送器件子地址*/Cack();/*應(yīng)答檢測*/if(ack)/*如果沒能應(yīng)答,重新開始*/gotoloop2023/2/458start();/*再次發(fā)起始信號*/SendByte(s4); /*sla+1表示進行讀操作*/cack();/*應(yīng)答檢測*/if(ack)/*如果沒能應(yīng)答,重新開始*/gotoloopfor(i=0;i<n-1;i++)/*對前n-1個字節(jié)發(fā)應(yīng)答信號*/{RcvByte(s0);/*接收數(shù)據(jù)*/ack();/*發(fā)送應(yīng)答信號*/s++;}RcvByte(s0);/*接收最后一個字節(jié)*/nack();/*發(fā)送非應(yīng)答信號*/stop();/*發(fā)結(jié)束信號,結(jié)束本次數(shù)據(jù)傳送*/}2023/2/4599.2.324CXX系列EEPROM芯片及其與單片機的接口串行E2PROM是在各種串行器件應(yīng)用中使用較頻繁的器件,和并行E2PROM相比,串行E2PROM容量小、數(shù)據(jù)傳送速度較低,但因其體積較小,引腳較少,功耗低,特別適合于需要存放非揮發(fā)數(shù)據(jù),速度要求不高,引腳少的單片機應(yīng)用系統(tǒng)。24CXX系列的E2PROM有多種型號,其中典型的型號有:24C02/04/08/16/32/64/128/256共8中芯片,容量分別為1、2、4、8、16、32、64、128、256KB。串行EEPROM一般具有兩種寫入方式,一種是字節(jié)寫入方式,還有另一種頁寫入方式,允許在一個寫周期內(nèi)同時對1個字節(jié)到一頁的若干字節(jié)的編程寫入,一頁的大小取決于芯片內(nèi)頁寄存器的大小。其中,24C01具有8字節(jié)數(shù)據(jù)的頁面寫能力,24C02/04/08/16具有16字節(jié)數(shù)據(jù)的頁面寫能力,24C32/64具有32字節(jié)數(shù)據(jù)的頁面寫能力,24C128/256具有64字節(jié)數(shù)據(jù)的頁面寫能力。
2023/2/4601、引腳的功能24CXX系列的E2PROM管腳排列圖分別為如圖9-14的(a)、(b)、(c)所示VCC:電源+5V。VSS:地線。SCL:串行時鐘輸入端,用于發(fā)送數(shù)據(jù)或接收數(shù)據(jù)時產(chǎn)生所需的時鐘。SDA:串行數(shù)據(jù)I/O端,用于輸入和輸出串行數(shù)據(jù)。該引腳是漏極開路的端口,需接上拉電阻到VCC。WP:寫保護端,該引腳提供了硬件數(shù)據(jù)保護,當(dāng)WP接地時,允許對芯片執(zhí)行寫操作;當(dāng)WP接VCC時,則對芯片實施寫保護。(a)24C01/02/04/08/16/32/64管腳(b)24C128管腳(c)24C256管腳圖9-1424CXX系列E2PROM引腳圖2023/2/461A0、A1、A2:器件地址輸入端,用于多個器件級聯(lián)時設(shè)置器件地址,當(dāng)這些腳懸空時默認(rèn)值為0,對于24C02可級聯(lián)8個器件,如果線路上只有一片24C02,這三個地址輸入腳A0、A1、A2可懸空或連接到GND。例:如果A2、A1、A0所接的電平為101,由于24C02的器件標(biāo)識為1010,那么,該芯片的讀地址為0xab,寫地址為0xaa。
2023/2/4622.24CXX的器件地址24CXX的器件地址見表9-6所示。表9-624CXX的器件地址型號控制碼片選讀寫總線訪問的器件24C011010A2A1A01/0最多8個24C021010A2A1A01/0最多8個24C041010A2A1a81/0最多4個24C081010A2a9a81/0最多2個24C161010a10a9a81/0最多1個24C321010A2A1A01/0最多8個24C641010A2A1A01/0最多8個24C1281010XXX1/0最多1個24C25610100A1A01/0最多4個2023/2/4633.AT89S51單片機與24C02的硬件連接
圖9-15為單片機與24C02的連接,其中P1.0作為24C02的數(shù)據(jù)線SDA,P1.1作為24C02的時鐘線SCL,24C02的器件標(biāo)識地址為1010。由于系統(tǒng)中只有一片24C02,所以直接將器件地址輸入端A2、A1、A0接地,這樣24C02在系統(tǒng)中的器件地址SLAW=0xA0,SLAR=0xA1。兩條線均接4.7K的上拉電阻
圖9-15
單片機與24C02的連接電路2023/2/4644.89S51對24C02的讀寫程序
針對圖9-15,編寫對24C02的讀寫程序,將若干個字節(jié)數(shù)據(jù)寫到24C02芯片地址為0x10開始的單元中,隨后從這些單元讀出數(shù)據(jù),判斷是否與寫入的數(shù)據(jù)一致,如果讀/寫正確,蜂鳴器鳴叫一聲,否則鳴叫3聲。24C02的內(nèi)部有連續(xù)的子地址空間,對這些空間進行n個字節(jié)的連續(xù)讀/寫時,具有地址自動加1功能,只要設(shè)定好希望讀/寫的器件子地址及字節(jié)數(shù),就能完成整個操作。注意:對于24C02連續(xù)寫的字節(jié)數(shù)不應(yīng)超過頁容量8,一次連續(xù)寫所形成的總線傳送結(jié)束后(主機發(fā)出停止信號后),24C02執(zhí)行內(nèi)部擦寫過程,大約需要10ms左右,此時24C02不再應(yīng)答主器件的任何請求。2023/2/465C語言參考程序見課本.其中的函數(shù)Sendnbyte()、Rcvnbyte()在前面9.2.2節(jié)已作介紹,對24C02的讀寫完全適用。為了使用方便,可以將9.2.2節(jié)介紹的模擬I2C總線操作的子程序形成一個文件I2C.C,并形成如下的I2C.h文件,主程序和I2C.C加入同一個項目中,并且主程序包含這個h文件,即可使用Rcvnbyte()、Rcvnbyte()這兩個函數(shù)。2023/2/4669.2.4數(shù)碼管動態(tài)顯示驅(qū)動、鍵盤掃描管理芯片ZLG7290B及與單片機接口ZLG7290B是廣州周立功單片機發(fā)展有限公司自行設(shè)計的數(shù)碼管顯示驅(qū)動及鍵盤掃描管理芯片。能夠直接驅(qū)動8位共陰式數(shù)碼管(或64只獨立的LED),同時還可以掃描管理多達(dá)64只按鍵。其中有8只按鍵還可以作為功能鍵使用,就像電腦鍵盤上的Ctrl、Shift、Alt鍵一樣。另外ZLG7290B內(nèi)部還設(shè)置有連擊計數(shù)器,能夠使某鍵按下后不松手而連續(xù)有效。采用I2C總線方式,與微控制器的接口僅需兩根信號線。該芯片為工業(yè)級芯片,抗干擾能力強,在工業(yè)測控中已有大量應(yīng)用。1.主要特性直接驅(qū)動8位共陰式數(shù)碼管或64只獨立的LED;能夠管理多達(dá)64只按鍵,自動消除抖動,其中有8只可以作為功能鍵使用;段電流可達(dá)20mA,位電流可達(dá)100mA以上;利用功率電路可以方便地驅(qū)動1英寸以上的大型數(shù)碼管;2023/2/467具有閃爍、段點亮、段熄滅、功能鍵、連擊鍵計數(shù)等強大功能;提供有10種數(shù)字和21種字母的譯碼顯示功能,或者直接向顯示緩存寫入顯示數(shù)據(jù);不接數(shù)碼管而僅使用鍵盤管理功能時,工作電流可降至1mA;與微控制器之間采用I2C串行總線接口,只需兩根信號線,節(jié)省I/O資源;工作電壓范圍:+3.3~5.5V;工作溫度范圍:-40~+85℃;封裝:DIP-24(窄體),SOP-24。2.引腳圖及功能說明引腳圖見9-16所示,引腳功能見表9-7所示。圖9-16ZLG7290B引腳圖(DIP-24,SOP-24)2023/2/468表9-7ZLG7290B引腳功能表引腳序號引腳名稱功能描述1SC/KR2數(shù)碼管c段/鍵盤行信號22SD/KR3數(shù)碼管d段/鍵盤行信號33DIG3/KC3數(shù)碼管位選信號3/鍵盤列信號34DIG2/KC2數(shù)碼管位選信號2/鍵盤列信號25DIG1/KC1數(shù)碼管位選信號1/鍵盤列信號16DIG0/KC0數(shù)碼管位選信號0/鍵盤列信號07SE/KR4數(shù)碼管e段/鍵盤行信號48SF/KR5數(shù)碼管f段/鍵盤行信號59SG/KR6數(shù)碼管g段/鍵盤行信號610DP/KR7數(shù)碼管dp段/鍵盤行信號711GND接地12DIG6/KC6數(shù)碼管位選信號6/鍵盤列信號62023/2/469引腳序號引腳名稱功能描述13DIG7/KC7數(shù)碼管位選信號7/鍵盤列信號714/INT鍵盤中斷請求信號,低電平(下降沿)有效15/RST復(fù)位信號,低電平有效16Vcc電源,+3.3~5.5V17OSC1晶振輸入信號18OSC2晶振輸出信號19SCLI2C總線時鐘信號20SDAI2C總線數(shù)據(jù)信號21DIG5/KC5數(shù)碼管位選信號5/鍵盤列信號522DIG4/KC4數(shù)碼管位選信號4/鍵盤列信號423SA/KR0數(shù)碼管a段/鍵盤行信號024SB/KR1數(shù)碼管b段/鍵盤行信號12023/2/4703.ZLG7290B典型應(yīng)用電路原理圖如圖9-17所示。(1)電路簡析在圖9-17中,U1就是ZLG7290B。J1是ZLG7290B與微控制器的接口,按照I2C總線協(xié)議的要求,信號線SCL和SDA上必須要分別加上上拉電阻,其典型值是10KΩ。晶振Y1通常取值4MHz,調(diào)節(jié)電容C3和C4通常取值在10pF左右。復(fù)位信號是低電平有效,數(shù)碼管必須是共陰式的,不能直接使用共陽式的。DPY1和DPY2是4位聯(lián)體式數(shù)碼管,共同組成完整的8位。R1~R8是限流電阻,典型值是270Ω。64只按鍵中,前56個按鍵是普通按鍵K1~K56,最后8個為功能鍵F0~F7。數(shù)碼管掃描線和鍵盤掃描線是共用的,所以二極管D1~D8是必須的,有了它們就可以防止按鍵干擾數(shù)碼管顯示的情況發(fā)生。在多數(shù)應(yīng)用當(dāng)中可能不需要太多的按鍵,這時可以按行或按列裁減鍵盤。2023/2/471圖9-17ZLG7290B典型應(yīng)用電路原理圖2023/2/472(2)功能概述如圖9-17所示,ZLG7290B可以掃描管理多達(dá)64個按鍵,K1~K56為普通按鍵,F(xiàn)0~F7為功能鍵。普通按鍵還有連擊檢測功能。ZLG7290B內(nèi)部有8個顯示緩沖寄存器DpRam0~DpRam7,它們直接決定數(shù)碼管顯示的內(nèi)容。ZLG7290B提供有兩種顯示控制方式,一種是直接向顯存寫入字型數(shù)據(jù),另一種是通過向命令緩沖寄存器寫入控制指令實現(xiàn)自動譯碼顯示。訪問這些寄存器需要通過I2C總線接口來實現(xiàn)。ZLG7290B的I2C總線器件地址是70H(寫操作)和71H(讀操作)。訪問內(nèi)部寄存器要通過“子地址”來實現(xiàn)。2023/2/4734.寄存器詳解(1)系統(tǒng)寄存器SystemReg(地址:00H)系統(tǒng)寄存器的第0位稱作KeyAvi,標(biāo)志著按鍵是否有效,0-沒有按鍵被按下,1-有某個按鍵被按下。SystemReg寄存器的其它位暫時沒有定義。當(dāng)按下某個鍵時,7290B的INT引腳會產(chǎn)生一個低電平的中斷請求信號。當(dāng)讀走鍵值后,中斷信號就會自動撤銷。(2)鍵值寄存器Key(地址:01H)如果某個普通鍵(圖9-23中的K1~K56)被按下,則微控制器可以從鍵值寄存器Key中讀取相應(yīng)的鍵值1~56。如果微控制器發(fā)現(xiàn)ZLG7290B的INT引腳產(chǎn)生了中斷請求,而從Key中讀到的鍵值是0,則表示按下的可能是功能鍵。鍵值寄存器Key的值在被讀走后自動變成0。2023/2/4743)連擊計數(shù)器RepeatCnt(地址:02H)
ZLG7290B為普通鍵(圖9-中的K1~K56)提供了連擊計數(shù)功能。所謂連擊是指按住某個普通鍵不松手,經(jīng)過一兩秒鐘的延遲后,開始連續(xù)有效,連續(xù)有效間隔時間為幾十到幾百個毫秒。當(dāng)按住某個普通鍵一直不松手時:首先會產(chǎn)生一次中斷信號,這時連擊計數(shù)器RepeatCnt的值仍然是0;經(jīng)過一兩秒延遲后,會連續(xù)產(chǎn)生中斷信號,每中斷一次RepeatCnt就自動加1;當(dāng)RepeatCnt計數(shù)到255時就不再增加,而中斷信號繼續(xù)有效。2023/2/475(4)功能鍵寄存器FunctionKey(地址:03H)ZLG7290B還提供有8個功能鍵(圖9-23中的F0~F7)。功能鍵常常是配合普通鍵一起使用的,就像電腦鍵盤上的Shift、Ctrl和Alt鍵,當(dāng)然也可以單獨使用。當(dāng)按下某個功能鍵時,在/INT引腳也會像按普通鍵那樣產(chǎn)生中斷信號。功能鍵的鍵值是被保存在unctionKey寄存器中的。功能鍵寄存器FunctionKey的初始值是FFH,每一個位對應(yīng)一個功能鍵,第0位(LSB)對應(yīng)F0,第1位對應(yīng)F1,依次類推,第7位(MSB)對應(yīng)F7。某一功能鍵被按下時,相應(yīng)的FunctionKey位就清零。(5)命令緩沖區(qū)CmdBuf0和CmdBuf1(地址:07H和08H)通過向命令緩沖區(qū)寫入相關(guān)的控制命令可以實現(xiàn)段尋址、下載顯示數(shù)據(jù)、控制閃爍等功能。2023/2/476(6)閃爍控制寄存器FlashOnOff(地址:0CH)
FlashOnOff寄存器決定閃爍頻率和占空比。復(fù)位值為01110111B。高4位表示閃爍時亮的持續(xù)時間,低4位表示閃爍時滅的持續(xù)時間。改變FlashOnOff的值,可以同時改變閃爍頻率和占空比。特別說明:單獨設(shè)置FlashOnOff寄存器的值,并不會看到顯示閃爍,而應(yīng)該配合閃爍控制命令一起使用。(7)掃描位數(shù)寄存器ScanNum(地址:0DH)ScanNum寄存器決定掃描顯示的位數(shù),取值0~7,對應(yīng)1~8位。復(fù)位值是7,即數(shù)碼管的8位都掃描顯示。實際應(yīng)用中可能需要顯示的位數(shù)不足8位,例如只顯示3位,這時可以把ScanNum的值設(shè)置為2,則數(shù)碼管的第0、1、2位被掃描顯示,而第3~7位不會被分配掃描時間,所以不顯示。數(shù)碼管的掃描位數(shù)減少后,有用的顯示位由于分配的掃描時間更多因而顯示亮度得以提高。ScanNum寄存器的值為0時,只有數(shù)碼管的第0位在顯示,亮度達(dá)到最大。2023/2/4779-2I2C總線接口技術(shù)(8)顯示緩沖區(qū)DpRam0~DpRam7(地址:10H~17H)DpRam0~DpRam7這8個寄存器的取值直接決定了數(shù)碼管的顯示內(nèi)容。每個寄存器的8個位分別對應(yīng)數(shù)碼管的a,b,c,d,e,f,dp段,MSB對應(yīng)a,LSB對應(yīng)dp。例如大寫字母H的字型數(shù)據(jù)為6EH(不帶小數(shù)點)或6FH(帶小數(shù)點)。2023/2/4785.控制命令詳解寄存器CmdBuf0(地址:07H)和CmdBuf1(地址:08H)共同組成命令緩沖區(qū)。通過向命令緩沖區(qū)寫入相關(guān)的控制命令可以實現(xiàn)段尋址、下載顯示數(shù)據(jù)、控制閃爍等功能。(1)段尋址命令(SegOnOff)段尋址命令格式見表9-8所示。表9-8段尋址命令格式
D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D000000001on0S5S4S3S2S1S0在段尋址命令中,8位數(shù)碼管被看成是64個段,每一個段實際上就是一只獨立的LED。第1字節(jié)00000001B是命令字,為該命令的特征碼;第二字節(jié)中的on表示該段是否點亮,0-滅,1-亮;S5S4S3S2S1S0是64位段地址,取值0~63。在某1位數(shù)碼管內(nèi),各段的亮或滅的順序按照a,b,c,d,e,f,g,dp進行。2023/2/479(2)下載數(shù)據(jù)命令(Download)下載數(shù)據(jù)命令格式見表9-9所示。表9-9下載數(shù)據(jù)命令D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D00110A3A2A1A0dpflash0d4d3d2d1d0
在第一字節(jié)中,高4位的0110是命令特征碼;A3A2A1A0是數(shù)碼管顯示數(shù)據(jù)的位地址(其中A3留作以后擴展之用,實際使用時取0即可),位地址編號按從左到右的順序依次為0,1,2,3,4,5,6,7(以第本章中的圖9-23為準(zhǔn));dp控制小數(shù)點是否點亮,0-點亮,1-熄滅;flash表示是否要閃爍,0-正常顯示,1-閃爍;d4d3d2d1d0是要顯示的數(shù)據(jù),包括10種數(shù)字和21種字母。顯示數(shù)據(jù)按照表9-10中的規(guī)則進行譯碼。2023/2/480表9-10下載數(shù)據(jù)并譯碼命令的數(shù)據(jù)表d4d3d2d1d0(二進制)d4d3d2d1d0(十進制)顯示結(jié)果0000000H00000101H10001002H20001103H30010004H40010105H50011006H60011107H70100008H82023/2/481表9-10下載數(shù)據(jù)并譯碼命令的數(shù)據(jù)表d4d3d2d1d0(二進制)d4d3d2d1d0(十進制)顯示結(jié)果0100109H9010100AHA010110BHb011000CHC01101ODHd01110OEHE01111OFHF1000010HG1000111HH2023/2/482表9-10下載數(shù)據(jù)并譯碼命令的數(shù)據(jù)表d4d3d2d1d0(二進制)d4d3d2d1d0(十進制)顯示結(jié)果1001012Hi1001113Hj1010014HL1010115Ho1011016Hp1011117Hq1100018Hr1100119Ht2023/2/483表9-10下載數(shù)據(jù)并譯碼命令的數(shù)據(jù)表d4d3d2d1d0(二進制)d4d3d2d1d0(十進制)顯示結(jié)果110101AHU110111BHy111001CHc111011DHh111101EHT111111FH(無顯示)2023/2/484(3)閃爍控制(Flash)閃爍控制命令格式見表9-11所示。表9-11閃爍控制D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D00111XXXXF7F6F5F4F3F2F1F0
在命令格式中,高4位的0111是命令特征碼;xxxx表示無關(guān)位,通常取值0000;第2字節(jié)的Fn(n=0~7)控制數(shù)碼管相應(yīng)位的閃爍屬性,0-正常顯示,1-閃爍。復(fù)位后,所有位都不閃爍。2023/2/4856.ZLG7290動態(tài)數(shù)碼顯示程序設(shè)計在8個數(shù)碼管上從左到右顯示”20100725”,參考程序清單如下:SDA BITP1.0SCL BITP1.1WSLAEQU070H;ZLG7290器件的寫地址RSLAEQU071H;ZLG7290器件的讀地址
ORG 0000HLJMP0100HORG 0100H;主程序START: MOV 30H,#02H ;變量緩沖區(qū)定義顯示“20100725” MOV 31H,#00H ; MOV 32H,#01H ; MOV 33H,#00H MOV 34H,#00H2023/2/486 MOV 35H,#07H MOV 36H,#02H MOV 37H,#05H MOV DPTR,#LEDSEG ;數(shù)據(jù)指針指向字型碼表首地址
CLR A MOV R7,#08H MOV R0,#40H MOV R1,#30H LOOP1:MOVA,@R1;從變量緩沖區(qū)取出要形式的數(shù)字
MOVC A,@A+DPTR ;查表得字型碼
MOV @R0,A;將字型碼存儲到40H開始的單元中
INC R1 INC R0 DJNZR7,LOOP12023/2/487 LOOP: MOV R7,#08H MOV R0,#40H;字型碼首地址送R0 MOV R2,#10H;ZLG7290內(nèi)部顯示緩沖區(qū)首地址送R2 MOV R3,#WSLA;ZLG7290器件的寫地址送R3 LCALLWRNBYT;調(diào)用顯示子程序
LCALLDELAY SJMPLOOPLEDSEG:DB0FCH,60H,0DAH,0F2H,66H,0B8H,0BEH,0E4H;0-F共陰字型碼表
DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH DELAY:MOVR5,#00H;延時子程序
DELAY1:
MOVR6,#00H DJNZR6,$ DJNZR5,DELAY1 RET END2023/2/488上述調(diào)用的相關(guān)的I2C子程序(WRNBYT,WRBYT,STOP,CACK,START)參見9.2.2節(jié)的內(nèi)容。采用C語言編寫的參考程序#include“reg51.h”#include“intrins.h”#defineDEPLAY5US_nop_();_nop_();_nop_();_nop_();_nop_();sbitSDA=P1^0;sbitSCL=P1^1;#defineWSLA00x70#defineRSLA00x71#defineucharunsignedcharvoidSTA(void);voidSTOP(void);voidCACK(void);2023/2/489voidSendbyte(unsignedchar*p);voidSendnbyte(uchar*s3,uchar*s2,uchar*s0,ucharn);voidDELAY();voidmain(){ucharn,i,m,*c,*y,*x,wsubsla=0x10,WSLA=WSLA0;uchara[8]={2,0,1,0,0,7,2,5};/*顯示字符*/ucharb[8];/*存放顯示字符對應(yīng)的字型碼*/ucharzxm[16]={0xfc,0x60,0xda,0xf2,0x60,0xda,0xf2,0x66,0xbe,0xe4,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《客服的重要性概述》課件
- 2024年住宅小區(qū)車位配建及銷售合作協(xié)議2篇
- 2024年停薪留職員工職業(yè)規(guī)劃與發(fā)展支持協(xié)議合同3篇
- 2025施工工程承攬合同格式
- 2024外來單位進場建筑裝修施工安全協(xié)議及承諾書3篇
- 2024年度農(nóng)業(yè)科技項目委托投資合同3篇
- 2024年汽車租賃與廣告合作推廣服務(wù)協(xié)議3篇
- 2024年水電站環(huán)境保護合作協(xié)議3篇
- 《廣告人職業(yè)規(guī)劃》課件
- 2024年度金融行業(yè)合規(guī)人才輸出與管理服務(wù)合同2篇
- 團隊聯(lián)系人制度模板
- 生命教育三年級下冊
- 學(xué)院校食堂餐飲企業(yè)承包經(jīng)營退出管理制度
- 國開電大本科《人文英語4》機考真題(第十五套)
- 三維超聲輸卵管造影的應(yīng)用課件
- 高壓旋噴樁檢測方案
- Unit1 My classroom Part A Lets spell(說課稿)-2022-2023學(xué)年英語四年級上冊
- 查看下載鄭州電視臺商都頻道簡介
- 2023年國開大學(xué)期末考復(fù)習(xí)題-10861《理工英語4》
- 公安廉政心談話六篇
- 【要點解讀】《實踐是檢驗真理的唯一標(biāo)準(zhǔn)》論證邏輯圖
評論
0/150
提交評論