基于RS-485的單片機(jī)通信系統(tǒng)設(shè)計(jì)(發(fā)送端)和實(shí)現(xiàn) 通信工程專業(yè)_第1頁(yè)
基于RS-485的單片機(jī)通信系統(tǒng)設(shè)計(jì)(發(fā)送端)和實(shí)現(xiàn) 通信工程專業(yè)_第2頁(yè)
基于RS-485的單片機(jī)通信系統(tǒng)設(shè)計(jì)(發(fā)送端)和實(shí)現(xiàn) 通信工程專業(yè)_第3頁(yè)
基于RS-485的單片機(jī)通信系統(tǒng)設(shè)計(jì)(發(fā)送端)和實(shí)現(xiàn) 通信工程專業(yè)_第4頁(yè)
基于RS-485的單片機(jī)通信系統(tǒng)設(shè)計(jì)(發(fā)送端)和實(shí)現(xiàn) 通信工程專業(yè)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

目錄TOC\o"1-3"\u前言..............................................................5第一章系統(tǒng)總體方案................................................6系統(tǒng)總體框圖設(shè)計(jì).............................................6系統(tǒng)框圖..............................................6第二章系統(tǒng)具體設(shè)計(jì)及硬件設(shè)計(jì)2.1主機(jī)控制模塊.................................................62.1.1系統(tǒng)主芯片選擇........................................62.1.2復(fù)位電路...............................................72.1.3時(shí)鐘電路...............................................72.2通信模塊.....................................................82.2.1通信芯片選擇...........................................82.2.2通信電路..............................................82.3數(shù)據(jù)輸入模塊.................................................92.4數(shù)據(jù)顯示模塊.................................................9第三章軟件設(shè)計(jì)...................................................113.1系統(tǒng)總流程圖................................................113.1.1程序流程圖............................................12第四章硬件調(diào)試與分析.............................................164.1實(shí)驗(yàn)調(diào)試儀器..............................................164.2各個(gè)子系統(tǒng)模塊調(diào)試........................................164.2.1握手信號(hào)發(fā)送模塊調(diào)試..................................164.2.2接收數(shù)據(jù)與拒絕接收數(shù)據(jù)模塊調(diào)試........................174.2.3發(fā)送數(shù)據(jù)與接收數(shù)據(jù)模塊調(diào)試............................17第五章總結(jié)與體會(huì)................................................19參考文獻(xiàn)..........................................................20附錄一:總原理圖..................................................20附錄二:源程序代碼................................................21前言在以單片機(jī)為基礎(chǔ)的數(shù)據(jù)采集和實(shí)時(shí)控制系統(tǒng)中,通過(guò)計(jì)算機(jī)中的RS-232接口進(jìn)行計(jì)算機(jī)與單片機(jī)之間的命令和數(shù)據(jù)傳送,就可以對(duì)生產(chǎn)現(xiàn)場(chǎng)進(jìn)行監(jiān)測(cè)和控制。由于計(jì)算機(jī)上的RS-232所傳送的距離不超過(guò)30m,所以在遠(yuǎn)距離數(shù)據(jù)傳送和控制時(shí),可以利用MAX485的接口轉(zhuǎn)換芯片將RS-232協(xié)議轉(zhuǎn)換成RS-485協(xié)議進(jìn)行遠(yuǎn)距離傳送。RS-232是一個(gè)最初用于調(diào)制解調(diào)器、打印機(jī)及其它PC外設(shè)的通訊標(biāo)準(zhǔn),提供單端20kbps的波特率,后來(lái)速率提高至1Mbps。RS-232的其它技術(shù)指標(biāo)包括:標(biāo)稱±5V發(fā)送電平、±3V接收電平(間隔/符號(hào))、2V共模抑制、2200pF最大電纜負(fù)載電容、300最大驅(qū)動(dòng)器輸出電阻、3k最小接收器(負(fù)載)阻抗、100英尺(典型值)最大電纜長(zhǎng)度。RS-232只用于點(diǎn)對(duì)點(diǎn)通信系統(tǒng),不能用于多點(diǎn)通信系統(tǒng),所有RS-232系統(tǒng)都必須遵從這些限制。RS-485是雙向、半雙工通信協(xié)議,允許多個(gè)驅(qū)動(dòng)器和接收器掛接在總線上,其中每個(gè)驅(qū)動(dòng)器都能夠脫離總線。接收器輸入靈敏度為±200mV,這就意味著若要識(shí)別符號(hào)或間隔狀態(tài),接收端電壓必須高于+200mV或低于-200mV。最小接收器輸入阻抗為12k,驅(qū)動(dòng)器輸出電壓為±1.5V(最小值)、±5V(最大值)。驅(qū)動(dòng)器能夠驅(qū)動(dòng)32個(gè)單位負(fù)載,即允許總線上并聯(lián)32個(gè)12k的接收器。RS-485接收器可隨意組合,連接至同一總線,但要保證這些電路的實(shí)際并聯(lián)阻抗不高于32個(gè)單位負(fù)載(375)。采用典型的24AWG雙絞線時(shí),驅(qū)動(dòng)器負(fù)載阻抗的最大值為54,即32個(gè)單位負(fù)載并聯(lián)2個(gè)120終端匹配電阻。RS-485已經(jīng)成為POS、工業(yè)以及電信應(yīng)用中的最佳選擇。較寬的共模范圍可實(shí)現(xiàn)長(zhǎng)電纜、嘈雜環(huán)境(如工廠車間)下的數(shù)據(jù)傳輸。更高的接收器輸入阻抗還允許總線上掛接更多器件。

