單片機(jī)雙機(jī)通信系統(tǒng)-畢業(yè)論文設(shè)計(jì).doc
《單片機(jī)雙機(jī)通信系統(tǒng)-畢業(yè)論文設(shè)計(jì).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《單片機(jī)雙機(jī)通信系統(tǒng)-畢業(yè)論文設(shè)計(jì).doc(30頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 成都信息工程學(xué)院電子工程學(xué)院成都信息工程學(xué)院電子工程學(xué)院 電子技術(shù)綜合設(shè)計(jì) 總結(jié)報(bào)告總結(jié)報(bào)告 題題 目:目: 單片機(jī)雙機(jī)通信系統(tǒng)單片機(jī)雙機(jī)通信系統(tǒng) 專專 業(yè):業(yè): 生物醫(yī)學(xué)工程生物醫(yī)學(xué)工程 班班 級(jí):級(jí): 2012 級(jí)級(jí) 1 班班 姓姓 名:名: 指導(dǎo)教師:指導(dǎo)教師: 胡老師胡老師 評(píng)評(píng) 分:分: 2014 年 12 月 20 日 目錄目錄 1 1項(xiàng)目計(jì)劃項(xiàng)目計(jì)劃 1 1 1.1 項(xiàng)目背景 1 1.2 方案設(shè)計(jì)可行性分析 1 1.2.1 需求分析 .1 1.2.2 可行性分析 .1 1.3 項(xiàng)目執(zhí)行計(jì)劃 2 2 2設(shè)計(jì)說明設(shè)計(jì)說明 3 3 2.1 方案設(shè)計(jì) 3 2.2 硬件設(shè)計(jì)原理 4 2.
2、2.1 單片機(jī)系統(tǒng) .4 2.2.2 DS1302 時(shí)鐘模塊 5 2.2.3 MAX232 電平轉(zhuǎn)換 6 2.2.4 數(shù)碼管顯示.7 2.2.5 按鍵模塊 .7 2.3 各單元模塊設(shè)計(jì)流程圖 8 2.3.1 硬件總設(shè)計(jì)框圖 .8 2.3.2 DS1302 程序設(shè)計(jì) 9 2.3.3 按鍵程序設(shè)計(jì).9 2.3.4 串口程序設(shè)計(jì) 11 3 3調(diào)試說明調(diào)試說明 1111 3.1 調(diào)試方法及步驟 .11 3.2 調(diào)試數(shù)據(jù) .12 3.3 故障分析 .14 3.4 設(shè)計(jì)注意事項(xiàng): .14 4 4總結(jié)總結(jié) 1515 5 5參考文獻(xiàn)參考文獻(xiàn) 1515 6 6附錄附錄 1616 單片機(jī)雙機(jī)通信系統(tǒng) 第 0 頁
3、1項(xiàng)目計(jì)劃 1.1項(xiàng)目背景 單片機(jī)作為微型計(jì)算機(jī)的一個(gè)分支,其功能強(qiáng)、體積小、應(yīng)用靈活等諸多 優(yōu)點(diǎn),在工業(yè)控制、儀器儀表、通信、家用電器和國際科技等各個(gè)領(lǐng)域得到廣 泛的應(yīng)用,隨著集成電路技術(shù)的不斷發(fā)展,單片機(jī)的性能也在不斷提高其應(yīng)用 的范圍必將越來越寬廣。然而,隨著單片機(jī)在工業(yè)自動(dòng)化控制、智能儀器中的 廣泛應(yīng)用,單片機(jī)已經(jīng)逐漸滿足需要,多機(jī)協(xié)同工作已經(jīng)成為重要的發(fā)展趨勢, 多機(jī)應(yīng)用的關(guān)鍵就在于多級(jí)之間的互相通信、互傳數(shù)據(jù)信息。單片機(jī)和計(jì)算機(jī) 的共同發(fā)展下,單片機(jī)的應(yīng)用從獨(dú)立的單片機(jī)向網(wǎng)絡(luò)發(fā)展,由計(jì)算機(jī)和單片機(jī) 構(gòu)成的多機(jī)網(wǎng)絡(luò)系統(tǒng)也是單片機(jī)技術(shù)發(fā)展的一個(gè)方向。 單片機(jī)多機(jī)通信是指由兩臺(tái)以上的單片
4、機(jī)組成的網(wǎng)絡(luò)結(jié)構(gòu),可以通過串行 通信方式共同實(shí)現(xiàn)對(duì)某一過程的最終控制。隨著計(jì)算機(jī)技術(shù)的發(fā)展,多機(jī)通信 技術(shù)也在不斷的發(fā)展,現(xiàn)在發(fā)展比較成熟的還有光纖通信等。由于計(jì)算機(jī)的飛 速發(fā)展和控制系統(tǒng)的復(fù)雜化,多機(jī)通信已經(jīng)越來越成為人們熱門話題之一。目 前,單片機(jī)多機(jī)通信的形式較多,但通常可分為星型、環(huán)型、串行總線型和主 從式多機(jī)型四種。 1.2方案設(shè)計(jì)可行性分析 1.2.1 需求分析 1.設(shè)計(jì)任務(wù) a.設(shè)計(jì)兩個(gè)單片機(jī)系統(tǒng); b.兩單片機(jī)之間可以進(jìn)行遠(yuǎn)距離通信; c.能夠通過數(shù)碼管顯示時(shí)間; d.能夠通過按鍵設(shè)置本機(jī)和對(duì)方的時(shí)間。 2.設(shè)計(jì)要求 a.基本要求:設(shè)計(jì)兩個(gè)小系統(tǒng),能實(shí)現(xiàn)有線互相通信(互設(shè)時(shí)間+
5、數(shù)據(jù)共享) 。 b.擴(kuò)展要求:遠(yuǎn)距離通信或無線通信,并能實(shí)現(xiàn)校驗(yàn)。 1.2.2 可行性分析 單片機(jī)雙機(jī)通信系統(tǒng) 第 1 頁 a. 市場可行性分析 單片機(jī)作為微型計(jì)算機(jī)的一個(gè)分支,其功能強(qiáng)、體積小、應(yīng)用靈活等諸多 優(yōu)點(diǎn),在工業(yè)控制、儀器儀表、通信、家用電器和國際科技等各個(gè)領(lǐng)域得到廣 泛的應(yīng)用。 b. 技術(shù)可行性分析 本項(xiàng)目在設(shè)計(jì)上思路簡單,已設(shè)計(jì)出合理的實(shí)際方案,可以實(shí)現(xiàn)基礎(chǔ)要求 和擴(kuò)展要求,并達(dá)到比較好的效果。 c. 資源可行性分析 資源有人力資源和材料資源,已考慮到各個(gè)階段所需人才類型及數(shù)量,完 全可以保證項(xiàng)目實(shí)施的有條不紊。 d. 經(jīng)濟(jì)成本可行性分析 本項(xiàng)目設(shè)計(jì)結(jié)構(gòu)簡單,材料在原理圖設(shè)計(jì)完
6、成后導(dǎo)師派發(fā)。材料易購,成 本還是較為合適。 e. 項(xiàng)目風(fēng)險(xiǎn)分析 從項(xiàng)目整體上來說考慮各方面較為全面,風(fēng)險(xiǎn)指數(shù)已經(jīng)降到最低,可以實(shí) 施。 1.3項(xiàng)目執(zhí)行計(jì)劃 下表為本項(xiàng)目進(jìn)行的時(shí)間進(jìn)度及人員分配情況: 表 1.1 工程進(jìn)度 工程名稱 工期(天) 開始時(shí)間提交時(shí)間人員安排 原理圖設(shè)計(jì)32014.10.082014.10.11彭躍秒 PCB 布局32014.10.162014.10.19彭躍秒 程序設(shè)計(jì)32014.10.202014.10.23鈕麗媛 設(shè)計(jì)說明書22014.10.022014.10.04張惠琳 安裝、調(diào)試22014.11.022014.11.04鈕麗媛 安裝調(diào)試說明書12014.1
7、1.142014.11.15張惠琳 項(xiàng)目提交12014.12.032014.12.03鈕麗媛 表 1.2 材料清單 序號(hào)名稱型號(hào)規(guī)格號(hào)位數(shù)量 1 單片機(jī)STC89C52RC40C(PDIP40) U1 2 片 2 接口芯片 MAX232CPEU2 2 片 3 四聯(lián)數(shù)碼管 3461ASSEG1 2 個(gè) 4 時(shí)鐘芯片 DS1302NLY1 2 個(gè) 單片機(jī)雙機(jī)通信系統(tǒng) 第 2 頁 5 二極管 D1 2 個(gè) 5 按鍵立式 6*6*5(4 腳黑)S1、S2、S36 個(gè) 6 電池 LITIUM CELLCR1220 3V 2 個(gè) 7 晶振11.0592MHz、32.765MHzY1、A14 個(gè) 8 電阻
8、10KR1 2 個(gè) 9 電解電容10uF、100uFC3、C64 個(gè) 10 瓷片電容30pF、104C5、C714 個(gè) 11 連接線DB9 公頭 1.5m DB9 1 根 12 上拉電阻 1KP1 2 個(gè) 11 底座DIP40、DIP16、DIP8U1、U2、NLY13 個(gè) 12 指示燈LED 顯示燈、紅 LED 2 個(gè) 13 排針若干 2設(shè)計(jì)說明 2.1方案設(shè)計(jì) 通過兩個(gè) STC89C52 單片機(jī)為核心設(shè)計(jì)通信系統(tǒng)。單片機(jī)都帶有串口,系 統(tǒng)要求遠(yuǎn)距離通信,所以有對(duì)外連接的串口相互之間的數(shù)據(jù)共享。單片機(jī)的并 行端口也能相互連接來進(jìn)行數(shù)據(jù)通信。要求互設(shè)時(shí)間,可以在 IO 口連接一時(shí)鐘 模塊,這里
9、選擇 DS1302 時(shí)鐘芯片實(shí)現(xiàn),需要用到按鍵對(duì)時(shí)間設(shè)置,顯示則各 自需要數(shù)碼管。 在本次設(shè)計(jì)中硬件部分:對(duì)于兩片 89C52 采用 RS232 進(jìn)行雙機(jī)通信硬件的 連接方法如圖所示。電平轉(zhuǎn)換芯片采用 MAX232,其連接一般采用雙絞線。發(fā) 送方的數(shù)據(jù)由串行口 TXD 段輸出,經(jīng)過電平轉(zhuǎn)換芯片 MAX232 將 TTL 電平轉(zhuǎn) 換為 RS232 電平輸出,經(jīng)過傳輸線將信號(hào)傳送到接收端。接收方也使用 MAX232 芯片進(jìn)行電平轉(zhuǎn)換后,信號(hào)到達(dá)接收方串行口的接收端。接受方接收 后在數(shù)碼管上顯示接收的信息。為提高抗干擾能力,還可以在輸入輸出端加光 耦合進(jìn)行光電隔離。 軟件部分:通過通信協(xié)議進(jìn)行發(fā)送和
10、接收。初始時(shí)兩個(gè)數(shù)碼管顯示初始值。 單片機(jī) A 對(duì) B 進(jìn)行時(shí)間設(shè)置前要先對(duì)自己設(shè)置時(shí)間,此時(shí)顯示標(biāo)志;設(shè)置之后 需對(duì) B 設(shè)時(shí)間,再顯示標(biāo)志開始。通過通信協(xié)議進(jìn)行發(fā)送接收,A 機(jī)在設(shè)置時(shí) 可在 B 機(jī)上同時(shí)看到顯示。與主機(jī)發(fā)送來的檢驗(yàn)和進(jìn)行比較,若檢驗(yàn)和相同則 發(fā)送字符給主機(jī) TXD AT89C52 RXD T2INT2OUT MAX232 R2OUT R2IN R2INT2IN MAX232 T2OUTR2OUT TXD AT89C52 RXD 單片機(jī)雙機(jī)通信系統(tǒng) 第 3 頁 2.2硬件設(shè)計(jì)原理 2.2.1 單片機(jī)系統(tǒng) STC89C52 芯片:有 8k 字節(jié) Flash,512 字節(jié) RA
11、M, 32 位 I/O 口線,看門 狗定時(shí)器,內(nèi)置 4KB EEPROM,MAX810 復(fù)位電路,3 個(gè) 16 位定時(shí)器/計(jì)數(shù)器, 4 個(gè)外部中斷,一個(gè) 7 向量 4 級(jí)中斷結(jié)構(gòu)(兼容傳統(tǒng) 51 的 5 向量 2 級(jí)中斷結(jié)構(gòu)) ,全雙工串行口??臻e模式下,CPU 停止工作,允許 RAM、定時(shí)器/計(jì)數(shù)器、 串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM 內(nèi)容被保存,振蕩器被凍結(jié),單 片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率 35MHz,6T/12T 可選。單片機(jī)有 32 根輸入/輸出線,組成 4 個(gè) 8 位并行輸入/輸 出接口,分別稱為 P0 口、P1 口、P2 口、P3 口。每
12、個(gè)接口都由鎖存器、輸出驅(qū) 動(dòng)器和輸入緩沖器組成。P0 口和 P2 口還可用于對(duì)外部存儲(chǔ)器訪問的地址和數(shù) 據(jù)總線。P0 口作為 I/O 接口使用時(shí),輸出級(jí)屬于開漏電路,必須接上拉電阻才 有高電平輸出。在 TXD 和 RXD 處接一個(gè)下載口下載程序。 單片機(jī)最小系統(tǒng)或稱為最小應(yīng)用系統(tǒng),是指利用單片機(jī)自身的資源,用最 少的輔助元件組成一個(gè)可以工作的系統(tǒng)。包括電源(地) 、晶振(一般使用 11.0592MHz 或者 12MHz)和復(fù)位電路。 圖 2.1 單片機(jī)最小系統(tǒng) 振蕩電路:如圖可見,由兩個(gè) 30pF 的電容與 11.0592MHz 的晶振構(gòu)成穩(wěn)定 單片機(jī)雙機(jī)通信系統(tǒng) 第 4 頁 的自激振蕩器,屬
13、于內(nèi)時(shí)鐘方式。這兩個(gè)電容對(duì)頻率有微調(diào)的作用,為減少寄 生電容,振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近。 復(fù)位電路:在 RST 復(fù)位輸入上接入 10uF 電容至 VCC 端,在接一個(gè) 10K 電阻接地,組成上電復(fù)位電路。上電原理是,在加電時(shí),Vcc 通過電容提供給 RST 端一個(gè)短暫的高電平信號(hào),此后該高電平信號(hào)隨 Vcc 對(duì)電容的充電過程而 逐漸回落,即 RST 高電平持續(xù)時(shí)間取決于電容的充電時(shí)間。上電時(shí),vcc 的上 升時(shí)間約為 10ms,而振蕩器的起振時(shí)間取決于振蕩頻率。 2.2.2 DS1302 時(shí)鐘模塊 芯片簡介:實(shí)時(shí)時(shí)鐘電路 DS1302 是一種具有涓細(xì)電流充電能力的電路, 主要
14、特點(diǎn)是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并 且可以關(guān)閉充電功能。采用普通 32.768kHz 晶振。工作電壓為 2.5V5.5V。本 項(xiàng)目采用三線接口通過 5、6、7 腳與 CPU 進(jìn)行同步通信。 DS1302 內(nèi)部有一個(gè) 318 的用于臨時(shí)性存放數(shù)據(jù)的 RAM 寄存器。 DS1302 的引腳排列,其中 Vcc2 為主電源,VCC1 為后備電源。在主電源關(guān) 閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302 由 Vcc1 或 Vcc2 兩者中的較 大者供電。當(dāng) Vcc2 大于 Vcc1+0.2V 時(shí),Vcc2 給 DS1302 供電。當(dāng) Vcc2 小于 Vcc1 時(shí),DS1
15、302 由 Vcc1 供電。RST 是復(fù)位/片選線,通過把 RST 輸入驅(qū)動(dòng)置 高電平來啟動(dòng)所有的數(shù)據(jù)傳送。當(dāng) RST 為高電平時(shí),所有的數(shù)據(jù)傳送被初始化, 允許對(duì) DS1302 進(jìn)行操作。如果在傳送過程中 RST 置為低電平,則會(huì)終止此次 數(shù)據(jù)傳送,I/O 引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在 Vcc2.0V 之前,RST 必須保 持低電平。只有在 SCLK 為低電平時(shí),才能將 RST 置為高電平。I/O 為串行數(shù) 圖 2.2DS1302 電路圖 據(jù)輸入輸出端(雙向)。 SCLK 為時(shí)鐘輸入端。 備用電源 Vcc1,可以用電池或者超級(jí)電容器(0.1F 以上)。如果要長時(shí)間保 證時(shí)鐘正常,選用小型充
16、電電池。可以用老式電腦主板上的 3.6V 充電電池。如 果斷電時(shí)間較短(幾小時(shí)或幾天)時(shí),就可以用漏電較小的普通電解電容器代替。 單片機(jī)雙機(jī)通信系統(tǒng) 第 5 頁 100 F 就可以保證 1 小時(shí)的正常走時(shí)。DS1302 在第一次加電后,必須進(jìn)行初始 化操作。初始化后就可以按正常方法調(diào)整時(shí)間。本項(xiàng)目有 100 F 電解電容,也 采用了在備用電源處使用 3V 的電池供電。二極管的作用是給 100uF 的電容充 放電。下圖是 DS1302 在本設(shè)計(jì)中的原理圖: 2.2.3 MAX232 電平轉(zhuǎn)換 用 8051 串行接口通信,如果兩臺(tái) 8051 單片機(jī)之間的距離很近(不超過 1.5m) ,可以采用直接
17、將兩臺(tái) 8051 單片機(jī)的串行接口直接相連,利用其自身的 TTL 電平(0-5V)直接傳輸數(shù)據(jù)信息。如果傳輸距離較遠(yuǎn)(超過 1.5m) ,由于 傳輸線的阻抗與分布電容,會(huì)產(chǎn)生電平損耗和波形畸變,以至于檢測不出數(shù)據(jù) 或數(shù)據(jù)出錯(cuò)。 RS-232C 對(duì)電器特性、邏輯電平和各種信號(hào)線功能都作了規(guī)定。 在 TxD 和 RxD 上:邏輯 1(MARK)=-3V-15V ,邏輯 0(SPACE)=+315V 。在 RTS、CTS、DSR、DTR 和 DCD 等控制線上:信號(hào)有效(接通,ON 狀態(tài),正 電壓)+3V+15V ,信號(hào)無效(斷開,OFF 狀態(tài),負(fù)電壓)=-3V-15V 。 為了能夠同計(jì)算機(jī)接口或終
18、端的 TTL 器件連接,必須在 EIA-RS-232C 與 TTL 電路之間進(jìn)行電平和邏輯關(guān)系的變換。 圖 2.3MAX232 模塊原理圖 最大直接傳輸距離說明:RS-232C 標(biāo)準(zhǔn)規(guī)定,若不使用 MODEM,在碼元 畸變小于 4%的情況下,DTE 和 DCE 之間最大傳輸距離為 15m(50 英尺。 DB-9 連接器 : 用 RS-232 總線連接系統(tǒng)有近程通訊方式和遠(yuǎn)程通訊方式兩種,近程通訊 是指傳輸距離小于 15 米的通訊,可以用 RS-232 電纜直接連接。15 米以上的長 單片機(jī)雙機(jī)通信系統(tǒng) 第 6 頁 距離通訊,需要采用調(diào)制調(diào)解器。 計(jì)算機(jī)和終端用 RS-232 連接的交叉“發(fā)送數(shù)
19、據(jù)”與“接收數(shù)據(jù)”是交 叉相連的,使得兩臺(tái)設(shè)備都能正常的發(fā)送和接收。 在于 DB9 相連時(shí)需要考慮 RS232 串口接線是公頭還是母頭,因?yàn)閮蓡纹瑱C(jī)的 TXD 與 RXD 必須交叉相連。 數(shù)據(jù)發(fā)送與接收線: 發(fā)送數(shù)據(jù)(TxD)通過 TxD 終端將串行數(shù)據(jù)發(fā)送到 MODEM。 接收數(shù)據(jù)(RxD)通過 RxD 線終端接收從 MODEM 發(fā)來的串行數(shù)據(jù)。 2.2.4 數(shù)碼管顯示 數(shù)碼管段選與位選接口如圖所示,設(shè)置強(qiáng)推挽輸出,使數(shù)碼管顯示亮度增 加。P0 口與數(shù)碼管段選之間接入 1k 的排阻限流,相比加上拉電阻會(huì)減少單片 機(jī)的功耗。 因?yàn)樯侠娮柙?IO 口輸出低電平時(shí)也會(huì)有電流,如果接入限流電阻就會(huì)
20、避 免這種情況,從而減少功耗。 圖 2.4 數(shù)碼管顯示原理圖 2.2.5 按鍵模塊 本項(xiàng)目有六個(gè)按鍵,每個(gè)單片機(jī)三個(gè)。按鍵一端接地另一端接單片機(jī)的 I/O 口。S1、S2、S3 分別標(biāo)志點(diǎn)移位鍵、加 1 鍵、菜單鍵。 單片機(jī)雙機(jī)通信系統(tǒng) 第 7 頁 圖 2.5 按鍵原理圖 2.3各單元模塊設(shè)計(jì)流程圖 2.3.1 硬件總設(shè)計(jì)框圖 兩個(gè)單片機(jī)通信,每個(gè)單片機(jī)由四個(gè)模塊組成。該項(xiàng)目原理圖及 PCB 圖是 在 Altium Deigner 軟件下設(shè)計(jì)的。設(shè)計(jì)框圖如下圖所示。 圖 2.6 總設(shè)計(jì)框圖 2.3.2 主程序設(shè)計(jì) 該項(xiàng)目軟件設(shè)計(jì)使用的是 Keil 編程軟件。 單片機(jī)雙機(jī)通信系統(tǒng) 第 8 頁 圖
21、 2.7 主程序流程圖 UartInit(); /串口初始化 Init_DS1302(5555); /初始化 1302 KeyScan(); /按鍵掃描 DisPlayKey(); /按鍵響應(yīng)操作 GetTime( ); /獲取當(dāng)前 ds1302 的時(shí)間 display(DisNum); /顯示當(dāng)前調(diào)整的時(shí)間 display(SendNum); /顯示對(duì)目標(biāo)單片機(jī)的調(diào)整的時(shí)間 SendString(UartNum); /發(fā)送調(diào)整時(shí)間到目標(biāo)單片機(jī) 2.3.2 DS1302 程序設(shè)計(jì) 主要是對(duì)時(shí)間的設(shè)置函數(shù): Write_Data(0 x8e,0 x00); /寫保護(hù)關(guān) Write_Data(0
22、x80,Sec); /初始秒值為 50 Write_Data(0 x82,Min);/初始分鐘值為 59 Write_Data(0 x90,0 x01); /充電 Write_Data(0 xc0,0 xf0); /初始化一次標(biāo)示 Write_Data(0 x8e,0 x80); 2.3.3 按鍵程序設(shè)計(jì) 按鍵掃描: 單片機(jī)雙機(jī)通信系統(tǒng) 第 9 頁 圖 2.8 按鍵掃描框圖 if( (P1 /讀出鍵值 while( (P1 /等待按鍵松開 按鍵響應(yīng): 圖 2.9 按鍵響應(yīng)框圖 void DisPlayKey(void) /按鍵響應(yīng) /如果是對(duì)自己設(shè)置時(shí)間就將自己的時(shí)間裝入調(diào)整數(shù)組 if (fl
23、ag = 1) temp0 = DisNum / 1000; temp1 = DisNum % 1000 / 100; temp2 = DisNum % 100 / 10; temp3 = DisNum % 10; /如果是對(duì)對(duì)方設(shè)置時(shí)間就將發(fā)送時(shí)間裝入調(diào)整數(shù)組 /根據(jù)鍵值調(diào)整 調(diào)整數(shù)組里的數(shù)字 /組合調(diào)整后的數(shù)字 /更改調(diào)整模式 單片機(jī)雙機(jī)通信系統(tǒng) 第 10 頁 2.3.4 串口程序設(shè)計(jì) 圖 2.10 串口中斷流程圖 SCON = 0X50;/串口工作方式 1 TMOD = 0 x20;/設(shè)定定時(shí)器 1 的工作方式為方式 2(8 位自動(dòng)重裝) TH1 = -3;/設(shè)置串口波特率為 9600
24、TL1 = -3; TR1 = 1; /開啟定時(shí)器 ES = 1; /開串口中斷 /判斷數(shù)據(jù)是否結(jié)束,校驗(yàn) if (uart_datanum-1 = * uint8_t UartNum10; UartInit(); /串口初始化 Init_DS1302(5555);/初始化 1302 EA = 1;/開總中斷 while(1) KeyScan(); /按鍵掃描 DisPlayKey(); /按鍵響應(yīng)操作 if (flag = 0) /菜單 0 GetTime( ); /獲取當(dāng)前 ds1302 的時(shí)間 /轉(zhuǎn)換時(shí)間 秒 timenum = (DateTime04)*10+(DateTime0 /轉(zhuǎn)
25、換時(shí)間 分 timenum += (DateTime14)*1000+(DateTime1 display(timenum); /顯示當(dāng)前時(shí)間 DisNum = 3333; /初始化標(biāo)志位 3333 SendNum = 4444; /初始發(fā)送標(biāo)志位 4444 if(flag = 1) /菜單 1 display(DisNum); /顯示當(dāng)前調(diào)整的時(shí)間 Init_DS1302(DisNum); /用當(dāng)前調(diào)整的時(shí)間初始化 ds1302 if (flag = 2) /菜單 2 display(SendNum); /顯示對(duì)目標(biāo)單片機(jī)的調(diào)整的時(shí)間 /將調(diào)整的時(shí)間轉(zhuǎn)換成字符 UartNum0 = (Sen
26、dNum / 1000) + 0; UartNum1 = (SendNum % 1000 / 100) + 0; UartNum2 = (SendNum % 100 / 10) + 0; UartNum3 = (SendNum % 10) + 0; UartNum4 = *; /通信結(jié)束標(biāo)志位 單片機(jī)雙機(jī)通信系統(tǒng) 第 19 頁 UartNum5 = *; UartNum6 = 0; SendString(UartNum); /發(fā)送調(diào)整時(shí)間到目標(biāo)單片機(jī) if (uart_flag = 1) /串口接收標(biāo)志位 NewTime = 0; /接收到的設(shè)置時(shí)間 /將接收到的字符時(shí)間轉(zhuǎn)換成數(shù)字 NewTi
27、me = (uart_data0- 0)*1000 +(uart_data1- 0)*100 +(uart_data2- 0)*10 +(uart_data3- 0); Init_DS1302(NewTime); /用接收到的新時(shí)間初始化 1302 uart_flag = 0; /標(biāo)志位置零 /*串口程序*/ #include “uart.h“ static uint8_t num = 0; bit busy = 0; uint8_t uart_flag; uint8_t uart_data20; void UartInit(void) SCON = 0X50; /串口工作方式 1 TMOD
28、= 0 x20; /設(shè)定定時(shí)器 1 的工作方式為方式 2(8 位自動(dòng)重裝) TH1 = -3;/設(shè)置串口波特率為 9600 TL1 = -3; TR1 = 1; /開啟定時(shí)器 ES = 1; /開串口中斷 void SendData(uint8_t dat) while (busy); /等待當(dāng)前字符發(fā)送結(jié)束 SBUF = dat; /發(fā)送數(shù)據(jù) busy = 1; 單片機(jī)雙機(jī)通信系統(tǒng) 第 20 頁 /* /*函數(shù)名稱:字符串發(fā)送函數(shù) /*函數(shù)功能:發(fā)送一串字符 /*入口參數(shù):字符串首地址 /*調(diào)用方式:SendString(“asdfghjk“); */ void SendString(uin
29、t8_t *s) while (*s != 0) SendData(*s+); /發(fā)送字符 void UART_SER(void) interrupt 4 /串口中斷 if (RI) /判斷若為收 RI = 0; uart_datanum = SBUF; /讀取 SBUF 到 uart_DATA 數(shù)組 num+; /判斷數(shù)據(jù)是否結(jié)束,校驗(yàn) if (uart_datanum-1 = * /將串口新數(shù)據(jù)標(biāo)志位置 1 num = 0;/清零數(shù)組 num if (TI) /判斷若為發(fā) TI = 0; busy = 0; /*DS1302 */ #include “ds1302.h“ uint8_t D
30、ateTime7; void Write_A_Byte_TO_DS1302(uint8_t dat) 單片機(jī)雙機(jī)通信系統(tǒng) 第 21 頁 uint8_t i; SCLK=0;/初始時(shí)鐘線置為 0 _nop_(); _nop_(); _nop_(); /開始傳輸 8 個(gè)字節(jié)的數(shù)據(jù) for(i=0; i=1;/數(shù)據(jù)右移一位,準(zhǔn)備傳輸下一位數(shù)據(jù) uint8_t Get_A_Byte_FROM_DS1302(void) uint8_t i, dat; _nop_(); _nop_(); _nop_(); for(i=0;i=1; /要返回的數(shù)據(jù)左移一位 if(IO=1) /當(dāng)數(shù)據(jù)線為高時(shí),證明該位數(shù)據(jù)為
31、 1 dat|=0 x80; /要傳輸數(shù)據(jù)的當(dāng)前值置為 1,若不是,則為 0 SCLK=1; /拉高時(shí)鐘線 _nop_(); _nop_(); _nop_(); SCLK=0; /制造下降沿 單片機(jī)雙機(jī)通信系統(tǒng) 第 22 頁 _nop_(); _nop_(); _nop_(); return dat;/返回讀取出的數(shù)據(jù) uint8_t Read_Data(uint8_t addr) uint8_t dat; RST = 0; SCLK=0; RST=1; Write_A_Byte_TO_DS1302(addr); dat = Get_A_Byte_FROM_DS1302(); SCLK=1;
32、RST=0; return dat; void GetTime(void) uint8_t i,addr = 0 x81; for(i=0;i7;i+) DateTimei=Read_Data(addr); _nop_(); _nop_(); _nop_(); addr+=2; void Init_DS1302(uint16_t num) uint8_t temp4, Sec, Min; temp0 = num / 1000; temp1 = num % 1000 / 100; temp2 = num % 100 / 10; temp3 = num % 10; Min = temp0*16+t
33、emp1; 單片機(jī)雙機(jī)通信系統(tǒng) 第 23 頁 Sec = temp2*16+temp3; Write_Data(0 x8e,0 x00); /寫保護(hù)關(guān) Write_Data(0 x80,Sec); /初始秒值為 50 Write_Data(0 x82,Min); /初始分鐘值為 59 /Write_Data(0 x84,0 x17); /初始為 24 小時(shí)模式 初始時(shí)間為 23 點(diǎn) /Write_Data(0 x86,0 x19); /19 日 Write_Data(0 x90,0 x01); /充電 Write_Data(0 xc0,0 xf0); /初始化一次標(biāo)示 Write_Data(0
34、 x8e,0 x80); void Write_Data(uint8_t cmd, uint8_t dat) RST=0; /初始 CE 線置為 0 SCLK=0; /初始時(shí)鐘線置為 0 RST=1; /初始 CE 置為 1,傳輸開始 /傳輸命令字,要寫入的時(shí)間/日歷地址 Write_A_Byte_TO_DS1302(cmd); /寫入要修改的時(shí)間/日期 Write_A_Byte_TO_DS1302(dat); SCLK=1; /時(shí)鐘線拉高 RST=0; /讀取結(jié)束,CE 置為 0,結(jié)束數(shù)據(jù)的傳輸 /*按鍵程序*/ #include “key.h“ uint8_t wei = 0; uint1
35、6_t DisNum = 0; uint16_t SendNum = 1234; uint8_t cKey = 7; uint8_t flag = 0; void KeyScan(void) /掃描按鍵管腳是否有電平變化 if( (P1 /讀出鍵值 while( (P1 /等待按鍵松開 if(cKey = 0 xc0) / P2.1 按下 - 單片機(jī)雙機(jī)通信系統(tǒng) 第 24 頁 wei+; if (wei = 4) wei = 0; if(cKey = 0 xa0) / P2.2 按下 + cKey = 3; if(cKey = 0 x60)/ P2.2 按下 + cKey = 5; void
36、DisPlayKey(void) /按鍵響應(yīng) uint8_t temp4; /如果是對(duì)自己設(shè)置時(shí)間就將自己的時(shí)間裝入調(diào)整數(shù)組 if (flag = 1) temp0 = DisNum / 1000; temp1 = DisNum % 1000 / 100; temp2 = DisNum % 100 / 10; temp3 = DisNum % 10; if (flag = 2) /如果是對(duì)對(duì)方設(shè)置時(shí)間就將發(fā)送時(shí)間裝入調(diào)整數(shù)組 temp0 = SendNum / 1000; temp1 = SendNum % 1000 / 100; temp2 = SendNum % 100 / 10; tem
37、p3 = SendNum % 10; /根據(jù)鍵值調(diào)整 調(diào)整數(shù)組里的數(shù)字 if (wei = 0) if (cKey = 3) 單片機(jī)雙機(jī)通信系統(tǒng) 第 25 頁 temp0 += 1; if (temp0 = 10) temp0 = 0; cKey = 7; if (wei = 1) if (cKey = 3) temp1 += 1; if (temp1 = 10) temp1 = 0; cKey = 7; if (wei = 2) if (cKey = 3) temp2 += 1; if (temp2 = 10) temp2 = 0; cKey = 7; if (wei = 3) if (cK
38、ey = 3) temp3 += 1; 單片機(jī)雙機(jī)通信系統(tǒng) 第 26 頁 if (temp3 = 10) temp3 = 0; cKey = 7; if (flag = 1) /組合調(diào)整后的數(shù)字 DisNum = temp0*1000 + temp1*100 + temp2*10 + temp3; if (flag = 2) SendNum = temp0*1000 + temp1*100 + temp2*10 + temp3; if (cKey = 5) /更改調(diào)整模式 flag+; if (flag = 3) flag = 0; cKey = 7; /*數(shù)碼管顯示*/ #include “
39、display.h“ uint8_t code acLEDCS4 = 0 xef, 0 xdf, 0 xbf, 0 x7f; uint8_t code acLedSegCode10 = 0 x5f, 0 x44, 0 x9d, 0 xd5, 0 xc6, 0 xd3, 0 xdb, 0 x45, 0 xdf, 0 xd7; void display(int16_t disnum) 單片機(jī)雙機(jī)通信系統(tǒng) 第 27 頁 uint8_t i, acLED4; acLED0 = acLedSegCodedisnum / 1000;/取出千位 acLED1 = acLedSegCodedisnum % 1
40、000 / 100;/取出百位 acLED2 = acLedSegCodedisnum % 100 / 10;/取出十位 acLED3 = acLedSegCodedisnum % 10;/取出個(gè)位 for (i=0; i4; i+) P0 = acLEDi;/顯示相應(yīng)的數(shù)字 P2 |= 0 xf0; /前四位置 1 后四位不變 if (i = wei) P0 |= 0 x20;/表示小數(shù)點(diǎn) P2 /位選 Delay(2); P2 = 0 xff; /消隱 /*延時(shí)*/ #include “delay.h“ void Delay(uint16_t time) uint16_t i, j; for(i=0; itime; i+) for(j=0; j100; j+) ;
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025《增值稅法》高質(zhì)量發(fā)展的增值稅制度規(guī)范增值稅的征收和繳納
- 深入學(xué)習(xí)《中華人民共和國科學(xué)技術(shù)普及法》推進(jìn)實(shí)現(xiàn)高水平科技自立自強(qiáng)推動(dòng)經(jīng)濟(jì)發(fā)展和社會(huì)進(jìn)步
- 激揚(yáng)正氣淬煉本色踐行使命廉潔從政黨課
- 加強(qiáng)廉潔文化建設(shè)夯實(shí)廉政思想根基培育風(fēng)清氣正的政治生態(tài)
- 深入學(xué)習(xí)2024《突發(fā)事件應(yīng)對(duì)法》全文提高突發(fā)事件預(yù)防和應(yīng)對(duì)能力規(guī)范突發(fā)事件應(yīng)對(duì)活動(dòng)保護(hù)人民生命財(cái)產(chǎn)安全
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)第一輪單元滾動(dòng)復(fù)習(xí)第10天平行四邊形和梯形作業(yè)課件新人教版
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)第14單元階段性綜合復(fù)習(xí)作業(yè)課件新人教版
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)易錯(cuò)清單十五課件新人教版
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)易錯(cuò)清單七課件西師大版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)易錯(cuò)清單六作業(yè)課件北師大版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)易錯(cuò)清單二作業(yè)課件北師大版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)四分?jǐn)?shù)的意義和性質(zhì)第10課時(shí)異分母分?jǐn)?shù)的大小比較作業(yè)課件蘇教版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)周周練四作業(yè)課件北師大版
- 2023年五年級(jí)數(shù)學(xué)下冊(cè)六折線統(tǒng)計(jì)圖單元復(fù)習(xí)卡作業(yè)課件西師大版
- 2023年四年級(jí)數(shù)學(xué)上冊(cè)6除數(shù)是兩位數(shù)的除法單元易錯(cuò)集錦一作業(yè)課件新人教版