CT107D編程手冊(DOC)_第1頁
CT107D編程手冊(DOC)_第2頁
免費預覽已結束,剩余15頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、10口編程IO 編程,該開發(fā)板使用了573 鎖存器,通過 P2 口的 5,6,7 位連接 3-8 譯碼器,擴展出了 8個口,其中4個口分別連接 4 個573鎖存器,這里以 LED的鎖存器來舉例:原理圖 5 7 3:分析代碼:P2=(P2 & 0 xlf)|0 x80);其中 Oxlf = OOOl llll, P2與 Oxl f 進行與運算,高三位清零,其余位保持原來狀態(tài),不改變,即把控制 3-8譯碼器的高三位留出來:接著再或上 0 x80; 容易發(fā)現 0X80=1000OOOO;或運算,與 l 或結果為 l,與 0 或結果不變,所以或上 0 x8 0只需看 P2的高三位,則高三位為

2、10 0, 對應 3-8譯碼器的話,P2人 7=l;P2 人 6 = 0;P2人 5 = 0;所以輸出 Y4 = 0;Y4 再經過與非運算,看下圖示:則輸出 Y4C=l;即 LED 對應的鎖存器的片選信號被選中,鎖存器打通,接下來就可以對 P0口進行操作,操作完之后,P2=P2 & 0 xlf;P2高三位直接清零,此時Y4C=0,則把鎖存器鎖上了。類似的方法,數碼管、蜂鳴器等都是如此操作,選中鎖存器代碼:P2= ( P2&Oxlf) | (這里填對應鎖存器的位移號)。二、數碼管動態(tài)掃描和定時器數碼管顯示分為段選和位選,數碼管定義和顯示函數:Codeun sig nedchart

3、ab=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;un sig ned chardspbuf=10,10,10,10,10,10,10,10;un sig ned chardspcom=0;void display。/段選,消隱P2=(P2&0 x1f)|0 xe0);P0=0 xff;P2=P2&0 x1f;/位選P2=(P2&0 x1f)|0 xc0);P0=(117:5 8:5 0Ds130 2_Single_Byte_Write(0 x8e,0 x00); 寫操作Ds1302_Si ng

4、le_Byte_Write(0 x85, (17/10)v4 |(17);寫時Ds1302_Si ngle_Byte_Write(0 x83, (58/10)4 |(58);/寫分Ds1302_Si ngle_Byte_Write(0 x81, (50/10)4 |(50);寫秒Ds1302_Single_Byte_Write(0 x8e,0 x80); 寫保護即轉換的公式是:(Value/10)v4)*10 +(ReadValue&OxOF);八進制轉十進制-ReadValue=Ds1302_Si ngle_Byte_Read(0 x85); hour=(ReadValue&

5、0 x70)4)*10+(ReadValue&OxOF);!(這句一定不要省)Ds1302_Si ngle_Byte_Write(OxOO, OxOO);/ 寫操作ReadValue=Ds1302_Si ngle_Byte_Read(0 x83);minu te=(ReadValue&0 x70)4)*10 +(ReadValue&0 x0F);Ds1302_Si ngle_Byte_Write(0 x00, 0 x00);/ 寫操作ReadValue=Ds1302_Si ngle_Byte_Read(0 x81); sec=(ReadValue&0 x70)4

6、)*10+(ReadValue&0 x0F);Ds1302_Si ngle_Byte_Write(0 x00, 0 x00);/ 寫操作顯示:dspbuf0=hour/10;dspbuf1=hour;dspbuf2=mi nu te/10;dspbuf3=minu te;dspbuf4=sec/10; dspbuf5=sec;七、PCF8591 與 IIC 總線的使用(1) IIC 總線的使用:比賽提供了 IIC 的兩個庫文件,IIC.h;IIC.c ,其中需要注意的函數是:其中,該函數是初始化的,當使用 AD 轉換的時候需要在 main 函數開始時調用,該函數內 部只需看這句代碼即可

