TLC549的AD轉(zhuǎn)換_第1頁(yè)
TLC549的AD轉(zhuǎn)換_第2頁(yè)
TLC549的AD轉(zhuǎn)換_第3頁(yè)
TLC549的AD轉(zhuǎn)換_第4頁(yè)
TLC549的AD轉(zhuǎn)換_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 哈 爾 濱 理 工 大 學(xué) 榮 成 學(xué) 院?jiǎn)纹瑱C(jī)課程設(shè)計(jì)題目:基于TLC549的A/D轉(zhuǎn)換班級(jí): 電信121 姓名: 學(xué)號(hào): 1.簡(jiǎn)介32.實(shí)現(xiàn)方案32.1  主控模塊設(shè)計(jì) 32.2  LCD顯示模塊設(shè)計(jì) 42.3  A/D轉(zhuǎn)換模塊設(shè)計(jì) 42.4 TLC549介紹42.4.1 TLC549工作原理42.4.2 TLC549特點(diǎn)42.5 AT89C52工作原理52.6 1602液晶顯示屏工作原理63.系統(tǒng)軟件設(shè)計(jì) 63.1算法設(shè)計(jì) 73.3  程序設(shè)計(jì) 7(2) 定時(shí)器T0中斷服務(wù)函數(shù)設(shè)計(jì) 8(5) LCD顯示函數(shù)設(shè)計(jì) 94. 源程序代碼104.1 Ma

2、in函數(shù)模塊104.1.1定時(shí)器T0初始化函數(shù)模塊114.1.2定時(shí)器工作模塊124.1.3 TLC549讀取模塊124.1.3 延時(shí)模塊134.2 LCD1602函數(shù)模塊134.2.1 延時(shí)模塊134.2.2 LCD1602命令模塊144.2.3 數(shù)據(jù)寫入模塊144.2.4清屏指令144.2.4 初始化154.3 LCD1602端口和命令定義模塊165.實(shí)驗(yàn)總結(jié)176.參考文獻(xiàn)181.簡(jiǎn)介 電壓表作為電子應(yīng)用領(lǐng)域必不可少的工具,其性能越來(lái)越受到人們的廣泛關(guān)注。傳統(tǒng)的模擬電壓表由于設(shè)計(jì)較復(fù)雜,精度較低,不適合一般應(yīng)用。數(shù)字電壓表是諸多數(shù)字化儀表的核心與基礎(chǔ),電壓表的數(shù)字化是將連續(xù)的模擬量如直流

3、電壓轉(zhuǎn)換成不連續(xù)的離散的數(shù)字形式并加以顯示,這有別于傳統(tǒng)的以指針加刻度盤進(jìn)行讀數(shù)的方法,避免了讀數(shù)的視差和視覺(jué)疲勞。采用單片機(jī)設(shè)計(jì)的數(shù)字電壓表,以其精度高、抗干擾能力強(qiáng)、可擴(kuò)展性強(qiáng)、集成方便、價(jià)格低廉等優(yōu)點(diǎn)得到了普遍應(yīng)用。其內(nèi)部核心部件是A/D轉(zhuǎn)換器,轉(zhuǎn)換器的精度很大程度上影響著數(shù)字萬(wàn)用表的準(zhǔn)確度。 本課程設(shè)計(jì)采用A/D轉(zhuǎn)換器TLC549對(duì)電壓測(cè)量電路測(cè)出的輸入模擬信號(hào)電壓值進(jìn)行轉(zhuǎn)換,控制核心AT89C52RC再對(duì)轉(zhuǎn)換的結(jié)果進(jìn)行運(yùn)算和處理,最后驅(qū)動(dòng)輸出顯示裝置LCD1602顯示數(shù)字電壓信號(hào)。2.實(shí)現(xiàn)方案 系統(tǒng)的硬件采用模塊化設(shè)計(jì),以單片機(jī)主控器為核心,與LCD顯示電路、A/D轉(zhuǎn)換電路等組成數(shù)字

