單片機課程設(shè)計報告-單片機課程設(shè)計報告心得體會.doc_第1頁
單片機課程設(shè)計報告-單片機課程設(shè)計報告心得體會.doc_第2頁
單片機課程設(shè)計報告-單片機課程設(shè)計報告心得體會.doc_第3頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機課程設(shè)計報告|單片機課程設(shè)計報告心得體會單片機課程設(shè)計報告 題 目 數(shù)字電壓表 班 級 姓 名 學(xué) 號 指導(dǎo)老師 設(shè)計時間 1 方案設(shè)計與論證 1.1 硬件總體設(shè)計 設(shè)計并制作一個基于單片機的數(shù)字電壓表的電路其結(jié)構(gòu)框圖如圖 1-1 所示: 單片機 STC 89C52 時鐘電路 復(fù)位電路 按鍵 測量電壓輸入 PCF8591 A/D轉(zhuǎn)換電路 電壓數(shù)碼管顯示系統(tǒng) 圖1-1 硬件結(jié)構(gòu)框圖 (1)單片機最小系統(tǒng)電路部分 (2)數(shù)碼管顯示部分 (3) PCF8591芯片 AD轉(zhuǎn)換部分 (4)外部電壓采集部分 1.2軟件總體設(shè)計 良好的設(shè)計方案可以減少軟件設(shè)計的工作量,提高軟件的通用性,擴展性和可讀性

2、。本系統(tǒng)的設(shè)計方案和步驟如下: (1)根據(jù)需求按照系統(tǒng)的功能要求,逐級劃分模塊。 (2)明確各模塊之間的數(shù)據(jù)流傳遞關(guān)系,力求數(shù)據(jù)傳遞少,以增強各模塊的獨立性,便于軟件編制和調(diào)試。 (3)確定軟件開發(fā)環(huán)境,選擇設(shè)計語言,完成模塊功能設(shè)計,并分別調(diào)試通過。 (4)按照開發(fā)式軟件設(shè)計結(jié)構(gòu),將各模塊有機的結(jié)合起來,即成一個較完善的系統(tǒng)。采用 PCF8591芯片,其中A/D轉(zhuǎn)換器用于實現(xiàn)模擬量向數(shù)字量的轉(zhuǎn)換,單電源供電。單片機模塊采用STC89C52單片機作為系統(tǒng)的控制單元。通過按鍵來選擇相應(yīng)的檔位,主控控制相應(yīng)繼電器來選取不同的模擬量輸入。通過A/D轉(zhuǎn)換將被測值轉(zhuǎn)換為數(shù)字量送入單片機中,再由單片機來送

3、顯。 2 硬件設(shè)計 2.1 電源電路 本設(shè)計的電源部分采用的是外部直流直接供電方案。采用DC插座為連接器件。電壓值為直流5V供電。當(dāng)外部直流5V電輸入時,首先進(jìn)行濾波處理,減少直流電中的交流部分。為本系統(tǒng)提供穩(wěn)定的5V電源,保證各個電路正常地穩(wěn)定工作。 圖2-1 電源電路圖 2.2 顯示電路 顯示電路由一個4位的共陽數(shù)碼管,4個PNP型的三極管S8550和4個限流電阻構(gòu)成。S8550為數(shù)碼管的段碼驅(qū)動開關(guān)管,當(dāng)它的B極為低電平時,三極管導(dǎo)通,當(dāng)它的B極為高電平時,三極管截止,而這4個三極管的B極是受控于單片機的IO口的。三極管的E極接電源正,當(dāng)三極管導(dǎo)通時,電源正極就到達(dá)了數(shù)碼管的陽極。此時數(shù)

4、碼管的8個段的點亮與熄滅完全受控于數(shù)碼管的段碼控制IO,只要它為低電平,就可以點亮數(shù)碼管中相應(yīng)的段。 圖2-2-1 顯示電路圖 圖2-2-2 顯示電路圖 2.3 單片機最小系統(tǒng)電路 單片機最小系統(tǒng)由復(fù)位電路與晶振電路組成電路圖如下: 圖2-3-1 單片機最小系統(tǒng)電路圖 復(fù)位電路由按鍵復(fù)位和上電復(fù)位兩部分組成。STC89C52系列單片及為高電平復(fù)位,通常在復(fù)位引腳RST上連接一個電容到VCC,再連接一個電阻到GND,由此形成一個RC充放電回路保證單片機在上電時RST腳上有足夠時間的高電平進(jìn)行復(fù)位,隨后回歸到低電平進(jìn)入正常工作狀態(tài),這個電阻和電容的典型值為10K和10uF。 按鍵復(fù)位就是在復(fù)位電容