7、: i2c_sendbyte(0 x03);/ADC 通道 3, 板上有 4 個模擬輸入口, 分別 為 0,1,2,3 ;設置哪一個模擬輸入口就是根據這句代碼,0 x03 表示通道 3,這是根據芯片手 冊配置的,如圖:8 位前 6 位不用管,都為 0,最后兩位就是配置選擇哪一個通道的。 第二個函數:讀取AD轉換后的數值,這個函數直接調用就可以了,函數內部如何實現不用管,但是需要 注意的是:該函數掃描調用最好是 100ms。第三個函數,上面的都是 AD 轉換,即模擬信號轉數字信號,下面這個函數是 DA 轉換,數 字信號轉換成模擬信號,就是單片機輸出數字信號,用萬能表去量單片機引出的引腳,量一 下

8、電壓大小,這個估計比賽不會考,不過預防萬一:該函數和上面兩個函數分離開來的,一、二函數是要在一起使用,初始化后之后才能調用, 第三個加入頭文件,直接調用即可,比較簡單!上面說法有誤,A/D 轉換的初始化函數和讀取轉換后的數值都需要自己寫。這里了解一下 PCF8591 只需根據時序格式發(fā)送地址字節(jié)和控制字節(jié):,這是地址字節(jié),其 中A2,A1, AO 硬件已經接地,故都為 0,最低位表示的是你要從 IIC 總線上讀數還是寫數 據,表示讀,0表示寫,即讀數據發(fā)的地址是:0 x91;寫數據發(fā)的地址是0 x90; 控制字節(jié):由芯片資料知,控制字節(jié)有 8 位,有兩位固定是 0,除了第 0、1 位需要自己設

9、置,其他的 我們都設為 0,那些位都是一些具體的功能,我們暫時用不著,不用管先,第 0、1 位是模 擬通道選擇,PCF8591 上提供了 4 路模擬通道,根據需求進行選擇,如選擇通道 3 即發(fā)送 控制字節(jié):0 x03;地址字節(jié)和控制字節(jié)都明白了,接下來根據時序要求進行配置,A/D 轉換需要一個初始化函 數:Init_ADpcf8591();和一個獲得 AD 轉換后的數值的函數:adc_pcf8591();其中初始化函 數的作用是發(fā)送 AD 轉換的控制字節(jié);adc_pcf8591()發(fā)送讀取得地址并讀回數據,先寫指 令才能讀;格式如下:一這個是初始化的協議:分別是 staHIIC、(地址寫)發(fā)送

10、 0 x90、等待應答、發(fā)送控制字節(jié)(AD 這里是選擇通道的指令,如選擇通道 3,0 x03)0 x03、等待應答、(達到目的,沒有后續(xù) 的操作,直接停止總線)StopIIC.初始化的函數就是如此寫;adc_pcf8591 的協議:依次是: stabile、 發(fā)送讀地址0 x91、 等待應答、 讀回AD轉換后的數值、 讀回后發(fā)送應答 給PCF8591,表示收到,并且不需要再返回應答,要傳參數 1,如圖紅圈示,即函數 Ack(1);、 最后 stopIIC 總線。D/A 轉換(其實挺麻煩,先前太自信了,哈):所謂 D/A 轉換其實就是把數字信號轉換成模擬信號輸出,用 單片機發(fā)數字通過 D/A 轉

11、換成 電壓輸出,檢測的方法可以用 電壓表測量。配置的方法跟 A/D 類似,先發(fā)地址字節(jié),再發(fā)控制字節(jié),然后把數字發(fā)出去(AD 這里是接 收模擬信號,是相反的機制)??刂谱止?jié):如圖示,控制字節(jié)的第 6 位是 1 的話是模擬輸出模式,其余位全為 0,發(fā)送格式跟 AD 一樣: 代碼如一開始圖示。(2)EEPROM 的使用,AT24C02,可以掉電依舊保存上一次操作的數據,下次上電后接著運行。需要注意兩個函數,一個是寫進 EEPROM 里面保存,再次上電再從里面讀回來: 其中寫函數需要指定 AT24C02 的地址以及需要寫入的數據,讀函數要想取回寫進的數據, 需要從相同的地址里面讀:其中 AT24C0