4、電壓表控制系統(tǒng)。主要包括單片機(jī)主控模塊、LCD顯示模塊、A/D模塊等。其中單片機(jī)主控模塊主要完成外圍硬件的控制以及運(yùn)算功能;LCD顯示模塊完成字符、數(shù)字的顯示功能;A/D模塊由A/D芯片實(shí)現(xiàn)A/D轉(zhuǎn)換,輸出電壓的數(shù)字量通過(guò)液晶LCD顯示。系統(tǒng)硬件組成方框圖如圖1所示。2.1  主控模塊設(shè)計(jì) 在大部分的工控或測(cè)控設(shè)備中,8位的MCS-51系列單片機(jī)能夠滿足大部分的控制要求,加之MCS-51系列單片機(jī)的價(jià)格優(yōu)勢(shì),使MCS-51系列單片機(jī)成為單片機(jī)應(yīng)用主流。AT89C52是目前應(yīng)用比較廣泛的MCS-51系列兼容單片機(jī)中的代表產(chǎn)品。鑒于此,本系統(tǒng)選用AT89C52單片機(jī)作為主控制器。2.2&

5、#160; LCD顯示模塊設(shè)計(jì) 字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用的有16×1、16×2、20×2和40×2行等模塊。本系統(tǒng)選用1602字符型LCD模塊,其控制器為日立公司生產(chǎn)的HD44780,可以用來(lái)顯示數(shù)字、字符等。2.3  A/D轉(zhuǎn)換模塊設(shè)計(jì) A/D模塊由A/D芯片和電壓測(cè)量電路組成,通過(guò)電壓測(cè)量電路測(cè)得輸入電壓,并轉(zhuǎn)換為05V的標(biāo)準(zhǔn)信號(hào)。本系統(tǒng)選用TI公司生產(chǎn)的一種低價(jià)位、高性能的8位A/D芯片TLC549。2.4 TLC549介紹2.4.1 TLC549工作原理 當(dāng)/CS變?yōu)榈碗娖胶螅?TLC

6、549芯片被選中, 同時(shí)前次轉(zhuǎn)換結(jié)果的最高有效位MSB (A7)自 DATA OUT 端輸出,接著要求自 I/O CLOCK端輸入8個(gè)外部時(shí)鐘信號(hào),前7個(gè) I/O CLOCK信號(hào)的作用,是配合 TLC549 輸出前次轉(zhuǎn)換結(jié)果的 A6-A0 位,并為本次轉(zhuǎn)換做準(zhǔn)備:在第4個(gè) I/O CLOCK 信號(hào)由高至低的跳變之后,片內(nèi)采樣/保持電路對(duì)輸入模擬量采樣開(kāi)始,第8個(gè) I/O CLOCK 信號(hào)的下降沿使片內(nèi)采樣/保持電路進(jìn)入保持狀態(tài)并啟動(dòng) A/D開(kāi)始轉(zhuǎn)換。轉(zhuǎn)換時(shí)間為 36 個(gè)系統(tǒng)時(shí)鐘周期,最大為 17us。直到 A/D轉(zhuǎn)換完成前的這段時(shí)間內(nèi),TLC549 的控制邏輯要求:或者/CS保持高電平,或者