5、上并聯(lián)一個開關(guān),當(dāng)開關(guān)按下時電容被放電、RST也被拉到高電平,而且由于電容的充電,會保持一段時間的高電平來使單片機復(fù)位。 晶振電路由晶振器件與2個助振電容組成,晶體振蕩器作為振蕩源,由于單片機內(nèi)部帶有振蕩電路,所以外部只要連接一個晶振和兩個電容即可,電容容量一般在15pF至50pF之間。 本系統(tǒng)采用內(nèi)部方式的時鐘電路和加電自復(fù)位的復(fù)位電路,如下圖所示: 圖2-3-2 時鐘電路圖 圖2-3-3 復(fù)位電路圖 2.4 PCF8591芯片 AD轉(zhuǎn)換部分電路 PCF8591芯片將模擬電壓信號轉(zhuǎn)化為二進(jìn)制數(shù)值,再用IC總線傳送給單片機,經(jīng)由單片機轉(zhuǎn)換成十進(jìn)制數(shù)值并通過數(shù)碼管顯示。PCF8591芯片AD轉(zhuǎn)換

6、部分電路如圖2-4所示: 圖2-4 PCF8591芯片 AD轉(zhuǎn)換部分電路圖 按照不同的量程,設(shè)置不同的衰減比例,即輸入電阻的大小與總回路電阻的比值。外部采集到的電壓進(jìn)過電阻進(jìn)行衰減,降到 PCF8591 芯片的基準(zhǔn)采集電壓范圍之內(nèi), PCF8591是8位的 D/A采用的是串行數(shù)模轉(zhuǎn)換器。有4路采樣通道,因為本設(shè)計要采樣溫度和電壓,需要用到2個采樣通道.并且PCF8591與單片機通迅方便簡單,PCF8591一共有4個采集通道,分別為AIN0,AIN1,AIN2,AIN3。AIN3為電壓檢測通道,它檢測的是輸入端的電壓,單片機可以處理PCF8591發(fā)送來的數(shù)據(jù)計算出相應(yīng)的電壓值,并且經(jīng)數(shù)碼管顯示出

7、來.TL431為可調(diào)的穩(wěn)壓芯片,此圖上的接法是最典型的2.5V接法,它不需要可調(diào)電阻,方便簡單。2.5V經(jīng)R4電阻,C5組合成RC濾波,然后供給PCF8591做基準(zhǔn)電壓。我們知道,PCF8591是一個8位AD/DA芯片,8位共有256個量,如果用2.5V做基準(zhǔn)的話,每個分辨量是:2.5V/(256-1) 約等于 9.8mV,就是PCF8591每檢測到一個量就是9.8mV,由此來檢測電壓值。 RW為高精密可調(diào)電阻,稱為電壓校正電阻。它的作用是來調(diào)整輸入電壓分壓.因為輸入的電壓一般都大于其準(zhǔn)電壓。所以要把輸入的電壓進(jìn)行分壓處理,然后在程序里進(jìn)行還原處理。 3 軟件設(shè)計 3.1 主程序 系統(tǒng)主程序包

8、括PCF8591AD轉(zhuǎn)換模塊,電壓計算、數(shù)碼管顯示。主程序主要通過調(diào)用其他函數(shù)來實現(xiàn)系統(tǒng)的總體功能,其工作順序如下: (1)系統(tǒng)啟動后,進(jìn)行系統(tǒng)的初始化。 (2)讀取 PCF8591芯片的值,判斷值得大小是否超過最大電壓,再通過數(shù)碼管顯示。 (3)如果超過量大測量電壓就顯示OL,表示超量程,沒有超過就顯示相應(yīng)電壓值。 主程序的程序流程圖如圖 3-1所示。 程序開始 初始化 循環(huán)30次讀取AD結(jié)果 AD結(jié)果/30=平均值 AD結(jié)果是最大值嗎? 電壓值計算 顯示電壓 顯示超量程 N Y 圖 3-1 主程序的程序流程圖 3.2 PCF8591AD轉(zhuǎn)換程序設(shè)計 電壓表的測量是通過 PCF8591AD、