12、2 的存儲地址是 0 x00,可以是其他地址,如 0 x02,但是讀和寫的地址必須一 致。寫與讀的協議與AD或 DA 相同,由芯片資料及原理圖知 EEPROM (AT24C02)的寫地址為 OxaO;讀地址為 0 xal ;注意:讀數的時候讀出一個數之后發(fā)送一個應答信號,若 ACK( 0)表示還想繼 續(xù)讀下一個字節(jié),若 ACK(l );則不想再讀數,讓 EEPROM 停止發(fā)送。八、DS18B20 時鐘芯片的使用比賽有提供代碼,只需記住這個函數:讀取溫度值,整數(其中,提示 EA 總中斷要打開、關閉,也可以不用)。浮點數的表示。注意,只有提供函數,沒有提供讀取溫度的函數,即上面的那個,只有下面:

13、這幾個函數。編寫讀取溫度的函數需要記住 DS13B20 的三條指令,OxCC,跳過 ROM 檢測;然后啟動溫度 轉換:0 x44;轉換需要時間,這里精確延時Delay_OneWire(200);然后再次初始化,再次執(zhí)行跳過,然后讀取溫度指令:0 xBE.;注意讀出的溫度是低字節(jié)先,然后才是高字節(jié),分別用 兩個變量保存還要通過公式轉換成我們需要的整數或浮點數。完整代碼如上圖示。九、超聲波傳感器的使用#includereg52.h /定義 51 單片機特殊功能寄存器#in clude in tri ns.h#in clude absacc.h12M 用這個/11.0592 用這個#defi ne

14、some nop_ no p_();_ no p_() ;_n op_();_ no p_() ;_n op_();_n op_();_ nop_();sbit TX =P1A0; / 發(fā)射引腳sbit RX =P1A1;/ 接收引腳code un sig ned char tab = 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff;un sig ned char dspbuf8 =10,10,10,10,10,10,10,10; /顯示緩沖區(qū)un sig ned char dspcom =0;un sig n

15、ed int intr =0;bit s_flag;un sig ned int t = 0;voidse nd_wave(void);void display(void);void main (void)un sig ned int dista nee;TMOD|= 0 x11; /配置定時器工作模式TH0= (65536-2000)/256;TL0= (65536-2000)%6;TH1= 0;TL1= 0;EA =1;ET0= 1; /打開定時器 0 中斷TR0= 1; /啟動定時器while(1)if(s_flag)s_flag = 0;t = TH1;t = 8;t |= TL1;d

16、ista nee = (un sig ned in t)(t*0.017); / 計算距離TH1 = 0;TL1 = 0;dspbuf5 = dista nce/100;dspbuf6 = dista nceO/1O;dspbuf7 =dista nee;/定時器 o 中斷服務函數voidisr_timer_0(void) in terrupt 1 /默認中斷優(yōu)先級 1TH0= (65536-2000)/256;TL0= (65536-2000)%6; / 定時器重載display(); /2ms 執(zhí)行一次if(+i ntr = 200)s_flag = 1; intr = 0;/顯示函數void display(void)XBYTE0 xE000 = 0 xff; / 去除鬼影XBYTE0 xC000 = (1165)set=0;/ 電機占空比十一、擴展:宏定義編程方法(推薦)常用的可以宏定義,省時,下面以 數碼管為例:#defi ne rst573P2&=0 x1f#defi ne Y6CP2= (P2&0 x1f)|0 xc0)#defi ne Y7CP2= (P2&0 x1f)|0 xe0)code un sig ned char tab = 0 xc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論