版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、摘 要本文主要描述了利用PC機(jī)與AT89C51單片機(jī)之間的通信程序設(shè)計實(shí)現(xiàn)溫度顯示。并詳述了在VC6.0環(huán)境下,上位機(jī)利用MSCOMM通信控件與單片機(jī)之間串口通信實(shí)現(xiàn)溫度顯示。由單片機(jī)采集一個溫度信號,將采集到的溫度信號傳送給PC機(jī)顯示,PC機(jī)用VC6.0編寫程序,單片機(jī)程序用C語言編寫,最后用PROTUES軟件進(jìn)行仿真實(shí)現(xiàn)溫度顯示。關(guān)鍵詞:單片機(jī) MSCOMM控件 VC6.0 AT89C51 溫度顯示目 錄摘要1 引言12 結(jié)構(gòu)設(shè)計與方案選擇22.1設(shè)計任務(wù)22.1.1單片機(jī)的選擇22.1.2電平轉(zhuǎn)換22.1.1單片機(jī)的選擇22.1.3單片機(jī)與pc機(jī)通信原理22.2軟件方案選擇22.2.1
2、上位機(jī)編程方案選擇32.2.2 單片機(jī)編程方案選擇32.3 總體方案選擇23 硬件設(shè)計83.1單片機(jī)主要特性53.2 MAX232電平芯片介紹10103.3 硬件電路設(shè)計圖113.3.1 PC機(jī)與單片機(jī)通信接口電路設(shè)計框圖113.3.2整體設(shè)計原理圖114 軟件設(shè)計124.1上位機(jī)程序設(shè)計124.2下位機(jī)程序設(shè)計135 軟硬件調(diào)試部分215.1 PROTEUS軟件仿真215.1.1 Protues簡介215.1.2 Protues仿真電路圖225.2 VC軟件仿真21結(jié)束語.27致謝.28參考文獻(xiàn).291引言隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它所給人帶來的方便也是
3、不可否定的,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展?,F(xiàn)代化集中管理需要對現(xiàn)場數(shù)據(jù)進(jìn)行統(tǒng)計、分析、制表、打印、繪圖、報警等,同時,又要求對現(xiàn)場裝置進(jìn)行實(shí)時控制,完成各種規(guī)定操作,達(dá)到集中管理的目的。加之單片機(jī)的計算能力有限,難以進(jìn)行復(fù)雜的數(shù)據(jù)處理。因此在功能比較復(fù)雜的控制系統(tǒng)中,通常以PC機(jī)為上位機(jī),單片機(jī)為下位機(jī),由單片機(jī)完成數(shù)據(jù)的采集及對裝置的控制,而由上位機(jī)完成各種復(fù)雜的數(shù)據(jù)處理及對單片機(jī)的控制。2方案選擇2.1硬件方案選擇2.1.1單片機(jī)的選擇本設(shè)計采用的是AT89C51單片機(jī),AT89C51是一種帶4K字節(jié)閃存可
4、編程可擦除只讀存儲器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)。它是一種高效微控制器,因?yàn)樗?jīng)濟(jì)實(shí)惠,用起來靈活方便,而且習(xí)慣了用這種型號的單片機(jī),所以選擇AT89C51單片機(jī)。2.1.2電平轉(zhuǎn)換本設(shè)計采用MAX232芯片進(jìn)行電平轉(zhuǎn)換,MAX232芯片是美信公司專門為電腦的RS232標(biāo)準(zhǔn)串口設(shè)計的接口電路,使用+5V單電源供電,它的作用就是完成TTL電平與RS232電平的轉(zhuǎn)換。PC機(jī)的串行口采用的是標(biāo)準(zhǔn)的RS 232接口,單片機(jī)的串行口電平是FTL電平,而TTL電平特性與R
5、S 232的電氣特性不匹配,因此為了使單片機(jī)的串行口能與RS 232接口通信,必須將串行口的輸入/輸出電平進(jìn)行轉(zhuǎn)換。通常用MAX232芯片來完成電平轉(zhuǎn)換。2.1.3單片機(jī)與pc機(jī)通信原理MCS-51單片機(jī)有一個全雙工的串行通訊口UART。利用其RXD和TXD與外界進(jìn)行通信,其內(nèi)部有2個物理上完全獨(dú)立的接收、發(fā)送緩沖器SBUF,可同時發(fā)送和接收數(shù)據(jù)。所以單片機(jī)和PC機(jī)之間可以方便地進(jìn)行串口通訊。單片機(jī)串口有3條引線:TXD(發(fā)送數(shù)據(jù))、RXD(接收數(shù)據(jù))和GND(信號地)。因此在通信距離較短時可采用零MODEM方式,簡單三連線結(jié)構(gòu)。IBMPC機(jī)有兩個標(biāo)準(zhǔn)的RS232串行口,其電平采用的是EIA電
6、平,而MCS-51單片機(jī)的串行通信是由TXD(發(fā)送數(shù)據(jù))和RXD(接收數(shù)據(jù))來進(jìn)行全雙工通信的,它們的電平是TTL電平;為了Pc機(jī)與MCS-51機(jī)之間能可靠地進(jìn)行串行通信,需要用電平轉(zhuǎn)換芯片,我們采用了MAXIM公司生產(chǎn)的專用芯片MAX232進(jìn)行轉(zhuǎn)換。電路如圖所示。圖2.2 MAX232工作原理圖2.2軟件方案選擇2.2.1 上位機(jī)編程方案選擇本設(shè)計采用VC6.0+來實(shí)現(xiàn)編程,上位機(jī)與單片機(jī)進(jìn)行通信的程序編寫可用VB、VC等軟件。由于VB作為面向?qū)ο蟮木幊坦ぞ卟粔蛲耆?,效率比VC低,提供的命令語言環(huán)境較弱,通過串口設(shè)備一次最多只能交換16B的數(shù)據(jù),對較大數(shù)據(jù)量的傳輸存在很大的局限性,很難實(shí)現(xiàn)較
7、為復(fù)雜的數(shù)據(jù)處理,VC6.0+是一種功能強(qiáng)大的面向?qū)ο蟮腤indows編程開發(fā)平臺。VC6.0的優(yōu)點(diǎn)是界面簡潔,占用資源少,操作方便。所以本設(shè)計采用VC作為串口編程工具。2.2.2 單片機(jī)編程方案選擇本設(shè)計單片機(jī)的編程選擇C語言編寫,因?yàn)樗啙嵕o湊、靈活方便、運(yùn)算符豐富、數(shù)據(jù)結(jié)構(gòu)豐富、C是結(jié)構(gòu)式語言、C語法限制不太嚴(yán)格,程序設(shè)計自由度大、C語言允許直接訪問物理地址,可以直接對硬件進(jìn)行操作、C語言程序生成代碼質(zhì)量高,程序執(zhí)行效率高,一般只比匯編程序生成的目標(biāo)代碼效率低1020%、C語言適用范圍大,可移植性好C語言有一個突出的優(yōu)點(diǎn)就是適合于多種操作系統(tǒng), 如DOS、UNIX,也適用于多種機(jī)型。C語
8、言具有繪圖能力強(qiáng),可移植性,并具備很強(qiáng)的數(shù)據(jù)處理能力,因此適于編寫系統(tǒng)軟件,三維,二維圖形和動畫它是數(shù)值計算的高級語言。所以我選用C語言來編寫此程序。2.3 總體方案選擇溫度傳感器測量出來的溫度值由單片機(jī)采集出來,然后單片機(jī)再將采集出的溫度數(shù)據(jù)處理后,通過串行口發(fā)送給上位機(jī)。AT89C5111PC機(jī)MAX232圖2.1總體設(shè)計方案流程圖3硬件設(shè)計3.1 單片機(jī)主要特性與MCS-51 兼容 4K字節(jié)可編程閃爍存儲器 壽命:1000寫/擦循環(huán) 數(shù)據(jù)保留時間:10年 全靜態(tài)工作:0Hz-24MHz 三級程序存儲器鎖定 1288位內(nèi)部RAM 32可編程I/O線 兩個16位定時器/計數(shù)器 5個中斷源 可
9、編程串行通道 低功耗的閑置和掉電模式 片內(nèi)振蕩器和時鐘電路單片機(jī)AT89C51的引腳說明: 圖3.1 AT89C51的引腳排列引腳描述:VCC:電源電壓 GND:地P0口:P0口是一組8位漏極開路雙向I/O口,即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口時,每一個管腳都能夠驅(qū)動8個TTL電路。當(dāng)“1”被寫入P0口時,每個管腳都能夠作為高阻抗輸入端。P0口還能夠在訪問外部數(shù)據(jù)存儲器或程序存儲器時,轉(zhuǎn)換地址和數(shù)據(jù)總線復(fù)用,并在這時激活內(nèi)部的上拉電阻。P0口在閃爍編程時,P0口接收指令,在程序校驗(yàn)時,輸出指令,需要接電阻。P1口:P1口一個帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級可驅(qū)動4個TTL電路
10、。對端口寫“1”,通過內(nèi)部的電阻把端口拉到高電平,此時可作為輸入口。因?yàn)閮?nèi)部有電阻,某個引腳被外部信號拉低時輸出一個電流。閃爍編程時和程序校驗(yàn)時,P1口接收低8位地址。P2口:P2口是一個內(nèi)部帶有上拉電阻的8位雙向I/O口,P2的輸出緩沖級可驅(qū)動4個TTL電路。對端口寫“1”,通過內(nèi)部的電阻把端口拉到高電平,此時,可作為輸入口。因?yàn)閮?nèi)部有電阻,某個引腳被外部信號拉低時會輸出一個電流。在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器時,P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲器時,P2口線上的內(nèi)容在整個運(yùn)行期間不變。閃爍編程或校驗(yàn)時,P2口接收高位地址和其它控制信號。P3口:P3口
11、是一組帶有內(nèi)部電阻的8位雙向I/O口,P3口輸出緩沖故可驅(qū)動4個TTL電路。對P3口寫如“1”時,它們被內(nèi)部電阻拉到高電平并可作為輸入端時,被外部拉低的P3口將用電阻輸出電流。P3口除了作為一般的I/O口外,更重要的用途是它的第二功能,如下表所示端口引腳第二功能P3.0RXDP3.1TXDP3.2INT0P3.3INT1P3.4T0P3.5T1P3.6WRP3.7RD表2.1 P3口第二功能P3口還接收一些用于閃爍存儲器編程和程序校驗(yàn)的控制信號。RST:復(fù)位輸入。當(dāng)震蕩器工作時,RET引腳出現(xiàn)兩個機(jī)器周期以上的高電平將使單片機(jī)復(fù)位。ALE/:當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE輸出脈沖用
12、于鎖存地址的低8位字節(jié)。即使不訪問外部存儲器,ALE以時鐘震蕩頻率的1/16輸出固定的正脈沖信號,因此它可對輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖時,閃爍存儲器編程時,這個引腳還用于輸入編程脈沖。如果必要,可對特殊寄存器區(qū)中的8EH單元的D0位置禁止ALE操作。這個位置后只有一條MOVX和MOVC指令A(yù)LE才會被應(yīng)用。此外,這個引腳會微弱拉高,單片機(jī)執(zhí)行外部程序時,應(yīng)設(shè)置ALE無效。PSEN:程序儲存允許輸出是外部程序存儲器的讀選通信號,當(dāng)AT89C51由外部程序存儲器讀取指令時,每個機(jī)器周期兩次PSEN 有效,即輸出兩個脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)
13、存儲器時,這兩次有效的PSEN 信號不出現(xiàn)。EA/VPP:外部訪問允許。欲使中央處理器僅訪問外部程序存儲器,EA端必須保持低電平。需要注意的是:如果加密位LBI被編程,復(fù)位時內(nèi)部會鎖存EA端狀態(tài)。如EA端為高電平,CPU則執(zhí)行內(nèi)部程序存儲器中的指令。閃爍存儲器編程時,該引腳加上+12V的編程允許電壓VPP,當(dāng)然這必須是該器件是使用12V編程電壓VPP。XTAL1:震蕩器反相放大器及內(nèi)部時鐘發(fā)生器的輸入端。XTAL2:震蕩器反相放大器的輸出端。時鐘震蕩器:AT89C51中有一個用于構(gòu)成內(nèi)部震蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件
14、的片外石英晶體或陶瓷諧振器一起構(gòu)成自然震蕩器。 外接石英晶體及電容C1,C2接在放大器的反饋回路中構(gòu)成并聯(lián)震蕩電路。對外接電容C1,C2雖然沒有十分嚴(yán)格的要求,但電容容量的大小會輕微影響震蕩頻率的高低、震蕩器工作的穩(wěn)定性、起振的難易程序及溫度穩(wěn)定性。如果使用石英晶體,我們推薦電容使用30PF10PF,而如果使用陶瓷振蕩器建議選擇40PF10PF。用戶也可以采用外部時鐘。采用外部時鐘的電路如圖示。這種情況下,外部時鐘脈沖接到XTAL1端,即內(nèi)部時鐘發(fā)生器的輸入端,XTAL2則懸空。由于外部時鐘信號是通過一個2分頻觸發(fā)器后作為內(nèi)部時鐘信號的,所以對外部時鐘信號的占空比沒有特殊要求,但最小高電平持續(xù)
15、時間和最大的低電平持續(xù)時間應(yīng)符合產(chǎn)品技術(shù)條件的要求。 圖3.2內(nèi)部振蕩電路 圖3.3閑散節(jié)電模式AT89C51有兩種可用軟件編程的省電模式,它們是閑散模式和掉電工作模式。這兩種方式是控制專用寄存器PCON中的PD和IDL位來實(shí)現(xiàn)的。PD是掉電模式,當(dāng)PD=1時,激活掉電工作模式,單片機(jī)進(jìn)入掉電工作狀態(tài)。IDL是閑散等待方式,當(dāng)IDL=1,激活閑散工作狀態(tài),單片機(jī)進(jìn)入睡眠狀態(tài)。如需要同時進(jìn)入兩種工作模式,即PD和IDL同時為1,則先激活掉電模式。在閑散工作模式狀態(tài),中央處理器CPU保持睡眠狀態(tài),而所有片內(nèi)的外設(shè)仍保持激活狀態(tài),這種方式由軟件產(chǎn)生。此時,片內(nèi)隨機(jī)存取數(shù)據(jù)存儲器和所有特殊功能寄存器的
16、內(nèi)容保持不變。閑散模式可由任何允許的中斷請求或硬件復(fù)位終止。終止閑散工作模式的方法有兩種,一是任何一條被允許中斷的事件被激活,IDL被硬件清除,即刻終止閑散工作模式。程序會首先影響中斷,進(jìn)入中斷服務(wù)程序,執(zhí)行完中斷服務(wù)程序,并緊隨RETI指令后,下一條要執(zhí)行的指令就是使單片機(jī)進(jìn)入閑散工作模式,那條指令后面的一條指令。二是通過硬件復(fù)位也可將閑散工作模式終止。需要注意的是:當(dāng)由硬件復(fù)位來終止閑散工作模式時,中央處理器CPU通常是從激活空閑模式那條指令的下一條開始繼續(xù)執(zhí)行程序的,要完成內(nèi)部復(fù)位操作,硬件復(fù)位脈沖要保持兩個機(jī)器周期有效,在這種情況下,內(nèi)部禁止中央處理器CPU訪問片內(nèi)RAM,而允許訪問其
17、他端口,為了避免可能對端口產(chǎn)生的意外寫入:激活閑散模式的那條指令后面的一條指令不應(yīng)是一條對端口或外部存儲器的寫入指令。掉電模式:在掉電模式下,振蕩器停止工作,進(jìn)入掉電模式的指令是最后一條被執(zhí)行的指令,片內(nèi)RAM和特殊功能寄存器的內(nèi)容在中指掉電模式前被凍結(jié)。退出掉電模式的唯一方法是硬件復(fù)位,復(fù)位后將從新定義全部特殊功能寄存器但不改變RAM中的內(nèi)容,在VCC恢復(fù)到正常工作電平前,復(fù)位應(yīng)無效切必須保持一定時間以使振蕩器從新啟動并穩(wěn)定工作。模式程序存儲器ALEP0P1P2P3閑散模式內(nèi)部11數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)閑散模式內(nèi)部11浮空數(shù)據(jù)地址數(shù)據(jù)掉電模式外部00數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)掉電模式外部00數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)
18、表2.2閑散和掉電模式外部引腳狀態(tài)。程序存儲器的加密AT89C51可使用對芯片上的三個加密位LB1,LB2,LB3進(jìn)行編程(P)或不編程(U)得到如下表所示的功能:程序加密位保護(hù)類型1UUU沒有程序保護(hù)功能2PUU禁止從外部程序存儲器中執(zhí)行MOVC指令讀取內(nèi)部程序存儲器的內(nèi)容3PPU除上表功能外,還禁止程序校驗(yàn)4PPP除以上功能外,同時禁止外部執(zhí)行表2.3程序存儲器的加密當(dāng)LB1被編程時,在復(fù)位期間,EA端的電平被鎖存,如果單片機(jī)上電后一直沒有復(fù)位,鎖存起來的初始值是一個不確定數(shù),這個不確定數(shù)會一直保存到真正復(fù)位位置。為了使單片機(jī)正常工作,被鎖存的EA電平與這個引腳當(dāng)前輯電平一致。機(jī)密位只能通
19、過整片擦除的方法清除。3.2MAX232電平芯片介紹 MAX232芯片是美信公司專門為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計的接口電路,使用+5v單電源供電。 內(nèi)部結(jié)構(gòu)基本可分三個部分: 第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個電源,提供給RS-232串口電平的需要。 第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個數(shù)據(jù)通道。 其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數(shù)據(jù)通道。 8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道
20、。 TTL/CMOS數(shù)據(jù)從T1IN、T2IN輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從T1OUT、T2OUT送到電腦DP9插頭;DP9插頭的RS-232數(shù)據(jù)從R1IN、R2IN輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從R1OUT、R2OUT輸出。 第三部分是供電。15腳DNG、16腳VCC(+5v)。電平轉(zhuǎn)換電路如下: 圖3.4 MAX232電平芯片3.3 硬件電路設(shè)計圖3.3.1 PC機(jī)與單片機(jī)通信接口電路設(shè)計框圖本文采用MAx232作為PC機(jī)與單片機(jī)的串行通信接口芯片。硬件連接時,可從MAX232中的2路發(fā)送器和接收器中任選一路,只要注意發(fā)送與接收的引腳對應(yīng)關(guān)系即可。接口電路如圖3.5所示。圖3.5 PC機(jī)與單
21、片機(jī)通信接口電路設(shè)計框圖3.3.2整體設(shè)計原理圖總體設(shè)計按照整體設(shè)計思路方案繪制原理圖如下所示:圖3.6整體設(shè)計原理圖4軟件設(shè)計4.1上位機(jī)程序設(shè)計void CTem_conDlg:OnOnCommMscomm1() / TODO: Add your control notification handler code herem_strRXData= ; /每次進(jìn)入則將編輯框內(nèi)容清空等待顯示新的數(shù)據(jù)VARIANT variant_inp;LONG len,k;BYTE rxdata2048; /設(shè)置BYTE數(shù)組CString strtemp; if(m_ctrlComm.GetCommEven
22、t()=2)/事件值為2表示接收緩沖區(qū)內(nèi)有字符 /以下你可以根據(jù)自己的通信協(xié)議加入/處理代碼variant_inp=m_ctrlComm.GetInput();/讀緩沖區(qū)safearray_inp=variant_inp; /VARIANT型變量轉(zhuǎn)換為/ColeSafeArray型變量len=safearray_inp.GetOneDimSize();/得到有效數(shù)據(jù)長度for(k=0;klen;k+)safearray_inp.GetElement(&k,rxdata+k);/轉(zhuǎn)換為BYTE型數(shù)組 for(k=0;klen;k+) /將數(shù)組轉(zhuǎn)換為Cstring型變量 BYTE bt=*(cha
23、r*)(rxdata+k);/字符型strtemp.Format(%c,bt); /將字符送入臨時變量strtemp存放m_strRXData+=strtemp; /加入接收編輯框?qū)?yīng)字符串 UpdateData(FALSE); /更新編輯框內(nèi)容4.2下位機(jī)程序設(shè)計#include #define XTAL 11059200 / CUP 晶振頻率#define baudrate 9600 / 通信波特率#define uchar unsigned char#define uint unsigned intsbit DQ = P33; / 定義DS18B20端口DQ sbit BEEP = P3
24、7;unsigned char presence ;unsigned char code LEDData1 =0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff;unsigned char code LEDData = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xff;unsigned char data temp_data2 = 0x00,0x00;unsigned char data display5 = 0x00,0x00,0x00,0x00,0x00;unsigned
25、 char code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;void beep(); sbit DIN = P07; / 小數(shù)點(diǎn)bit flash=0; / 顯示開關(guān)標(biāo)記bit flag_zf=0; / 正負(fù)溫度標(biāo)志/*/void Delay(unsigned int num)/ 延時函數(shù) while( -num );/*/uchar Init_DS18B20(void) / 初始化ds1820 DQ = 1; / DQ復(fù)位 Delay(8); / 稍
26、做延時 DQ = 0; / 單片機(jī)將DQ拉低 Delay(90); / 精確延時 大于 480us DQ = 1; / 拉高總線 Delay(8); presence = DQ; / 如果=0則初始化成功 =1則初始化失敗 Delay(100); DQ = 1; return(presence); / 返回信號,0=presence,1= no presence/*/uchar ReadOneChar(void) / 讀一個字節(jié)unsigned char i = 0;unsigned char dat = 0;for (i = 8; i 0; i-) DQ = 0; / 給脈沖信號dat =
27、1;DQ = 1; / 給脈沖信號 if(DQ) dat |= 0x80; Delay(4); return (dat);/*/void WriteOneChar(unsigned char dat)/ 寫一個字節(jié) unsigned char i = 0;for (i = 8; i 0; i-) DQ = 0; DQ = dat&0x01; Delay(5); DQ = 1; dat=1; /*/void Read_Temperature(void)/ 讀取溫度 Init_DS18B20(); if(presence=1) beep(); flash=1; / DS18B20不正常,蜂鳴器報警
28、 else flash=0;WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度轉(zhuǎn)換Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0xBE); / 讀取溫度寄存器temp_data0 = ReadOneChar(); / 溫度低8位temp_data1 = ReadOneChar(); / 溫度高8位 /*/void Disp_Temperature()/ 顯示溫度 unsigned char n=0; if(temp_data17) /當(dāng)溫度高八位中的高五
29、位全為O flag_zf=1; / 所測溫度為負(fù)時,要進(jìn)行轉(zhuǎn)換temp_data1=!( temp_data1); temp_data0=!( temp_data0);temp_data0= temp_data0+1;if(temp_data0=0) temp_data1= temp_data1+1;Else flag_zf=0 /判斷測得的溫度數(shù)據(jù)是正還是負(fù),如果為正,不做任何/理 display4=temp_data0&0x0f; display0=ditabdisplay4; / 查表得小數(shù)位的值 display4=(temp_data0&0xf0)4)|(temp_data1&0x0f
30、)4); display3=display4/100; display1=display4%100; display2=display1/10; display1=display1%10; if(flag_zf=1)p0=0xbf; P2=0x02; Delay(300); /溫度為負(fù)數(shù)時第二個數(shù)碼管顯示負(fù)號 if(!display3) / 高位為0,不顯示 display3=0x0a; if(!display2) / 次高位為0,不顯示 display2=0x0a; P0 = 0xc6; / 顯示 C P2 = 0xfe; / 位選線為P2.7口,LED為共陽極顯示,當(dāng)位選線為低電平時選通
31、Delay(300); P0 = 0x9c; / 顯示 P2 = 0xfd; / 選中P2.6口 Delay(300); P0 =LEDDatadisplay0 ; / 顯示小數(shù)位 P2 = 0xfb; /p2.5 Delay(300); P0 =LEDData1display1; / 顯示個位 P2 = 0xf7; Delay(300); P0 =LEDDatadisplay2; / 顯示十位 P2 = 0xef; Delay(300); P0 =LEDDatadisplay3; / 顯示百位 P2 = 0xdf; Delay(300); P2 = 0xff; / 關(guān)閉顯示/*/void b
32、eep(void) unsigned char i; for (i=0;i100;i+) Delay(60); BEEP=!BEEP; / BEEP取反 BEEP=1; / 關(guān)閉蜂鳴器/*/void init(void) EA = 1; / 中斷總允許 TMOD = 0x20; / 定時器1工作于8位自動重載模式, 用于產(chǎn)生波特率 TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate); TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate); / 定時器0賦初值 SCON =
33、0x50; / 設(shè)定串行口工作方式 PCON &= 0x00; / 波特率不倍增 TR1 = 1; / 啟動定時器1 IE = 0x00; / 禁止任何中斷/*/void send_char(void)/ 傳送十六位的溫度數(shù)據(jù),低位在前 unsigned i=0; while (i Add to project-Components and Controls.】菜單項(xiàng),如圖所示。圖5.4添加工程步驟4:等待軟件打開文件夾,雙擊【Registered ActveX Controls】文件夾,如圖所示。圖5.5軟件打開文件夾步驟5:選擇【Microsoft Communications Contr
34、ol,version 6.0】列表項(xiàng),單擊【Insert】按鈕,如圖所示。圖5.6 選擇Microsoft Communications Control,version 6.0步驟6:接著彈出【Confirm Classes】對話框,默認(rèn)不修改,單擊【OK】按鈕,如圖所示。圖5.7彈出Confirm Classe對話框步驟7:將控件工具條中的串行口控件拖動到對話框中,用鼠標(biāo)左鍵點(diǎn)住,一直拖到對話框中,在任意位置釋放左鍵,如圖所示。圖5.8添加串口控件步驟8:單擊【View-ClassWizard】菜單項(xiàng)打開【MFC ClassWizard】對話框,選中【IDC_MSCOMM1】和【OnComm
35、】列表項(xiàng),單擊【Add Function.】按鈕,如圖所示。圖5.9 Add Function步驟9:一直單擊【OK】按鈕,我們就會看到增加【OnOnCommMscomm1()】函數(shù),如圖所示。圖5.10增加OnOnCommMscomm函數(shù)步驟10:選擇控件工具條中的編輯框控件abl,在對話框中添加編輯框控件,如圖所示。圖5.11添加編輯框控件步驟11:在【MFC ClassWizard】對話框中,單擊【Member Variables】選項(xiàng)卡,為編輯框和串行口選擇關(guān)聯(lián)變量m_strRXData和m_ctrlComm,單擊【OK】按鈕,如圖所示。圖5.12選擇關(guān)聯(lián)變量m_strRXData和m
36、_ctrlComm步驟12:在【OnOnCommMscomm1()】函數(shù)中添加代碼,添加完代碼后的界面如圖所示。圖5.13在OnOnCommMscomm1()函數(shù)中添加代碼步驟13:在【OnInitDialog()】函數(shù)中添加代碼,添加完代碼后的界面如圖所示。圖514在OnInitDialog()函數(shù)中添加代碼5.4 VC軟件界面仿真如下圖5.2所示為VC軟件界面仿真圖:5.2 VC軟件界面仿真圖此界面仿真結(jié)果表示當(dāng)前的環(huán)境溫度為28.7度。結(jié)束語本文主要詳述了AT89C51單片機(jī)與PC機(jī)的串行通信的實(shí)現(xiàn)的設(shè)計和內(nèi)容,AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀寄存器(FPEROMFla
37、sh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS 8位微處理器。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,所以它的使用前景會是相當(dāng)廣泛與受歡迎。因此我們有必要來學(xué)習(xí)它與PC機(jī)的通信。主要論述內(nèi)容總結(jié)如下:1. 介紹了單片機(jī)的在現(xiàn)實(shí)生活中的使用情況與應(yīng)用環(huán)境領(lǐng)域,市場前景與未來應(yīng)用,并對總體設(shè)計做了概括性的描述。2. 詳述了單片機(jī)的發(fā)展概況、特點(diǎn)、應(yīng)用,各個部件的原理,串行口
38、的通信方式,顯示管的工作原理,使各個部件都能被讀者所了解,從而方便人們來認(rèn)識AT89C51與PC機(jī)串行通信的原理。3. 介紹了軟件設(shè)計,流程,通信協(xié)議,初始化,波特率計算等軟件上的準(zhǔn)備與設(shè)計,從而為整個設(shè)計的匯編階段做好準(zhǔn)備。最后采用運(yùn)用匯編語言將整個圖紙上的設(shè)計變?yōu)閷?shí)際的應(yīng)用。當(dāng)然本設(shè)計也存在著很大的問題,比如說功能上相對簡單容易出錯等,這些問題可以在以后的工作中繼續(xù)完善。經(jīng)過幾個月的畢業(yè)設(shè)計,因?yàn)闀r間和任務(wù)的性質(zhì)的關(guān)系,沒有完全按照上述的測試方法進(jìn)行測試,但經(jīng)過一些簡單的步驟的測試,證明本設(shè)計的串行通信的穩(wěn)定性與實(shí)用性。在設(shè)計的過程中我體會到了過程的快樂和結(jié)果的喜悅。人們常常說不要看重結(jié)果
39、,主要是過程,這幾個月的過程也讓我深深的體會到了自己知識的匱乏和掌握的不牢固為此在將來勢必要不斷地繼續(xù)學(xué)習(xí)與深造,為此不斷地完善自我。致 謝經(jīng)過幾個月的努力,終于完成了PC機(jī)與單片機(jī)的串行通信這個畢業(yè)設(shè)計。在此,我要衷心感謝我的指導(dǎo)老師王偉老師,在整個畢業(yè)設(shè)計過程中,他給予了我悉心的指導(dǎo)和無私的幫助,同時還要感謝同班的許多同學(xué),我們在相互學(xué)習(xí)和交流中,解決問題共同進(jìn)步。有了這么多的支持和無私幫助,才使我得以順利完成畢業(yè)設(shè)計。衷心感謝在百忙之中評閱論文的各位老師!感謝電子工程系的所有老師,感謝您們?yōu)槲覀兊膶W(xué)習(xí)與成才創(chuàng)造的各種條件和付出的辛勤勞動。感謝同室室友、師兄、師姐和朋友們在平時的學(xué)習(xí)、生活
40、中給予了我很大的支持,在此表示衷心的感謝!最后感謝我的家人,是他們給予我精神上的鼓勵、生活上的照顧、學(xué)業(yè)上的支持,才使這篇論文得以順利完成。參考文獻(xiàn)1 梅麗鳳.單片機(jī)原理及接口技術(shù),北京:清華大學(xué)出版社.2004-92 何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計,北京:航空航天大學(xué)出版社.1990-83 張毅剛.單片機(jī)原理及應(yīng)用,北京:高等教育出版社.2003-34 王忠飛.MCS-51單片機(jī)原理及嵌入式系統(tǒng)應(yīng)用.西安:西安電子科技大學(xué)出版社.2007-75 晁陽.單片機(jī)MCS-51原理及應(yīng)用開發(fā)教程,北京:清華大學(xué)出版社.2007-86 鄧亞平.微型計算機(jī)接口技術(shù).北京:清華大學(xué)出版社.2007-67 鐘睿
41、.MCS-51單片機(jī)原理及應(yīng)用開發(fā)技術(shù).北京:鐵道部出版社.2006-48 張洪潤.單片機(jī)應(yīng)用設(shè)計200例.北京:北京航空大學(xué)出版社.2006-99 周杰英.微型計算機(jī)原理及應(yīng)用.北京:機(jī)械工業(yè)出版社.2006-710 張雪蘭.匯編語言程序設(shè)計.北京:清華大學(xué)出版社.2007-3VC+串口上位機(jī)簡單例程(源碼及詳細(xì)步驟)VC+串口上位機(jī)簡單例程.rar (4.33 MB)VC+編寫簡單串口上位機(jī)程序2010年4月13日10:23:40串口通信,MCU跟PC通信經(jīng)常用到的一種通信方式,做界面、寫上位機(jī)程序的編程語言、編譯環(huán)境等不少,VB、C#、LABVIEW等等,我會的語言很少,C語言用得比較多
42、,但是還沒有找到如何用C語言來寫串口通信上位機(jī)程序的資料,在圖書管理找到了用VC+編寫串口上位機(jī)的資料,參考書籍,用自己相當(dāng)蹩腳的C+寫出了一個簡單的串口上位機(jī)程序,分享一下,體驗(yàn)一下單片機(jī)和PC通信的樂趣。編譯環(huán)境:VC+6.0操作系統(tǒng):VMWare虛擬出來的Windows XP程序?qū)崿F(xiàn)功能:1、 PC初始化COM1口,使用n81方式,波特率57600與單片機(jī)通信。PC的COM口編號可以通過如下方式修改:當(dāng)然也可以通過上位機(jī)軟件編寫,通過按鈕來選擇COM端口號,但是此次僅僅是簡單的例程,就沒有弄那么復(fù)雜了。COM1口可用的話,會提示串口初始化完畢。否則會提示串口已經(jīng)打開Port already open,表示串口已經(jīng)打開,被占用了。2、 點(diǎn)擊開始轉(zhuǎn)換,串口會向單片機(jī)發(fā)送0xaa,單片機(jī)串口中斷接收到0xaa后啟動ADC轉(zhuǎn)換一次,并把轉(zhuǎn)換結(jié)果ADCL、ADCH共兩個字節(jié)的結(jié)果發(fā)送至PC,PC進(jìn)行數(shù)值轉(zhuǎn)換后在窗口里顯示。(見文章末尾圖)3、 為防止串口被一只占用,點(diǎn)擊關(guān)閉串口可以關(guān)閉COM1,供其它程序使用,點(diǎn)擊后按鈕變?yōu)榇蜷_串口,點(diǎn)擊可重新打開COM1。程序的編寫:1、 打開VC+6.0建立基于對話框的MFC應(yīng)用程序Test, 2、 在項(xiàng)目中插入MSComm控件:工程-增加到工程-Com
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 花盆打碎課程設(shè)計
- 自動煉鋼課程設(shè)計
- 電工課程設(shè)計書
- 早教大廳主題課程設(shè)計
- GB/T 30843.1-20241 kV以上不超過35 kV的通用變頻調(diào)速設(shè)備第1部分:技術(shù)條件
- 2024水路貨物運(yùn)輸保險合同規(guī)范文本3篇
- 2025年度幕墻工程勞務(wù)分包合同環(huán)境友好型施工方案3篇
- 2024消防安全管理體系建設(shè)與咨詢合同
- 2024版合同范本之玻璃原片購銷合同
- 2025年度新能源汽車充電站租賃合同6篇
- 腦血管疾病三級預(yù)防
- HSK標(biāo)準(zhǔn)教程5上-課件-L1
- 人教版五年級下冊數(shù)學(xué)預(yù)習(xí)單、學(xué)習(xí)單、檢測單
- JC-T 746-2023 混凝土瓦標(biāo)準(zhǔn)規(guī)范
- 如何落實(shí)管業(yè)務(wù)必須管安全
- 四年級上冊三位數(shù)乘除兩位數(shù)計算題
- 《水電工程招標(biāo)設(shè)計報告編制規(guī)程》
- 2023年甘肅蘭州中考道德與法治試題及答案
- 生產(chǎn)工廠管理手冊
- 項(xiàng)目工地春節(jié)放假安排及安全措施
- 印染廠安全培訓(xùn)課件
評論
0/150
提交評論