9、D/A轉(zhuǎn)換芯片實現(xiàn)的,在硬件電路的設(shè)計中已經(jīng)做了設(shè)計,現(xiàn)在設(shè)計 PCF8591AD、D/A轉(zhuǎn)換芯片的軟件部分。 AD轉(zhuǎn)換流程如下圖: 子程序初始化 I2C初始條件 寫入器件地址(寫) 發(fā)送控制字 檢測應(yīng)答信號 I2C初始條件 寫入器件地址(讀) 檢測應(yīng)答信號 接收數(shù)據(jù)存入指針地址 結(jié)束 圖3-2 AD轉(zhuǎn)換流程圖 AD系統(tǒng)程序設(shè)計主要包括三部分:總線的初始化程序、啟動信號程序、應(yīng)答信號程序、停止信號程序、寫字節(jié)程序、讀字節(jié)程序。 4 安裝與調(diào)試 4.1 電路安裝 (1)檢查元件的好壞 按電路圖買好元件后首先檢查買回元件的好壞,按各元件的檢測方法分別進(jìn)行檢測,一定要仔細(xì)認(rèn)真。而且要認(rèn)真核對原理圖是

10、否一致,在檢查好后才可上件、焊件,防止出現(xiàn)錯誤焊件后不便改正。 (2)放置、焊接各元件 按原理圖的位置放置各元件,在放置過程中要先放置、焊接較低的元件,后焊較高的和要求較高的元件。特別是容易損壞的元件要后焊,在焊集成芯片時連續(xù)焊接時間不要超過10s,注意芯片的安裝方向。 4.2 系統(tǒng)調(diào)試 (1)在Keil軟件中編寫并調(diào)試程序,修改語法錯誤,最終生成.he_目標(biāo)程序。 (2)利用Proteus軟件繪制電路圖,在確保電路連接正確無誤的情況下,載入目標(biāo)程序,仿真并查看結(jié)果,如圖4-1所示。 圖4-1仿真圖 5 性能測試與結(jié)果分析 使用STC-ISP軟件燒入目標(biāo)程序,觀察實物運行效果,將導(dǎo)線接在紐扣電

11、池正負(fù)端,電壓測量效果如圖5-1所示。經(jīng)實驗測試,該數(shù)字電壓表設(shè)計方案正確、可行,各項指標(biāo)穩(wěn)定、可靠。 圖5-1實物運行效果 6 心得體會 通過本次的設(shè)計,使我們不僅對單片機這門課程有了更深刻的認(rèn)識,懂得了如何運用課本知識結(jié)合實際來完成定時器的顯示和編程方法以及數(shù)碼顯示電路的驅(qū)動方法,使我們能夠很快的適應(yīng)現(xiàn)代控制技術(shù)發(fā)展的需求,同時也提高了我們的思維能力和實際操作能力,為以后更好的走上工作崗位奠定了堅實的基礎(chǔ)。另外,這次的設(shè)計還讓我更進(jìn)一步的認(rèn)識了關(guān)于 STC89C52等芯片的引腳功能以及使用方法,使我學(xué)會了應(yīng)用不同的芯片來配合完成整個設(shè)計的操作。在做硬件電路的這段時間里,從思考設(shè)計到對電路的

12、調(diào)試經(jīng)過了許多困難。同樣在對軟件進(jìn)行設(shè)計時,也可為一路坎坷。但是通過對軟硬件不斷撞墻,不斷思考解決問題的過程中,我學(xué)會了很多東西,同時對單片機也有了更深的認(rèn)識。 參考文獻(xiàn): 1 王福瑞單片機測控系統(tǒng)設(shè)計大全M 北京:北京航空航天大學(xué)出版社,20_0 2 譚浩強C程序設(shè)計M北京:清華大學(xué)出版社,20_7 3 丁元杰單片機原理及應(yīng)用M 北京: 機械工業(yè)出版社,20_3 附錄: 1 電路圖 2 實物圖(正反面) 3 源程序 #include /包含頭文件 #define setPcf8591Add 0_90 /定義PCF859的器件地址 sbit SCL = P26; /定義PCF859的時鐘IO口

13、 sbit SDA = P27; /定義PCF859的數(shù)據(jù)IO口 /_-這樣做的好處就是可以隨意改IO與段碼的對應(yīng)關(guān)系(方便洞洞板接線)-_/ sbit LED1 = P37; /定義第1個數(shù)碼管的位選 sbit LED2 = P36; /定義第2個數(shù)碼管的位選 sbit LED3 = P12; /定義第3個數(shù)碼管的位選 sbit LED4 = P11; /定義第4個數(shù)碼管的位選 sbit LED_a = P35; /定義數(shù)碼管的段選a段 sbit LED_b = P13; /定義數(shù)碼管的段選b段 sbit LED_c = P30; /定義數(shù)碼管的段選c段 sbit LED_d = P32;

