




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、(此文檔為word格式,下載后您可任意編輯修改!)單片機(jī)最小系統(tǒng)一、 摘要:單片機(jī)最小系統(tǒng)設(shè)計(jì)主要在STC89C52單片機(jī)上擴(kuò)展I/O口,用ZLG7290芯片擴(kuò)展鍵盤和8段數(shù)碼管顯示接口,用TLC5615和TLC1549芯片進(jìn)行數(shù)/模間轉(zhuǎn)換,液晶連接單片機(jī)I/O口。軟件編程控制數(shù)碼管顯示、液晶顯示、數(shù)/模間轉(zhuǎn)換。二、 關(guān)鍵字:STC89C52、TLC5615、TLC1549、ZLG7290、按鍵、LED、LCD、8段數(shù)碼管。 目錄1. 設(shè)計(jì) 31.1 主要芯片簡介 3 1.1.1 ZLG7290芯片 1.1.2 TLC5615芯片 1.1.3 TLC1549芯片 1.2 目的要求 3 1.2.
2、1 目的 4 1.2.2 任務(wù) 42. 系統(tǒng)原理 4 2.1 電源 4 2.2 復(fù)位及時(shí)鐘電路 4 2.3 八段數(shù)碼顯示管 5 2.4 液晶顯示電路 5 2.5 按鍵電路 6 2.6 AD/DA轉(zhuǎn)換電路 3. 具體步驟 4 設(shè)計(jì)總結(jié) 5. 軟件設(shè)計(jì) 6. 參考文獻(xiàn) 附錄1 材料清單 1.設(shè)計(jì)1.1主要芯片簡介 1.1.1 ZLG72901. 直接驅(qū)動 8位共陰式數(shù)碼管(1 英寸以下)或 64只獨(dú)立的 LED; 2. 能夠管理多達(dá) 64 只按鍵,自動消除抖動,其中有 8 只可以作為功能鍵使用; 3. 段電流可達(dá) 20mA,位電流可達(dá) 100mA以上; 4. 利用功率電路可以方便地驅(qū)動 1 英寸以
3、上的大型數(shù)碼管; 5. 具有閃爍、段點(diǎn)亮、段熄滅、功能鍵、連擊鍵計(jì)數(shù)等強(qiáng)大功能; 6. 提供有10種數(shù)字和21種字母的譯碼顯示功能, 或者直接向顯示緩存寫入顯示數(shù)據(jù); 7. 不接數(shù)碼管而僅使用鍵盤管理功能時(shí),工作電流可降至 1mA; 8. 與微控制器之間采用 I2C串行總線接口,只需兩根信號線,節(jié)省 I/O資源; 9. 工作電壓范圍:3.35.5V; 10. 工作溫度范圍:4085; 11. 封裝:DIP-24(窄體) ,SOP-24。1.1.2 TLC5615 TLC5615是一個(gè)串行10位DAC芯片。只需要3根串行總線就可以完成10位數(shù)據(jù)的串行輸入,易于和工業(yè)標(biāo)準(zhǔn)的微控制器或微處理器接口,
4、適用于電池供電的測試儀表、移動電話,也適用于數(shù)字的失調(diào)與增益調(diào)整以及工業(yè)控制場合。其主要特點(diǎn)如下:1、 單5V電源工作2、 3線串行接口3、 高阻抗基準(zhǔn)輸入端4、 DAC輸出的最大電壓為2倍的基準(zhǔn)輸入電壓5、 上電時(shí)內(nèi)部自動復(fù)位6、 微功耗,最大功耗為1.75mW7、 轉(zhuǎn)換速率快,更新速率為1.21MHZ1.1.3 TLC1549TLC1549是一個(gè)具有串行控制、連續(xù)逐漸逼近型的模數(shù)轉(zhuǎn)換器,它采用兩個(gè)差分基準(zhǔn)電壓高阻輸入和一個(gè)三態(tài)輸出構(gòu)成三態(tài)接口。1、 電源電壓范圍:-0.5V6V2、 125攝氏度輸入電壓范圍:-0.3VCC+0.3V3、 輸出電壓范圍:-0.3VCC+0.3V4、 正基準(zhǔn)電
5、壓:VCC+0.1V5、 負(fù)基準(zhǔn)電壓:-0.1V6、 峰值輸入電流:+20mA或-20mA7、 峰值總輸入電流:+30mA或-30mA1.2 目的要求1.2.1 目的:通過對單片機(jī)最小系統(tǒng)的研究, 掌握單片機(jī)各引腳功能,理解單片機(jī)工作過程及原理,以及與各種外部擴(kuò)展器件的連接,能夠自己運(yùn)用單片機(jī)來解決實(shí)際問題。1.2.2 任務(wù):根據(jù)單片機(jī)最小系統(tǒng)的連接說明圖,完成單片機(jī)最小系統(tǒng)的焊接以及調(diào)試。掌握keil 等單片機(jī)相關(guān)軟件的使用。理解小系統(tǒng)的工作原理,掌握實(shí)際運(yùn)用單片機(jī)小系統(tǒng)。2. 系統(tǒng)原理電路是由電源、復(fù)位電路、八段數(shù)碼管顯示電路、按鍵及LED電路、LCD電路、AD/DA轉(zhuǎn)換電路等部分組成。2
6、.1 電源 5V電源電路圖2.2 復(fù)位及時(shí)鐘電路 復(fù)位及時(shí)鐘電路圖復(fù)位電路由按鍵復(fù)位和上電復(fù)位兩部分組成。STC89系列單片機(jī)為高電平復(fù)位,通常在復(fù)位引腳RST上連接一個(gè)電容到VCC,再連接一個(gè)電阻到GND,由此形成一個(gè)RC充放電回路保證單片機(jī)在上電時(shí)RST腳上有足夠時(shí)間的高電平進(jìn)行復(fù)位,隨后回歸到低電平進(jìn)入正常工作狀態(tài),這個(gè)電阻和電容的典型值為8.2K和10uF。STC89C52RC使用12MHz的晶體振蕩器作為振蕩源,由于單片機(jī)內(nèi)部帶有振蕩電路,所以外部只要連接一個(gè)晶振和兩個(gè)電容即可,電容容量一般在15pF至50pF之間。 2.3 八段數(shù)碼顯示管 數(shù)碼管電路圖電路包含兩個(gè)共陰8段數(shù)碼管顯示
7、器,使用動態(tài)掃描方式驅(qū)動。共陰極作為位選有PNP三極管驅(qū)動連接ZLG7290的SEG(AG),八位段選在通過220限流后連接在ZLG7290的Dig(07)上。由于數(shù)碼管是共陰的,所以當(dāng)驅(qū)動信號為1時(shí)對應(yīng)的數(shù)碼管才點(diǎn)亮。2.4 液晶顯示電路 液晶電路電路采用12864液晶顯示器,液晶的D(07)數(shù)據(jù)線連接在單片機(jī)的P0口上。RS、WR、LCDEN、RD連接在P1.2、P1.3、P1.4、P1.5上2.5 按鍵電路按鍵電路圖4個(gè)獨(dú)立按鍵使用10K電阻上拉后連接到單片機(jī)的P3.2-P3.5口。按鍵沒有按下時(shí)口線上因?yàn)樯侠尸F(xiàn)高電平,當(dāng)某個(gè)按鍵按下時(shí)對應(yīng)口線會被連接到GND而變成低電平。另外由于L
8、ED的反向截止特性以及按鍵上拉較弱,P2口及P3.2-P3.5口亦可以兼做通用IO口使用,用來連接外部器件。MCS51 Lite板上也提供了插針方便連接。 2.6 AD/DA轉(zhuǎn)換器AD/DA轉(zhuǎn)換器電路圖OUTPUT為模擬數(shù)據(jù)輸出引腳,SCLK為讀寫時(shí)鐘輸入,INPUT是數(shù)據(jù)輸入引腳,DOUT為輸入輸出引腳。CS為芯片使能。 3. 具體步驟3.1 先按照說明書的器件規(guī)格要求,找到每個(gè)位置對應(yīng)的具體器件,特別是電阻和三極管的大小,單片機(jī)等各個(gè)芯片的缺口要與板子對應(yīng)。3.2 按照對應(yīng)的器件把器件牢固的焊接到板子對應(yīng)的焊盤上,要注意不要讓針腳脫落。3.3 使用單片機(jī)編程軟件keil 編寫調(diào)試所用的程序
9、,比如數(shù)碼管、AD/DA轉(zhuǎn)換、液晶顯示。3.4 檢測完所有模塊沒有問題就說明單片機(jī)最小系統(tǒng)制作完成,然后撰寫課程設(shè)計(jì)報(bào)告。六、 設(shè)計(jì)總結(jié)單片機(jī)最小系統(tǒng)經(jīng)過我們一段時(shí)間的焊接、調(diào)試,終于能夠達(dá)到預(yù)定的功能,雖然只是簡單的焊接和調(diào)試,但從中我們也接觸了不少的關(guān)于單片機(jī)的知識。此次課程設(shè)計(jì)讓我對單片機(jī)有了初步的認(rèn)識,能夠了解單片機(jī)工作的模式和具體過程,明白了怎樣利用單片機(jī)來設(shè)計(jì)滿足自己設(shè)定功能的作品,怎樣利用單片機(jī)來控制系統(tǒng)。同時(shí),這也讓我了解到怎樣進(jìn)行單片機(jī)編程。還有就是通過具體焊接過程掌握了焊接的技巧,鍛煉了自己的焊接能力。掌握了這些就可以在大學(xué)期間利用單片機(jī)最小系統(tǒng)來拓展功能,制作自己想做的東
10、西,對科研立項(xiàng)等活動有很大的幫助作用。七、 軟件設(shè)計(jì) /*I2C.h標(biāo)準(zhǔn)80C51單片機(jī)模擬I2C總線的主機(jī)程序頭文件Copyright (c) 2005,廣州周立功單片機(jī)發(fā)展有限公司All rights reserved.本程序僅供學(xué)習(xí)參考,不提供任何可靠性方面的擔(dān)保;請勿用于商業(yè)目的*/#ifndef _I2C_H_#define _I2C_H_#include <reg52.h>/模擬I2C總線的引腳定義sbit I2C_SCL = P11;sbit I2C_SDA = P10;/定義I2C總線時(shí)鐘的延時(shí)值,要根據(jù)實(shí)際情況修改,取值1255/SCL信號周期約為(I2C_DEL
11、AY_VALUE*4+15)個(gè)機(jī)器周期#define I2C_DELAY_VALUE12/定義I2C總線停止后在下一次開始之前的等待時(shí)間,取值165535/等待時(shí)間約為(I2C_STOP_WAIT_VALUE*8)個(gè)機(jī)器周期/對于多數(shù)器件取值為1即可;但對于某些器件來說,較長的延時(shí)是必須的#define I2C_STOP_WAIT_VALUE120/I2C總線初始化,使總線處于空閑狀態(tài)void I2C_Init();/I2C總線綜合發(fā)送函數(shù),向從機(jī)發(fā)送多個(gè)字節(jié)的數(shù)據(jù)bit I2C_Puts(unsigned char SlaveAddr,unsigned int SubAddr,unsigne
12、d char SubMod,char *dat,unsigned int Size);/I2C總線綜合接收函數(shù),從從機(jī)接收多個(gè)字節(jié)的數(shù)據(jù)bit I2C_Gets(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char *dat,unsigned int Size);#endif/_I2C_H_/*ZLG7290.h數(shù)碼管顯示與鍵盤管理芯片ZLG7290的標(biāo)準(zhǔn)80C51驅(qū)動程序頭文件Copyright (c) 2005,廣州周立功單片機(jī)發(fā)展有限公司All rights reserved.本程序僅供學(xué)習(xí)參考,不提
13、供任何可靠性方面的擔(dān)保;請勿用于商業(yè)目的*/#ifndef _ZLG7290_H_#define _ZLG7290_H_#include <reg52.h>/ZLG7290中斷請求信號的引腳定義sbit ZLG7290_pinINT = P32;/定義ZLG7290在I2C總線協(xié)議中的從機(jī)地址/這是7位純地址,不含讀寫位#define ZLG7290_I2C_ADDR0x38/定義ZLG7290內(nèi)部寄存器地址(子地址)#define ZLG7290_SystemReg0x00/系統(tǒng)寄存器#define ZLG7290_Key0x01/鍵值寄存器#define ZLG7290_Rep
14、eatCnt0x02/連擊次數(shù)寄存器#define ZLG7290_FunctionKey0x03/功能鍵寄存器#define ZLG7290_CmdBuf0x07/命令緩沖區(qū)起始地址#define ZLG7290_CmdBuf00x07/命令緩沖區(qū)0#define ZLG7290_CmdBuf10x08/命令緩沖區(qū)1#define ZLG7290_FlashOnOff0x0C/閃爍控制寄存器#define ZLG7290_ScanNum0x0D/掃描位數(shù)寄存器#define ZLG7290_DpRam0x10/顯示緩存起始地址#define ZLG7290_DpRam00x10/顯示緩存0#
15、define ZLG7290_DpRam10x11/顯示緩存1#define ZLG7290_DpRam20x12/顯示緩存2#define ZLG7290_DpRam30x13/顯示緩存3#define ZLG7290_DpRam40x14/顯示緩存4#define ZLG7290_DpRam50x15/顯示緩存5#define ZLG7290_DpRam60x16/顯示緩存6#define ZLG7290_DpRam70x17/顯示緩存7/向ZLG7290的某個(gè)內(nèi)部寄存器寫入數(shù)據(jù)bit ZLG7290_WriteReg(unsigned char RegAddr, char dat);/從
16、ZLG7290的某個(gè)內(nèi)部寄存器讀出數(shù)據(jù)bit ZLG7290_ReadReg(unsigned char RegAddr, char *dat);/向ZLG7290發(fā)送控制命令bit ZLG7290_cmd(char cmd0, char cmd1);/段尋址,單獨(dú)點(diǎn)亮或熄滅數(shù)碼管(或LED)中的某一段bit ZLG7290_SegOnOff(char seg, bit b);/下載數(shù)據(jù)并譯碼bit ZLG7290_Download(char addr, bit dp, bit flash, char dat);/閃爍控制指令(Fn應(yīng)當(dāng)是字節(jié)型)/Fn的8個(gè)位分別控制數(shù)碼管的8個(gè)位是否閃爍,0
17、不閃爍,1閃爍#define ZLG7290_Flash(Fn) ZLG7290_cmd(0x70,(Fn)#endif /_ZLG7290_H_#ifndef _TLC5615_H_#define _TLC5615_H_#include <reg52.h>sbit cs = P12; /片選sbit clk = P13; /時(shí)鐘sbit din = P14; /數(shù)據(jù)入口/sbit dout = P35; /數(shù)據(jù)出口extern void DA_Conver(unsigned int DAValue);extern void delayda();#endif#ifndef _TLC
18、1549_H_#define _TLC1549_H_sbit AD_CS = P17; sbit AD_DAT = P16; sbit AD_CLK = P15;extern void TLC1549();#endif/*ZLG7290.c數(shù)碼管顯示與鍵盤管理芯片ZLG7290的標(biāo)準(zhǔn)80C51驅(qū)動程序C文件Copyright (c) 2005,廣州周立功單片機(jī)發(fā)展有限公司All rights reserved.本程序僅供學(xué)習(xí)參考,不提供任何可靠性方面的擔(dān)保;請勿用于商業(yè)目的*/#include "I2C.h"#include "ZLG7290.h"/*函
19、數(shù):ZLG7290_WriteReg()功能:向ZLG7290的某個(gè)內(nèi)部寄存器寫入數(shù)據(jù)參數(shù):RegAddr:ZLG7290的內(nèi)部寄存器地址dat:要寫入的數(shù)據(jù)返回:0:正常1:訪問ZLG7290時(shí)出現(xiàn)異常*/bit ZLG7290_WriteReg(unsigned char RegAddr, char dat)bit b;b = I2C_Puts(ZLG7290_I2C_ADDR,RegAddr,1,&dat,1);return b;/*函數(shù):ZLG7290_ReadReg()功能:從ZLG7290的某個(gè)內(nèi)部寄存器讀出數(shù)據(jù)參數(shù):RegAddr:ZLG7290的內(nèi)部寄存器地址*dat:
20、保存讀出的數(shù)據(jù)返回:0:正常1:訪問ZLG7290時(shí)出現(xiàn)異常*/bit ZLG7290_ReadReg(unsigned char RegAddr, char *dat)bit b;b = I2C_Gets(ZLG7290_I2C_ADDR,RegAddr,1,dat,1);return b;/*函數(shù):ZLG7290_cmd()功能:向ZLG7290發(fā)送控制命令參數(shù):cmd0:寫入CmdBuf0寄存器的命令字(第1字節(jié))cmd1:寫入CmdBuf1寄存器的命令字(第2字節(jié))返回:0:正常1:訪問ZLG7290時(shí)出現(xiàn)異常*/bit ZLG7290_cmd(char cmd0, char cmd1
21、)bit b;char buf2;buf0 = cmd0;buf1 = cmd1;b = I2C_Puts(ZLG7290_I2C_ADDR,ZLG7290_CmdBuf,1,buf,2);return b;/*函數(shù):ZLG7290_SegOnOff()功能:段尋址,單獨(dú)點(diǎn)亮或熄滅數(shù)碼管(或LED)中的某一段參數(shù):seg:取值063,表示數(shù)碼管(或LED)的段號b:0表示熄滅,1表示點(diǎn)亮返回:0:正常1:訪問ZLG7290時(shí)出現(xiàn)異常說明:在每一位數(shù)碼管中,段號順序按照“a,b,c,d,e,f,g,dp”進(jìn)行*/bit ZLG7290_SegOnOff(char seg, bit b)char
22、cmd;cmd = seg & 0x3F;if ( b ) cmd |= 0x80;return ZLG7290_cmd(0x01,cmd);/*函數(shù):ZLG7290_Download()功能:下載數(shù)據(jù)并譯碼參數(shù):addr:取值07,顯示緩存DpRam0DpRam7的編號dp:是否點(diǎn)亮該位的小數(shù)點(diǎn),0熄滅,1點(diǎn)亮flash:控制該位是否閃爍,0不閃爍,1閃爍dat:取值031,表示要顯示的數(shù)據(jù)返回:0:正常1:訪問ZLG7290時(shí)出現(xiàn)異常說明:顯示數(shù)據(jù)具體的譯碼方式請參見ZLG7290的數(shù)據(jù)手冊*/bit ZLG7290_Download(char addr, bit dp, bit
23、flash, char dat)char cmd0;char cmd1;cmd0 = addr & 0x0F;cmd0 |= 0x60;cmd1 = dat & 0x1F;if ( dp ) cmd1 |= 0x80;if ( flash ) cmd1 |= 0x40;return ZLG7290_cmd(cmd0,cmd1);/*I2C.c標(biāo)準(zhǔn)80C51單片機(jī)模擬I2C總線的主機(jī)程序Copyright (c) 2005,廣州周立功單片機(jī)發(fā)展有限公司All rights reserved.本程序僅供學(xué)習(xí)參考,不提供任何可靠性方面的擔(dān)保;請勿用于商業(yè)目的*/#include &q
24、uot;I2C.h"/定義延時(shí)變量,用于宏I2C_Delay()unsigned char data I2C_Delay_t;/*宏定義:I2C_Delay()功能:延時(shí),模擬I2C總線專用*/#define I2C_Delay()I2C_Delay_t = (I2C_DELAY_VALUE);while ( -I2C_Delay_t != 0 );/*函數(shù):I2C_Init()功能:I2C總線初始化,使總線處于空閑狀態(tài)說明:在main()函數(shù)的開始處,通常應(yīng)當(dāng)要執(zhí)行一次本函數(shù)*/void I2C_Init()I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I
25、2C_Delay();/*函數(shù):I2C_Start()功能:產(chǎn)生I2C總線的起始狀態(tài)說明:SCL處于高電平期間,當(dāng)SDA出現(xiàn)下降沿時(shí)啟動I2C總線不論SDA和SCL處于什么電平狀態(tài),本函數(shù)總能正確產(chǎn)生起始狀態(tài)本函數(shù)也可以用來產(chǎn)生重復(fù)起始狀態(tài)本函數(shù)執(zhí)行后,I2C總線處于忙狀態(tài)*/void I2C_Start()I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 0;I2C_Delay();I2C_SCL = 0;I2C_Delay();/*函數(shù):I2C_Write()功能:向I2C總線寫1個(gè)字節(jié)的數(shù)據(jù)參數(shù):dat:要寫到總線上的數(shù)據(jù)
26、*/void I2C_Write(char dat)unsigned char t = 8;doI2C_SDA = (bit)(dat & 0x80);dat <<= 1;I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay(); while ( -t != 0 );/*函數(shù):I2C_Read()功能:從從機(jī)讀取1個(gè)字節(jié)的數(shù)據(jù)返回:讀取的一個(gè)字節(jié)數(shù)據(jù)*/char I2C_Read()char dat;unsigned char t = 8;I2C_SDA = 1;/在讀取數(shù)據(jù)之前,要把SDA拉高doI2C_SCL = 1;I2C_Del
27、ay();dat <<= 1;if ( I2C_SDA ) dat |= 0x01;I2C_SCL = 0;I2C_Delay(); while ( -t != 0 );return dat;/*函數(shù):I2C_GetAck()功能:讀取從機(jī)應(yīng)答位返回:0:從機(jī)應(yīng)答1:從機(jī)非應(yīng)答說明:從機(jī)在收到每個(gè)字節(jié)的數(shù)據(jù)后,要產(chǎn)生應(yīng)答位從機(jī)在收到最后1個(gè)字節(jié)的數(shù)據(jù)后,一般要產(chǎn)生非應(yīng)答位*/bit I2C_GetAck()bit ack;I2C_SDA = 1;I2C_Delay();I2C_SCL = 1;I2C_Delay();ack = I2C_SDA;I2C_SCL = 0;I2C_Del
28、ay();return ack;/*函數(shù):I2C_PutAck()功能:主機(jī)產(chǎn)生應(yīng)答位或非應(yīng)答位參數(shù):ack=0:主機(jī)產(chǎn)生應(yīng)答位ack=1:主機(jī)產(chǎn)生非應(yīng)答位說明:主機(jī)在接收完每一個(gè)字節(jié)的數(shù)據(jù)后,都應(yīng)當(dāng)產(chǎn)生應(yīng)答位主機(jī)在接收完最后一個(gè)字節(jié)的數(shù)據(jù)后,應(yīng)當(dāng)產(chǎn)生非應(yīng)答位*/void I2C_PutAck(bit ack)I2C_SDA = ack;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SCL = 0;I2C_Delay();/*函數(shù):I2C_Stop()功能:產(chǎn)生I2C總線的停止?fàn)顟B(tài)說明:SCL處于高電平期間,當(dāng)SDA出現(xiàn)上升沿時(shí)停止I2C總線不論SDA和SCL
29、處于什么電平狀態(tài),本函數(shù)總能正確產(chǎn)生停止?fàn)顟B(tài)本函數(shù)執(zhí)行后,I2C總線處于空閑狀態(tài)*/void I2C_Stop()unsigned int t = I2C_STOP_WAIT_VALUE;I2C_SDA = 0;I2C_Delay();I2C_SCL = 1;I2C_Delay();I2C_SDA = 1;I2C_Delay();while ( -t != 0 );/在下一次產(chǎn)生Start之前,要加一定的延時(shí)/*函數(shù):I2C_Puts()功能:I2C總線綜合發(fā)送函數(shù),向從機(jī)發(fā)送多個(gè)字節(jié)的數(shù)據(jù)參數(shù):SlaveAddr:從機(jī)地址(7位純地址,不含讀寫位)SubAddr:從機(jī)的子地址SubMod:子
30、地址模式,0無子地址,1單字節(jié)子地址,2雙字節(jié)子地址*dat:要發(fā)送的數(shù)據(jù)Size:數(shù)據(jù)的字節(jié)數(shù)返回:0:發(fā)送成功1:在發(fā)送過程中出現(xiàn)異常說明:本函數(shù)能夠很好地適應(yīng)所有常見的I2C器件,不論其是否有子地址當(dāng)從機(jī)沒有子地址時(shí),參數(shù)SubAddr任意,而SubMod應(yīng)當(dāng)為0*/bit I2C_Puts(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char *dat,unsigned int Size)/定義臨時(shí)變量unsigned char i;char a3;/檢查長度if ( Size = 0 ) retu
31、rn 0;/準(zhǔn)備從機(jī)地址a0 = (SlaveAddr << 1);/檢查子地址模式if ( SubMod > 2 ) SubMod = 2;/確定子地址switch ( SubMod )case 0:break;case 1:a1 = (char)(SubAddr);break;case 2:a1 = (char)(SubAddr >> 8);a2 = (char)(SubAddr);break;default:break;/發(fā)送從機(jī)地址,接著發(fā)送子地址(如果有子地址的話)SubMod+;I2C_Start();for ( i=0; i<SubMod; i
32、+ )I2C_Write(ai);if ( I2C_GetAck() )I2C_Stop();return 1;/發(fā)送數(shù)據(jù)doI2C_Write(*dat+);if ( I2C_GetAck() ) break; while ( -Size != 0 );/發(fā)送完畢,停止I2C總線,并返回結(jié)果I2C_Stop();if ( Size = 0 )return 0;elsereturn 1;/*函數(shù):I2C_Gets()功能:I2C總線綜合接收函數(shù),從從機(jī)接收多個(gè)字節(jié)的數(shù)據(jù)參數(shù):SlaveAddr:從機(jī)地址(7位純地址,不含讀寫位)SubAddr:從機(jī)的子地址SubMod:子地址模式,0無子地址,
33、1單字節(jié)子地址,2雙字節(jié)子地址*dat:保存接收到的數(shù)據(jù)Size:數(shù)據(jù)的字節(jié)數(shù)返回:0:接收成功1:在接收過程中出現(xiàn)異常說明:本函數(shù)能夠很好地適應(yīng)所有常見的I2C器件,不論其是否有子地址當(dāng)從機(jī)沒有子地址時(shí),參數(shù)SubAddr任意,而SubMod應(yīng)當(dāng)為0*/bit I2C_Gets(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char *dat,unsigned int Size)/定義臨時(shí)變量unsigned char i;char a3;/檢查長度if ( Size = 0 ) return 0;/準(zhǔn)備從
34、機(jī)地址a0 = (SlaveAddr << 1);/檢查子地址模式if ( SubMod > 2 ) SubMod = 2;/如果是有子地址的從機(jī),則要先發(fā)送從機(jī)地址和子地址if ( SubMod != 0 )/確定子地址if ( SubMod = 1 )a1 = (char)(SubAddr);elsea1 = (char)(SubAddr >> 8);a2 = (char)(SubAddr);/發(fā)送從機(jī)地址,接著發(fā)送子地址SubMod+;I2C_Start();for ( i=0; i<SubMod; i+ )I2C_Write(ai);if ( I2C
35、_GetAck() )I2C_Stop();return 1;/這里的I2C_Start()對于有子地址的從機(jī)是重復(fù)起始狀態(tài)/對于無子地址的從機(jī)則是正常的起始狀態(tài)I2C_Start();/發(fā)送從機(jī)地址I2C_Write(a0+1);if ( I2C_GetAck() )I2C_Stop();return 1;/接收數(shù)據(jù)for (;)*dat+ = I2C_Read();if ( -Size = 0 )I2C_PutAck(1);break;I2C_PutAck(0);/接收完畢,停止I2C總線,并返回結(jié)果I2C_Stop();return 0;#include<reg52.h>#i
36、nclude <intrins.h>#include "I2C.h"#include "ZLG7290.h"#include "tlc5615.h"#include "tlc1549.h"#define uchar unsigned char#define uint unsigned int#define delayNOP(); _nop_();_nop_();_nop_();_nop_();#define LCD_data P0 #define CLEAR_SCREEN 0x01 /清屏指令:清屏且A
37、C值為00H#define AC_INIT 0x02 /將AC設(shè)置為00H。且游標(biāo)移到原點(diǎn)位置#define CURSE_ADD 0x06 /設(shè)定游標(biāo)移到方向及圖像整體移動方向(默認(rèn)游標(biāo)右移,圖像整體不動)#define FUN_MODE 0x30 /工作模式:8位基本指令集#define DISPLAY_ON 0x0c /顯示開,顯示游標(biāo),且游標(biāo)位置反白#define DISPLAY_OFF 0x08 /顯示關(guān)#define CURSE_DIR 0x14 /游標(biāo)向右移動:AC=AC+1#define SET_CG_AC 0x40 /設(shè)置AC,范圍為:00H3FH#define SET_DD_
38、AC 0x80#define FUN_MODEK 0x36 /擴(kuò)展指令集,8位指令#define X1address 0x80 /上半屏X軸起始地址#define X2address 0x88 /下半屏X軸起始地址#define Yaddress 0x80 /Y軸起始地址extern unsigned int AD_Temp;volatile bit FlagINT = 0;sbit LCD_RS = P24; /寄存器選擇輸入 sbit LCD_RW = P25; /液晶讀/寫控制sbit LCD_EN = P26; uchar IRDIS2;uchar IRCOM4;void delay0
39、(uchar x); /x*0.14MSvoid dataconv();void lcd_pos(uchar X,uchar Y);uchar i=100;unsigned char KeyValue;unsigned char RepeatCnt;unsigned char FnKeyValue;uchar flat;uint A1,A2,A3,A4;uint n;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar idata shuma
40、8=0;uchar datetime8;uchar code towday6="今天是" uchar code caiyangshuju13="采樣的數(shù)據(jù)是:" uchar code nian2="年"uchar code yue2="月"uchar code ri2="日"uchar code shuzi10='0','1','2','3','4','5','6','7
41、9;,'8','9'uchar idata nianyueri416;uchar code photo1=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
42、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
43、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
44、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
45、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
46、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
47、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
48、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
49、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,; uchar code photo2=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
50、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0
51、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綠色環(huán)保內(nèi)衣研究-深度研究
- 商業(yè)房地產(chǎn)銷售合同范例
- 針對性地理信息挖掘算法-深度研究
- 石灰石膏綠色環(huán)保認(rèn)證-深度研究
- 高強(qiáng)度間歇訓(xùn)練心肺效益-深度研究
- 智能城市中的物理空間設(shè)計(jì)-深度研究
- NPS提升策略研究-深度研究
- 2025至2030年中國埋地管道重防腐靜電噴涂設(shè)備數(shù)據(jù)監(jiān)測研究報(bào)告
- 統(tǒng)編版二年級語文下冊第八單元達(dá)標(biāo)測試卷(含答案)
- 上海市曹楊二中2024-2025學(xué)年高二上學(xué)期期末考試化學(xué)試卷(含答案)
- 2025復(fù)工復(fù)產(chǎn)安全教育培訓(xùn)
- 中國高血壓防治指南(2024年修訂版)
- 眼鏡學(xué)智慧樹知到答案2024年溫州醫(yī)科大學(xué)
- 閃耀明天 二聲部合唱簡譜
- Q∕SY 01128-2020 錄井資料采集處理解釋規(guī)范
- CPK計(jì)算表格EXCEL模板
- 人教部編版九年級歷史上冊第4課 希臘城邦和亞歷山大帝國(共26張PPT)
- 主要用能設(shè)備臺賬
- 《中國河流和湖泊》填圖
- 全民所有制企事業(yè)單位專業(yè)技術(shù)人員和管理人員辭職暫行規(guī)定
- 案防工作管理辦法銀行
評論
0/150
提交評論