51單片機(jī)課程設(shè)計報告--AD轉(zhuǎn)換_第1頁
51單片機(jī)課程設(shè)計報告--AD轉(zhuǎn)換_第2頁
51單片機(jī)課程設(shè)計報告--AD轉(zhuǎn)換_第3頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.51-單片機(jī)課程設(shè)計題 目:用PCF8591P芯片對電位器上的電壓進(jìn)行AD采樣,將采到的數(shù)據(jù)用1602LCD進(jìn)行顯示。姓 名:學(xué) 號:學(xué) 院:專 業(yè):指導(dǎo)教師:目 錄1、PCF8591概述32、芯片介紹33、PCF8591的A/D 轉(zhuǎn)換44、A/D轉(zhuǎn)換程序設(shè)計流程55、1602LCD主要技術(shù)參數(shù)76、Proteus仿真原理圖107、程序代碼108、結(jié)語179、參考文獻(xiàn)171、PCF8591 概述PCF8591 是一種具有 I2C 總線接口的 8 位 A/D D/A 轉(zhuǎn)換芯片,在與 CPU的信息傳輸過程中僅靠時鐘線 SCL 和數(shù)據(jù)線 SDA 就可以實(shí)現(xiàn)。 I2C 總線是Philips (飛利浦

2、)公司推出的串行總線,它與傳統(tǒng)的通信方式相比具有讀寫方便,結(jié)構(gòu)簡單 ,可維護(hù)性好, 易實(shí)現(xiàn)系統(tǒng)擴(kuò)展, 易實(shí)現(xiàn)模塊化標(biāo)準(zhǔn)化設(shè)計, 可靠性高等優(yōu)點(diǎn)。2、芯片介紹2.1內(nèi)部結(jié)構(gòu)及引腳功能描述PCF8591 為單一電源供電(2.5 6 V)典型值為 5 V,CMOS 工藝 PCF8591 有 4 路 8 位 A/D 輸入,屬逐次比較型,內(nèi)含采樣保持電路; 1 路 8 位 D/A 輸出,內(nèi)含有 DAC的數(shù)據(jù)寄存器 A/D D/A 的最大轉(zhuǎn)換速率約為 11 kHz,但是轉(zhuǎn)換的基準(zhǔn)電源需由外部提供 PCF8591 的引腳功能如圖1所示圖1 PCF8591引腳功能2.2片內(nèi)可編程功能設(shè)置在 PCF8591 內(nèi)

3、部的可編程功能控制字有兩個,一個為地址選擇字,另一個為轉(zhuǎn)換控制字 PCF8591 采用典型的I2C總線接口的器件尋址方法,即總線地址由器件地址引腳地址和方向位組成 Philips (飛利浦)公司規(guī)定 A/D器件高四位地址為 1001,低三位地址為引腳地址A0A1A2,由硬件電路決定,地址選擇字格式具體描述如表2 所示 因此 I2C 系統(tǒng)中最多可接 23=8 個具有總線接口的 A/D 器件 地址的最后一位為方向位 R/W,當(dāng)主控器對 A/D 器件進(jìn)行讀操作時為 1,進(jìn)行寫操作時為 0 總線。操作時,由器件地址 引腳地址和方向位組成的從地址為主控器發(fā)送的第一字節(jié)。圖2 地址選擇字格式描述D0:讀寫

4、控制位,對轉(zhuǎn)換器件進(jìn)行讀操作時為1 ,進(jìn)行寫操作時為0。D1,D2,D3:引腳硬件地址設(shè)置位,由硬件電路設(shè)定該P(yáng)CF8591的物理地址。D7,D6,D5,D4:器件地址位固定為1001.PCF8591的轉(zhuǎn)換控制字存放在控制寄存器中,用于實(shí)現(xiàn)器件的各種功能 總線操作時為主控器發(fā)送的第二字節(jié) 轉(zhuǎn)換控制字的格式功能具體描述如圖3所示圖3 轉(zhuǎn)換控制字格式描述D0,D1:通道選擇位。00 :通道 0; 01:通道1 ; 10:通道2; 11:通道3。D2:自動增量允許位,為 1時,每對一個通道轉(zhuǎn)換后自動切換到下一通道進(jìn)行轉(zhuǎn)換,為0 時不自動進(jìn)行通道轉(zhuǎn)換,可通過軟件修改進(jìn)行通道轉(zhuǎn)換D3:特征位,固定位0。

