|
摘要:
本設(shè)計(jì)中利用STC89C52單片機(jī)制作了一個(gè)簡單的數(shù)字電壓表,主要通過A/D轉(zhuǎn)換器XPT2046把輸入的模擬信號(hào)即電位器的電壓值轉(zhuǎn)換成數(shù)字信號(hào),送到1602液晶進(jìn)行數(shù)據(jù)顯示,并預(yù)設(shè)了一個(gè)警報(bào)值,當(dāng)超過警報(bào)值時(shí),報(bào)警電路發(fā)出警報(bào)。
硬件電路主要包括單片機(jī)最小系統(tǒng)、顯示模塊、按鍵模塊、報(bào)警模塊和AD轉(zhuǎn)換模塊、數(shù)據(jù)存儲(chǔ)模塊六個(gè)部分。軟件采用了模塊化的設(shè)計(jì)方法,主要分為主程序、A/D轉(zhuǎn)換子程序、按鍵檢測(cè)子程序、液晶顯示子程序、E2PROM存儲(chǔ)程序和中斷程序。
目錄:
1. 概述.............................................................1
1.1課題研究背景與意義...........................................1
1.2課題設(shè)計(jì)內(nèi)容.................................................1
2. 設(shè)計(jì)方案........................................................1
3. 硬件電路設(shè)計(jì)....................................................2
3.1 器件選擇....................................................2
A.STC89C52..................................................2
B. XPT2046...................................................3
C.AT24C02...................................................4
D.LCD1602...................................................5
3.2 單片機(jī)最小系統(tǒng)..............................................6
3.3 A/D轉(zhuǎn)換模塊.................................................7
3.4 數(shù)據(jù)顯示模塊................................................7
3.5 數(shù)據(jù)存儲(chǔ)....................................................8
3.6 按鍵模塊....................................................8
3.7 報(bào)警模塊....................................................9
3.8 電路原理圖..................................................9
4.軟件設(shè)計(jì).........................................................10
4.1 主程序.....................................................10
4.2 AD轉(zhuǎn)換程序.................................................11
4.3 數(shù)據(jù)存儲(chǔ)程序...............................................11
4.4 1602液晶顯示程序...........................................12
4.5 按鍵驅(qū)動(dòng)程序...............................................12
4.6 中斷程序...................................................13
4.7 部分程序代碼...............................................13
5.仿真與調(diào)試.......................................................14
5.1軟件仿真....................................................14
5.2硬件調(diào)試....................................................16
結(jié)束語.............................................................17
附錄1.............................................................18
附錄2.............................................................19
1. 概述
1.1課題研究的背景與意義
隨著電子技術(shù)的發(fā)展,老式通過人眼估讀的電壓值不能滿足工業(yè)甚至是科技的要求,那這就需要我們?nèi)プ非鬁?zhǔn)確度高,分辨率高,測(cè)量速度快的數(shù)字電壓表,然后通過LED或者是LCD顯示出來。
在電量的測(cè)量中,電壓、電流和頻率是最基本的3個(gè)被測(cè)量,其中電壓量的測(cè)量最為常見,經(jīng)常需要測(cè)量出精度高的多點(diǎn)電壓值,因此多點(diǎn)數(shù)字電壓表變得越來越重要。數(shù)字電壓表(Digital Voltmeter)簡稱DVM,是采用數(shù)字化測(cè)量技術(shù),把連續(xù)的模擬量(直流或交流輸入電壓)轉(zhuǎn)換成不連續(xù)、離散的數(shù)字形式并加以顯示的儀表。由于數(shù)字儀器具有讀數(shù)準(zhǔn)確、精度高、誤差小、靈敏度高、分辨率高、測(cè)量速度快等特點(diǎn)而備受青睞。
1.2課題設(shè)計(jì)的內(nèi)容
以單片機(jī)為控制器,對(duì)0—5V的模擬電壓進(jìn)行循環(huán)采集,采集的數(shù)據(jù)送LED或LCD顯示,并存入內(nèi)存24WC04。超過界限時(shí)指示燈閃爍并報(bào)警。
編寫下列控制程序:
1).對(duì)0—5V模擬信號(hào)輸入實(shí)行循環(huán)采集,連續(xù)采集16次,取平均值并顯示。
2).設(shè)定采集的上限值,若采集的平均值超過該界限值,則對(duì)應(yīng)的指示燈閃爍10次后一直亮,指示燈閃爍時(shí)喇叭發(fā)聲,以示警告。
3)可按鍵查看以往的電壓采集值并顯示。
2. 設(shè)計(jì)方案
本設(shè)計(jì)選用A/D芯片XPT2046接收電位器上的電壓信號(hào),轉(zhuǎn)換后的數(shù)字信號(hào)輸送到單片機(jī)STC89C52,數(shù)據(jù)經(jīng)過單片機(jī)處理之后通過LCD1602進(jìn)行數(shù)據(jù)顯示,同時(shí),將數(shù)據(jù)寫入AT24C02進(jìn)行數(shù)據(jù)存儲(chǔ),通過按鍵控制可進(jìn)行數(shù)據(jù)回顯。按鍵還可以設(shè)置報(bào)警值,當(dāng)測(cè)得數(shù)據(jù)大于報(bào)警值時(shí),蜂鳴器會(huì)發(fā)出警報(bào)。總體框圖如圖2.1所示。
3. 硬件電路設(shè)計(jì)
3.1 器件選擇
A.STC89C52
本設(shè)計(jì)選用單片機(jī)STC89C52,是宏晶科技推出的新一代超強(qiáng)抗干擾、高速、低功耗的單片機(jī),基于Intel 標(biāo)準(zhǔn)的8052,指令代碼完全兼容傳統(tǒng)的8051 系列單片機(jī),12 時(shí)鐘/機(jī)器周期和6 時(shí)鐘/機(jī)器周期可任意選擇,最新的D 版本內(nèi)集成MAX810 專用復(fù)位電路。
主要特性:
1). 增強(qiáng)型8051單片機(jī),6 時(shí)鐘/機(jī)器周期和12 時(shí)鐘/機(jī)器周期可以任意 選擇,指令代碼完全兼容傳統(tǒng)8051.[1]
2). 工作電壓:5.5V~3.3V(5V單片機(jī))/3.8V~2.0V(3V 單片機(jī))
3).工作頻率范圍:0~40MHz,相當(dāng)于普通8051 的0~80MHz,實(shí)際工作 頻率可達(dá)48MHz
4). 用戶應(yīng)用程序空間為8K字節(jié)
5). 片上集成512 字節(jié)RAM
6). 通用I/O 口(32 個(gè)),復(fù)位后為:P1/P2/P3是準(zhǔn)雙向口/弱上拉, P0 口是漏極開路輸出,作為總線擴(kuò)展用時(shí),不用加上拉電阻,作為 I/O 口用時(shí),需加上拉電阻。
7). ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器,無 需專用仿真器,可通過串口直接下載用戶程 序,數(shù)秒即可完成一片
8). 具有EEPROM 功能
9). 共3 個(gè)16 位定時(shí)器/計(jì)數(shù)器。即定時(shí)器T0、T1、T2
10).外部中斷4 路,下降沿中斷或低電平觸發(fā)電路,Power Down 模式可由外部中斷低電平觸發(fā)中斷方式喚醒
11). 通用異步串行口(UART),還可用定時(shí)器軟件實(shí)現(xiàn)多個(gè)UART
12). 工作溫度范圍:-40~+85℃(工業(yè)級(jí))/0~75℃(商業(yè)級(jí))
B. XPT2046
XPT2046是一種典型的逐次逼近型模數(shù)轉(zhuǎn)換器(SARADC),包含了采樣/保持、模數(shù)轉(zhuǎn)換、串口數(shù)據(jù)輸出等功能。同時(shí)芯片集成有一個(gè)2.5V的內(nèi)部參考電壓源、溫度檢測(cè)電路,工作時(shí)使用外部時(shí)鐘。XPT2046可以單電源供電,電源電壓范圍為2.7V~5.5V。參考電壓值直接決定ADC的輸入范圍,參考電壓可以使用內(nèi)部參考電壓,也可以從外部直接輸入1V~VCC范圍內(nèi)的參考電壓(要求外部參考電壓源輸出阻抗低)。X、Y、Z、VBAT、Temp和AUX模擬信號(hào)經(jīng)過片內(nèi)的控制寄存器選擇后進(jìn)入ADC,ADC可以配置為單端或差分模式。引腳分布如圖3.1所示。
XPT2046通過SPI接口與主控制器進(jìn)行通信,其與主控制器的接口包括以下信號(hào):PENIRQ_N:筆觸中斷信號(hào),當(dāng)設(shè)置了筆觸中斷信號(hào)有效時(shí),每當(dāng)觸摸屏被按下,該引腳被拉為低電平。當(dāng)主控檢測(cè)到該信號(hào)后,可以通過發(fā)控制信號(hào)來禁止筆觸中斷,從而避免在轉(zhuǎn)換過程中誤觸發(fā)控制器中斷。該引腳內(nèi)部連接了一個(gè)50K的上拉電阻。
CS_N:芯片選中信號(hào),當(dāng)CS_N被拉低時(shí),用來控制轉(zhuǎn)換時(shí)序并使能串行輸入/輸出寄存器以移出或移入數(shù)據(jù)。當(dāng)該引腳為高電平時(shí),芯片(ADC)進(jìn)入掉電模式。
DCLK:外部時(shí)鐘輸入,該時(shí)鐘用來驅(qū)動(dòng)SARADC的轉(zhuǎn)換進(jìn)程并驅(qū)動(dòng)數(shù)字IO上的串行數(shù)據(jù)傳輸。
DIN:芯片的數(shù)據(jù)串行輸入腳,當(dāng)CS為低電平時(shí),數(shù)據(jù)在串行時(shí)鐘DCLK的上升沿被鎖存到片上的寄存器。
DOUT:串行數(shù)據(jù)輸出,在串行時(shí)鐘DCLK的下降沿?cái)?shù)據(jù)從此引腳上移出,當(dāng)CS_N引腳為高電平時(shí),該引腳為高阻態(tài)。
BUSY:忙輸出信號(hào),當(dāng)芯片接收完命令并開始轉(zhuǎn)換時(shí),該引腳產(chǎn)生一個(gè)DCLK周期的高電平。當(dāng)該引腳由高點(diǎn)平變?yōu)榈碗娖降臅r(shí)刻,轉(zhuǎn)換結(jié)果的最高位數(shù)據(jù)呈現(xiàn)在DOUT引腳上,主控可以讀取DOUT的值。當(dāng)CS_N引腳為高電平時(shí),BUSY引腳為高阻態(tài)。
C. AT24C02
AT24C02支持I2C,總線數(shù)據(jù)傳送協(xié)議I2C,總線協(xié)議規(guī)定任何將數(shù)據(jù)傳送到總線的器件作為發(fā)送器。任何從總線接收數(shù)據(jù)的器件為接收器。數(shù)據(jù)傳送是由產(chǎn)生串行時(shí)鐘和所有起始停止信號(hào)的主器件控制的。主器件和從器件都可以作為發(fā)送器或接收器,但由主器件控制傳送數(shù)據(jù)(發(fā)送或接收)的模式,由于A0、A1和A2可以組成000~111八種情況,即通過器件地址輸入端A0、A1和A2可以實(shí)現(xiàn)將最多8個(gè)AT24C02器件連接到總線上,通過進(jìn)行不同的配置進(jìn)行選擇器件。引腳分布如圖3.2所示
器件操作:
時(shí)鐘及數(shù)據(jù)傳輸:SDA 引腳通常被外圍器件拉高。SDA 引腳的數(shù)據(jù)應(yīng)在 SCL 為低時(shí)變化;當(dāng)數(shù)據(jù)在 SCL 為高時(shí)變化,將視為下文所述一個(gè)起始或停止命令。
起始命令:當(dāng) SCL 為高,SDA 由高到低的變化被視為起始命令,必須以起始命令作為任何一次讀/寫操作命令的開始。
停止命令:當(dāng) SCL 為高,SDA 由低到高的變化被視為停止命令,在一個(gè)讀操作后,停止命令會(huì)使 EEPROM 進(jìn)入等待態(tài)低功耗模式。
應(yīng)答:所有的地址和數(shù)據(jù)字節(jié)都是以 8 位為一組串行輸入和輸出的。每收到一組 8 位的數(shù)據(jù)后,EEPROM 都會(huì)在第 9 個(gè)時(shí)鐘周期時(shí)返回應(yīng)答信號(hào)。每當(dāng)主控器件接收到一組 8 位的數(shù)據(jù)后,應(yīng)當(dāng)在第 9 個(gè)時(shí)鐘周期向EEPROM 返回一個(gè)應(yīng)答信號(hào)。收到該應(yīng)答信號(hào)后,EEPROM 會(huì)繼續(xù)輸出下一組 8 位的數(shù)據(jù)。若此時(shí)沒有得到主控器件的應(yīng)答信號(hào),EEPROM 會(huì)停止讀出數(shù)據(jù),直到主控器件返回一個(gè)停止命令來結(jié)束讀周期。
等待模式:24C01/02/04/08/16 特有一個(gè)低功耗的等待模式。可以通過以下方法進(jìn)入該模式:(a)上電 (2)收到停止位并且結(jié)束所有的內(nèi)部操作后。
器件復(fù)位:在協(xié)議中斷、下電或系統(tǒng)復(fù)位后,器件可通過以下步驟復(fù)位:(1)連續(xù)輸入 9 個(gè)時(shí)鐘;(2)在每個(gè)時(shí)鐘周期中確保當(dāng) SCL 為高時(shí) SDA 也為高;(3)建立一個(gè)起始條件。
D. LCD1602
1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用。
1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表3.1所示:
3.2 單片機(jī)最小系統(tǒng)
單片機(jī)最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片機(jī)可以工作的系統(tǒng).對(duì)51系列單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括:單片機(jī)、晶振電路、復(fù)位電路.電路圖如圖3.3所示。
復(fù)位電路:由電容串聯(lián)電阻構(gòu)成,由圖并結(jié)合"電容電壓不能突變"的性質(zhì),可以知道,當(dāng)系統(tǒng)一上電,RST腳將會(huì)出現(xiàn)高電平,并且,這個(gè)高電平持續(xù)的時(shí)間由電路的RC值來決定.典型的51單片機(jī)當(dāng)RST腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就將復(fù)位,所以,適當(dāng)組合RC的取值就可以保證可靠的復(fù)位.
晶振電路:典型的晶振取11.0592MHz(因?yàn)榭梢詼?zhǔn)確地得到9600波特率和19200波特率,用于有串口通訊的場(chǎng)合)/12MHz(產(chǎn)生精確的uS級(jí)時(shí)歇,方便定時(shí)操作)
3.3 A/D轉(zhuǎn)換模塊
利用XPT2046來采集電位器的得電壓信號(hào),經(jīng)轉(zhuǎn)換之后輸送給單片機(jī)。電路圖如圖3.4所示。
3.4 數(shù)據(jù)顯示模塊
1602液晶接收單片機(jī)P0口輸出的數(shù)據(jù)直接進(jìn)行顯示,在1602的V0引腳接上一個(gè)電位器來調(diào)整液晶顯示的對(duì)比度。由于單片機(jī)的P0口進(jìn)行數(shù)據(jù)傳輸需接上拉電阻。電路圖如圖3.5所示。
3.5 數(shù)據(jù)存儲(chǔ)
將芯片 A2、A1、A0 都是接的 GND,也就是說都是 0,因此24C02的 7 位地址實(shí)際上是二進(jìn)制的 0b1010000,也就是 0x50。我們用 I 2 C 的協(xié)議來尋址 0x50,利用IIC通信來讀寫數(shù)據(jù)。電路圖如圖3.6所示。
3.6 按鍵模塊
利用獨(dú)立按鍵來進(jìn)行控制,S0進(jìn)行數(shù)據(jù)回顯,S1、S2是對(duì)警告值進(jìn)行加
減,每次加減0.5V。電路圖如圖3.7所示。
3.7 報(bào)警模塊
當(dāng)測(cè)得的電壓值大于設(shè)定的報(bào)警值時(shí),會(huì)從P2^3引腳輸出一個(gè)1HZ脈沖是小燈閃爍10次,然后輸出一個(gè)低電平,小燈常亮。蜂鳴器采用了有源蜂鳴器,需給端口一定頻率的脈沖,蜂鳴器才會(huì)發(fā)出聲音。電路圖如圖3.8所示。
3.8 電路原理圖
見附錄1。
4. 軟件設(shè)計(jì)
4.1 主程序
主程序主要調(diào)用A/D轉(zhuǎn)換程序、按鍵驅(qū)動(dòng)程序、1602液晶顯示程序、數(shù)據(jù)存儲(chǔ)程序和警報(bào)程序。首先對(duì)系統(tǒng)進(jìn)行初始化,當(dāng)被測(cè)電壓輸入后,調(diào)用A/D轉(zhuǎn)換子程序,轉(zhuǎn)換出來的數(shù)值經(jīng)數(shù)據(jù)存儲(chǔ)程序?qū)懭階T24C02,并通過1602液晶顯示程序進(jìn)行數(shù)據(jù)顯示,同時(shí),與報(bào)警值進(jìn)行比較,當(dāng)大于報(bào)警值時(shí),啟用報(bào)警程序。主程序流程圖如圖4.1所示。
4.2 A/D轉(zhuǎn)換程序
A/D轉(zhuǎn)換程序主要是對(duì)電位器產(chǎn)生的模擬信號(hào)進(jìn)行數(shù)據(jù)轉(zhuǎn)換,首先啟動(dòng)AD芯片,輸入指令后,等待數(shù)據(jù)處理完后,輸出結(jié)果,本次轉(zhuǎn)換完成。子程序流程圖如圖4.2所示。
4.3數(shù)據(jù)存儲(chǔ)程序
數(shù)據(jù)存儲(chǔ)程序主要是對(duì)A/D轉(zhuǎn)換后的數(shù)值進(jìn)行數(shù)據(jù)存儲(chǔ),當(dāng)按鍵控制的時(shí)候可以數(shù)據(jù)回顯。AT24C02用IIC進(jìn)行數(shù)據(jù)通信,首先選擇芯片地址,然后進(jìn)行數(shù)據(jù)讀取,待完成后輸出結(jié)果。程序流程圖如圖11所示。
4.4 1602液晶顯示程序
本設(shè)計(jì)使用1602液晶進(jìn)行數(shù)據(jù)顯示,接收從單片機(jī)傳輸?shù)淖址蛿?shù)據(jù)直接進(jìn)行顯示。首先初始化液晶,輸入數(shù)據(jù)顯示的地址,即在液晶屏上顯示的行與列。再輸入字符型的數(shù)據(jù),液晶即可進(jìn)行數(shù)據(jù)顯示。程序流程圖如圖4.4所示。
4.5按鍵驅(qū)動(dòng)程序
本設(shè)計(jì)使用3個(gè)獨(dú)立按鍵,一個(gè)按鍵用來控制讀取E2PROM中存儲(chǔ)的數(shù)據(jù),然后通過液晶1602進(jìn)行數(shù)據(jù)顯示。另外兩個(gè)按鍵來進(jìn)行報(bào)警值的調(diào)整,S1對(duì)報(bào)警值加5,S2對(duì)數(shù)據(jù)減5,報(bào)警值在1602上立即刷新。按鍵每次按下會(huì)有抖動(dòng),所以進(jìn)行按鍵消抖,這樣按鍵使用更加精準(zhǔn)。程序流程圖如圖4.5所示。
4.6中斷程序
本程序使用定時(shí)器中斷0,中斷優(yōu)先級(jí)為1,定時(shí)2ms,中斷中主要產(chǎn)生一個(gè)1s和200ms的時(shí)間標(biāo)志位、進(jìn)行按鍵的掃描和產(chǎn)生蜂鳴器需要的脈沖。
4.7 部分程序代碼
見附錄2.
5.仿真與調(diào)試
1).軟件仿真
仿真運(yùn)行的時(shí)候,液晶顯示如圖5.1所示。
當(dāng)S0按下并調(diào)整電位器的值得時(shí)候,液晶顯示如圖5.2所示。
2).硬件調(diào)試
當(dāng)接通電源的時(shí)候,液晶顯示如圖5.3所示。
當(dāng)S0按下,并調(diào)整電位器,液晶如圖5.4所示。
當(dāng)按下S2的時(shí)候,報(bào)警值減掉0.5V,并調(diào)整電位器,使其電壓大于報(bào)警值,電路發(fā)出警報(bào),蜂鳴器器報(bào)警,小燈閃爍。如圖5.5所示。
6.結(jié)束語
通過這次課程設(shè)計(jì)有很多收獲,把所學(xué)到的知識(shí)得到了應(yīng)用,對(duì)所學(xué)的知識(shí)有了更深的了解,有了新的體會(huì)。對(duì)于制圖軟件AltiumDesigner、編程軟件keil5掌握的更加熟悉,也發(fā)現(xiàn)了不少的問題,經(jīng)過一系列的努力得以解決,充實(shí)了自己。
主程序:
void main()
{
EA = 1;
AUXR &= 0x7F;
TMOD &= 0xF0;
TL0 = 0xCD;
TH0 = 0xF8;
TF0 = 0;
TR0 = 1;
ET0 = 1;
LcdInit();
while(1)
{
KeyDriver();
if (flag_200ms)
{
flag_200ms = 1;
if (flag_s1)
{
Get_AD_buf();
AD_Display();
}
if (flag_s1 == 0)
{
sdat =E2Read(0x00);
buf[0] =sdat/10+'0';
buf[1] = '.';
buf[2] =sdat%10+'0';
buf[3] = '\0';
LcdWriteCom(0x80+0x40);
LcdWriteData(buf[0]);
LcdWriteData(buf[1]);
LcdWriteData(buf[2]);
}
}
if (pdat >warn)
{
BUZZ = buz;
if (n<10)
Led_1s();
else
LED = 0;
}else
{
n = 0;
LED = 1;
BUZZ = 0;
}
}
}
A/D轉(zhuǎn)換程序:
voidSPI_Write(uchar dat)
{
uchar i;
CLK = 0;
for(i=0; i<8;i++)
{
DIN = dat >>7;
dat <<= 1;
CLK = 0;
CLK = 1;
}
}
uintSPI_Read(void)
{
uint i, dat=0;
CLK = 0;
for(i=0; i<12;i++)
{
dat <<= 1;
CLK = 1;
CLK = 0;
dat |= DOUT;
}
return dat;
}
uintRead_AD_Data(uchar cmd)
{
uchar i;
uint AD_Value;
CLK = 0;
CS = 0;
SPI_Write(cmd);
for(i=6; i>0;i--);
CLK = 1;
_nop_();_nop_();
CLK = 0;
_nop_();_nop_();
AD_Value=SPI_Read();
CS = 1;
return AD_Value;
}
1602液晶顯示程序:
voidLcdWriteCom(uchar com)
{
LCD1602_E = 0;
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DATAPINS =com;
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
voidLcdWriteData(uchar dat)
{
LCD1602_E = 0;
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DATAPINS =dat;
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
void LcdInit()
{
LcdWriteCom(0x38);
LcdWriteCom(0x0c);
LcdWriteCom(0x06);
LcdWriteCom(0x01);
LcdWriteCom(0x80);
}
E2PROM存儲(chǔ)程序:
voidIIC_Start(void)
{
SDA = 1;
SCL = 1;
somenop;
SDA = 0;
somenop;
SCL = 0;
}
voidIIC_Stop(void)
{
SDA = 0;
SCL = 1;
somenop;
SDA = 1;
}
voidIIC_Ack(unsigned char ackbit)
{
if(ackbit)
SDA = 0;
else
SDA = 1;
somenop;
SCL = 1;
somenop;
SCL = 0;
SDA = 1;
somenop;
}
bitIIC_WaitAck(void)
{
SDA = 1;
somenop;
SCL = 1;
somenop;
if(SDA)
{
SCL = 0;
IIC_Stop();
return 0;
}
else
{
SCL = 0;
return 1;
}
}
voidIIC_SendByte(unsigned char byt)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(byt&0x80)
{
SDA = 1;
}
else
{
SDA = 0;
}
somenop;
SCL = 1;
byt <<= 1;
somenop;
SCL = 0;
}
}
unsigned charIIC_RecByte(void)
{
unsigned char da;
unsigned char i;
for(i=0;i<8;i++)
{
SCL = 1;
somenop;
da <<= 1;
if(SDA)
da |= 0x01;
SCL = 0;
somenop;
}
return da;
}
unsigned charE2Read(unsigned char addr)
{
unsigned char str;
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(addr);
IIC_WaitAck();
IIC_Start();
IIC_SendByte(0xa1);
IIC_WaitAck();
str =IIC_RecByte();
IIC_WaitAck();
IIC_Stop();
return str;
}
voidE2Write(unsigned char str,unsigned char addr)
{
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(addr);
IIC_WaitAck();
IIC_SendByte(str);
IIC_WaitAck();
IIC_Stop();
|
-
20.png
(667.69 KB, 下載次數(shù): 112)
下載附件
2020-1-4 13:21 上傳
-
19.png
(841.69 KB, 下載次數(shù): 120)
下載附件
2020-1-4 13:21 上傳
-
18.png
(593.47 KB, 下載次數(shù): 111)
下載附件
2020-1-4 13:21 上傳
-
17.png
(176.37 KB, 下載次數(shù): 96)
下載附件
2020-1-4 13:21 上傳
-
16.png
(215.24 KB, 下載次數(shù): 116)
下載附件
2020-1-4 13:21 上傳
-
15.png
(17.52 KB, 下載次數(shù): 98)
下載附件
2020-1-4 13:21 上傳
-
14.png
(12.67 KB, 下載次數(shù): 101)
下載附件
2020-1-4 13:21 上傳
-
13.png
(12.02 KB, 下載次數(shù): 108)
下載附件
2020-1-4 13:21 上傳
-
12.png
(18.35 KB, 下載次數(shù): 104)
下載附件
2020-1-4 13:21 上傳
-
11.png
(41.59 KB, 下載次數(shù): 107)
下載附件
2020-1-4 13:21 上傳
-
10.png
(56.42 KB, 下載次數(shù): 107)
下載附件
2020-1-4 13:21 上傳
-
9.png
(58.42 KB, 下載次數(shù): 110)
下載附件
2020-1-4 13:21 上傳
-
8.png
(70.48 KB, 下載次數(shù): 103)
下載附件
2020-1-4 13:21 上傳
-
7.png
(148.07 KB, 下載次數(shù): 112)
下載附件
2020-1-4 13:21 上傳
-
6.png
(129.96 KB, 下載次數(shù): 106)
下載附件
2020-1-4 13:21 上傳
-
5.png
(258.54 KB, 下載次數(shù): 109)
下載附件
2020-1-4 13:21 上傳
-
4.png
(45.37 KB, 下載次數(shù): 105)
下載附件
2020-1-4 13:21 上傳
-
3.png
(24.73 KB, 下載次數(shù): 104)
下載附件
2020-1-4 13:18 上傳
-
2.png
(51.46 KB, 下載次數(shù): 109)
下載附件
2020-1-4 13:10 上傳
-
1.png
(25.87 KB, 下載次數(shù): 116)
下載附件
2020-1-4 13:08 上傳
|