




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、福州大學至誠學院本科生課程設計題 目: 可編程序控制器實訓 姓 名: 學 號: 系 別: 專 業: 年 級: 指導教師: 目 錄1、PCF8591概述32、芯片介紹33、PCF8591的A/D 轉換44、A/D轉換程序設計流程55、1602LCD主要技術參數76、Proteus仿真原理圖107、程序代碼108、結語179、參考文獻171、PCF8591 概述PCF8591 是一種具有 I2C 總線接口的 8 位 A/D D/A 轉換芯片,在與 CPU的信息傳輸過程中僅靠時鐘線 SCL 和數據線 SDA 就可以實現。 I2C 總線是Philips (飛利浦)公司推出的串行總線,它與傳統的通信方式
2、相比具有讀寫方便,結構簡單 ,可維護性好, 易實現系統擴展, 易實現模塊化標準化設計, 可靠性高等優點。2、芯片介紹2.1內部結構及引腳功能描述PCF8591 為單一電源供電(2.5 6 V)典型值為 5 V,CMOS 工藝 PCF8591 有 4 路 8 位 A/D 輸入,屬逐次比較型,內含采樣保持電路; 1 路 8 位 D/A 輸出,內含有 DAC的數據寄存器 A/D D/A 的最大轉換速率約為 11 kHz,但是轉換的基準電源需由外部提供 PCF8591 的引腳功能如圖1所示圖1 PCF8591引腳功能2.2片內可編程功能設置在 PCF8591 內部的可編程功能控制字有兩個,一個為地址選
3、擇字,另一個為轉換控制字 PCF8591 采用典型的I2C總線接口的器件尋址方法,即總線地址由器件地址引腳地址和方向位組成 Philips (飛利浦)公司規定 A/D器件高四位地址為 1001,低三位地址為引腳地址A0A1A2,由硬件電路決定,地址選擇字格式具體描述如表2 所示 因此 I2C 系統中最多可接 23=8 個具有總線接口的 A/D 器件 地址的最后一位為方向位 R/W,當主控器對 A/D 器件進行讀操作時為 1,進行寫操作時為 0 總線。操作時,由器件地址引腳地址和方向位組成的從地址為主控器發送的第一字節。圖2 地址選擇字格式描述D0:讀寫控制位,對轉換器件進行讀操作時為1 ,進行
4、寫操作時為0。D1,D2,D3:引腳硬件地址設置位,由硬件電路設定該PCF8591的物理地址。D7,D6,D5,D4:器件地址位固定為1001.PCF8591的轉換控制字存放在控制寄存器中,用于實現器件的各種功能 總線操作時為主控器發送的第二字節 轉換控制字的格式功能具體描述如圖3所示圖3 轉換控制字格式描述D0,D1:通道選擇位。00 :通道 0; 01:通道1 ; 10:通道2; 11:通道3。D2:自動增量允許位,為 1時,每對一個通道轉換后自動切換到下一通道進行轉換,為0 時不自動進行通道轉換,可通過軟件修改進行通道轉換D3:特征位,固定位0。D4,D5:模擬量輸入方式選擇位 。00:
5、輸入方式0 ,四路單端輸入;01 :輸入方式 1,三路差分輸入;10 :輸入方式2,二路單端輸入,一路差分輸入; 11:輸入方式3 ,兩路差分輸入。D6:模擬輸出允許位,A/D 轉換時設置為 (地址選擇字D0 位此時設置為1 ),D/A 轉換時設置為 1(地址選擇字 位此時設置為 )。D7:特征位,固定為0。3、PCF8591的A/D 轉換PCF8591的A/D 轉換為逐次比較型,在 A/D轉換周期中借用 DAC及高增益比較器 對 PCF8591進行寫讀操作(R/W)后便立即啟動 A/D轉換,并讀出A/D 轉換結果 在每個應答信號的后沿觸發轉換周期,采樣模擬電壓并讀出前一次轉換后的結果。A/D
6、轉換中,一旦 A/D采樣周期被觸發,所選擇通道的采樣電壓便保存在采樣,保持電路中,并轉換成8 位二進制碼(00四路單端輸入)或二進制補碼(01三鹿差分輸入)存放在ADC數據寄存器中等待器件讀出。如果控制字節中自動增量選擇位置 1,則一次A/D 轉換完畢后自動選擇下一通道。讀周期中讀出的第一個字節為前一個周期的轉換結果 。上電復位后讀出的第一字節為80H。PCF8591的A/D 轉換亦使用的是I2C 總線的讀方式操作完成的 。其數據操作格式如圖 4所示。圖4 A/D轉換數據操作格式其中data0datan 為 A/D的轉換結果,分別對應于前一個數據讀取期間所采樣的模擬電壓。A/D 轉換結束后,先
7、發送一個非應答信號位A 再發送結束信號位P。 灰底位由主機發出,白底位是由PCF8591 產生。 上電復位后控制字節狀態為00H ,在 A/D轉換時須設置控制字,即須在讀操作之前進行控制字節的寫入操作。邏輯操作波形時序圖如圖5所示。圖5 A/D轉換邏輯操作波形時序圖4、A/D轉換程序設計流程如下圖6所示圖65、1602LCD主要技術參數:顯示容量:16×2個字符,芯片工作電壓:4.55.5V,工作電流:2.0mA(5.0V),模塊最佳工作電壓:5.0V,字符尺寸:2.95×4.35(W×H)mm。5.1引腳功能說明1602LCD采用標準的14腳(無背光)或16腳(
8、帶背光)接口,各引腳接口說明如圖7編號符號引腳說明編號符號引腳說明1VSS電源地9D2數據2VDD電源正極10D3數據3VL液晶顯示偏壓11D4數據4RS數據/命令選擇12D5數據5R/W讀/寫選擇13D6數據6E使能信號14D7數據7D0數據15BLA背光源正極8D1數據16BLK背光源負極圖7引腳接口說明表第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。第5腳:R/
9、W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。第714腳:D0D7為8位雙向數據線。第15腳:背光源正極。第16腳:背光源負極。5.2 1602LCD的指令說明及時序1602液晶模塊內部的控制器共有11條控制指令,如圖8序號指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開/關控
10、制0000001DCB5光標或字符移位000001S/CR/L*6置功能00001DLNF*7置字符發生存貯器地址0001字符發生存貯器地址8置數據存貯器地址001顯示數據存貯器地址9讀忙標志或地址01BF計數器地址10寫數到CGRAM或DDRAM)10要寫的數據內容11從CGRAM或DDRAM讀數11讀出的數據內容圖81602液晶模塊的讀寫操作、屏幕和光標的操作都是通過指令編程來實現的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標復位到地址00H位置。指令2:光標復位,光標返回到地址00H。指令3:光標和顯示模式設置 I/D:光標移動方向,高電平右移,低電平左移 S:屏
11、幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關控制。 D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 C:控制光標的開與關,高電平表示有光標,低電平表示無光標 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標。指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字符發生器RAM地址設置。指令8:DDRAM地址設置。指令9:讀忙信號和光標地址 BF:
12、為忙標志位,高電平表示忙,此時模塊不能接收命令或者數據,如果為低電平表示不忙。指令10:寫數據。指令11:讀數據。讀操作時序寫操作時序5.3 1602LCD的一般初始化(復位)過程延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數據操作均需要檢測忙信號寫指令38H:顯示模式設置寫指令08H:顯示關閉寫指令01H:顯示清屏寫指令06H:顯示光標移動設置寫指令0CH:顯示開及光標設置6、仿真原理圖如下所示7、C語言程序#include<reg52.h>#include<intrins.h&g
13、t;#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數據輸入輸出引腳uchar Recv_Buffer4; /數據接收緩沖uint Voltage='0','0','0','0' /數據分解為電壓x.xx
14、bit bdata IIC_ERROR; /I2C錯誤標志位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 cmd)wh
15、ile(LCD_Busy_Check();LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;Delay4us();LCD_EN=1;Delay4us();LCD_EN=0;/ 寫數據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);delay(5)
16、;LCD_Write_Command(0x0c);delay(5);LCD_Write_Command(0x06);delay(5);LCD_Write_Command(0x01);delay(5);/設置顯示位置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、換后得到的值分解存入緩存void Convert_To_Voltage(uchar val)uchar Tmp; /最大值為255,對應5V,255/5=51Voltage2=val/51+'0' /整數部分Tmp=val%51*10; / 第一位小數Voltage1=Tmp/51+'0'Tmp=Tmp%51*10;Voltage0=Tmp/51+'0'/啟動I2C總線void IIC_Start()SDA=1;SCL=1;Delay4us();SDA=0;Delay4us();SCL=0;/停止I2C總線void IIC_Stop()SDA=0
18、;SCL=1;Delay4us();SDA=1; Delay4us();SCL=0;/ 從機發送應答位void Slave_ACK()SDA=0;SCL=1;Delay4us();SCL=0;SDA=1;/ 從機發送非應答位void Slave_NOACK()SDA=1;SCL=1;Delay4us();SCL=0;SDA=0;/發送一字節void IIC_SendByte(uchar wd)uchar i;for(i=0;i<8;i+) /循環移入8位SDA=(bit)(wd&0x80);_nop_();_nop_();SCL=1;Delay4us();SCL=0;wd<
19、<=1;Delay4us();SDA=1; /釋放總線并準備讀取應答SCL=1;Delay4us();IIC_ERROR=SDA; /IIC_ERROR=1表示無應答SCL=0;Delay4us();/接收一字節uchar IIC_ReceiveByte()uchar i,rd=0x00;for(i=0;i<8;i+)SCL=1;rd<<=1;rd|=SDA;Delay4us();SCL=0;Delay4us();SCL=0;Delay4us();return rd;/連續讀入4路通道的A/D轉換結果并保存到Recv_Buffervoid ADC_PCF8591(uch
20、ar CtrlByte)uchar i;IIC_Start();IIC_SendByte(0x90); / 發送寫地址if(IIC_ERROR=1)return;/ IIC_SendByte(CtrlByte); /發送控制字節/if(IIC_ERROR=1)return;IIC_Start(); /重新發送開始命令IIC_SendByte(0x91); / 發送讀地址if(IIC_ERROR=1)return;IIC_ReceiveByte(); /空讀一次,調整讀順序Slave_ACK(); /收到一字節后發送一個應答位for(i=0;i<4;i+)Recv_Bufferi+=IIC_ReceiveByte();Slave_ACK(); /收到一個字節后發送一個應答位Slave_NOACK();IIC_Stop(); /收到一個字節后發送一個非應答位/ 向 PCF8591發送1字節進行AD轉換/主程序void main()LCD_Initialise();while(1)ADC_PCF8591(0x04);Convert_To_Voltage(Recv_Buffer0);LCD_Line_12=Voltage2;LCD_Line_14=Voltage1;LCD_Line_15=V
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 錫礦選礦廠生產調度與優化考核試卷
- 質檢技術與質量風險分析考核試卷
- 隔音材料在酒店客房設計中的應用考核試卷
- 麻醉人力應急預案
- 怎樣判斷新生兒黃疸的程度輕重
- 常見疾病臍帶護理
- 兒童飲用水衛生常識
- 金融機構風險管理數字化轉型的法律法規與政策解讀報告
- 虛擬現實(VR)設備在房地產營銷中的創新策略與市場潛力分析報告
- 2025年零售電商行業社交電商發展趨勢與案例分析
- 2023年廣東初中學業水平考試生物試卷真題(含答案)
- 奶茶店消防應急預案
- 工程制圖及機械CAD基礎知到章節答案智慧樹2023年吉林大學
- 初級會計職稱考試教材《初級會計實務》
- 第二十二課-重屬和弦前方的共同和弦
- 碳酸飲料生產工藝流程圖
- 帶電跨越10kV線路施工方案
- 土壤肥料學野外教學實習分析
- GB/T 8012-2000鑄造錫鉛焊料
- GB/T 5169.5-2020電工電子產品著火危險試驗第5部分:試驗火焰針焰試驗方法裝置、確認試驗方法和導則
- GB/T 21835-2008焊接鋼管尺寸及單位長度重量
評論
0/150
提交評論