7、I/O CLOCK 時(shí)鐘端保持36個(gè)系統(tǒng)時(shí)鐘周期的低電平。由此可見(jiàn),在自 TLC549的 I/O CLOCK 端輸入8個(gè)外部時(shí)鐘信號(hào)期間需要完成以下工作:讀入前次A/D轉(zhuǎn)換結(jié)果;對(duì)本次轉(zhuǎn)換的輸入模擬信號(hào)采樣并保持;啟動(dòng)本次 A/D轉(zhuǎn)換開(kāi)始。2.4.2 TLC549特點(diǎn) TLC549是采用IinCMOSTM技術(shù)并以開(kāi)關(guān)電容逐次逼近原理工作的8位串行AD7芯片,可與通用微處理器、控制器通過(guò)IO CLOCK、CS、DATA OUT三條口線進(jìn)行串行接口。TLC549具有4MHz的片內(nèi)系統(tǒng)時(shí)鐘和軟、硬件控制電路,轉(zhuǎn)換時(shí)間最長(zhǎng)為17s,允許的最高轉(zhuǎn)換速率為40000次/s??偸д{(diào)誤差最

8、大為±05LSB,典型功耗值為6 mW。TLC549采用差分參考電壓高阻輸入,抗干擾,可按比例量程校準(zhǔn)轉(zhuǎn)換范圍,由于其VREF-接地時(shí),(VREF+)-(VREF-)1 V,故可用于較小信號(hào)的采樣,此外,該芯片還單電源36v的供電范圍??傊?,TLC549具有控制口線少,時(shí)序簡(jiǎn)單,轉(zhuǎn)換速度快,功耗低,價(jià)格便宜等特TLC549的極限參數(shù)如下:  電源電壓:65 V: 輸入電壓范圍:0.3VVCC:+o.3V:  輸出電壓范圍:0.3VVCC:+03 V; 峰值輸入電流(任一輸人端):

9、77;10 mA;  峰值輸人電流(所有輸入端):±30mA  工作溫度:TLC549C:070C   TLC549I:-4085  TLC549M-55"C125 其芯片及原理圖如圖所示 2.5 AT89C52工作原理 AT89C52為8 位通用微處理器,采用工業(yè)標(biāo)準(zhǔn)的C51內(nèi)核,在內(nèi)部功能及管腳排布上與通用的8xc52 相同,其主要用于會(huì)聚調(diào)整時(shí)的功能控制。功能包括對(duì)會(huì)聚主IC 內(nèi)部寄存器、數(shù)據(jù)RAM及外部接口等功能部件的初始化,會(huì)聚調(diào)整控制,會(huì)聚測(cè)試圖控制,紅

10、外遙控信號(hào)IR的接收解碼及與主板CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9 腳)為復(fù)位輸入端口,外接電阻電容組成的復(fù)位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分別接+5V電源的正負(fù)端。P0P3 為可編程通用I/O 腳,其功能用途由軟件定義,在本設(shè)計(jì)中,P0 端口(3239 腳)被定義為N1 功能控制端口,分別與N1的相應(yīng)功能管腳相連接,13 腳定義為IR輸入端,10 腳和11腳定義為I2C總線控制端口,分別連接N1的SDAS(18腳)和SCLS(19腳)端口,12 腳、27 腳及28 腳

11、定義為握手信號(hào)功能端口,連接主板CPU 的相應(yīng)功能端,用于當(dāng)前制式的檢測(cè)及會(huì)聚調(diào)整狀態(tài)進(jìn)入的控制功能。 系統(tǒng)硬件電路原理圖如圖3所示。2.6 1602液晶顯示屏工作原理1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A”。因?yàn)?602識(shí)別的是ASCII碼,試驗(yàn)可以用ASCII碼直接賦值,在單片機(jī)編程中還可以用字符型常量或變

12、量賦值,如'A。讀的時(shí)候,先讀上面那列,再讀左邊那行,如:感嘆號(hào)!的ASCII為0x21,字母B的ASCII為0x42(前面加0x表示十六進(jìn)制)。以下是1602的16進(jìn)制ASCII碼表: 3.系統(tǒng)軟件設(shè)計(jì)系統(tǒng)的軟件設(shè)計(jì)使用C51編程,采用模塊化設(shè)計(jì)方法,主要由主函數(shù)、定時(shí)器T0中斷服務(wù)函數(shù)、A/D轉(zhuǎn)換函數(shù)、計(jì)算A/D轉(zhuǎn)換值函數(shù)、LCD顯示函數(shù)、LCD顯示A/D轉(zhuǎn)換值函數(shù)等模塊組成,系統(tǒng)軟件結(jié)構(gòu)框圖如圖4所示。3.1算法設(shè)計(jì)根據(jù)A/D轉(zhuǎn)換芯片TLC549的工作時(shí)序,200ms進(jìn)行一次A/D采樣轉(zhuǎn)換,可以利用定時(shí)器T0定時(shí),基本定時(shí)時(shí)間為50ms,控制軟計(jì)數(shù)器的累計(jì)次數(shù)為4次,200ms(