5、D4,D5:模擬量輸入方式選擇位 。00:輸入方式0 ,四路單端輸入;01 :輸入方式 1,三路差分輸入;10 :輸入方式2,二路單端輸入,一路差分輸入; 11:輸入方式3 ,兩路差分輸入。D6:模擬輸出允許位,A/D 轉(zhuǎn)換時設(shè)置為 (地址選擇字D0 位此時設(shè)置為1 ),D/A 轉(zhuǎn)換時設(shè)置為 1(地址選擇字 位此時設(shè)置為 )。D7:特征位,固定為0。3、PCF8591的A/D 轉(zhuǎn)換PCF8591的A/D 轉(zhuǎn)換為逐次比較型,在 A/D轉(zhuǎn)換周期中借用 DAC及高增益比較器 對 PCF8591進(jìn)行寫讀操作后便立即啟動 A/D轉(zhuǎn)換,并讀出A/D 轉(zhuǎn)換結(jié)果 在每個應(yīng)答信號的后沿觸發(fā) 轉(zhuǎn)換周期,采樣模擬電

6、壓并讀出前一次轉(zhuǎn)換后的結(jié)果。A/D轉(zhuǎn)換中,一旦 A/D采樣周期被觸發(fā),所選擇通道的采樣電壓便保存在采樣,保持電路中,并轉(zhuǎn)換成8 位二進(jìn)制碼(單端輸入)或二進(jìn)制補(bǔ)碼(差分輸入)存放在ADC數(shù)據(jù)寄存器中等待器件讀出。如果控制字節(jié)中自動增量選擇位置 1,則一次A/D 轉(zhuǎn)換完畢后自動選擇下一通道 。讀周期中讀出的第一個字節(jié)為前一個周期的轉(zhuǎn)換結(jié)果 。上電復(fù)位后讀出的第一字節(jié)為80H。PCF8591的A/D 轉(zhuǎn)換亦使用的是I2C 總線的讀方式操作完成的 。其數(shù)據(jù)操作格式如圖 4所示。圖4 A/D轉(zhuǎn)換數(shù)據(jù)操作格式其中data0datan 為 A/D的轉(zhuǎn)換結(jié)果,分別對應(yīng)于前一個數(shù)據(jù)讀取期間所采樣的模擬電壓。A

7、/D 轉(zhuǎn)換結(jié)束后,先發(fā)送一個非應(yīng)答信號位A 再發(fā)送結(jié)束信號位P。 灰底位由主機(jī)發(fā)出,白底位是由PCF8591 產(chǎn)生。 上電復(fù)位后控制字節(jié)狀態(tài)為00H ,在 A/D轉(zhuǎn)換時須設(shè)置控制字,即須在讀操作之前進(jìn)行控制字節(jié)的寫入操作。邏輯操作波形時序圖如圖5所示。圖5 A/D轉(zhuǎn)換邏輯操作波形時序圖4、A/D轉(zhuǎn)換程序設(shè)計流程如下圖6所示圖65、1602LCD主要技術(shù)參數(shù):顯示容量:16×2個字符,芯片工作電壓:4.55.5V,工作電流:2.0mA(5.0V),模塊最佳工作電壓:5.0V,字符尺寸:2.95×4.35(W×H)mm。5.1引腳功能說明1602LCD采用標(biāo)準(zhǔn)的14腳

8、(無背光)或16腳(帶背光)接口,各引腳接口說明如圖7編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極圖7引腳接口說明表第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令

9、寄存器。第5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。5.21602LCD的指令說明及時序1602液晶模塊內(nèi)部的控制器共有11條控制指令,如圖8序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標(biāo)返回000000001*3置輸入模式00000001I/

10、DS4顯示開/關(guān)控制0000001DCB5光標(biāo)或字符移位000001S/CR/L*6置功能00001DLNF*7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標(biāo)志或地址01BF計數(shù)器地址10寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容圖81602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動方向,高電平右移,

11、低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標(biāo)或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標(biāo)。指令6:功能設(shè)置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點(diǎn)陣字符,高電平時顯示5x10的點(diǎn)陣字符。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀忙信號

12、和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。讀操作時序?qū)懖僮鲿r序5.31602LCD的一般初始化(復(fù)位)過程延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號寫指令38H:顯示模式設(shè)置寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標(biāo)移動設(shè)置寫指令0CH:顯示開及光標(biāo)設(shè)置6、仿真原理圖如下所示7、C語言程序*include<reg52.h>*include<int

13、rins.h>*define uchar unsigned char*define uint unsigned int*define Delay4us()_nop_();_nop_();_nop_();_nop_();sbit LCD_RS=P26;sbit LCD_RW=P25;sbit LCD_EN=P27;sbit SCL=P20; /I2C時鐘引腳sbit SDA=P21; /I2C數(shù)據(jù)輸入輸出引腳uchar Recv_Buffer4; /數(shù)據(jù)接收緩沖uint Voltage='0','0','0','0' /數(shù)據(jù)分