第一章系統(tǒng)總體方案系統(tǒng)總體框圖設(shè)計(jì)系統(tǒng)框圖系統(tǒng)框圖如下:通信主機(jī)通信主機(jī)數(shù)據(jù)顯示 數(shù)據(jù)顯示通信模塊通信模塊數(shù)據(jù)輸入數(shù)據(jù)輸入圖2-1系統(tǒng)原理框圖在本系統(tǒng)中,通信主機(jī)是核心部分,主要完成對(duì)數(shù)據(jù)的處理、操作和運(yùn)算;數(shù)據(jù)輸入模塊主要完成數(shù)據(jù)的輸入,所有人機(jī)交換的數(shù)據(jù)都從該模塊中輸入;數(shù)據(jù)顯示模塊完成了通信雙方數(shù)據(jù)的顯示;通信模塊即完成數(shù)據(jù)的接收與發(fā)送,實(shí)現(xiàn)數(shù)據(jù)遠(yuǎn)距離傳輸。數(shù)據(jù)從數(shù)據(jù)輸入模塊輸入,經(jīng)通信主機(jī)處理后發(fā)送給通信從機(jī),通信從機(jī)接收到數(shù)據(jù)后顯示在相應(yīng)的模塊上。第二章系統(tǒng)具體設(shè)計(jì)及硬件設(shè)計(jì)2.1主機(jī)控制模塊2.1.1系統(tǒng)主芯片選擇系統(tǒng)主芯片是本系統(tǒng)的核心芯片,由于系統(tǒng)要求芯片能靈活處理所傳輸?shù)臄?shù)據(jù),且性能穩(wěn)定,價(jià)格低廉,因此需選擇一個(gè)合適的芯片。