14、/定義數(shù)碼管的段選d段 sbit LED_e = P33; /定義數(shù)碼管的段選e段 sbit LED_f = P34; /定義數(shù)碼管的段選f段 sbit LED_g = P17; /定義數(shù)碼管的段選g段 sbit LED_dp = P31; /定義數(shù)碼管的段選dp段 /_=把數(shù)顯段碼存放在數(shù)組里,并且與數(shù)組下標(biāo)對應(yīng)=_/ unsigned char dig10 = 0_03,0_9f,0_25,0_0d,0_99,0_49,0_41,0_1f,0_01,0_09; /0 1 2 3 4 5 6 7 8 9段碼 /_=數(shù)碼管顯示暫存數(shù)組=_/ unsigned char ledData = 0_

15、ff,0_ff,0_ff,0_03; /第3位,第2位,第1位,第0位 /_=數(shù)碼管顯示函數(shù)=_/ void led_out(void) unsigned char i,j; for(i = 0;i 4;i+) /for循環(huán)4次,i從0到3循環(huán)4次,依次掃描4個數(shù)碼管. /_-關(guān)全部位選-_/ LED1 = 1; /數(shù)碼管位選1位關(guān) LED2 = 1; /數(shù)碼管位選2位關(guān) LED3 = 1; /數(shù)碼管位選3位關(guān) LED4 = 1; /數(shù)碼管位選4位關(guān) /_-輸入要顯示數(shù)組里的段碼-_/ LED_a = ledDatai &; 0_80; /數(shù)碼管的段選a段輸出暫存數(shù)組里的相對應(yīng)數(shù)據(jù).LED_b

16、 = ledDatai &; 0_40; /數(shù)碼管的段選b段輸出暫存數(shù)組里的相對應(yīng)數(shù)據(jù).LED_c = ledDatai &; 0_20; /數(shù)碼管的段選c段輸出暫存數(shù)組里的相對應(yīng)數(shù)據(jù).LED_d = ledDatai &; 0_10; /數(shù)碼管的段選d段輸出暫存數(shù)組里的相對應(yīng)數(shù)據(jù).LED_e = ledDatai &; 0_08; /數(shù)碼管的段選e段輸出暫存數(shù)組里的相對應(yīng)數(shù)據(jù).LED_f = ledDatai &; 0_04; /數(shù)碼管的段選f段輸出暫存數(shù)組里的相對應(yīng)數(shù)據(jù).LED_g = ledDatai &; 0_02; /數(shù)碼管的段選g段輸出暫存數(shù)組里的相對應(yīng)數(shù)據(jù).LED_dp = le

17、dDatai &; 0_01; /數(shù)碼管的段選dp段輸出暫存數(shù)組里的相對應(yīng)數(shù)據(jù)./_-判斷要開哪個位選-_/ if(i = 0) /判斷顯示的位置.LED1 = 0; /如果當(dāng)前掃描的是第1個數(shù)碼管.位選打開,顯示數(shù)據(jù) else if(i = 1) /如果當(dāng)前掃描的是第2個數(shù)碼管.位選打開,顯示數(shù)據(jù) LED2 = 0; else if(i = 2) /如果當(dāng)前掃描的是第3個數(shù)碼管.位選打開,顯示數(shù)據(jù) LED3 = 0; else if(i = 3) /如果當(dāng)前掃描的是第4個數(shù)碼管.位選打開,顯示數(shù)據(jù) LED4 = 0; for(j = 0;j 0;time-); /_= 函數(shù)名 : I2C起始

18、條件.調(diào) 用 : 無調(diào)用函數(shù).參 數(shù) : 無參數(shù).返回值 : 無返回值.備 注 : 當(dāng)SCL為高,SDA的下降沿叫做起始條件.(5V時:高大于0.6us,低大于0.6us) =_/ void i2c_start(void) /I2C起始條件 SDA = 1; /SDA輸出高電平(注意的是:SCL需在SDA后面拉高,如果外部已拉低SCL,SDA的拉高將被看著是停止條件) delay(5); /延時 SCL = 1; /SCL輸出高電平 delay(5); /延時 SDA = 0; /SDA下降沿.delay(5); /延時 SCL = 0; /SCL輸出高電平 delay(5); /延時 /_=