14、解為電壓x.*bit bdata IIC_ERROR; /I2C錯誤標(biāo)志位uchar LCD_Line_1=" . V "/延時void delay(int ms)uchar i;while(ms-) for(i=0;i<250;i+) Delay4us();/LCD忙檢測bit LCD_Busy_Check()bit Result;LCD_RS=0;LCD_RW=1;LCD_EN=1;Delay4us();Result=(bit)(P0&0x80);LCD_EN=0;return Result;/寫指令void LCD_Write_Command(uchar

15、 cmd)while(LCD_Busy_Check();LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;Delay4us();LCD_EN=1;Delay4us();LCD_EN=0;/ 寫數(shù)據(jù)void LCD_Write_Data(uchar dat)while(LCD_Busy_Check();LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;Delay4us();LCD_EN=1;Delay4us();LCD_EN=0;/初始化void LCD_Initialise()LCD_Write_Command(0x38);d

16、elay(5);LCD_Write_Command(0x0c);delay(5);LCD_Write_Command(0x06);delay(5);LCD_Write_Command(0x01);delay(5);/設(shè)置顯示位置void LCD_Set_Position(uchar pos)LCD_Write_Command(pos|0x80);/顯示一行void LCD_Display_A_Line(uchar Line_Addr,uchar s)uchar i;LCD_Set_Position(Line_Addr);for(i=0;i<16;i+)LCD_Write_Data(si)

17、;/ 將模數(shù)轉(zhuǎn)換后得到的值分解存入緩存void Convert_To_Voltage(uchar val)uchar Tmp; /最大值為255,對應(yīng)5V,255/5=51Voltage2=val/51+'0' /整數(shù)部分Tmp=val%51*10; / 第一位小數(shù)Voltage1=Tmp/51+'0'Tmp=Tmp%51*10;Voltage0=Tmp/51+'0'/*函數(shù)名稱: iic_start()函數(shù)功能: 啟動I2C總線子程序時鐘保持高,數(shù)據(jù)線從高到低一次跳變,I2C通信開始*/void iic_start(void) SDA = 1;

18、 SCL = 1; Delay4us(); / 延時5us SDA = 0; Delay4us(); SCL = 0;/*函數(shù)名稱: iic_stop()函數(shù)功能: 停止I2C總線數(shù)據(jù)傳送子程序時鐘保持高,數(shù)據(jù)線從低到高一次跳變,I2C通信停止*/void iic_stop(void) SDA = 0; SCL = 1; Delay4us(); SDA = 1; Delay4us(); SCL = 0;/*函數(shù)名稱: iicInit_()函數(shù)功能: 初始化I2C總線子程序*/void iicInit(void) SCL = 0; iic_stop();/*函數(shù)名稱: slave_ACK函數(shù)功能

19、: 從機(jī)發(fā)送應(yīng)答位子程序*/void slave_ACK(void) SDA = 0; SCL = 1; Delay4us(); SCL = 0; SDA = 1;/*函數(shù)名稱: slave_NOACK函數(shù)功能: 從機(jī)發(fā)送非應(yīng)答位子程序,迫使數(shù)據(jù)傳輸過程結(jié)束*/void slave_NOACK(void) SDA = 1; SCL = 1; Delay4us(); SDA = 0; SCL = 0; SDA = 0;/*函數(shù)名稱: check_ACK函數(shù)功能: 主機(jī)應(yīng)答位檢查子程序,迫使數(shù)據(jù)傳輸過程結(jié)束*/void check_ACK(void) SDA = 1; /置成輸入 SCL = 1;

20、 F0 = 0; Delay4us(); if (SDA = 1) /若SDA=1表明非應(yīng)答 F0 = 1; /置位非應(yīng)答標(biāo)志F0 SCL = 0;/*函數(shù)名稱: IICSendByte入口參數(shù): indata函數(shù)功能: 發(fā)送一個字節(jié)*/void IICSendByte(unsigned char indata) unsigned char n = 8; /發(fā)送一字節(jié)數(shù)據(jù),共八bit while (n-) SDA = (bit)(indata &0x80); SCL = 1; Delay4us(); SCL = 0; indata = indata << 1; /數(shù)據(jù)左移一

21、位 /*函數(shù)名稱: IICreceiveByte返回接收的數(shù)據(jù) tdata函數(shù)功能: 接收一字節(jié)子程序*/unsigned char IICreceiveByte(void) unsigned char n = 8; /讀取一字節(jié)數(shù)據(jù),共八bit unsigned char tdata = 0; while (n-) SDA = 1; SCL = 1; tdata = tdata << 1; /左移一位 if (SDA = 1) tdata = tdata | 0x01; /若接收到的位為1,則數(shù)據(jù)的最后一位置1 else tdata = tdata &0xfe; /否則數(shù)據(jù)的最后一位置0 SCL = 0; return (tdata);/*函數(shù)名稱: ADC_PCF8591函數(shù)功能: A/D轉(zhuǎn)換,結(jié)果存入receivebuf*/void ADC_PCF8591(unsigned char controlbyte) unsigned char i = 0; iic_start(); IICSendByte(0x90); /控制字0x90 check_ACK(); IICSendByte(controlbyte); /通道控制字 check_AC

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論