13、4×5ms)定時(shí)到時(shí),產(chǎn)生定時(shí)器T0中斷,在定時(shí)器T0中斷服務(wù)函數(shù)中調(diào)用A/D轉(zhuǎn)換函數(shù)進(jìn)行A/D采樣轉(zhuǎn)換,然后調(diào)用計(jì)算A/D轉(zhuǎn)換值函數(shù)把A/D轉(zhuǎn)換值轉(zhuǎn)換為相應(yīng)的ASCII碼,最后通過(guò)LCD顯示A/D轉(zhuǎn)換值函數(shù)把輸出電壓(05V)的轉(zhuǎn)換數(shù)字量顯示在液晶LCD1602 上,數(shù)字量顯示值范圍為04.98v。3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如表1所示。3.3  程序設(shè)計(jì)(1) 主函數(shù)設(shè)計(jì) 主函數(shù)主要完成硬件初始化、數(shù)據(jù)初始化、函數(shù)調(diào)用等功能。 初始化。首先初始化定時(shí)軟計(jì)數(shù)器值為 0.00。調(diào)用LCD初始化函數(shù),調(diào)用寫入顯示數(shù)據(jù)到LCD1602函數(shù)設(shè)置LCD的DDRAM地址為00H,調(diào)

14、用延時(shí)函數(shù),調(diào)用寫入顯示數(shù)據(jù)到LCD1602函數(shù)在LCD上顯示字符數(shù)據(jù)第一行為“volt”,第二行為”V”(電壓?jiǎn)挝?。 定時(shí)初值計(jì)算。定時(shí)器T0的定時(shí)時(shí)間為50ms,系統(tǒng)所用的石英晶體振蕩頻率為 11.0592 MHz,因此,1 個(gè)機(jī)器周期1/石英頻率×12,即為 12/11.059 2 ms,定時(shí)器的工作方式設(shè)置為方式 1。 定時(shí)器設(shè)置。設(shè)定定時(shí)器T0工作方式:定時(shí)器、方式1,即TMOD01H。啟動(dòng)定時(shí)器T0,即TR01。開(kāi)放定時(shí)器T0中斷以及總中斷,即設(shè)定IE0x82H。 等待中斷。 定時(shí)器T0啟動(dòng)計(jì)時(shí)后,CPU等待定時(shí)中斷的到來(lái)。當(dāng)定時(shí)器T0定時(shí)50ms后,進(jìn)入定時(shí)器T0中斷

15、服務(wù)函數(shù)。 主函數(shù)設(shè)計(jì)流程圖如圖所示。 開(kāi)始 設(shè)置計(jì)數(shù)器初值為0.00設(shè)置T0的初值:0XEE;TL0:0x4c;設(shè)置T0的工作方式:;TMOD=0x01(工作方式1) 調(diào)用LCD初始化函數(shù)調(diào)用寫入指令數(shù)據(jù)到LCD函數(shù),在LCD上顯示字符第一行為“volt”,第二行為“V” 設(shè)置LCD的DDRAM為00H,調(diào)用寫入指令到LCD函數(shù) 調(diào)用主函數(shù)main 啟動(dòng)定時(shí)器T0:TR0=1;允許T0中斷:IE=0X82;等待T0計(jì)時(shí)器中斷(2) 定時(shí)器T0中斷服務(wù)函數(shù)設(shè)計(jì) 當(dāng)定時(shí)器T0定時(shí)50ms后,進(jìn)入定時(shí)器T0中斷服務(wù)函數(shù)。首先重裝定時(shí)器T0初值,即TH00xee,TL00x00。每定時(shí)5ms一次,軟

