




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、單片機(jī)原理及應(yīng)用課程設(shè)計學(xué)院: 信息電子學(xué)院 班級: 08電子信息工程 學(xué)號: e08610308 姓名: 陳建能 指導(dǎo)老師: 陳科包曉敏 日期: 20100114 任務(wù)書設(shè)計題目遠(yuǎn)程溫度采集系統(tǒng)設(shè)計任務(wù)及步驟使用proteus作為開發(fā)工具,完成雙機(jī)通訊的溫度采集功能:一、 使用lm20溫度傳感器、ad1674模數(shù)轉(zhuǎn)換器、at89c51單片機(jī)、4位撥碼開關(guān)組成溫度采集模塊(從機(jī)),撥碼開關(guān)用于設(shè)定模塊的地址(00-15),從機(jī)在采集完溫度信號(間隔5s)后通過串口發(fā)送到主機(jī);二、 使用at89c51單片機(jī)、4位撥碼開關(guān)、led顯示組成溫度接收模塊(主機(jī)),4位撥碼開關(guān)用于設(shè)定通訊波特率(120
2、0,2400,4800,9600)當(dāng)主機(jī)波特率改變后,從機(jī)波特率也自動改變,上電運(yùn)行顯示波特率信息(停3s),之后顯示接收地址與溫度信息,當(dāng)接收時間間隔超過6s未收到數(shù)據(jù),系統(tǒng)報警;三、 單片機(jī)一次只能發(fā)送一個字節(jié)的信息,使用多字節(jié)數(shù)據(jù)組成一幀數(shù)據(jù),自定義一套通信協(xié)議來完成一、二的功能;擴(kuò)展要求: 將雙機(jī)通信改成多機(jī)通訊(一個接收器,多個發(fā)送器)論文要求 畫出整個系統(tǒng)的電路原理圖; 敘述各功能模塊的工作原理; 編寫各模塊程序; 論文中應(yīng)附上程序流程圖; 書寫論文時注意結(jié)構(gòu)合理,層次分明,在分析時注意語言的流暢。工作計劃 布置任務(wù),查找資料 電路和程序設(shè)計 設(shè)計程序調(diào)試結(jié)果驗(yàn)收 論文答辯指導(dǎo)教師
3、包曉敏、陳科 2010年 12月 20 日目錄1、課程設(shè)計目的42、課程設(shè)計工具及題目42.1、課程設(shè)計工具.4 2.2、課程設(shè)計題目.43、課程設(shè)計內(nèi)容、步驟及電路原理圖43.1、課程設(shè)計內(nèi)容.43.2、課程設(shè)計步驟.43.3、整個系統(tǒng)的電路原理圖.54、課程設(shè)計各模塊工作原理5 4.1、溫度采集模塊.54.1.1、 lm20經(jīng)ad1674轉(zhuǎn)換為12位數(shù)據(jù)給從機(jī).64.1.2、從機(jī)接收主機(jī)發(fā)送的波特率并且設(shè)置自己的波特率.84.1.3、撥碼開關(guān)實(shí)現(xiàn)地址的變換.8 4.1.4、定時器實(shí)現(xiàn)5秒間隔84.1.5、發(fā)送溫度和地址,及其通信協(xié)議94.2、溫度接收模塊.104.2.1、波特率設(shè)定及發(fā)送.
4、114.2.2、波特率顯示并且延時3s.114.2.3、溫度、地址的接收和判斷114.2.4、數(shù)碼管顯示.124.2.5、系統(tǒng)報警125、課程設(shè)計成果135.1、顯示波特率.135.2、顯示溫度與地址.145.3、改變溫度地址后重新顯示.145.4、報警.146、課程設(shè)計心得.157、參考文獻(xiàn).168、附錄:源程序代碼及注釋178.1、從機(jī)源代碼.178.2、主機(jī)源代碼.20課程設(shè)計目的:單片機(jī)具有體積小、功能強(qiáng)、成本低、應(yīng)用面廣等優(yōu)點(diǎn),可以說,智能控制與自動控制的核心就是單片機(jī)。目前,一個學(xué)習(xí)與應(yīng)用單片機(jī)的高潮在全社會大規(guī)模地興起。學(xué)習(xí)單片機(jī)的最有效方法就是理論與實(shí)踐并重。系統(tǒng)地運(yùn)用已學(xué)的理
5、論知識解決實(shí)際問題的能力和查閱資料的能力。培養(yǎng)一定的自學(xué)能力和獨(dú)立分析問題、解決問題的能力,能通過獨(dú)立思考、查閱工具書、參考文獻(xiàn),尋找解決方案;課程設(shè)計工具及題目: 1、課程設(shè)計工具:pc機(jī)、keil uvision4、protues7.64 2、課程設(shè)計題目:遠(yuǎn)程溫度采集系統(tǒng)課程設(shè)計內(nèi)容及步驟使用proteus作為開發(fā)工具,完成雙機(jī)通訊的溫度采集功能:1、 使用lm20溫度傳感器、ad1674模數(shù)轉(zhuǎn)換器、at89c51單片機(jī)、4位撥碼開關(guān)組成溫度采集模塊(從機(jī)),撥碼開關(guān)用于設(shè)定模塊的地址(00-15),從機(jī)在采集完溫度信號(間隔5s)后通過串口發(fā)送到主機(jī);2、 使用at89c51單片機(jī)、4
6、位撥碼開關(guān)、led顯示組成溫度接收模塊(主機(jī)),4位撥碼開關(guān)用于設(shè)定通訊波特率(1200,2400,4800,9600)當(dāng)主機(jī)波特率改變后,從機(jī)波特率也自動改變,上電運(yùn)行顯示波特率信息(停3s),之后顯示接收地址與溫度信息,當(dāng)接收時間間隔超過6s未收到數(shù)據(jù),系統(tǒng)報警;3、 單片機(jī)一次只能發(fā)送一個字節(jié)的信息,使用多字節(jié)數(shù)據(jù)組成一幀數(shù)據(jù),自定義一套通信協(xié)議來完成一、二的功能;擴(kuò)展要求: 將雙機(jī)通信改成多機(jī)通訊(一個接收器,多個發(fā)送器) 各功能模塊的工作原理:1、 溫度采集模塊使用lm20溫度傳感器、ad1674模數(shù)轉(zhuǎn)換器、at89c51單片機(jī)、4位撥碼開關(guān)組成溫度采集模塊(從機(jī)),撥碼開關(guān)用于設(shè)定
7、模塊的地址(00-15),從機(jī)在采集完溫度信號(間隔5s)后通過串口發(fā)送到主機(jī);(1)lm20經(jīng)ad1674轉(zhuǎn)換為12位數(shù)據(jù)給從機(jī)lm20溫度傳感器經(jīng)過電壓跟隨器后輸入到ad1674的10vin口,ad1674組成雙峰。sts、cs、a0、ce、rc分別接到從機(jī)的p0-p4口實(shí)現(xiàn)ad1674的控制作用。一開始ce=1,cs=0,rc=0,a0=0啟動12位溫度轉(zhuǎn)換,然后等待數(shù)據(jù)采集結(jié)束while(sts=1); 接著ce=1,cs=0,rc=1,12/8=1,a0=0允許高八位數(shù)據(jù)并行輸出,最后ce=1,cs=0,rc=1,12/8=0,a0=1允許低四位數(shù)據(jù)并行輸出。讀出的12位數(shù)據(jù)存放在變
8、量temp中。經(jīng)過ad1674轉(zhuǎn)換后輸出的結(jié)果精確到(10.0/4095.0)。若lm20溫度轉(zhuǎn)換為電壓值是1.13598v時,經(jīng)過ad1674轉(zhuǎn)換后輸出的12位數(shù)為1.13598*4095/10=465轉(zhuǎn)換為2進(jìn)制為000111010001。12位數(shù)據(jù)經(jīng)過公式轉(zhuǎn)換t = (1.8525-temp*10/4095.0)*10000/11.79.然后把低位小數(shù)位給temp1,temp就為整數(shù)部分,接著就是等待發(fā)送給主機(jī)。/*讀取ad1674轉(zhuǎn)換結(jié)果*/uint ad1674_read(void) uint temp; uchar temp1,temp2; cs = 1; ce = 0; /初始化
9、,關(guān)閉數(shù)據(jù)采集 cs = 0; a0 = 0; rc = 0; ce = 1; /ce=1,cs1=0,rc=0,a0=0啟動12位溫度轉(zhuǎn)換 _nop_(); while(sts=1);/等待數(shù)據(jù)采集結(jié)束 ce = 0; /芯片使能關(guān)閉 rc = 1; a0 = 0; ce = 1; /ce=1,cs1=0,rc=1,12/8=1,a0=0允許高八位數(shù)據(jù)并行輸出 _nop_(); temp1 = p0;/讀取轉(zhuǎn)換結(jié)果的高八位 ce = 0;/芯片使能關(guān)閉 rc = 1; a0 = 1; ce = 1;/ce=1,cs1=0,rc=1,12/8=0,a0=1允許低四位數(shù)據(jù)并行輸出 _nop_()
10、; temp2 = p0;/讀取轉(zhuǎn)換結(jié)果的低四位 temp = (temp14);/返回轉(zhuǎn)換結(jié)果,右移四位是因?yàn)閠emp2為p0口的高四位(2)從機(jī)接收主機(jī)發(fā)送的波特率并且設(shè)置自己的波特率主機(jī)發(fā)送波特率給從機(jī),從機(jī)查詢法判斷是否接收到主機(jī)發(fā)送的波特率,如果接收到主機(jī)發(fā)送的波特率則改變自己的波特率,跳出循環(huán)來實(shí)現(xiàn)發(fā)送溫度地址的發(fā)送,否則一直循環(huán)判斷是否接收到主機(jī)發(fā)送的波特率。/*查詢法接收波特率*/while(1)if(ri = 1)temp = sbuf;set_bote(temp);/設(shè)置波特率break;(3)撥碼開關(guān)實(shí)現(xiàn)地址的變換撥碼開關(guān)接從機(jī)的p1口,然后改變撥碼開關(guān)的值,p1口的數(shù)據(jù)
11、變換,等待傳送給主機(jī)。(4)定時器實(shí)現(xiàn)5秒間隔定時器0工作方式1,初值裝(65536-50000)實(shí)現(xiàn)50ms的定時,num為定時次數(shù),當(dāng)num=100時,定時為5s的間隔。(5)發(fā)送溫度和地址,及其通信協(xié)議由于溫度經(jīng)過轉(zhuǎn)換后發(fā)送給主機(jī)要保留一位小數(shù)的話大于255(即8位),還有溫度有正負(fù)要判斷,所以要發(fā)送多次數(shù)據(jù)給主機(jī),主機(jī)經(jīng)過判斷才能確認(rèn)從機(jī)發(fā)送的溫度是整數(shù)部分、小數(shù)部分還是地址。通信協(xié)議如下:因?yàn)椴杉降臏囟扔姓?fù),所以定義j表示溫度的正負(fù),j=0表示正,j=1表示負(fù)。j = 0;/溫度正負(fù)標(biāo)志位temp = ad1674_read();/讀取轉(zhuǎn)換后的12位溫度值temp = (int)
12、(1.8528-temp*addo)*10000/11.79); /實(shí)現(xiàn)實(shí)際溫度的轉(zhuǎn)換其中add=10.0/4095if(temp 0) temp = - temp;j = 0x20; /溫度若為負(fù),則標(biāo)志位00100000temp2 = temp % 10;/溫度小數(shù)位存放在temp2中temp = temp / 10;小數(shù)部分temp2 = temp2+132;/溫度小數(shù)位+132用于接收時的判斷溫度正負(fù)標(biāo)志和地址temp = p1;temp = temp & 0x0f; /地址為p1口的低4位temp1 = temp1 4;temp1 = temp1 | 0xc0; /地址高位置1即11
13、000000用于接收判斷temp = temp | temp1; temp = temp | j; /正負(fù)標(biāo)志位存于temp中因?yàn)闇囟戎凳?-130之間的由于精度在1.41所以是0-132之間。所以溫度值是小于132的。小數(shù)部分是0-9,所以小數(shù)部分+133即133-142之間的。而地址低4位0-15,高位直接置為1100,即大于192。所以主機(jī)只要判斷在0-132之間就為溫度的整數(shù)部分,133-142之間的就為溫度的小數(shù)部分。剩下的就是地址、溫度正負(fù)標(biāo)志位的組合了。2、 溫度接收模塊使用at89c51單片機(jī)、4位撥碼開關(guān)、led顯示組成溫度接收模塊(主機(jī)),4位撥碼開關(guān)用于設(shè)定通訊波特率(1
14、200,2400,4800,9600)當(dāng)主機(jī)波特率改變后,從機(jī)波特率也自動改變,上電運(yùn)行顯示波特率信息(停3s),之后顯示接收地址與溫度信息,當(dāng)接收時間間隔超過6s未收到數(shù)據(jù),系統(tǒng)報警;(1)波特率設(shè)定及發(fā)送撥碼開關(guān)接主機(jī)的p1口,用于設(shè)定主機(jī)的波特率。p1口的數(shù)據(jù)分別為1、2、4、8時的波特率為1200、2400、4800、9600。然后發(fā)送給從機(jī)波特率,接著自己的波特率也隨之改變。(2)波特率顯示并且延時3s由p1口可以得到不同的值,從而用軟件設(shè)定波特率(即設(shè)定定時器1的初值),不同的值存放在bote數(shù)組中用以數(shù)碼管的顯示。定時器t0實(shí)現(xiàn)定時功能,初值裝(65536-50000)實(shí)現(xiàn)50m
15、s的定時,num為定時次數(shù),當(dāng)num為60的時候定時到了3s,以后就不用顯示波特率了,所以用m變量為1表示波特率顯示結(jié)束,不再顯示波特率。(3)溫度、地址的接收和判斷溫度地址接收是用串口中斷實(shí)現(xiàn)的。ri為1的時候表示一幀數(shù)據(jù)已經(jīng)接收完了,所以就開始判斷是溫度的整數(shù)部分、小數(shù)部分、還是地址和正負(fù)標(biāo)志位組成的數(shù)據(jù)。通信協(xié)議如上:if(temp 132)/ 若所接收到的數(shù)小于132則是溫度正數(shù)部分值 hextobcd(temp, aa, cc); /轉(zhuǎn)換為溫度值else if(temp 143)/若小于143,則為溫度的小數(shù)部分值cc = temp - 132; /小數(shù)部分還原 else bb =
16、temp & 0x0f; /溫度為低4位disnum6 = bb / 10; /存于數(shù)組中用于顯示中disnum7 = bb % 10;aa = temp & 0x20; /溫度正負(fù)標(biāo)志位if(aa = 0) aa = 0;else aa = 1;(4)數(shù)碼管顯示模塊 數(shù)據(jù)存于disnum數(shù)組中,用8位數(shù)碼管來顯示溫度、地址以及波特率。段選接主機(jī)的p0口,片選接主機(jī)的p2口。一開始顯示波特率,就選中最后4位。然后就是要顯示溫度和地址的信息了。溫度為-55130所以前面4位顯示溫度后2位顯示地址即:xxx.xc-xx。由于數(shù)碼管是動態(tài)掃描的,所以要一定速度才可以實(shí)現(xiàn)視覺殘留??瓷先ズ孟袷且恢秉c(diǎn)亮
17、一樣的。void display_led()uchar i;for(i = 0; i 8; i+) p2 = disbiti; /使用查表法進(jìn)行位選 if(i != 2)p0 = tabledisnumi; else p0 = table1disnumi;delay(150); /掃描間隔時間 太長會數(shù)碼管會有閃爍感 (5)系統(tǒng)報警定時器0實(shí)現(xiàn)定時功能,num1為報警的時間的計算,定時器是實(shí)現(xiàn)50ms的,所以要120才能實(shí)現(xiàn)6s。num1 = 120,那么判斷一下flag(是否接收到傳送過來的數(shù)據(jù))如果flag = 0;說明沒有接收到采集的數(shù)據(jù),接著就報警,還要把num1和flag重新清0,實(shí)
18、現(xiàn)下次的報警功能。 m = 0; /波特率顯示結(jié)束if(num1 = 120) /若已經(jīng)計時6sif(flag = 0) /若沒有接收到數(shù)據(jù)uchar t = 8;while(t-) /報警beep();else flag = 0; /否則接收到數(shù)據(jù)標(biāo)志位清0num1 = 0; /計數(shù)次數(shù)清0 display_led();/顯示溫度和地址課程設(shè)計成果1、 顯示波特率2、顯示溫度與地址 3、改變溫度地址后重新顯示4、報警課程設(shè)計心得 通過本次課程設(shè)計我學(xué)到了很多很多,雖然一開始的時候已經(jīng)學(xué)過了c語言。并且自認(rèn)為學(xué)得不錯。但是到了實(shí)際的單片機(jī)還是有點(diǎn)區(qū)別的。不是再控制臺下直接運(yùn)行的,他還有他的一個
19、方式,一個功能來實(shí)現(xiàn)的。還好開學(xué)的時候?qū)W過單片的c語言。并且也買了很好的郭天祥的單片機(jī)c語言教程,還買了實(shí)際的開發(fā)板來做很多很多的實(shí)驗(yàn)?;旧蠁纹瑱C(jī)c語言已經(jīng)入門了。但是那個開發(fā)板是已經(jīng)焊好了的。不知道怎么連ad1674,不知道怎么連數(shù)碼管。用protues仿真也是一開始用那個匯編編的。所以還是要慢慢地學(xué)習(xí)。 第一天、看到題目覺得一片茫然。不知道從何下手。慢慢地一點(diǎn)一點(diǎn)地來。首先是lm20。查看它的功能和作用。知道了他的轉(zhuǎn)換公式。接著要用單片機(jī)采集的話,必須經(jīng)過模數(shù)轉(zhuǎn)換才可以實(shí)現(xiàn)。于是便開始ad1674芯片的學(xué)習(xí)了。被這個芯片搞得頭都大了?;?天時間總算弄好了采集那個部分。不過只是用了8位采
20、集,還沒有12位的,精度不夠。因?yàn)橐婚_始用了12位的一直是出錯的,后來8位居然是對的。就用了8位。第二天、開始了從機(jī)采集到的數(shù)據(jù)發(fā)給主機(jī)。還得學(xué)習(xí)下串口怎么發(fā)送,怎么接收,怎么初始化,怎么設(shè)定波特率,好多好多問題。迎面而來。此時又找不到任何一個人幫幫忙。于是便自己找資料,看書,圖書館。上網(wǎng)。最后終于興奮地完成了從機(jī)發(fā)送采集到的數(shù)據(jù)給主機(jī)。第三天、那便是怎么把接收到的數(shù)據(jù)用數(shù)碼管顯示出來,這個倒是很容易。很快地,一個顯示模塊搞定了。此時整個系統(tǒng)基本上已經(jīng)形成了??粗@一天天學(xué)到的,遠(yuǎn)遠(yuǎn)比課堂學(xué)到的多多了,所以理論聯(lián)系實(shí)際才是最最重要的。接著便是改變地址,改變波特率,報警等等功能。也很快得到了解決
21、。 第四天、通過了微機(jī)的課程設(shè)計,于是便是單片機(jī)的了,早上很早就到了,心想得用12位的,于是便開始改了,居然人品爆了,改了以后一次性通過。所有的功能都實(shí)現(xiàn)了。真是太開心了。最后便交給老師檢查,通過了。好開心啊!不僅學(xué)到了這么多,對于單片機(jī)還興趣更加濃厚了。相信再努力點(diǎn),以后會得到很多很多。此次課程設(shè)計,我知道了,做事不能猶豫,不能害怕,遇到困難就想辦法解決。不要總是等著別人去完成,自信的自己才是最最好的。相信自己肯定可以完成一切??梢詰?zhàn)勝困難,最后得到成功!參考文獻(xiàn)1 郭天祥。新概念51單片機(jī)c語言教程m 2009.12附錄:源程序代碼及注釋從機(jī)代碼:#include#include#defi
22、ne uchar unsigned char #define uint unsigned int#define addo (10.0/4095.0)/轉(zhuǎn)換進(jìn)率,12位精度(212-1=4095),滿量程為10vuint num; /計數(shù)次數(shù)/*管腳定義*/sbit sts = p20;sbit cs = p21;sbit a0 = p22;sbit ce = p23;sbit rc = p24;/*毫秒延時函數(shù)*/void delay_ms(uint n)uint i;while(n-) for(i=0;i110;i+);/*讀取ad1674轉(zhuǎn)換結(jié)果*/uint ad1674_read(voi
23、d) uint temp; uchar temp1,temp2; cs = 1; ce = 0; /初始化,關(guān)閉數(shù)據(jù)采集 cs = 0; a0 = 0; rc = 0; ce = 1; /ce=1,cs1=0,rc=0,a0=0啟動12位溫度轉(zhuǎn)換 _nop_(); while(sts=1);/等待數(shù)據(jù)采集結(jié)束 ce = 0; /芯片使能關(guān)閉 rc = 1; a0 = 0; ce = 1; /ce=1,cs1=0,rc=1,12/8=1,a0=0允許高八位數(shù)據(jù)并行輸出 _nop_(); temp1 = p0;/讀取轉(zhuǎn)換結(jié)果的高八位 ce = 0;/芯片使能關(guān)閉 rc = 1; a0 = 1; c
24、e = 1;/ce=1,cs1=0,rc=1,12/8=0,a0=1允許低四位數(shù)據(jù)并行輸出 _nop_(); temp2 = p0;/讀取轉(zhuǎn)換結(jié)果的低四位 temp = (temp14);/返回轉(zhuǎn)換結(jié)果,右移四位是因?yàn)閠emp2為p0口的高四位/*數(shù)據(jù)發(fā)送*/void putbyte(uchar byte)/ 利用硬件串口方式2 發(fā)送一個字節(jié)數(shù)據(jù) sbuf = byte;/將要發(fā)送的數(shù)據(jù)送到發(fā)送緩沖區(qū)域,系統(tǒng)自動發(fā)送 while(!ti);/查詢是否發(fā)送結(jié)束 當(dāng)ti=1 代表發(fā)送結(jié)束 ti = 0;/清發(fā)送結(jié)束位方便下一次發(fā)送void init()tmod=0x21;/定時器為方式2tl1=0
25、xfd; th1=0xfd;/波特率為9.6kth0 = (65536 - 50000) / 256; /裝初值實(shí)現(xiàn)50mstl0 = (65526 - 50000) % 256;tr0 = 1; /啟動定時器0tr1 = 1; /啟動定時器1et0 = 1; /開定時器0sm0 = 0; /方式2sm1 = 1;ri = 0;ti = 0;ren = 1;ea = 1; /開總中斷es = 1; /開串口中斷 /設(shè)置波特率void set_bote(uchar temp)if(temp=1) tl1=0xe8; th1=0xe8;/波特率為1.2k else if(temp=2) tl1=0
26、xf4; th1=0xf4;/波特率為2.4k else if(temp=4) tl1=0xfa; th1=0xfa;/波特率為4.8k else if(temp=8) tl1=0xfd; th1=0xfd;/波特率為9.6k /*主函數(shù)*/void main(void)int temp,temp1; uchar a, temp2;uchar j; init();/*查詢法接收波特率*/while(1)if(ri = 1)temp = sbuf;set_bote(temp);/設(shè)置波特率break; while(1) while(num=100); /num計數(shù)100實(shí)現(xiàn)5秒的延時num =
27、0;j = 0;/溫度正負(fù)標(biāo)志位temp = ad1674_read();/讀取轉(zhuǎn)換后的12位溫度值temp = (int)(1.8528-temp*addo)*10000/11.79); /實(shí)現(xiàn)實(shí)際溫度的轉(zhuǎn)換if(temp 0) temp = - temp;j = 0x20; /溫度若為負(fù),則標(biāo)志位00100000temp2 = temp % 10;/溫度小數(shù)位存放在temp2中temp = temp / 10;a = (uchar)temp; putbyte(a); /發(fā)送溫度delay_ms(10);/延時一段時間temp2 = temp2+132;/溫度小數(shù)位+132用于接收時的判斷p
28、utbyte(temp2);delay_ms(10); /發(fā)送溫度小數(shù)位temp = p1;temp = temp & 0x0f; /地址為p1口的低4位temp1 = temp1 4;temp1 = temp1 | 0xc0; /地址高位置1即11000000用于接收判斷temp = temp | temp1; temp = temp | j; /正負(fù)標(biāo)志位存于temp中putbyte(temp); /發(fā)送地址/*定時器0中斷*/void t0() interrupt 1th0 = (65536 - 50000) / 256;/裝初值50000實(shí)現(xiàn)50mstl0 = (65526 - 500
29、00) % 256;num+; /計數(shù)次數(shù)主機(jī)代碼:#include #include #define uchar unsigned char#define uint unsigned int/*數(shù)碼管顯示0-9,-,c無小數(shù)點(diǎn)*/uchar code table=0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,0xbf, 0xc6;/*數(shù)碼管顯示0-9有小數(shù)點(diǎn)*/uchar code table1=0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10,0x3f
30、;/*位選信號選中數(shù)碼管*/uchar disbit8 = 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,0x40,0x80;uchar disnum8,bote4;/存放要顯示的數(shù)據(jù)uchar flag, num, num1, m, aa, cc;sbit beep = p17; /蜂鳴器報警sbit led = p16;/紅燈亮報警/*延時子程序*/void delay(uint i) char j; for(i; i 0; i-) for(j = 200; j 0; j-);/*向緩沖器中寫入要顯示的數(shù)據(jù)*/void hextobcd(uint temp, uch
31、ar a,uchar cc)temp = temp * 10 + cc;/*若為正數(shù)即0-130*/if(a = 0) disnum0 = temp/1000; /百位 disnum1 = temp%1000/100; /十位 disnum2 = temp%100/10; /各位disnum3 = temp%10; /小數(shù)位disnum4 = 11; /顯示cdisnum5 = 10; /顯示- /*若為負(fù)數(shù)即-55-0*/else if (a = 1) disnum0 = 10; /顯示- disnum1 = temp/100; /十位 disnum2 = temp%100/10; /個位d
32、isnum3 = temp%10; /小數(shù)位disnum4 = 11; /顯示cdisnum5 = 10; /顯示-void init()scon = 0x50; tmod=0x21;/定時器為方式2tl1=0xfd; th1=0xfd;/波特率為9.6kth0 = (65536 - 50000) / 256; /裝初值實(shí)現(xiàn)50mstl0 = (65526 - 50000) % 256;tr0 = 1; /開定時器0tr1 = 1; /開定時器1et0 = 1; /開定時器0ren= 1; /允許接收sm0 = 0; /方式2sm1 = 1;ea = 1; /開總中斷es = 1; /開串口中
33、斷/*數(shù)據(jù)發(fā)送*/void putbyte(uchar byte)/ 利用硬件串口方式2 發(fā)送一個字節(jié)數(shù)據(jù) sbuf = byte;/將要發(fā)送的數(shù)據(jù)送到發(fā)送緩沖區(qū)域,系統(tǒng)自動發(fā)送 while(!ti);/查詢是否發(fā)送結(jié)束 當(dāng)ti=1 代表發(fā)送結(jié)束 ti = 0;/清發(fā)送結(jié)束位方便下一次發(fā)送 /*設(shè)置波特率 */void set_bote() uint temp=p1; temp=temp&0x0f;putbyte(temp);if(temp=1) tl1=0xe8; th1=0xe8;/波特率為1.2k else if(temp=2) tl1=0xf4; th1=0xf4;/波特率為2.4k
34、else if(temp=4) tl1=0xfa; th1=0xfa;/波特率為4.8k else if(temp=8) tl1=0xfd; th1=0xfd;/波特率為9.6k void display_led()uchar i;for(i = 0; i 8; i+) p2 = disbiti; /使用查表法進(jìn)行位選 if(i != 2)p0 = tabledisnumi; else p0 = table1disnumi;delay(150); /掃描間隔時間 太長會數(shù)碼管會有閃爍感void beep() uchar i , j;led = 1; for (i = 0; i 100; i+) beep = !beep; /beep取反 for(j = 0; j 250 ; j+) /需要產(chǎn)生方波 _nop_(); beep = 1; /關(guān)閉蜂鳴器void main(void)uchar i;init(); /初始化set_bote();
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《整式加減(1)》教案1
- 北京行測題庫2024
- 創(chuàng)造力在雜技表演中的作用研究
- 2024年梧州市“三支一扶”招募筆試真題
- 激素與增生相關(guān)性-洞察及研究
- 微生物發(fā)酵強(qiáng)化-洞察及研究
- 查詢優(yōu)化與數(shù)據(jù)壓縮-洞察及研究
- 電動車主充電行為分析-洞察及研究
- 成長與成功講課件
- 2025屆廣東省江門蓬江區(qū)五校聯(lián)考八下英語期中質(zhì)量檢測模擬試題含答案
- 園林行業(yè)職業(yè)道德
- 副校長筆試題庫及答案
- 2025年湖北恩施州檢察機(jī)關(guān)招聘雇員制檢察輔助人員40人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 陜西省濱河2025屆中考生物模擬預(yù)測題含解析
- 招標(biāo)代理招標(biāo)服務(wù)實(shí)施方案
- 《煤礦事故分析與預(yù)防》課件
- 幼兒園園長,教師輪訓(xùn)工作制度及流程
- 2025下半年江蘇南京市浦口區(qū)衛(wèi)健委所屬部分事業(yè)單位招聘人員24人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 省級溫室氣體清單編制指南
- 醫(yī)院醫(yī)用耗材SPD服務(wù)項(xiàng)目投標(biāo)方案
- 廈門大學(xué)海洋科學(xué)導(dǎo)論課件(水文部分)l
評論
0/150
提交評論