19、 函數(shù)名 : I2C停止條件.調(diào) 用 : 無調(diào)用函數(shù).參 數(shù) : 無參數(shù).返回值 : 無返回值.備 注 : 當(dāng)SCL為高,SDA的上升沿叫做停止條件.寫此函數(shù)思想:1.要產(chǎn)生停止條件,必須要讓SDA產(chǎn)生1個上升沿.在產(chǎn)生上升沿之前,SDA須為低.2.正常停止信號在ACK應(yīng)答后產(chǎn)生,考慮到應(yīng)答和非應(yīng)答,所以要先拉低SCL,允許 SDA確保為低,再拉高SCL來滿足這1條件 =_/ void i2c_stop(void) /I2C停止條件 SCL = 0; /允許SDA為低.delay(5); /延時 SDA = 0; /SDA輸出低電平.delay(5); /延時 SCL = 1; /SCL輸出高

20、電平 delay(5); /延時 SDA = 1; /SDA上升沿.delay(5); /延時 /_= 函數(shù)名 : 回復(fù)應(yīng)答或者非應(yīng)答信號.調(diào) 用 : 無調(diào)用函數(shù).參 數(shù) : ACKsw為:應(yīng)答開關(guān),為0時表示應(yīng)答,1表示非應(yīng)答.返回值 : 無返回值.備 注 : =_/ void i2c_ACK(bit ACKsw) /回復(fù)應(yīng)答或者非應(yīng)答信號.為0時表示應(yīng)答,1表示非應(yīng)答. SCL = 0; /拉抵SCL,允許SDA變化.delay(5); /延時 SDA = ACKsw; /把應(yīng)答信號傳輸SDA.delay(5); /延時 SCL = 1; /拉高SCL,讓I2C來讀取.delay(5);

21、/延時 SCL = 0; /拉低SCL,允許外部改變SDA.delay(5); /延時 /_= 函數(shù)名 : 檢測應(yīng)答信號.調(diào) 用 : 無調(diào)用函數(shù).參 數(shù) : 無參數(shù).返回值 : 返回值應(yīng)答,0表示應(yīng)答,1表示非應(yīng)答.備 注 : 當(dāng)發(fā)送完8個數(shù)據(jù)位后,再發(fā)送1個SCL用來檢測I2C是否應(yīng)答.=_/ bit i2c_waitACK(void) /檢測應(yīng)答信號 SCL = 0; /拉低SCL,允許SDA改變.delay(5); /延時 SDA = 1; /因為是要接收低電平,所以要先拉高SDA的電平.delay(5); /延時 SCL = 1; /發(fā)送1個SCL高.準(zhǔn)備檢測SDA數(shù)據(jù).delay(3

22、0); /延時 if(SDA = 1) /檢測SDA數(shù)據(jù). SCL = 0; /拉低SCL,準(zhǔn)備退出,允許外部改變SDA.delay(5); /延時 return 1; /如果讀到應(yīng)答對應(yīng)位為1說明I2C沒有應(yīng)答. else SCL = 0; /拉低SCL,準(zhǔn)備退出,允許外部改變SDA.delay(5); /延時 return 0; /如果讀到應(yīng)答對應(yīng)位為0說明I2C回復(fù)了應(yīng)答. /_= 函數(shù)名 : I2C位發(fā)送.調(diào) 用 : 無調(diào)用函數(shù).參 數(shù) : dat為:要發(fā)送的8位數(shù)據(jù).返回值 : 無返回值.備 注 : 傳輸1個字節(jié)數(shù)據(jù)的8個位.=_/ void i2c_sendbyte(unsigne

23、d char dat)/I2C位發(fā)送 unsigned char i; /定義1個變量用來循環(huán)發(fā)送數(shù)據(jù)位用.SCL = 0; /SCL輸出低電平,允許數(shù)據(jù)改變 delay(5); /延時 for(i = 0;i 8;i+) /循環(huán)8次,發(fā)送1個數(shù)據(jù)的8個位 if(dat &; 0_80) /如果要發(fā)送的數(shù)據(jù)最高位為1 SDA = 1; /傳輸位1.else SDA = 0; /否則傳輸0.dat = 1; /把要傳輸?shù)臄?shù)據(jù)移到高位,方便下次發(fā)送.delay(5); /延時 SCL = 1; /SCL輸出高電平I2C來讀數(shù) delay(5); /延時 SCL = 0; /SCL輸出低電平允許改變