16、計(jì)數(shù)器值減1。然后判斷軟計(jì)數(shù)器值是否為0:若值不為0,表明20ms(20ms采樣一次)計(jì)時(shí)未到,這時(shí)T0中斷函數(shù)返回主函數(shù),繼續(xù)計(jì)時(shí)。若值為0,表明 20ms(20ms采樣一次)計(jì)時(shí)已到,重置軟計(jì)數(shù)器初值為4,為下次定時(shí)做準(zhǔn)備,接著調(diào)用A/D轉(zhuǎn)換函數(shù)進(jìn)行A/D采樣轉(zhuǎn)換,得到A/D采樣轉(zhuǎn)換值adbl,然后調(diào)用計(jì)算A/D轉(zhuǎn)換值A(chǔ)SCII碼函數(shù)計(jì)算A/D采樣轉(zhuǎn)換值 adbl相應(yīng)的ASCII 碼,再調(diào)用LCD顯示A/D轉(zhuǎn)換值函數(shù)把模擬量輸入電壓(05 V)的轉(zhuǎn)換數(shù)字量顯示在液晶 LCD1602上,數(shù)字量顯示值范圍為04.5v。最后T0中斷函數(shù)返回主函數(shù)進(jìn)行下一次A/D采樣轉(zhuǎn)換。(3) A/D采樣轉(zhuǎn)換函

17、數(shù)設(shè)計(jì) 根據(jù)A/D轉(zhuǎn)換芯片TLC549的工作時(shí)序,當(dāng)片選信號(hào)CS為高電平時(shí),數(shù)據(jù)輸出DATA OUT端處于高阻狀態(tài),此時(shí)時(shí)鐘信號(hào)I/O CLOCK不起作用,不能進(jìn)行A/D轉(zhuǎn)換。將片選信號(hào)CS置低電平,內(nèi)部電路在測(cè)得CS下降沿后,再等待兩個(gè)內(nèi)部時(shí)鐘上升沿和一個(gè)下降沿后,然后確認(rèn)這一變化。 首先定義變量i(表示A/D采樣轉(zhuǎn)換位數(shù)),并將芯片TLC549片選信號(hào)AD_CS置低電平,選中該芯片。初始化A/D采樣轉(zhuǎn)換值adbl為0,初始化變量i(A/D采樣轉(zhuǎn)換位數(shù))為0。判斷A/D轉(zhuǎn)換位數(shù)i是否小于8。 如果i小于8,則將芯片TLC549時(shí)鐘信號(hào)AD_CK置高電平,并把A/D采樣轉(zhuǎn)換值adbl左移一位。

18、然后判斷A/D采樣轉(zhuǎn)換串行數(shù)據(jù)輸出信號(hào)AD_OUT是否為1:若AD_OUT為1,則將A/D采樣轉(zhuǎn)換值adbladbl自加1。若AD_OUT為0,則A/D采樣轉(zhuǎn)換值adbladbl不變。再將芯片TLC549時(shí)鐘信號(hào)AD_CK置低電平。最后將A/D轉(zhuǎn)換位數(shù)i自加1,并再次轉(zhuǎn)向上面的判斷A/D轉(zhuǎn)換位數(shù)i是否小于8。 如果i不小于8,則把芯片TLC549片選信號(hào)AD_CS置高電平,結(jié)束A/D采樣轉(zhuǎn)換,并退出A/D采樣轉(zhuǎn)換函數(shù)。(4) 計(jì)算A/D轉(zhuǎn)換值A(chǔ)SCII碼函數(shù)模塊設(shè)計(jì) 要把AD轉(zhuǎn)換值adbl顯示在LCD上,需要把它轉(zhuǎn)換為相應(yīng)的ASCII碼。首先計(jì)算A/D轉(zhuǎn)換值百位數(shù)ASCII碼:將A/D轉(zhuǎn)換值a