STC89C52是一個(gè)低功耗,高性能CMOS8位單片機(jī),器件采用高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISPFlash存儲(chǔ)單元,功能強(qiáng)大的它為許多嵌入式控制通信系統(tǒng)提供了高性價(jià)比的解決方案。STC89C52具有如下特點(diǎn):8kBytesFlash片內(nèi)程序存儲(chǔ)器,128bytes的隨機(jī)數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器和2個(gè)全雙工串行通信口,而且價(jià)格低廉,市場(chǎng)運(yùn)用很普遍,因此采用它作為系統(tǒng)的主芯片即可進(jìn)行靈活的控制。2.1.2復(fù)位和時(shí)鐘電路 復(fù)位時(shí)鐘電路如下圖: 圖2-3復(fù)位時(shí)鐘電路主芯片的RST復(fù)位引腳是高電平有效的。高電平有效的持續(xù)時(shí)間應(yīng)為24個(gè)振蕩周期以上。若時(shí)鐘頻率為12MHz,則復(fù)位信號(hào)至少應(yīng)持續(xù)2us以上才可以復(fù)位單片機(jī)。只要該引腳保持高電平,芯片便循環(huán)復(fù)位。當(dāng)RST端由高變低后,程序指針由ROM的0000H開始執(zhí)行程序。它的復(fù)位操作不影響內(nèi)部RAM的內(nèi)容。當(dāng)Vcc加電后,RAM的內(nèi)容是隨機(jī)的。此外主芯片的復(fù)位方式有上電復(fù)位和手工復(fù)位兩種。只要Vcc上升時(shí)間不超過(guò)1ms,通過(guò)在Vcc和RST引腳之間加一個(gè)10uF的電容和一個(gè)1KΩ,由延時(shí)常數(shù)Т=R*C=1KΩ*10uF=1ms可知,當(dāng)系統(tǒng)上電后即可完成復(fù)位。時(shí)鐘電路是給通信主機(jī)提供正常工作時(shí)序所必不可缺的部分,主機(jī)只有在統(tǒng)一的時(shí)序下才能進(jìn)行正常的工作。主芯片內(nèi)部由一個(gè)反相放大器構(gòu)成振蕩器,可以由它產(chǎn)生時(shí)鐘。時(shí)鐘可以由兩種方式產(chǎn)生,即內(nèi)部方式和外部方式。圖2-3給出的是外部方式。Fosc可在1.2~12MHz之間選擇,為方便計(jì)算,選取晶振頻率fosc=12MHz,可以得到機(jī)器周期為:T=1/fosc=1us。電容對(duì)頻率有微調(diào)作用,因此小電容取值為20pF。2.2通信模塊2.2.1通信芯片的選擇 MAX485接口芯片是Maxim公司的一種RS-485芯片。RS-485是美國(guó)電氣工業(yè)聯(lián)合會(huì)(EIA)制定的利用平衡雙絞線作傳輸線的多點(diǎn)通訊標(biāo)準(zhǔn)。它采用差分信號(hào)進(jìn)行傳輸;最大傳輸距離可以達(dá)到1.2km;最大可連接32個(gè)驅(qū)動(dòng)器和收發(fā)器;接收器最小靈敏度可達(dá)±200mV;最大傳輸速率可達(dá)2.5Mb/s。由此可見,RS-485協(xié)議正是針對(duì)遠(yuǎn)距離、高靈敏度、多點(diǎn)通訊制定的標(biāo)準(zhǔn)。MAX485芯片采用單一電源+5V工作,額定電流為300μA,采用半雙工通訊方式。它完成將TTL電平轉(zhuǎn)換為RS-485電平的功能。MAX485芯片的結(jié)構(gòu)和引腳都非常簡(jiǎn)單,內(nèi)部含有一個(gè)驅(qū)動(dòng)器和接收器。RO和DI端分別為接收器的輸出和驅(qū)動(dòng)器的輸入端,與單片機(jī)連接時(shí)只需分別與單片機(jī)的RXD和TXD相連即可/RE和DE端分別為接收和發(fā)送的使能端,因?yàn)镸AX485工作在半雙工狀態(tài),所以只需要一個(gè)信號(hào)控制MAX485的接收和發(fā)送即可。因此本模塊采用MAX485芯片即可滿足遠(yuǎn)距離通信的性能指標(biāo)。RS485通信協(xié)議:典型的串行通訊標(biāo)準(zhǔn)是RS232和RS485,它們定義了電壓阻抗等,但不對(duì)軟件對(duì)協(xié)議給予定義,區(qū)別于RS232,RS485的特性包括:1.RS485的電氣特性:邏輯“1”以兩線間的電壓差為+(2—6)V表示;邏輯“0”以兩線間的電壓差為-(2—6)V表示。接口信號(hào)電平比RS—232—C降低了,就不易損壞接口電路的芯片,且該電平與TTL電平兼容,可方便與TTL電路連接。2.RS-485的數(shù)據(jù)最高傳輸速率為10Mbps。3.RS-485接口是采用平衡驅(qū)動(dòng)器和差分接收器的組合,抗共模干擾能力增強(qiáng),即抗噪聲干擾性好。4.RS-485接口的最大傳輸距離標(biāo)準(zhǔn)值為4000英尺,實(shí)際上可達(dá)3000米(理論上的數(shù)據(jù),在實(shí)際操作中,極限距離僅達(dá)1200米左右),另外RS-232-C接口在總線上只允許連接1個(gè)收發(fā)器,即單站能力。而RS-485接口在總線上是允許連接多達(dá)128個(gè)收發(fā)器。即具有多站能力,這樣用戶可以利用單一的RS-485接口方便地建立起設(shè)備網(wǎng)絡(luò)。因RS-485接口具有良好的抗噪聲干擾性,長(zhǎng)的傳輸距離和多站能力等上述優(yōu)點(diǎn)就使其成為首選的串行接口。因?yàn)镽S485接口組成的半雙工網(wǎng)絡(luò)一般只需二根連線,所以RS485接口均采用屏蔽雙絞線傳輸。RS485接口連接器采用DB-9的9芯插頭座,與智能終端RS485接口采用DB-9(孔),與鍵盤連接的鍵盤接口RS485采用DB-9(針)2.2.2通信電路 通信模塊電路如下:圖2-4通信模塊電路 MAX485的RO和DI引腳分別和單片機(jī)的RXD和TXD相連接,/RE和DE受單片機(jī)P1.0的控制,當(dāng)P1.0=1是,MAX485發(fā)送數(shù)據(jù),當(dāng)P1.0=0是MAX485接收數(shù)據(jù),主機(jī)和從機(jī)都是按照如圖所示的電路進(jìn)行通信的,為了減少信息傳輸時(shí)的錯(cuò)誤,主從機(jī)都使用相同頻率的晶振,設(shè)置主從機(jī)相同的波特率。2.3數(shù)據(jù)輸入模塊 矩陣式鍵盤,矩陣式鍵盤穩(wěn)定,其突出優(yōu)點(diǎn)是占用I/O口少,I/O端口利用率高,可循環(huán)操作,而且掃描鍵盤時(shí)占用CPU時(shí)間少,操作靈活,方便。由設(shè)計(jì)要求可知系統(tǒng)需求能控制多狀態(tài)而且利用率高的鍵盤,因此綜合以上要求此模塊采用矩陣式鍵盤。2.4數(shù)據(jù)顯示模塊采用八段共陰極數(shù)碼管顯示,利用HD7279進(jìn)行驅(qū)動(dòng),性能穩(wěn)定,操作簡(jiǎn)單。HD7279是一片具有串行接口的可同時(shí)驅(qū)動(dòng)8位共陰式數(shù)碼管(或64只獨(dú)立LED)的智能顯示驅(qū)動(dòng)芯片,該芯片同時(shí)還可連接多達(dá)64鍵的鍵盤矩陣,單片即可完成顯示鍵盤接口的全部功能。由于系統(tǒng)要求傳輸?shù)闹皇呛?jiǎn)單的數(shù)據(jù),因此采用數(shù)碼管顯示即可滿足指標(biāo)要求。第三章軟件設(shè)計(jì) 3.1系統(tǒng)總流程圖多機(jī)雙向通信的軟件設(shè)計(jì)主要分為:系統(tǒng)初始化、確定主從機(jī)關(guān)系、雙方進(jìn)行握手、不接收主機(jī)數(shù)據(jù)、主機(jī)發(fā)送數(shù)據(jù)和從機(jī)接收數(shù)據(jù)等六大部分;每個(gè)功能模塊對(duì)于通信雙方都是必不可缺的,只有這樣主機(jī)才能很好的對(duì)外部的信息進(jìn)行采集、分析和解決。1.系統(tǒng)初始化:系統(tǒng)初始化包括串口初始化和顯示模塊初始化。主要實(shí)現(xiàn)串口中斷的開啟、總中斷的開啟、定時(shí)器的選擇及其工作方式的選擇、串行口工作方式的選擇和顯示模塊初始化等功能。2.有鍵按下:通信雙方進(jìn)行通信時(shí)需確定雙方的主從關(guān)系,然后通過(guò)鍵盤按下,顯示所傳輸?shù)臄?shù)據(jù)。3.鍵值處理:在該部分中,通信主機(jī)會(huì)發(fā)送握手信號(hào)給從機(jī),主機(jī)發(fā)送的數(shù)據(jù)通過(guò)處理再傳輸給從機(jī)4.送顯數(shù)據(jù):所發(fā)送的數(shù)據(jù)通過(guò)處理之后再發(fā)送給從機(jī)。5.關(guān)閉顯示:從機(jī)顯示數(shù)據(jù)完畢之后需要關(guān)閉顯示不再傳輸數(shù)據(jù)和顯示數(shù)據(jù)。6.從機(jī)接收數(shù)據(jù):此部分功能較簡(jiǎn)單,只需完成從機(jī)不斷的接收主機(jī)發(fā)送的數(shù)據(jù)的即可。3.1.1程序流程圖:開始開始初始化初始化有鍵按下有鍵按下 Y鍵值處理鍵值處理送顯送顯發(fā)送圖3-1主機(jī)程序流程圖本系統(tǒng)程序主要有:初始化,鍵盤發(fā)送,鍵盤處理,送顯,關(guān)閉顯示等五個(gè)部分。1.初始化:該部分主要是串行口初始化,16位定時(shí)器初始化和中斷初始化三部分的功能,具體實(shí)現(xiàn)如下: voidinit()//初始化子程序 { TMOD=0x20;//設(shè)置定時(shí)器1為工作方式2,8位自動(dòng)重裝 TH1=0xe8;//賦計(jì)數(shù)初值,對(duì)應(yīng)定時(shí)26us TL1=0xe8; TR1=1;//T1中斷開啟 EA=1;//總中斷開啟 REN=1;//串行接收允許 SM0=0;//串行通信方式選擇方式1,10位異步收發(fā),由定時(shí)器控制波特率 SM1=1; }第四章硬件調(diào)試與分析4.1實(shí)驗(yàn)調(diào)試儀器調(diào)試過(guò)程中運(yùn)用到的實(shí)驗(yàn)儀器主要有:

1.微機(jī)一臺(tái),串行接口線一根;

2.單片機(jī)仿真機(jī)一塊;

3.工具箱一個(gè);

4.5V穩(wěn)壓電源一個(gè);4.2各個(gè)子系統(tǒng)模塊調(diào)試4.2.1握手信號(hào)發(fā)送模塊調(diào)試系統(tǒng)上電后,通信雙方1機(jī)2機(jī)第1位都點(diǎn)亮,且為閃爍狀態(tài),說(shuō)明初始化部分正常,如圖6所示。然后按下1機(jī)的發(fā)送2鍵,在1機(jī)的第1位都顯示數(shù)字“2”,說(shuō)明有發(fā)送鍵按下,在2機(jī)第1位數(shù)碼管都顯示數(shù)字“2”,說(shuō)明接收到了1機(jī)的握手信號(hào),然后2機(jī)按下接收數(shù)據(jù)1鍵,在1機(jī)的數(shù)碼管第4位上顯示數(shù)字“2”,說(shuō)明接收到了2機(jī),至此握手信號(hào)模塊全部工作正常,且系統(tǒng)穩(wěn)定,說(shuō)明該模塊功能實(shí)現(xiàn)成功。圖4-11機(jī)作為主機(jī)發(fā)送數(shù)據(jù)2給2機(jī)圖4-2接通電源兩單片機(jī)都顯示0初始化正常4.2.2接收數(shù)據(jù)與拒絕接收數(shù)據(jù)模塊調(diào)試先對(duì)系統(tǒng)進(jìn)行復(fù)位,重復(fù)以上操作至1機(jī)發(fā)送握手信號(hào)后,如果2機(jī)不接收數(shù)據(jù)1,按下2機(jī)的不接收1鍵,剛開始數(shù)碼管關(guān)閉一下,后又閃爍,且為亂碼,說(shuō)明此部分系統(tǒng)工作不正常,經(jīng)過(guò)檢查程序,發(fā)現(xiàn)原來(lái)缺少了while(1)循環(huán)語(yǔ)句,因此數(shù)碼管關(guān)閉一下后又亮了,重新編輯軟件,加上了while(1)大循環(huán),在進(jìn)行系統(tǒng)測(cè)試,重新按下不接收1鍵,數(shù)碼管全部關(guān)閉,如圖8所示,再進(jìn)行其他的測(cè)試,數(shù)碼管還是關(guān)閉,說(shuō)明找到了問(wèn)題的癥結(jié)所在,并解決了問(wèn)題。至此此部分調(diào)試完畢。圖4-32機(jī)不接收1機(jī)的數(shù)據(jù)4.2.3發(fā)送數(shù)據(jù)與接收數(shù)據(jù)模塊調(diào)試重復(fù)第一次的步驟后,在握手完成后按下1機(jī)的發(fā)送數(shù)據(jù)鍵,2機(jī)接收到了1機(jī)數(shù)據(jù),且沒有錯(cuò)誤。再重復(fù)所有步驟,再測(cè)試當(dāng)2機(jī)為主機(jī),系統(tǒng)都按照設(shè)計(jì)的情況運(yùn)行說(shuō)明系統(tǒng)工作正常。至此,系統(tǒng)調(diào)試全部完成,圓滿完成設(shè)計(jì)任務(wù)。圖4-41機(jī)作為主機(jī)發(fā)送“6”給2機(jī)圖4-52機(jī)作為主機(jī)發(fā)送“9”給1機(jī)

