|
單片機(jī)課程報(bào)告 專業(yè):電氣自動(dòng)化 姓名:JION學(xué)長(zhǎng) QQ: 指導(dǎo)老師:朱** 一、設(shè)計(jì)背景
數(shù)字鐘已成為人們?nèi)粘I钪斜夭豢缮俚谋匦杵罚瑥V泛用于個(gè)人家庭以及辦公室等公共場(chǎng)所,給人們的生活、學(xué)習(xí)、工作、娛樂帶來極大的方便。盡管目前市場(chǎng)上已有現(xiàn)成的數(shù)字鐘集成電路芯片出售,價(jià)格便宜、使用也方便,但鑒于單片機(jī)的定時(shí)器功能也可以完成數(shù)字鐘電路的設(shè)計(jì),因此進(jìn)行數(shù)字鐘的設(shè)計(jì)是必要的。在這里我們將已學(xué)過的比較零散的數(shù)字電路的知識(shí)有機(jī)的、系統(tǒng)的聯(lián)系起來用于實(shí)際,來培養(yǎng)我們的綜合分析和設(shè)計(jì)電路,寫程序、調(diào)試電路的能力。單片機(jī)具有體積小、功能強(qiáng)可靠性高、價(jià)格低廉等一系列優(yōu)點(diǎn),不僅已成為工業(yè)測(cè)控領(lǐng)域普遍采用的智能化控制工具,而且已滲入到人們工作和和生活的各個(gè)角落,有力地推動(dòng)了各行業(yè)的技術(shù)改造和產(chǎn)品的更新?lián)Q代,應(yīng)用前景廣闊。 二、單片機(jī)課程設(shè)計(jì)目的
1.進(jìn)一步熟悉和掌握8051單片機(jī)的結(jié)構(gòu)及工作原理。
2.掌握單片機(jī)的接口技術(shù)及相關(guān)外圍芯片的外特性,控制方法。
3.通過課程設(shè)計(jì),掌握以單片機(jī)核心的電路設(shè)計(jì)的基本方法和技術(shù),了解表關(guān)電路參數(shù)的計(jì)算方法。
4.通過實(shí)際程序設(shè)計(jì)和調(diào)試,逐步掌握模塊化程序設(shè)計(jì)方法和調(diào)試技術(shù)。
5.通過完成一個(gè)包括電路設(shè)計(jì)和程序開發(fā)的完整過程,使學(xué)生了解開發(fā)一單片機(jī)系統(tǒng)的全過程,為今后從事相應(yīng)打下基礎(chǔ)。
6.掌握SPI串口進(jìn)行數(shù)據(jù)傳輸?shù)膽?yīng)用,并學(xué)會(huì)使用外部芯片輔助項(xiàng)設(shè)計(jì)。
7.鍛煉通過自學(xué)與自己探索的方式解決問題的能力。
8.通過此次課程設(shè)計(jì)將單片機(jī)軟硬件結(jié)合起來對(duì)程序進(jìn)行編輯,校驗(yàn),鍛煉實(shí)踐能力和理論聯(lián)系實(shí)際的能力。
三、課程設(shè)計(jì)要求。
1.本系統(tǒng)共用4個(gè)數(shù)碼管從左到右依次顯示月、日/時(shí)、分采用軟件譯碼靜態(tài)顯示。
2.按鍵處理設(shè)置為:如沒有按鍵,則時(shí)鐘正常走時(shí)并且第二個(gè)數(shù)碼管的小數(shù)點(diǎn)一秒一下。
3.當(dāng)按下切換按鍵時(shí)進(jìn)入時(shí)間/日期切換鍵時(shí),顯示日期小數(shù)點(diǎn)常亮,再按一下有變成時(shí)間顯示。
4.校正時(shí)間功能
按下校正鍵,月數(shù)碼管重復(fù)閃爍,小數(shù)點(diǎn)常亮,這樣在按下加調(diào)鍵可以進(jìn)行校時(shí)。
再按下校正鍵時(shí),日數(shù)碼管重復(fù)閃爍,小數(shù)點(diǎn)常亮,這樣在按下加調(diào)鍵可以進(jìn)行校時(shí)。
再按下校正鍵時(shí),時(shí)數(shù)碼管重復(fù)閃爍,小數(shù)點(diǎn)閃爍,這樣在按下加調(diào)鍵可以進(jìn)行校時(shí)。
再按下校正鍵時(shí),分?jǐn)?shù)碼管重復(fù)閃爍,小數(shù)點(diǎn)閃爍,這樣在按下加調(diào)鍵可以進(jìn)行校時(shí)按。按下確定鍵后程序正常走時(shí) 。 四、設(shè)計(jì)方案
4.1、計(jì)時(shí)部分課程設(shè)計(jì)思路:
該課程設(shè)計(jì)是利用80C51單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器、中斷系統(tǒng)、以及行列鍵盤,設(shè)計(jì)一個(gè)單片機(jī)電子時(shí)鐘。設(shè)計(jì)的電子時(shí)鐘通過數(shù)碼管顯示,并能通過按鍵實(shí)現(xiàn)設(shè)置時(shí)間、校時(shí)、啟動(dòng)控制等。用定時(shí)/計(jì)數(shù)器T0,工作于定時(shí),采用方式1,對(duì)12MHZ的系統(tǒng)時(shí)鐘進(jìn)行定時(shí)計(jì)數(shù),初值設(shè)為62500ms(自己計(jì)算)。形成定時(shí)時(shí)間為62500ms。用片內(nèi)RAM的2FH單元對(duì)62500ms計(jì)數(shù),計(jì)16次產(chǎn)生秒計(jì)數(shù)器34H單元加1,秒計(jì)數(shù)器加到60則分計(jì)數(shù)器33H單元加1,分計(jì)數(shù)器加到60則時(shí)計(jì)數(shù)器32H單元加1,時(shí)計(jì)數(shù)器加到24則時(shí)計(jì)數(shù)器清0。然后把分、時(shí) 、日、月計(jì)數(shù)器分成分單元和時(shí)單元放到4個(gè)數(shù)碼管的顯示緩沖區(qū),通過數(shù)碼管顯示出來。顯示格式為小時(shí)高位、小時(shí)低位---分高位、分低位和顯示日期格式為月高位、月低位---日高位、日低位。 4.4資源分配:
按鍵信息存儲(chǔ)單元 50H
月單元 30H
日單元 31H
時(shí)單元 32H
分單元 33H
秒單元 34H
計(jì)數(shù)單元 2FH
清零標(biāo)志位 20H.1
時(shí)間/日期標(biāo)志位 20H.0
顯示的四位BCD碼依次放入43H、42H、41H、40H
校正指針 21H
顯示緩沖區(qū) 3BH 3AH,
4.2、按鍵判斷部分課程設(shè)計(jì)思路:
當(dāng)每十六微妙進(jìn)位一次時(shí),程序就進(jìn)行一次判斷按鍵是否有按下的(是否有 6 按鍵功能 切換鍵,切換日期與時(shí)間 校正鍵 校時(shí)鍵, 確定鍵校正鍵按下k2),判斷是否與上次按鍵相同,如果相同直接送入時(shí)間緩沖間送出顯示,如果不相同就保存按下的按鍵再進(jìn)行判斷是不是切換鍵(ACC.5,SET2) 按下,如果是時(shí)間時(shí)期同時(shí)取反,將取反時(shí)間送入時(shí)間緩沖間送出顯示同時(shí)將取反日期送入日期緩沖間送出顯示。如果不是,判斷是否是校正鍵按下,如果不是重復(fù)將取反時(shí)間送入時(shí)間緩沖間送出顯示同時(shí)將取反日期送入日期緩沖間送出顯示。如果是校正鍵按下就進(jìn)入校正狀態(tài),將校正指針初值設(shè)成(00,01、10、11、分別代表分、時(shí)日、月)同樣判斷校正指針(20H.1)中的值進(jìn)入下面分、時(shí)、日、月四個(gè)子程序中執(zhí)行,同時(shí)進(jìn)入每個(gè)時(shí)間日期子程序中都要進(jìn)行判斷是否有ACC.6 ,ADD2;(加法)和ACC.7,SURE;確定鍵按下.每次按鍵任何一個(gè)鍵間日期緩沖間顯示。如下圖所示: 
4.3、數(shù)碼管顯示部分:
把我們?cè)O(shè)計(jì)好的程序通過查表在數(shù)碼管上顯示出來,數(shù)碼管上從左到右分別顯示月、日/時(shí)、分,四個(gè)數(shù)碼管分別顯示高位和低位,切換時(shí)間顯示時(shí),要顯示出小數(shù)點(diǎn)閃爍.
如下圖所示:

4.5程序流程圖: 4.6子程序流程圖: 
六、總結(jié)及建議
課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)、發(fā)現(xiàn)、提出、分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程。隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握單片機(jī)的開發(fā)技術(shù)是十分重要的。
回顧起此次單片機(jī)課程設(shè)計(jì),至今我仍感慨頗多,的確,從選題到定稿,從理論到實(shí)踐,在一天半的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時(shí)不僅可以鞏固了以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會(huì)遇到過各種各樣的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說對(duì)單片機(jī)匯編語言掌握得不好,通過這次課程設(shè)計(jì)之后,一定把以前所學(xué)過的知識(shí)重新溫故。這次課程設(shè)計(jì)終于順利完成了,在設(shè)計(jì)中遇到了很多編程問題,最后在老師的辛勤指導(dǎo)下,終于游逆而解。同時(shí),在老師的身上我學(xué)得到很多實(shí)用的知識(shí),在次我表示感謝!同時(shí),對(duì)給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝!
- ORG 0000H
- SJMP MAIN
- ORG 000BH
- LJMP ITOP
- ORG 0030H
- MAIN: MOV 50H,#0FFH ;按鍵信息初始化為未按鍵狀態(tài)
- MOV 30H,#1 ;月單元
- MOV 31H,#1 ;日單元
- MOV 32H,#0 ;時(shí)單元
- MOV 33H,#0 ;分單元
- MOV 34H,#0 ;秒單元
- MOV 2FH,#16 ;2FH為十六分之一秒計(jì)數(shù)單元
- CLR 20H.1 ;校正狀態(tài)標(biāo)志清零,為正常走時(shí)狀態(tài)
- SETB 20H.0 ;時(shí)間/日期標(biāo)志置1
- MOV TMOD,#01H ;置T0工作于方式1
- MOV TH0,#0BH ;采用12M晶振,定時(shí)十六分之一秒
- MOV TL0,#0DCH ;裝載定時(shí)器初值
- MOV IE,#82H ; 允許中斷
- SETB TR0 ;啟動(dòng)定時(shí)器
- SJMP $
- ITOP: PUSH PSW ;現(xiàn)場(chǎng)保護(hù)
- PUSH ACC
- MOV TH0,#0BH
- MOV TL0,#0DCH
- DJNZ 2FH,KEY ;計(jì)數(shù)開始
- MOV 2FH,#16 ;十六分之一秒計(jì)數(shù)單元
- MOV A,34H
- ADD A,#01H ;在0~9之間,加01H
- DA A ;進(jìn)行十進(jìn)制調(diào)整
- MOV 34H,A ;送到秒計(jì)數(shù)單元
- CJNE A,#60H,KEY ;未到六十秒轉(zhuǎn)移到KEY,到了則順序往下執(zhí)行
- MOV 34H,#00H ;秒單元清零
- MOV A,33H ;分單元加1,并做十進(jìn)制調(diào)整
- ADD A,#01H
- DA A
- MOV 33H,A ;送到分計(jì)數(shù)單元
- CJNE A,#60H,KEY ;未到六十分轉(zhuǎn)移到KEY
- MOV 33H,#00H ;分單元清零
- MOV A,32H ;時(shí)單元加1,并做十進(jìn)制調(diào)整
- ADD A,#01H
- DA A
- MOV 32H,A ;送到時(shí)單元
- CJNE A,#24H,KEY ;未到二十四小時(shí)轉(zhuǎn)移,到了則順序往下執(zhí)行
- MOV 32H,#00H ;時(shí)單元清零
- MOV A,31H ;日單元加1,并做十進(jìn)制調(diào)整
- ADD A,#01H
- DA A
- MOV 31H,A ;送到日單元
- CJNE A,#31H,KEY ;未到三十一天轉(zhuǎn)移
- MOV 31H,#01H ;日單元變?yōu)橐?br />
- MOV A,30H ;月單元加1,并做十進(jìn)制調(diào)整
- ADD A,#01H
- DA A
- MOV 30H,A ;送到月單元
- CJNE A,#12H,KEY ;未到十二個(gè)月轉(zhuǎn)移
- MOV 30H,#01H ;月單元變?yōu)橐?br />
- KEY: JNB 20H.1,ZOUSHI ;判斷是否校正狀態(tài),不是,則轉(zhuǎn)非校正狀態(tài)
- LJMP JIAOSHI ;是,則轉(zhuǎn)為校正狀態(tài)
- ZOUSHI: MOV A,P1
- CJNE A,50H,KEY1 ;判斷是否與上次按鍵相同,不相同則轉(zhuǎn)移到KEY
- LJMP NONE1 ;相同則不斷判鍵
- KEY1: MOV 50H,A ;保存上次按鍵信息
- JNB ACC.4,SWITCH1 ;是否按下切換鍵
- JNB ACC.5,SET1 ;是否為校正鍵
- LJMP NONE1 ;沒按與無效鍵均不作判斷
- SWITCH1:CPL 20H.0 ;時(shí)間與日期的轉(zhuǎn)換
- NONE1: JNB 20H.0,DATE1 ;判斷日期與時(shí)間的標(biāo)志
- MOV 3BH,32H ;將時(shí)間送到顯示緩沖區(qū)
- MOV 3AH,33H
- LJMP DISP
- DATE1: MOV 3BH,30H ;將日期送到顯示緩沖區(qū)
- MOV 3AH,31H
- LJMP DISP
- SET1: SETB 20H.1 ;切換到校正標(biāo)志
- MOV 21H,#0 ;校正指針并請(qǐng)零
- CLR 20H.0 ;選擇日期標(biāo)志
- MOV 3BH,30H ;將日期送到顯示緩沖區(qū)
- MOV 3AH,31H
- LJMP DISP
- JIAOSHI:MOV A,P1
- CJNE A,50H,KEY2 ;判斷是否與上次按鍵相同
- LJMP NONE2 ;若相同則不能判斷按鍵
- KEY2: MOV 50H,A ;保存上次按鍵信息
- JNB ACC.5,SET2 ;是否為校正鍵
- JNB ACC.6,ADD2 ;是否為加鍵
- JNB ACC.7,SURE ;是否為確定鍵
- LJMP NONE2 ;空操作
- SET2: INC 21H ;校正指針并自動(dòng)加1
- ANL 21H,#03H
- SJMP NONE2
- ADD2: MOV A,#30H ;指向需要校正的指針
- ADD A,21H
- MOV R0,A
- MOV A,@R0 ;需要校正的指針并自動(dòng)加1
- ADD A,#1
- DA A
- MOV @R0,A
- CJNE R0,#30H,DATE ;判斷月是否校正完成,校正完成跳轉(zhuǎn)日
- CJNE @R0,#13H,NONE2
- MOV @R0,#1
- SJMP NONE2
- DATE: CJNE R0,#31H,HOUR ;判斷日是否校正完成,完成則跳轉(zhuǎn)到時(shí)
- CJNE @R0,#32H,NONE2
- MOV @R0,#1
- SJMP NONE2
- HOUR: CJNE R0,#32H,MIN ;判斷時(shí)是否校正完成,完成則跳轉(zhuǎn)到分
- CJNE @R0,#24H,NONE2
- MOV @R0,#0
- SJMP NONE2
- MIN: CJNE @R0,#60H,NONE2 ;校正分
- MOV @R0,#0
- SJMP NONE2
- SURE: CLR 20H.1 ;校時(shí)完成跳轉(zhuǎn)到走時(shí)標(biāo)志
- SJMP TIME2
- NONE2: JNB 21H.1,DATE2 ;判斷送到顯示緩沖區(qū)的是時(shí)間還是日期
- TIME2: SETB 20H.0 ;時(shí)間/日期標(biāo)志置1,為顯示時(shí)間狀態(tài)
- MOV 3BH,32H ;時(shí)間送到顯示緩沖區(qū)
- MOV 3AH,33H
- LJMP DISP
- DATE2: CLR 20H.0 ;時(shí)間/日期標(biāo)志位清零,為顯示日期狀態(tài)
- MOV 3BH,30H ;日期送到顯示緩沖區(qū)
- MOV 3AH,31H
- DISP: MOV A,3BH ;顯示緩沖區(qū)中的內(nèi)容分解為四位BCD碼依次放入43H~40H單元
- ANL A,#0F0H
- SWAP A
- MOV 43H,A
- MOV A,3BH
- ANL A,#0FH
- MOV 42H,A
- MOV A,3AH
- ANL A,#0F0H
- SWAP A
- MOV 41H,A
- MOV A,3AH
- ANL A,#0FH
- MOV 40H,A
- JNB 20H.1,DISP1;不是校正狀態(tài),正常顯示,否則校正狀態(tài)下,閃爍顯示
- JNB 2FH.3,DISP1 ;若2FH.3為1,校正內(nèi)容對(duì)應(yīng)的BCD碼單元送熄滅碼
- JNB 21H.0,N1 ;為0高兩位傳送,為1低兩位傳送
- MOV 40H,#0AH
- MOV 41H,#0AH
- SJMP DISP1
- N1: MOV 42H,#0AH
- MOV 43H,#0AH
- LJMP DISP1
- DISP1: MOV DPTR,#TAB ;指向表單
- MOV A,40H ;查最高位
- MOVC A,@A+DPTR
- CJNE A,#09H,NEXT1 ;判斷最高位是否為0
- MOV A,#0FFH ;為0 則給熄滅碼
- NEXT1: MOV SBUF,A ;傳送到數(shù)碼管上,串行靜態(tài)顯示
- JNB TI,$
- CLR TI
- MOV A,41H ;查第二位
- MOVC A,@A+DPTR
- MOV SBUF,A ;傳送到數(shù)碼管上
- JNB TI,$ ;等待傳輸完畢
- MOV A,42H ;查第三位
- CLR TI ;允許繼續(xù)傳輸
- MOVC A,@A+DPTR ;查顯示數(shù)據(jù)對(duì)應(yīng)段碼
- JNB 20H.0,NEXT2 ;判斷時(shí)間/日期標(biāo)志
- ;CJNE A,#11H,NEXT2 ; 日期滅0,時(shí)間狀太不滅0
- ;MOV A,#0FFH
- ;MOV C,2FH.3 ;判斷并改變小數(shù)點(diǎn),并判斷半秒亮半秒滅
- ;ANL C,20H.0
- mov c,2fH.3
- MOV ACC.4,C ;小數(shù)點(diǎn)為.4位
- NEXT2: MOV SBUF,A
- JNB TI,$
- CLR TI
- MOV A,43H ;查第四位
- MOVC A,@A
- MOV SBUF,A
- JNB TI,$
- CLR TI
- POP ACC ;現(xiàn)場(chǎng)恢復(fù)
- POP PSW
- RETI
- TAB: DB 11H,0d7H,98H,92H,56H,32H,30H,97H,10H,12H,0FFH
- END
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
單片機(jī)課程設(shè)計(jì).doc
(984.33 KB, 下載次數(shù): 36)
2018-6-27 23:02 上傳
點(diǎn)擊文件名下載附件
|