19、dbl除以100得到的商與0x30(因?yàn)樽址麛?shù)字09與其相應(yīng)的ASCII 碼相差30H)相與。然后計(jì)算A/D轉(zhuǎn)換值十位數(shù)ASCII碼:將A/D轉(zhuǎn)換值adbl除以100得到的余數(shù)再除以10,得到的商與0x30(因?yàn)樽址麛?shù)字09與其相應(yīng)的ASCII 碼相差30H)相與。再計(jì)算A/D轉(zhuǎn)換值個(gè)位數(shù)ASCII碼:將A/D轉(zhuǎn)換值adbl除以10得到的余數(shù)與0x30(因?yàn)樽址麛?shù)字09與其相應(yīng)的ASCII 碼相差30H)相與。最后函數(shù)返回。(5) LCD顯示函數(shù)設(shè)計(jì) LCD顯示函數(shù)模塊包括LCD初始化函數(shù)、寫入指令數(shù)據(jù)到LCD函數(shù)、寫入顯示數(shù)據(jù)到LCD函數(shù)、LCD顯示A/D轉(zhuǎn)換值函數(shù)、延時(shí)函數(shù)等模塊。4. 源

20、程序代碼4.1 Main函數(shù)模塊#include <reg52.h> /包含頭文件#include <intrins.h> /空操作函數(shù)_nop_()必須的頭文件#include <stdio.h>#include "1602.h"sbit TLC549_CS = P10;/TLC549片選,低電平有效sbit TLC549_DO = P11;/TLC549數(shù)字量輸出sbit TLC549_CLK = P12;/TLC549片外獨(dú)立時(shí)鐘sbit led = P07; /工作狀態(tài)燈,閃爍為正常unsigned char DO, num; /

21、讀土壤濕度返回值、定時(shí)器計(jì)數(shù)變量float DO_F, volt,hh; /讀取返回值的20次累加值、最終轉(zhuǎn)換系數(shù)bit flag = 1; /工作標(biāo)志位unsigned char str1 = "Volt:"unsigned char str2 = " 0V"unsigned char temp3;void InitTimer0();/聲明 定時(shí)器T0初始化 函數(shù)void delayus(unsigned int t);/聲明 延時(shí)t個(gè)機(jī)器 周期unsigned char TLC549_read();/聲明 TLC549讀數(shù)字量 函數(shù)void main

22、()unsigned char i; /for循環(huán)變量InitTimer0();/初始化定時(shí)器T0LCD_init();delayus(1000);LCD_clear();LCD_write_string(1, 1, str1);LCD_write_string(2, 1, str2);while(1)if(flag)flag = 0; /標(biāo)志位清零for( i = 0 ; i < 20 ; i+ )DO = TLC549_read();/讀DO_F = DO_F + DO;/累加DO_F = DO_F / 20.00; /累加值除20求平均volt = (float)( DO_F *

23、5 ) / 256.00); / TLC549是8位A/D芯片 / 2的8次方是256/ 即轉(zhuǎn)換所得數(shù)值為0-255/ 所以乘以基準(zhǔn)電壓再除以精度sprintf(temp, "%4.2f", volt);LCD_write_string(2, 7, temp); if(volt>4.5|volt<0.5)led=1;if(volt>0.5&&volt<4.5)led=0; 4.1.1定時(shí)器T0初始化函數(shù)模塊void InitTimer0() TMOD = 0x01; /選擇定時(shí)器T0 TH0 = 0x4C; /定時(shí)50毫秒 TL0 =

24、 0x00; EA = 1; /開(kāi)總中斷 ET0 = 1; /開(kāi)定時(shí)器T0中斷 TR0 = 1; /使能定時(shí)器T04.1.2定時(shí)器工作模塊void Timer0Interrupt() interrupt 1 TH0 = 0x4C;/重裝初值 TL0 = 0x00;num+;/計(jì)數(shù)變量增加1if(num=10)/每500毫秒讀一次數(shù)字量/定時(shí)50毫秒,即每50毫秒進(jìn)1次中斷,num加1num = 0;/進(jìn)10次中斷后num為10,即過(guò)了500毫秒flag = 1;/num清零,標(biāo)志位置14.1.3 TLC549讀取模塊unsigned char TLC549_read() unsigned ch

