單片機(jī)實(shí)訓(xùn)報(bào)告
一.實(shí)訓(xùn)目的:
單片機(jī)專周實(shí)訓(xùn)是在學(xué)習(xí)完單片機(jī)應(yīng)用技術(shù)課程之后開(kāi)設(shè)的兩周實(shí)訓(xùn)課程,在課程學(xué)習(xí)中,通過(guò)理論與實(shí)驗(yàn)相結(jié)合的學(xué)習(xí),同學(xué)們已經(jīng)掌握了單片機(jī)基本的使用方法,但是教材上的例子比較簡(jiǎn)單,擴(kuò)展的空間不大,因此此次實(shí)訓(xùn)的目的是為了加強(qiáng)同學(xué)們對(duì)單片機(jī)開(kāi)發(fā)流程的認(rèn)識(shí),加深對(duì)單片機(jī)I/O口擴(kuò)展與外圍器件的使用,加強(qiáng)同學(xué)們的職業(yè)素養(yǎng),加強(qiáng)同學(xué)們的實(shí)際動(dòng)手能力與調(diào)試能力,從而實(shí)現(xiàn)從理論到實(shí)踐的升華。
二.實(shí)驗(yàn)設(shè)備:
1.單片機(jī)實(shí)驗(yàn)板2.計(jì)算機(jī)
3.ISIS7Professional、SuperPro等相關(guān)調(diào)試編程軟件4.5V電源5.燒錄器
三.實(shí)訓(xùn)要求:
本次實(shí)訓(xùn)的項(xiàng)目是使用單片機(jī)制作一個(gè)數(shù)字溫度計(jì),2位7段數(shù)碼管用以顯示兩位溫度數(shù)據(jù)。實(shí)訓(xùn)過(guò)程先使用仿真軟件實(shí)現(xiàn)電路的仿真,再使用萬(wàn)用板焊接電路,實(shí)現(xiàn)功能。要求仿真通過(guò),實(shí)訓(xùn)態(tài)度認(rèn)真,制作電路整潔,能實(shí)現(xiàn)功能。
設(shè)計(jì)要求:使用熱敏電阻作為溫度傳感器,單片機(jī)作為處理芯片,根據(jù)佛山
的氣候,要求溫度顯示數(shù)據(jù)范圍為從0℃~45℃,分辨率為1℃,數(shù)碼管顯示采用動(dòng)態(tài)掃描顯示方式。
四.實(shí)訓(xùn)電路:
五.設(shè)計(jì)過(guò)程:
根據(jù)開(kāi)發(fā)的要求,熱敏電阻作為溫度傳感器,必須使用直流偏置電路和AD轉(zhuǎn)換器,單片機(jī)接收AD轉(zhuǎn)換器的數(shù)據(jù),對(duì)照預(yù)先做好的溫度數(shù)據(jù)查表,查到了相應(yīng)的溫度數(shù)據(jù),送到數(shù)碼管動(dòng)態(tài)顯示。硬件結(jié)構(gòu)圖如下圖。
因此該系統(tǒng)重點(diǎn)解決的問(wèn)題是熱敏電阻的使用與AD轉(zhuǎn)換器的使用,而多位7段數(shù)碼管的動(dòng)態(tài)顯示已經(jīng)非常熟悉了,因此不做過(guò)多的闡述。下面對(duì)一些重點(diǎn)問(wèn)題進(jìn)一步進(jìn)行分析。
熱敏電阻偏置電路電壓
AD轉(zhuǎn)換器數(shù)據(jù)51單片機(jī)數(shù)碼管控制1.熱敏電阻:
熱敏電阻器有NTC與PTC兩種,NTC是NegativeTemperatureCoefficient的縮寫(xiě),意思是負(fù)的溫度系數(shù),泛指負(fù)溫度系數(shù)很大的半導(dǎo)體材料或元件,所謂NTC熱敏電阻器就是負(fù)溫度系數(shù)熱敏電阻器。它是以錳、鈷、鎳和銅等金屬氧化物為主要材料,采用陶瓷工藝制造而成的。這些金屬氧化物材料都具有半導(dǎo)體性質(zhì),因?yàn)樵趯?dǎo)電方式上完全類似鍺、硅等半導(dǎo)體材料。溫度低時(shí),這些氧化物材料的載流子(電子和孔穴)數(shù)目少,所以其電阻值較高;隨著溫度的升高,載流子數(shù)目增加,所以電阻值降低。NTC熱敏電阻器在室溫下的變化范圍為100~1M,溫度系數(shù)為2%~6.5%。NTC熱敏電阻器可廣泛應(yīng)用于溫度測(cè)量、溫度補(bǔ)償、抑制浪涌電流等場(chǎng)合。
NTC熱敏電阻專業(yè)術(shù)語(yǔ):(1)零功率電阻值RT()
RT指在規(guī)定溫度T時(shí),采用引起電阻值變化相對(duì)于總的測(cè)量誤差來(lái)說(shuō)可以忽略不計(jì)的測(cè)量功率測(cè)得的電阻值。
電阻值和溫度變化的關(guān)系式為
RT=RNexpB(1/T1/TN)
RT:在溫度T(K)時(shí)的NTC熱敏電阻阻值。RN:在額定溫度TN(K)時(shí)的NTC熱敏電阻阻值。T:規(guī)定溫度(K)。
B:NTC熱敏電阻的材料常數(shù),又叫熱敏指數(shù)。exp:以自然數(shù)e為底的指數(shù)(e=2.71828…)。
該關(guān)系式是經(jīng)驗(yàn)公式,只在額定溫度TN或額定電阻阻值RN的有限范圍內(nèi)才具有一定的精確度,因?yàn)椴牧铣?shù)B本身也是溫度T的函數(shù)。
(2)額定零功率電阻值R25()
根據(jù)國(guó)家標(biāo)準(zhǔn)規(guī)定,額定零功率電阻值是NTC熱敏電阻在基準(zhǔn)溫度25℃時(shí)測(cè)得的電阻值R25,這個(gè)電阻值就是NTC熱敏電阻的標(biāo)稱電阻值。通常所說(shuō)的NTC熱敏電阻多少阻值,亦指該值。
(3)材料常數(shù)(熱敏指數(shù))B值(K)B值被定義為
BT1T2RlnT1T2T1RT2
RT1:溫度T1(K)時(shí)的零功率電阻值。RT2:溫度T2(K)時(shí)的零功率電阻值。T1,T2:兩個(gè)被指定的溫度(K)。
對(duì)于常用的NTC熱敏電阻,B值的范圍一般為201*K~6000K。
本次實(shí)訓(xùn)所使用NTC(負(fù)溫度系數(shù))熱敏電阻型號(hào)為MF58-503-390,其標(biāo)稱阻值R25為50KΩ,材料常數(shù)B值為3900K(見(jiàn)型號(hào)的最后的三位數(shù),補(bǔ)0)。
根據(jù)上述公式,我們可以推算出MF58-503-390在0~99℃的電阻值,可以使
用excel表格公式推算,十分方便,當(dāng)然也可以參見(jiàn)課本的數(shù)據(jù)表格。
(4)熱敏電阻偏置電路
VCC171415818192021D0D1D2D3D4D5D6D7ABCVR(+)12熱敏電阻本身是無(wú)源元件,只是溫度變化導(dǎo)致電阻值變化,因此使R720K16用時(shí)必須外接偏置電路,從而實(shí)現(xiàn)溫度變化導(dǎo)致電壓(電流)的變化。VR(-)最理想的情況是使用電流源串聯(lián)熱敏電阻,電流恒定,電阻變化直接導(dǎo)25IC2ADC0809致熱敏電阻兩端電壓與熱敏電阻呈線性變化,但是電流源電流相對(duì)復(fù)雜,262423使用的元器件太多,因此在溫度計(jì)這樣精度不高的場(chǎng)合并不適合。
109226OEALESC7簡(jiǎn)單的偏置電路可以使用右圖的電路,電路簡(jiǎn)單,而且線性化較好,EOCCLK比較適合于簡(jiǎn)單的測(cè)溫電路。因此我們采用這種偏置電路。IN0IN1IN2IN3IN4IN5IN6IN7272812345RTR8100K
2.AD轉(zhuǎn)換器:
本次實(shí)訓(xùn)使用ADC0809芯片,在設(shè)計(jì)電路的時(shí)候一定要預(yù)先規(guī)劃好0809的使用方式,具體使用查詢方法、中斷方法還是定時(shí)訪問(wèn)方法可以自己選擇,因此電路的靈活性很強(qiáng),編程也隨著硬件變化而變化。
3.數(shù)碼管顯示
數(shù)碼管顯示使用動(dòng)態(tài)掃描方式,為了減少干擾和提高單片機(jī)的穩(wěn)定性,驅(qū)動(dòng)數(shù)碼管使用一個(gè)74LS04(非門(mén))驅(qū)動(dòng)。
六.實(shí)訓(xùn)程序:
ORG0000HLOOP:CLRP2.2SETBP2.2JNBP2.1,$CLRP2.0MOVA,P0SETBP2.0CLRC
SUBBA,#2CH
MOVDPTR,#TEMPTABMOVCA,@A+DPTRSETBP3.1SETBP3.MOVB,#10DIVABMOVR3,AMOVR4,B
MOVDPTR,#DIGITTABMOVA,R3
MOVCA,@A+DPTRMOVP1,ACLRP3.2
ACALLDELAYMOVA,R4
MOVCA,@A+DPTRSETRP3.2MOVP1,ACLRP3.1
ACALLDELAYAJMPLOOPDELAY:MOVR6,#2
D1:MOVR7.#250D2:NOP
DJNZR7,D2DJNZR6,D1RET
DIGITTAB:
DB0C0HDB0F9HDB0A4HDB0B0HDB099HDB092HDB082HDB0F8HDB080HDB090HDB08EH
TEMPTAB:
DB90,89,88,97,100,86,85,84,83,100,82,81,100,80DB79,100,78,77,100,76,75,100,74,100,73,100,72,71DB100,70,100,69,100,68,100,67,100,66,100,65,100,64DB100,63,100,62,100,61,100,60,100,100,59,100,58,100DB57,100,100,56,100,55,100,54,100,100,53,100,52,100DB100,51,100,50,100,100,49,100,48,100,100,47,100,46DB100,100,45,100,100,44,100,43,100,100,42,100,100,41DB100,40,100,100,39,100,38,100,100,37,100,100,36,1DB35,100,100,34,100,100,33,100,32,100,100,31,100,30DB100,100,29,100,28,100,100,27,100,26,100,100,25,100DB24,100,100,23,100,22,100,21,100,20,100,100,19,100DB18,100,17,100,16,100,15,100,14,100,13,100,12,100DB11,100,10,9,100,8,100,7,6,100,5,4,100,3DB2,1,100,0END
七.實(shí)訓(xùn)心得:
通過(guò)幾天的實(shí)訓(xùn)和劉志遠(yuǎn)老師精心備課的教導(dǎo),我在理論的基礎(chǔ)上更深刻的掌握了單
片機(jī)的深層內(nèi)容及實(shí)際生活中的應(yīng)用,實(shí)訓(xùn)鍛煉了自己動(dòng)手能力和思維能力。經(jīng)過(guò)這幾個(gè)星期的實(shí)訓(xùn),我懂了單片機(jī)溫度顯示器的工作原理:天氣的高低靠熱敏電阻來(lái)反應(yīng)出分壓后出來(lái)相對(duì)應(yīng)的電壓用ADC0809數(shù)模轉(zhuǎn)換的芯片把相對(duì)應(yīng)的電壓反饋到單片機(jī)里,單片機(jī)內(nèi)部程序已經(jīng)編譯好溫度的精度(即是分辨率)然后用動(dòng)態(tài)七段數(shù)碼管顯示出相對(duì)應(yīng)的溫度來(lái),最后焊接出實(shí)物,用手緊貼住熱敏電阻溫度隨手貼的時(shí)間不斷上升放手后溫度恢復(fù)成室溫的溫度,調(diào)試成功。
實(shí)訓(xùn)讓我對(duì)單片機(jī)控制系統(tǒng)的研究產(chǎn)生濃厚的興趣,還讓我了解了怎樣制作單片機(jī)燒錄器及程序的燒錄,在此以后,我會(huì)更多的去了解這個(gè)奇妙的領(lǐng)域。
擴(kuò)展閱讀:單片機(jī)實(shí)訓(xùn)報(bào)告心得
廣東輕工職業(yè)技術(shù)學(xué)院
實(shí)訓(xùn)報(bào)告
實(shí)訓(xùn)項(xiàng)目系別:專業(yè):班級(jí):姓名:學(xué)號(hào):指導(dǎo)老師:實(shí)訓(xùn)地點(diǎn):實(shí)訓(xùn)時(shí)間:
單片機(jī)實(shí)訓(xùn)電子通信工程系應(yīng)用電子技術(shù)嵌入式091班11222
201*080202316丁向榮、趙慧第三實(shí)訓(xùn)樓C309201*年1月10日至1月1
日
前言
單片機(jī)應(yīng)用技術(shù)是現(xiàn)代電子設(shè)計(jì)的核心技術(shù),學(xué)習(xí)單片機(jī)只是就是要將單片機(jī)應(yīng)用到電子產(chǎn)品中,以單片機(jī)為控制核心實(shí)現(xiàn)電子系統(tǒng)所需實(shí)現(xiàn)的功能。單片機(jī)的應(yīng)用能力很多程度上決定了電子類專業(yè)學(xué)生電子設(shè)計(jì)與電子應(yīng)用的水平與能力,尤其是高職學(xué)生更是如此。
本項(xiàng)目要求設(shè)計(jì)一個(gè)簡(jiǎn)單的電子時(shí)鐘,用六位LED數(shù)碼管實(shí)現(xiàn)電子時(shí)鐘的功能,顯示方式為時(shí)、分、秒,采用24h(小時(shí))計(jì)時(shí)方式,使用按鍵開(kāi)關(guān)可實(shí)現(xiàn)時(shí)分調(diào)整。
通過(guò)電子鬧鐘項(xiàng)目的課題設(shè)計(jì),讓同學(xué)
們體驗(yàn)項(xiàng)目設(shè)計(jì)的要點(diǎn),了解項(xiàng)目設(shè)計(jì)的流程,加深對(duì)單片機(jī)應(yīng)用知識(shí)的學(xué)習(xí),體會(huì)團(tuán)隊(duì)協(xié)作的力量所在。為日后的嵌入式專業(yè)學(xué)習(xí)鞏固基礎(chǔ)。
目錄
1.概述…………………………………………………………
1.1系統(tǒng)的作用
1.2系統(tǒng)的功能要求
2.系統(tǒng)硬件設(shè)計(jì)………………………………………………..
2.1系統(tǒng)的電路原理2.2電路原理圖2.3各控制按鈕控制功能說(shuō)明.
3.系統(tǒng)軟件設(shè)計(jì)……………………………………………….4.系統(tǒng)調(diào)試…………………………………………………….5.總結(jié)…………………………………………………………
1.概述
1.1系統(tǒng)的作用
本系統(tǒng)是利用AT89C51單片機(jī)結(jié)合6個(gè)七段顯示器以24時(shí)制“時(shí)時(shí)分分秒秒”格式顯示時(shí)間的電子定時(shí)鬧鈴,系統(tǒng)可以設(shè)置8組定時(shí)鬧鈴和1組倒計(jì)時(shí)功能;當(dāng)定時(shí)鬧鈴和倒計(jì)結(jié)束時(shí),該電子時(shí)鐘通過(guò)蜂鳴器發(fā)出嘀嘀嘀響聲;本系統(tǒng)還具有半點(diǎn)和整點(diǎn)報(bào)時(shí)功能,當(dāng)現(xiàn)在時(shí)間為半點(diǎn)時(shí)會(huì)發(fā)出嘀的一聲響,當(dāng)現(xiàn)在時(shí)間為整點(diǎn)時(shí)報(bào)整點(diǎn)數(shù)響聲。由于該電子定時(shí)鬧鈴有強(qiáng)大功能可以在多種場(chǎng)合下使用,利用七段顯示器發(fā)光也可以在夜晚和黑暗場(chǎng)合下使用。1.2系統(tǒng)的功能要求
(1)使用6位七段顯示器顯示24時(shí)制時(shí)間。(2)時(shí)間顯示格式為“時(shí)時(shí)分分秒秒”。(3)定時(shí)鬧鈴功能。(4)倒計(jì)時(shí)功能。
(5)半點(diǎn)報(bào)時(shí)功能:當(dāng)現(xiàn)在時(shí)間為半點(diǎn)時(shí),蜂鳴器發(fā)出“嘀”
一聲響。
(6)整點(diǎn)報(bào)時(shí)功能:當(dāng)現(xiàn)在時(shí)間為整點(diǎn)時(shí),蜂鳴器發(fā)出現(xiàn)在時(shí)間整點(diǎn)數(shù)響聲。
(7)當(dāng)任一鬧鈴時(shí)間到時(shí)發(fā)出連續(xù)“嘀嘀嘀”響聲,七段顯示器顯示“XHHMM”。
(8)當(dāng)?shù)褂?jì)時(shí)時(shí)間到時(shí)發(fā)出嘀嘀嘀響聲,七段顯示器顯示“000000”。
(9)定時(shí)鬧鈴、倒計(jì)時(shí)和現(xiàn)在時(shí)間模式可以互相切換而不影響各自功能。
(10)具有4個(gè)按鍵來(lái)進(jìn)行功能設(shè)置,可以設(shè)置當(dāng)前時(shí)間、8組鬧鈴的時(shí)間設(shè)置和開(kāi)關(guān)及倒計(jì)時(shí)的時(shí)間設(shè)置。
(11)通過(guò)復(fù)位按鍵可以重啟系統(tǒng)。
2.系統(tǒng)的硬件設(shè)計(jì)
2.1系統(tǒng)的電路原理
(1)系統(tǒng)以AT89C51單片機(jī)為本電路的核心元件,通過(guò)單片機(jī)的P0.0~P0.7引腳和A102J排阻加上拉電壓來(lái)驅(qū)動(dòng)七段顯示器段顯示數(shù)字。
(2)通過(guò)單片機(jī)的P2.2~P2.7引腳連接A103J排阻拉升電壓信號(hào),控制6個(gè)8050NPN三極管使共陰極七段顯示器連通接地來(lái)循
環(huán)點(diǎn)亮6位七段顯示器。
(3)在七段顯示器供電的同時(shí)由P0腳驅(qū)動(dòng)顯示不同數(shù)字。根據(jù)人眼的視覺(jué)暫留特點(diǎn),調(diào)整延遲時(shí)間使所觀察到時(shí)間數(shù)字是穩(wěn)定的數(shù)字。
(4)系統(tǒng)使用了HYDZ蜂鳴器,通過(guò)單片機(jī)P3.7引腳連接8550PNP三極管推動(dòng)發(fā)聲。
(5)電路通過(guò)4個(gè)按鍵連接單片機(jī)P1.0~P1.3引腳低電平控制系統(tǒng)功能設(shè)置。
(6)單片機(jī)的復(fù)位電路,采用傳統(tǒng)上電復(fù)位,通過(guò)Reset按鍵控制。
(7)電路可以通過(guò)+5V和+12V直流電供電,當(dāng)使用+12V直流供電時(shí),電路通過(guò)1個(gè)7805三端穩(wěn)電器、2個(gè)35v100μF電解電容和1個(gè)50v10μF電解電容轉(zhuǎn)換成+5V直流電供電。
(8)系統(tǒng)通過(guò)一個(gè)發(fā)光二極管指示電路供電是或正常。
2.2電路原理圖
圖示為數(shù)碼管顯示電路
圖示為主程序電路圖2.3各控制按鈕控制功能說(shuō)明
KEY0(按鍵INT0):調(diào)時(shí)向左移一位數(shù)接P3.0KEY1(按鍵INT1):當(dāng)前位加1接P3.1KEY2(按鍵T0):當(dāng)前位減1接P3.2KEY3(按鍵T1):確定調(diào)時(shí)時(shí)間接P3.3
S1:切換鬧鐘調(diào)時(shí)模式(高電平)接P3.4S2:中斷程序(高電平),中斷當(dāng)前的鬧鐘或整點(diǎn)報(bào)時(shí)的響應(yīng)接P3.5S3:暫停和開(kāi)始計(jì)時(shí)(高電平)接P3.6
BELL:蜂鳴器接P3.7
當(dāng)整點(diǎn)報(bào)時(shí)和鬧鐘響應(yīng)的時(shí)候會(huì)響。
LED燈當(dāng)整點(diǎn)報(bào)時(shí)和鬧鐘響應(yīng)的時(shí)候會(huì)亮。
P1.0~P1.3分別接LED燈的高四位,P1.4~P1.7分別接燈的低四位。
P0.0~P0.7分別口接數(shù)碼管的段選的a~h位
P2.0~P2.5口分別接數(shù)碼管的位選的6~1位
3.軟件設(shè)計(jì)
表一程序內(nèi)存資源分配表
內(nèi)存地址20H21H22H23H24H25H26H27H.027H.127H.227H.327H.427H.527H.6
變量名稱作用說(shuō)明SECONMINHOUR存放50毫秒計(jì)時(shí)存放0.5秒計(jì)時(shí)存放1秒計(jì)時(shí)存放1分計(jì)時(shí)存放1小時(shí)計(jì)時(shí)用于中斷1(#6H)用于顯示中的閃爍鬧鐘標(biāo)志位允許響鈴用于標(biāo)志分、秒(1為秒),鬧鐘功能時(shí)也一樣鬧鐘總開(kāi)關(guān)(1為開(kāi))用于閃爍標(biāo)志用于閃爍秒表標(biāo)志表一程序內(nèi)存資源分配表
內(nèi)存地址27H.728H-29H30H-35H36H37H-39H40H變量名稱作用說(shuō)明DISPSP兩組鬧鐘的標(biāo)志位,默認(rèn)值為0用于保存閃爍時(shí)的調(diào)時(shí)區(qū)地址存放調(diào)時(shí)區(qū)地址用于存放要顯示的首字(例如秒)第一組鬧鐘的時(shí)分棧底秒表第二組鬧鐘的時(shí)分存放鬧鐘調(diào)分地址存放鬧鐘調(diào)時(shí)地址鬧鐘組的切換標(biāo)志(默認(rèn)值為0)切換(默認(rèn)值為0)鬧鐘第二組開(kāi)關(guān)(默認(rèn)值為0)50H-52H53H-55H56H57H2AH.02AH.12AH.2
表二芯片端口資源分配表
芯片端口P1.0P1.1P1.2P1.3P1.7P0P2.2P2.3變量名稱作用說(shuō)明K1K2K3K4SPK操作鍵K1操作鍵K2操作鍵K3操作鍵K4壓電喇叭控制信號(hào)七段顯示器數(shù)數(shù)字形狀控制控制時(shí)間小時(shí)的十位七段顯示器亮滅控制時(shí)間小時(shí)的個(gè)位七段顯示器亮滅表二芯片端口資源分配表
芯片端口P2.4P2.5P2.6P2.7P3.0P3.1P3.2P3.3
變量名稱作用說(shuō)明BELL控制時(shí)間分鐘的十位七段顯示器亮滅控制時(shí)間分鐘的個(gè)位七段顯示器亮滅控制時(shí)間秒鐘的十位七段顯示器亮滅控制時(shí)間秒鐘的個(gè)位七段顯示器亮滅蜂鳴器LED半秒閃爍LED顯示第一組鬧鐘是否開(kāi)啟LED顯示第二組鬧鐘是否開(kāi)啟表三寄存器資源分配表
組寄存器R0R1第0組R2R3R4R6、R7第1組
作用說(shuō)明存放秒顯示地址顯示首址#06H#0FEH#3H延時(shí)初始值用于keyB、C用于中斷R0R5
流程圖顯示如下:
開(kāi)始系統(tǒng)初始化電子鐘時(shí)分秒顯示中斷允許T0中斷顯示子程序按鍵子程序主程序流程圖
12調(diào)時(shí)0.3s閃爍顯示中斷
開(kāi)始系統(tǒng)初始化判斷中斷S1=1?S2=1?S3=0?進(jìn)入鬧鐘調(diào)時(shí)強(qiáng)制退出中斷暫停計(jì)時(shí)返回計(jì)時(shí)結(jié)束功能選擇中斷
開(kāi)始N開(kāi)啟按鈕中斷?Y繼續(xù)計(jì)時(shí)進(jìn)入按鈕判斷顯示+1YKey3=0?Y退出按鈕中斷Key3=0?Key1=0?N調(diào)時(shí)位左移一位Key2=0?顯示-1調(diào)時(shí)程序流程圖
開(kāi)始保護(hù)現(xiàn)場(chǎng)N中斷6次?Y當(dāng)前調(diào)整位熄滅恢復(fù)現(xiàn)場(chǎng)返回調(diào)時(shí)0.3s閃爍顯示中斷
源程序清單:
#include
#defineucharunsignedchar#defineled_dataP0//P0顯示數(shù)碼管當(dāng)前位的數(shù)字#defineled_bitP2//P2控制當(dāng)前數(shù)碼管顯示的位數(shù)
intb;
ucharconls=0x00;//記錄秒分時(shí)的個(gè)位數(shù)ucharcons=0x00;//記錄秒分時(shí)的十位數(shù)ucharcon=0x00;//記錄調(diào)時(shí)程序當(dāng)前位數(shù)ucharx=0x00;//記錄鬧鐘
sbitkey0=P3^0;//key0控制調(diào)時(shí)位左移以一位sbitkey1=P3^1;//key1控制挑時(shí)當(dāng)前位數(shù)字+1sbitkey2=P3^2;//key1控制挑時(shí)當(dāng)前位數(shù)字-1sbitkey3=P3^3;//確定當(dāng)前挑時(shí)中斷程序sbitstop=P3^4;//用來(lái)暫時(shí)計(jì)時(shí)和啟動(dòng)計(jì)時(shí)sbitbaojing=P3^5;//用以響應(yīng)整點(diǎn)報(bào)時(shí)和鬧鐘sbitnaozhong=P3^6;//用來(lái)開(kāi)啟鬧鐘調(diào)時(shí)程序sbitbeep=P3^7;//用來(lái)終止當(dāng)前整點(diǎn)報(bào)時(shí)或鬧鐘響應(yīng)
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//數(shù)碼管當(dāng)前位0~9的顯示碼
uchardatascan_con[6]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};//數(shù)碼管左到右6個(gè)位的顯示
uchardatadis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00};//數(shù)碼管的顯示碼
uchardatatimedata[6]={0x00,0x00,0x00,0x00,0x00,0x00};//電子鐘的初始時(shí)間:00:00:00
uchardatasecclock[6]={0x00,0x00,0x00,0x00,0x00,0x00};//鬧鐘調(diào)時(shí)的初始時(shí)間:00:00:00uchari;
display();//顯示數(shù)碼管函數(shù)申明keyscan();//調(diào)時(shí)按鈕函數(shù)聲明//alarmcolk();
/************************************************************************/
/*1ms延時(shí)顯示程序
*/
/************************************************************************/
voiddelay(intz){intx,y;
for(x=0;x
/************************************************************************/
/*初始化子程序*/
/************************************************************************/initializa(){
for(i=0;i{baojing=0;P1=0x00;delay(500);baojing=1;P1=0xff;delay(500);}}}
if(key3==0){con=0;x=0;TR1=0;ET1=0;TR0=1;ET0=1;}//關(guān)閉調(diào)時(shí)按鈕中斷,繼續(xù)顯示電子鐘的時(shí)間elseif(naozhong==0)//開(kāi)啟調(diào)時(shí)按鈕中斷{EA=0;if(key0==0){delay(10);while(key0==0);if(dis[con]==10){dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];}con++;TR0=0;ET0=0;TR1=1;ET1=1;if(con>=6)//若左移位數(shù)超過(guò)6,則關(guān)閉調(diào)時(shí)按鈕中斷,繼續(xù)顯示電子鐘的時(shí)間{con=0;TR1=0;ET1=0;TR0=1;ET0=1;}}if(con!=0){if(key1==0){delay(10);while(key1==0);timedata[con]++;//當(dāng)前位數(shù)據(jù)+1switch(con){case1:case3:if(timedata[con]>=6)//1、3位滿6進(jìn)一{timedata[con]=0;
}break;case2:case4:if(timedata[con]>=10)進(jìn)一{timedata[con]=0;}break;case5:if(timedata[con]>=3){timedata[con]=0;}break;default:;}dis[con]=timedata[con];dis[6]=0x0a;}}if(con!=0){if(key2==0){delay(10);while(key2==0);switch(con){case1:case3:if(timedata[con]==0){timedata[con]=0x05;的減1處理}else{timedata[con]--;}break;case2:case4:if(timedata[con]==0)
20//2、4位滿10
//5位滿2清零
//1、3位為0時(shí)
//當(dāng)前位數(shù)據(jù)-{timedata[con]=0x09;的減1處理}else{timedata[con]--;}break;case5:if(timedata[con]==0){timedata[con]=0x02;減1處理}else{timedata[con]--;}break;default:;}dis[con]=timedata[con];dis[6]=0x0a;}}EA=1;}elseif(naozhong!=0)斷,功能類似上面{EA=0;if(key0==0){delay(10);while(key0==0);if(dis[x]>=10){dis[7]=dis[x];dis[x]=dis[6];dis[6]=dis[7];}x++;TR0=0;ET0=0;TR1=1;ET1=1;if(x>=6){x=0;TR1=0;ET1=0;TR0=1;ET0=1;}
21//2、4位為0時(shí)
//當(dāng)前位數(shù)據(jù)-1
//5位為0時(shí)的
//減1處理
//送顯示數(shù)據(jù)
//開(kāi)啟調(diào)時(shí)按鈕中
}if(x=6){secclock[x]=0;}break;case2:case4:if(secclock[x]>=10){secclock[x]=0;}break;case5:if(secclock[x]>=3){secclock[x]=0;}break;default:;
}dis[x]=secclock[x];dis[6]=0x0a;}}if(x>=0){if(key2==0){delay(10);while(key2==0);switch(x){
case1:case3:if(secclock[x]==0){secclock[x]=0x05;}else{secclock[x]--;}break;case2:case4:if(secclock[x]==0){secclock[x]=0x09;}else{secclock[x]--;}break;case5:if(secclock[x]==0){secclock[x]=0x02;}else{secclock[x]--;}break;default:;}dis[x]=secclock[x];dis[6]=0x0a;}}EA=1;}
}/********************************************************************
****/
/*0.3s閃爍中斷小程序*/
/************************************************************************/
voidtime_intt1(void)interrupt3{
EA=0;TR1=0;TH1=0X3C;TL0=0XB0;TR1=1;cons++;
if(cons==6)//50msx6=300ms=0.3s{cons=0x00;dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];}
EA=1;}
/************************************************************************/
/*電子鐘顯示進(jìn)位處理程序*/
/************************************************************************/
voidtime_intt0(void)interrupt1{{inti,j,x=0;j=0;
if(naozhong==0&&stop==1){ET0=0;TR0=0;TH0=0X3C;TL0=0XB0;TR0=1;conls++;if(conls==20)//20次延時(shí),秒+1{conls=0x00;timedata[0]++;if(timedata[0]>=10)//10s時(shí),秒十位數(shù)+1{timedata[0]=0;timedata[1]++;if(timedata[1]>=6)//60s時(shí),分+1{//5timedata[1]=0;timedata[2]++;
if(timedata[2]>=10)//10min時(shí),分十位數(shù)+1{timedata[2]=0;timedata[3]++;if(timedata[3]>=6)//60min時(shí),時(shí)+1{timedata[3]=0;timedata[4]++;if(beep==0){
for(i=1;i=10)時(shí),時(shí)十位數(shù)+1{timedata[4]=0;timedata[5]++;if(timedata[5]==2)//當(dāng)h等于24時(shí),清零{if(timedata[4]==4){timedata[4]=0;timedata[5]=0;}}}}}}}for(b=0;b顯示碼{dis[b]=timedata[b];}}ET0=1;}
/*顯示清零并轉(zhuǎn)換成秒計(jì)時(shí)(原時(shí)間仍然保存)*//*elseif(jishi==1){for(j=0;j=10){timedata[0]=0;timedata[1]++;if(secclock[0]>=10){secclock[0]=0;secclock[1]++;}}if(timedata[1]>=6){timedata[1]=0;timedata[2]++;if(secclock[1]>=6){secclock[1]=0;secclock[2]++;}}if(timedata[2]>=10)
26}}
{timedata[2]=0;if(secclock[2]>=10){secclock[2]=0;secclock[3]++;}}}}for(b=0;b
5.總結(jié)
AT89C51單片機(jī)作為嵌入式專業(yè)的入門(mén)基礎(chǔ),受到行業(yè)內(nèi)的高度重視。作為一名高職高專的學(xué)生,最重要的是實(shí)際操作能力,而對(duì)于修讀嵌入式專業(yè)的高職學(xué)生更是如此。單片機(jī)實(shí)訓(xùn),敲開(kāi)了同學(xué)們對(duì)知識(shí)求知若渴的大門(mén)。
本周的單片機(jī)實(shí)訓(xùn)項(xiàng)目課題是定時(shí)鬧鈴。剛接到課題時(shí)感覺(jué)毫無(wú)壓力,覺(jué)得自己的能力應(yīng)該很快就可以完成,因?yàn)楸卷?xiàng)目要實(shí)現(xiàn)的功能只不過(guò)是同等于價(jià)值2元的電子鬧鐘!
但是現(xiàn)實(shí)卻擊垮了浮夸的我們。程序設(shè)計(jì)無(wú)從入手,調(diào)試錯(cuò)誤,單片機(jī)無(wú)響應(yīng)……老師在講解課題任務(wù)的時(shí)候確實(shí)是很簡(jiǎn)單,清晰明了。但是真正到我們?cè)O(shè)計(jì)的時(shí)候,錯(cuò)誤接一連二。由于對(duì)匯編語(yǔ)言掌握不足,最終放棄匯編語(yǔ)言改換C語(yǔ)言編寫(xiě)程序。函數(shù)調(diào)用,設(shè)計(jì)循環(huán)語(yǔ)句,調(diào)用數(shù)組函數(shù)……
一步步慢慢深入,一點(diǎn)點(diǎn)漸漸掌握。最終,經(jīng)過(guò)小組成員不停地編碼,測(cè)試,運(yùn)行,一個(gè)小項(xiàng)目終于完成。
項(xiàng)目雖然完成,但通過(guò)本次實(shí)訓(xùn)確實(shí)感觸不少。于嵌入式行業(yè)而言,單片機(jī)談得上是基礎(chǔ),但是就連這樣一門(mén)基礎(chǔ)我們也沒(méi)有熟悉掌握,對(duì)于日后ARM的學(xué)習(xí)就更是困難。不過(guò)在實(shí)訓(xùn)中我們也學(xué)會(huì)了很多。項(xiàng)目設(shè)計(jì)、功能選定、搭建硬件工作環(huán)境、編寫(xiě)軟件程序,程序下載測(cè)試、程序最終實(shí)現(xiàn),以及在項(xiàng)目設(shè)計(jì)中的團(tuán)隊(duì)分工與合作。
嵌入式行業(yè)在我國(guó)日趨發(fā)展成熟,而嵌入式行業(yè)的人才
卻是十分緊缺,這就取決于嵌入式行業(yè)對(duì)技術(shù)型人才要求高的特點(diǎn)。要想在嵌入式行業(yè)站穩(wěn)腳,就必須要痛下苦工,敢于鉆研。相信通過(guò)日后的專業(yè)知識(shí)學(xué)習(xí),我們會(huì)在嵌入式學(xué)習(xí)的道路上越走越遠(yuǎn)。
友情提示:本文中關(guān)于《單片機(jī)實(shí)訓(xùn)報(bào)告》給出的范例僅供您參考拓展思維使用,單片機(jī)實(shí)訓(xùn)報(bào)告:該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。