24、數(shù)據(jù) delay(5); /延時 /_= 函數(shù)名 : I2C讀取8位.調(diào) 用 : 無調(diào)用函數(shù).參 數(shù) : 無參數(shù).返回值 : 返回讀取到的8位數(shù)據(jù).備 注 : 讀取1個字節(jié)數(shù)據(jù)的8個位.=_/ unsigned char i2c_recbyte(void) /I2C讀取8位 unsigned char i; /定義1個變量用來循環(huán)接收數(shù)據(jù)位用.unsigned char readDat; /定義1個變量用來暫存接收到的數(shù)據(jù) readDat = 0; /暫存初值為0.SCL = 0; /SCL輸出低電平,允許數(shù)據(jù)改變(任何時序函數(shù)結(jié)束時都應(yīng)保持SCL低電平) SDA = 1; /如果要接收數(shù)據(jù),

25、必須釋放數(shù)據(jù)總線SDA.delay(5); /延時 for(i = 0;i 8;i+) /循環(huán)8次,接收1個數(shù)據(jù)的8個位 SCL = 1; /SCL拉高電平,24C輸出數(shù)據(jù)位.delay(30); /延時 readDat = 1; /因為24C傳輸數(shù)據(jù)是高位在前,所以必須左移1位才有空位接收新的數(shù)據(jù)位.if(SDA = 1) /如果讀到的數(shù)據(jù)為1.readDat+; /暫存最低位置1.SCL = 0; /SCL輸出低電平允許改變數(shù)據(jù) delay(5); /延時 return readDat; /返回讀取到的字節(jié) /_= 函數(shù)名 : 讀AD轉(zhuǎn)換后的值.參 數(shù) : 的值為AD轉(zhuǎn)換控制字,具體可以查

26、PCF8591手冊,控制字寄存器功能說明.dat為轉(zhuǎn)換后的值指針變量.只要把一個變量的地址傳給這個函數(shù).那么經(jīng)過此函數(shù)轉(zhuǎn)換后,就可以 改變傳過來地址變量的值,假如傳A變量的地址給這個函數(shù),轉(zhuǎn)換成功后,AD轉(zhuǎn)換結(jié)果就存入了A變量的地址 判斷這個函數(shù)轉(zhuǎn)換成功后,可以直接使用A的值.返回值 : 返回1說明轉(zhuǎn)換失敗.備 注 : 讀取AD轉(zhuǎn)換的一次結(jié)果.=_/ bit i2c_readbyte(unsigned char , unsigned char _dat) i2c_start; /I2C起始條件 i2c_sendbyte(setPcf8591Add); /向I2C寫入器件地址,(寫) if (i

27、2c_waitACK) /檢測應(yīng)答信號,如果非應(yīng)答,就返回1,結(jié)束函數(shù).return 1; i2c_sendbyte(); /如果器件地址通過,就發(fā)送控制字節(jié) if (i2c_waitACK) /檢測應(yīng)答信號,如果非應(yīng)答,就返回1,結(jié)束函數(shù) return 1; i2c_start; /I2C起始條件 i2c_sendbyte(setPcf8591Add+1); /向I2C寫入器件地址(讀) if (i2c_waitACK) /檢測應(yīng)答信號,如果非應(yīng)答,就返回1,結(jié)束函數(shù).return 1; _dat = i2c_recbyte; /讀取數(shù)據(jù) i2c_ACK(0); /因為只讀一字節(jié)數(shù)據(jù),不發(fā)送

28、ACK信號 i2c_stop; /發(fā)送停止信號.return 0; /返回0說明轉(zhuǎn)換成功. /_=定時器0初始化=_/ void Init_Timer0(void) TMOD |= 0_01; /使用模式1,16位定時器,使用“|“符號可以在使用多個定時器時不受影響 TMOD &;= 0_F0; /設(shè)置定時器模式 TL0 = 0_00; /設(shè)置定時初值 TH0 = 0_00; /設(shè)置定時初值 EA = 1; /總中斷打開 ET0 = 1; /定時器中斷打開 TR0 = 1; /定時器開關(guān)打開 /_=定時器中斷子程序=_/ void Timer0_isr(void) interrupt 1 TMOD &;= 0_F0; /設(shè)置定時器模式 TL0 = 0_00; /設(shè)置定時初值 TH0 = 0_00; /設(shè)置定時初

溫馨提示

  • 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

提交評論