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

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