25、ar i , temp;TLC549_CS = 1; /關(guān)閉片選TLC549_CLK = 0; /時(shí)鐘線拉低TLC549_CS = 0; /打開(kāi)片選_nop_(); /空操作等待兩個(gè)機(jī)器周期待總線穩(wěn)定_nop_();for( i = 0; i < 8; i+ ) /循環(huán)8次讀出8位轉(zhuǎn)換結(jié)果temp <<= 1;temp |= TLC549_DO;TLC549_CLK = 1;_nop_();TLC549_CLK = 0;TLC549_CS = 1;delayus(14); /TLC549轉(zhuǎn)換速度小于14微秒,大致延時(shí)14微秒等待轉(zhuǎn)換結(jié)束return temp;/返回轉(zhuǎn)換值4.

26、1.3 延時(shí)模塊void delayus(unsigned int t) /延時(shí)函數(shù),延時(shí)t個(gè)機(jī)器周期while(-t);4.2 LCD1602函數(shù)模塊#include "1602.h"4.2.1 延時(shí)模塊void delayus1602(unsigned char t) while(-t);void delayms1602(unsigned char t) /大致延時(shí)t毫秒 while(t-) delayus1602(245); delayus1602(245); void LCD_check_busy() /判盲RS = 0;RW = 1;EN = 1;while(P0

27、 & 0x80)=0x80);delayus1602(2);EN = 0;4.2.2 LCD1602命令模塊void LCD_write_com(unsigned char com)LCD_check_busy();RS = 0;RW = 0;EN = 1;P0 = com;delayus1602(2);EN = 0;4.2.3 數(shù)據(jù)寫入模塊void LCD_write_Data(unsigned char Data) LCD_check_busy();RS = 1;RW = 0;EN = 1;P0 = Data;delayus1602(2);EN = 0;4.2.4清屏指令void

28、LCD_clear() LCD_write_com(0x01);delayms1602(5);/void LCD_write_char(unsigned char x , unsigned char y , unsigned char c) /在第x行第y位寫字符/LCD_check_busy();/if( x = 1 )/LCD_write_com(0x80 + y - 1);/if( x = 2 )/LCD_write_com(0xc0 + y - 1);/LCD_write_Data(c);/void LCD_write_string(unsigned char x , unsigned

29、 char y , unsigned char *s) /在第x行第y位寫字符串LCD_check_busy();if( x = 1 )LCD_write_com(0x80 + y - 1);else if( x = 2 )LCD_write_com(0xc0 + y - 1);while(*s)LCD_write_Data(*s);s+;4.2.4 初始化void LCD_init() delayms1602(15);LCD_write_com(0x38);delayms1602(5);LCD_write_com(0x38);/8位總線、雙行5×7點(diǎn)陣LCD_write_com(0

30、x08);LCD_write_com(0x01);LCD_write_com(0x06);delayms1602(5);LCD_write_com(0x0c);/void LCD_user(unsigned char x , unsigned char *user)/向CGRAM寫入自定義字符/形參x為CGRAM自定義字符的地址序號(hào),序號(hào)范圍07/unsigned char i;/形參*user為主函數(shù)文件中自定義字符的字模數(shù)組名/for(i=0;i<8;i+)/LCD_write_com(0x40+x*8+i);/LCD_write_Data(useri);/  4.3 LCD1602端口和命令定義模塊#ifndef _1602_H_#define _1602_H_#include <reg52.h>sbit RS = P22; /定義1602各個(gè)控制位sbit RW = P21;sbit EN = P20;void LCD_check_busy(); /判忙void LCD_write_com(unsigned char com); /寫命令void LCD_write_Data(unsigned char Data); /寫數(shù)據(jù)vo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論