第五章總結(jié)與體會(huì)本次設(shè)計(jì)主要基于RS-485協(xié)議,設(shè)計(jì)了一個(gè)基于RS485單片機(jī)通信系統(tǒng)的發(fā)送端,并和另一組搭檔完成接收端和發(fā)送端的連接發(fā)送和接收。完成了雙機(jī)通信機(jī)之間的雙向通信、控制和操作,實(shí)現(xiàn)了可通過(guò)鍵盤控制從機(jī)的選擇,主機(jī)數(shù)據(jù)的輸入和數(shù)據(jù)的實(shí)時(shí)顯示等功能。硬件系統(tǒng)主要由主機(jī)控制模塊、數(shù)據(jù)輸入模塊、數(shù)據(jù)顯示模塊和數(shù)據(jù)傳輸模塊四部分構(gòu)成,軟件系統(tǒng)則基于硬件進(jìn)行相應(yīng)的設(shè)計(jì)。該通信系統(tǒng)具有操作簡(jiǎn)單、結(jié)構(gòu)簡(jiǎn)單、可靠性高、可擴(kuò)展性強(qiáng)等特點(diǎn),在實(shí)際生活中有廣泛的應(yīng)用前景。此次課程設(shè)計(jì),主要包括硬件制作和軟件設(shè)計(jì)兩大部分。在硬件制作過(guò)程中的最為關(guān)鍵的是電路板的焊接,需要認(rèn)真小心,在焊制的過(guò)程中要避免節(jié)點(diǎn)之間的短路情況。軟件設(shè)計(jì)過(guò)程中需要不停地編譯來(lái)確定是否有語(yǔ)法上的錯(cuò)誤,在確定沒有錯(cuò)誤之后再下載到單片機(jī)中,然后再進(jìn)行調(diào)試,這些過(guò)程需要有高度的耐心和仔細(xì),否則容易發(fā)生錯(cuò)誤。此系統(tǒng)設(shè)計(jì)突出了軟件設(shè)計(jì)的靈活、方便和功能強(qiáng)大等優(yōu)點(diǎn),從設(shè)計(jì)開始至最終結(jié)束,軟件部分設(shè)計(jì)一直是一個(gè)至關(guān)重要的環(huán)節(jié),其重要性在此次課程設(shè)計(jì)中體現(xiàn)的淋漓盡致。在本系統(tǒng)中,該部分設(shè)計(jì)相對(duì)來(lái)說(shuō)不是很理想,在語(yǔ)句功能的實(shí)現(xiàn)方面有點(diǎn)繁瑣,由于設(shè)計(jì)時(shí)是利用P1^0口進(jìn)行控制MAX485芯片的使能端,且涉及到多機(jī)通信,因此C語(yǔ)句相對(duì)來(lái)說(shuō)較多,也說(shuō)明直接用P1^0口控制并不是很簡(jiǎn)便,后來(lái)發(fā)現(xiàn)若采用中斷方式進(jìn)行控制,程序就會(huì)變得更加精煉,簡(jiǎn)潔,今后若還有機(jī)會(huì)一定要嘗試著利用單片機(jī)自身的中斷進(jìn)行控制。在設(shè)計(jì)過(guò)程中鍛煉了自己的動(dòng)手焊接制作能力,培養(yǎng)了自己的耐心,細(xì)心和團(tuán)隊(duì)協(xié)作的能力。軟件設(shè)計(jì)讓自己對(duì)程序設(shè)計(jì)又有了一個(gè)新的認(rèn)識(shí)和提高,對(duì)C語(yǔ)言有了一個(gè)全新的認(rèn)識(shí)和學(xué)習(xí),讓自己更加清醒的認(rèn)識(shí)到了C語(yǔ)言程序設(shè)計(jì)的重要性。

參考文獻(xiàn)[1]譚浩強(qiáng).C程序設(shè)計(jì).北京:清華大學(xué)出版社,2009.[2]張先庭.單片機(jī)原理、接口與C51應(yīng)用程序設(shè)計(jì).北京:國(guó)防工業(yè)出版社,2011.[3]楊子文.單片機(jī)原理及應(yīng)用.西安:西安電子科技大學(xué)出版社,2006.[4]張友德.單片微型機(jī)原理、應(yīng)用與實(shí)驗(yàn).上海:復(fù)旦大學(xué)出版社,2006.[5]陳志旺.51系列單片機(jī)系統(tǒng)設(shè)計(jì)與實(shí)踐.北京:電子工業(yè)出版社,2010.[6]馬忠梅.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì).北京:北京航空航天大學(xué)出版社,2003.

附錄一:總原理圖附錄二:源程序代碼#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#definecmd_reset0xa4//7279復(fù)位指令#definedecode10xc8//下載且按方式1譯碼,0~F譯碼指令#definecmd_read0x15//讀鍵盤數(shù)據(jù)指令#defineuncode0x90//下載數(shù)據(jù)但不譯碼指令#definexiao0x98//消影控制指令1顯示,0消影#definesegon0xe0//段開啟指令#defineshan0x88//閃爍控制指令0閃爍,1不閃爍voidlong_delay(void);//長(zhǎng)延時(shí)voidshort_delay(void);//短暫延時(shí)voiddelay10ms(uchar);//延時(shí)10msvoidwrite7279(uchar,uchar);//寫入到HD7279ucharread7279(uchar);//從HD7279讀出voidsend_byte(uchar);//發(fā)送一個(gè)字節(jié)ucharreceive_byte(void);//接收一個(gè)字節(jié)ucharget_key_number(uchar);//鍵盤轉(zhuǎn)換子程序voidfasong11(void);//1發(fā)送數(shù)據(jù)1給2voidfasong22(void);//2發(fā)送數(shù)據(jù)2給1voidbujie1(void);//不接收1的數(shù)據(jù)voidbujie2(void);//不接收2的數(shù)據(jù)voidjieshou12(void);//1接收2的握手信號(hào),返回1voidjieshou21(void);//2接收1的握手信號(hào),返回2voidinit(void);//初始化程序sbitcs=P1^4;//7279cs接于P1.4sbitclk=P1^3;//7279clk連接于P1.3sbitdat=P1^2;//7279dat連接于P1.2sbitkey=P1^1;//7279key連接于P1.1sbitrs=P3^0;//接收端接于P3.0sbitts=P3^1;//發(fā)送端接于P3.1sbitcontrolmax=P1^0;//MAX芯片使能端控制口ucharkey_code[]={0x1c,0x1d,0x1e,0x1f,0x14,0x15,0x16,0x17,0x0c,0x0d,0x0e,0x0f,0x04,0x05,0x06,0x07};//鍵值表ucharkey_number; voidmain()//主程序 { uinti; uchara,m; for(i=0;i<0x2000;i++);//上電延時(shí) send_byte(cmd_reset);//復(fù)位HD7279A init();//一開始先進(jìn)行接收數(shù)據(jù) controlmax=0;//接收握手信號(hào) RI=0; while(1) { if(!key)//進(jìn)行按鍵判斷,有鍵按下時(shí)key位低電平,進(jìn)入循環(huán) { key_number=read7279(cmd_read);//讀出鍵碼 m=get_key_number(key_number); switch(key_number)//控制按鍵選擇 { case0x1c:fasong11();break;//1發(fā)送1給2 case0x1d:jieshou12();break;//1接收2的握手信號(hào),返回1 case0x14:jieshou21();break;//2接收1的握手信號(hào),返回2 case0x15:fasong22();break;//2發(fā)送2給1 case0x04:bujie1();break;//不接收1的數(shù)據(jù) case0x05:bujie2();break;//不接收2的數(shù)據(jù) default:write7279(uncode,0xff);break; } } else { write7279(shan,0xc0);//剛開始的數(shù)據(jù)顯示在第1位,程序初始化 a=SBUF; a=a&0xff; write7279(uncode,a);//在第1位上顯示接收到的數(shù)據(jù) } } } voidfasong11(void)//1發(fā)送1給2? { ucharm,j; init(); controlmax=1;//打開發(fā)送使能端 TI=0;//打開發(fā)送中斷 SBUF=0x30;//發(fā)送1給2 write7279(uncode,0x30); //把1顯示在第1位上 while(!TI);//如果沒發(fā)送完,那么繼續(xù)等待 TI=0; while(1) { controlmax=0;//打開接收使能端,接收握手信號(hào) RI=0; while(!RI); RI=0; while(1) { j=SBUF; delay10ms(0x100); switch(j)//接收到的數(shù)據(jù)進(jìn)行判斷,顯示在相應(yīng)的位置上 {case0x6d:write7279(uncode+3,j);break;//若接收到2返回的握手信號(hào),則放在第4位 default:write7279(uncode+7,0xff);break;//否則點(diǎn)亮第8位數(shù)碼管,提示握手失敗,從發(fā)數(shù)據(jù) } if(!key)//如果有鍵按下,則kye為低電平 { write7279(xiao,0xd5); init(); controlmax=1;//設(shè)置MAX485發(fā)送使能端有效 write7279(shan,0xff); key_number=read7279(cmd_read);//讀出鍵碼 m=get_key_number(key_number); SBUF=key_number; TI=0;//開啟發(fā)送中斷 while(!TI);//如果沒發(fā)送完,那么繼續(xù)等待 TI=0; delay10ms(0x10); write7279(decode1,m);//在第1位上顯示發(fā)送的數(shù)據(jù) } } } } voidjieshou12(void)//1接收2的握手信號(hào),返回1 { ucharb; init(); controlmax=1; SBUF=0x30;//接收到握手信號(hào),返回1 TI=0; while(!TI); TI=0; write7279(uncode+3,0x30);//把1顯示在第4位上 delay10ms(0x100); controlmax=0; RI=0;//接收中斷開啟 while(!RI);//如果沒收到,繼續(xù)等待 RI=0; write7279(xiao,0x0c); while(1) { controlmax=0; RI=0;//接收中斷開啟 while(!RI);//如果沒收到,繼續(xù)等待 RI=0; write7279(shan,0x04);//設(shè)置第三位不閃爍 write7279(xiao,0x04);//只顯示第三位 b=SBUF; write7279(decode1+2,get_key_number(b));//把接收到的數(shù)據(jù)顯示在第3位上 } } voidjieshou21(void)//2接收1的握手信號(hào),返回2 { ucharb; init(); controlmax=1; SBUF=0x6d;//2接收到握手信號(hào),返回2 TI=0; while(!TI); TI=0; write7279(uncode+1,0x6d); delay10ms(0x20); controlmax=0; RI=0;//接收中斷開啟 while(!RI);//如果沒收到,繼續(xù)等待 RI=0; write7279(xiao,0x03); while(1) { controlmax=0; RI=0;//接收中斷開啟 while(!RI);//如果沒收到,繼續(xù)等待 RI=0; write7279(shan,0xc1); write7279(xiao,0x01); b=SBUF; write7279(decode1,get_key_number(b));// 把接收到主機(jī)1的數(shù)據(jù)顯示在第1位 } } voidfasong22(void)//2發(fā)數(shù)據(jù)2給1, { ucharm,j; init(); controlmax=1;//設(shè)置MAX485發(fā)送使能端有效 TI=0;//開啟發(fā)送中斷 SBUF=0x6d;//發(fā)送2給1 write7279(uncode,0x6d); while(!TI);//如果沒發(fā)送完,那么繼續(xù)等待 TI=0; while(1) { controlmax=0;//設(shè)置MAX485發(fā)送使能端有效 RI=0;//開啟發(fā)送中斷 while(!RI);//如果沒發(fā)送完,那么繼續(xù)等待 RI=0; while(1) { j=SBUF; delay10ms(0x100); switch(j)//把接收回來(lái)的信號(hào)進(jìn)行判斷, { case0x30:write7279(uncode+1,j);break;//若為1的反饋信號(hào)則顯示在第2位上 default:write7279(uncode+7,0xff);break;//否則點(diǎn)亮第8位數(shù)碼管提示握手失敗,從新發(fā)送數(shù)據(jù) } if(!key)//如果有鍵按下,則kye為低電平 { write7279(xiao,0xd5); write7279(shan,0xff); key_number=read7279(cmd_read);//讀出鍵碼 m=get_key_number(key_number); init(); controlmax=1;//設(shè)置MAX485發(fā)送使能端有效 SBUF=key_number; TI=0;//開啟發(fā)送中斷 while(!TI);//如果沒發(fā)送完,那么繼續(xù)等待 TI=0; delay10ms(0x10); write7279(decode1,m);//把發(fā)送的數(shù)據(jù)顯示在第1位上 } } } } voidbujie1(void)//不接收1的數(shù)據(jù),關(guān)閉數(shù)碼管,結(jié)束程序 { while(1) { if(key_number==0x04)//說(shuō)明從機(jī)2按下了不接收數(shù)據(jù)1鍵 { while(1) { send_byte(cmd_reset); } } } } voidbujie2(void)//不接收2的信號(hào),關(guān)閉數(shù)碼管,結(jié)束程序 { if(key_number==0x05) { while(1) { send_byte(cmd_reset); } } else { delay10ms(0x01); } } voidwrite7279(ucharcmd,uchardta)//對(duì)7279進(jìn)行寫操作子程序 { send_byte(cm

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論