第一篇:單片機電子時鐘課程設計報告
青島理工大學琴島學院 課題名稱:單片機原理及應用課程設計學院:
專業班級:
學號:
學生:
指導教師:
設 計 報 告
第二篇:單片機課程設計報告,單片機電子時鐘
題 目:單片機課程設計報告
目 錄
一、設計目的二、程設計具體要求
三、單片機發展簡史
四、8051單片機系統簡介
五、8051單片機內部定時器/計數器簡介
六、程序電路
七、程序流程
八、程序代碼
九 實驗總結-要求寫出完整的論文以及心得體會
十 參考資料及小結
原 文 :一.目的1. 進一步熟悉和掌握8051單片機的結構及工作原理。
2. 掌握單片機的接口技術及相關外圍芯片的外特性,控制方法。
3. 通過課程設計,掌握以單片機核心的電路設計的基本方法和技術,了解表關電路參數的計算方法。
4. 通過實際程序設計和調試,逐步掌握模塊化程序設計方法和調試技術。
5. 通過完成一個包括電路設計和程序開發的完整過程,使學生了解開發一單片機應用系統的全過程,為今后從事相應打下基礎。
二.課程設計的體要求
a)原理圖設計。
1. 原理圖設計要符合項目的工作原理,連線要正確,端了要不得有標號。
2. 圖中所使用的元器件要合理選用,電阻,電容等器件的參數要正確標明。
3. 原理圖要完整,CPU,外圍器件,擴器接口,輸入/輸出裝置要一應俱全。
b)程序調計
1. 根據要求,將總體項能分解成若干個子功能模塊,每個功能模塊完成一個特定的功能。
2. 根據總體要求及分解的功能模塊,確定各功能模塊之間的關系,設直出完整的程序流程圖。c)程序調試將設計完的程序輸入,匯編,排除語法錯誤,生成*OBJ文件。
1. 按所設計的原理圖,在實驗平臺上連線,檢查無誤。
2. 將匯編后生成的*OBJ文件傳送到實驗裝置的,執行該程序,檢查該程序、是否達到設計要求,若未達
到,修改程序,直到達到要求為止,d)說明書
1. 原理圖設計說明
簡要說明設計目的,原理圖中所使用的元器件功能及在圖中的作用,各器件的工作過程及順序。
2. 程序設計說明
對程序設計總體功能及結構進行說明,對各子模塊的功能以及各子模塊之間的關系作較詳細的描述。
3. 畫出工作原理圖,程序流程圖并給出程序清單。
目前,單片機已廣泛應用到圖民經濟建設和日常生活的許多領域,成為測控技術現代化必不可少的重要工具。
單片機電子時鐘
作者:佚名來源:本站原創點擊數:
491更新時間:2007年06月27日
DS1302是Dallas公司生產的一種實時時鐘芯片。它通過串行方式與單片機進 行數據傳送,能夠向單片機提供包括秒、分、時、日、月、年等在內的實時時間
信息,并可對月末日期、閏年天數自動進行調整;它還擁有用于主電源和備份電源的雙電源引腳,在主電源關閉的情況下,也能保持時鐘的連續運行。另外,它還能提供31字節的用于高速數據暫存的RAM。鑒于上述特點,DS1302已在許多單片機系統中得到應用,為系統提供所需的實時時鐘信息。
一、DS1302的主要特性
1.引腳排列
500)this.width=500 border=0>
圖1DS1302引腳排列圖
DS1302的引腳排列如圖1所示,各引腳的功能如下:
X1,X2——32768Hz晶振引腳端;
RST——復位端;
I/O——數據輸入/輸出端;
SCLK——串行時鐘端;
GND——地;
VCC2,VCC1——主電源與后備電源引腳端。
2.主要功能
DS1302時鐘芯片內主要包括移位寄存器、控制邏輯電路、振蕩器、實時時鐘電路以及用于高速暫存的31字節RAM。DS1302與單片機系統的數據傳送依靠RST,I/O,SCLK三根端線即可完成。其工作過程可概括為:首先系統RST引腳驅動至高電平,然后在作用于SCLK時鐘脈沖的作用下,通過I/O引腳向DS1302輸入地址/命令字節,隨后再在SCLK
時鐘脈沖的配合下,從I/O引腳寫入或讀出相應的數據字節。因此,其與單片機之間的數據傳送是十分容易實現的。
二、時鐘的產生及存在的問題
(1)在實際使用中,我們發現DS1302的工作情況不夠穩定,主要表現在實時時間的傳送有時會出現誤差,有時甚至整個芯片停止工作。我們對DS1302的工作電路進行了分析,其與單片機系統的連接如圖2所示。從圖中可以看出,DS1302的外部電路十分簡單,惟一外接的元件是32768Hz的晶振。通過實驗我們發現:當外接晶振電路振蕩時,DS1302計時正確;當外接晶振電路停振時,DS1302計時停止。因此,我們認為32768Hz晶振是造成 DS1302工作不穩定的主要原因。
500)this.width=500 border=0>
圖2DS1302與單片機系統的連接圖
(2)DS1302時鐘的產生基于外接的晶體振蕩器,振蕩器的頻率為32768Hz。該晶振通過引腳X1、X2直接連接至DS1302,即DS1302是依靠外部晶振與其內部的電容配合來產生時鐘脈沖的。由于DS1302在芯片本身已經集成了6pF的電容,所以,為了獲得穩定可靠的時鐘,必須選用具有6pF負載電容的晶振。
然而,許多人在選用晶振時僅僅注意了晶振的額定頻率值,而忽視了晶振的負載電容大小,甚至連許多經銷商也不能提供所售晶振的負載電容。所以即使在使用中選用了符合32768Hz的晶振,但如果該晶振的負載電容與DS1302提供的6pF不一致時,就會影響晶振的起振或導致振蕩頻率的偏移,出現上述在應用中的問題。
三、利用輔助電容實現負載匹配
(1)當所選的晶振負載電容不是6pF時,可以采用增加輔助電容的方法提高或降低DS1302振蕩器的電容性負載,使之與晶體所需的電容值匹配。如果已知晶體的負載電容為CI,若CI<6pF,則可以增加一個并聯電容CS以產生所需的總負載電容CI,即CI=6pF+CS;若CI>6pF,則可以在晶體的一端增加一個串聯電容CS,以產生所需的負載電容CI,即1/CI=1/6pF+1/CS,通過計算即可得出應增加的輔助電容大小。輔助電容的接法如圖3所示。
圖3CS連接電路圖
(2)在使用前對晶體的負載電容并不知道的情況下,通過測定晶體振蕩頻率的方法可以確定該晶體的負載電容。
對于晶體振蕩器來說,其振蕩頻率與負載電容之間的關系是確定的。以本文討論的DS1302使用的32768Hz晶振為例:當它工作于所要求的負載電容時,能較準確地產生 32768Hz的頻率;當它的負載電容小于6pF時,其振蕩頻率會正向偏移;當它的負載電容大于6pF時,其振蕩頻率就會負向偏移。因此,對于未知負載電容的晶體應首先采用實驗的方法,在其兩端加入輔助電容使晶體起振,然后用頻率計測出振蕩頻率。若測得頻率大于32768Hz,說明負載電容偏小;若測得頻率小于32768Hz,說明負載電容偏大。對輔助電容逐步調整,最終使振蕩頻率盡可能接近32768Hz,則此時晶體端所接負載電容的總和就是適合該晶體的負載電容。
結論
以上方法經我們在實際工作中多次使用,證明確實有效。它放寬了DS1302在使用中對晶振的條件要求,增強了DS1302在工作中的穩定性,對DS1302更廣泛地應用具有積極的意義。
華東交大理工學院_2007-2008 _學年第_ 一 學期
課程設計安排計劃
班級:_05應電__課程:_單片機原理及接口技術_
一、課程設計題目:數碼管時鐘電路的設計
二、設計內容及要求:
LED數碼管時鐘電路24小時計時方式,時、分、秒用6位數碼管顯示。選用AT89C2051單片機,12MHZ晶振,6位共陽數碼管,要求有調時功能,其他功能學生可自由發揮。
三、設計方法與步驟:
1.設計硬件原理電路,選擇元器件、確定其參數。
2.設計印刷電路板電路(用面包板做)、焊接硬件電路。
3.設計匯編語言程序,調試硬件電路和程序。
4.編寫課程設計報告。
四、設計時間安排:
1.第十九周:周一、二,設計硬件原理電路,選擇元器件、確定其參數。
周三、四、五,設計印刷電路板電路(用面包板做)、焊接硬件電路。
2.第二十周:周一、二,設計匯編語言程序。
周三、四,燒錄程序,調試硬件電路和程序。
周五,編寫課程設計報告。
指導老師: 楊威
時間: 2007、1
第三篇:單片機課程設計電子時鐘說明書
《電子時鐘》 課程設計說明書
專業班級:
11級自動化<3>班
姓
名: 歐陽明長 李徐軍
陳龍
指導教師:
郭
玉
設計時間:
2013--12--17
物理與電氣工程學院
2013年12月17日
摘要
電子鐘在生活中應用非常廣泛,而一種簡單方便的數字電子鐘則更能受到人們的歡迎。所以設計一個簡易數字電子鐘很有必要。本電子鐘采用STC公司的AT89S52單片機為核心,使用12MHz 晶振與單片機AT89S52 相連接,通過軟件編程的方法實現以24小時為一個周期,同時8位7段LED數碼管(兩個四位一體數碼管)顯示小時、分鐘和秒的要求,并在計時過程中具有定時功能,當時間到達提前定好的時間進行蜂鳴報時。該電子鐘設有四個按鍵S12、S13、S14和S15鍵,進行相應的操作就可實現小時調整、分鐘調整和啟停功能。具有時間顯示、整點報時、校正等功能。走時準確、顯示直觀、運行穩定等優點。
關鍵詞 電子鐘;AT89S52;硬件設計;軟件設計
目錄 設計課題任務、功能要求說明及方案介紹……………………………………3 1.1 設計課題任務………………………………………………………………3 1.2 功能要求說明………………………………………………………………3 1.3 設計總體方案介紹及原理說明……………………………………………3 2 設計課題硬件系統的設計………………………………………………………3 2.1 設計課題硬件系統各模塊功能簡要介紹…………………………………4 3 設計課題軟件系統的設計………………………………………………………4 3.1 設計課題軟件系統各模塊功能簡要介紹…………………………………4 3.2 設計課題軟件系統程序流程框圖…………………………………………4 4 設計結論、仿真結果、誤差分析………………………………………………7 4.1 設計課題的設計結論及使用說明…………………………………………4 4.2 設計課題的誤差分析………………………………………………………7 4.3 設計體會……………………………………………………………………7 參考文獻 ……………………………………………………………………………7 附 錄 ……………………………………………………………………………8 1 設計課題任務、功能要求說明及方案介紹
1.1 設計課題任務
設計一個具有特定功能的電子鐘。具有啟停、時間顯示、報時等功能。并有時間設定,時間調整功能。
1.2 功能要求說明
設計一個具有特定功能的電子鐘。電子鐘上電從12時0分0秒開始運行,按下啟停鍵進入時鐘運行狀態;再按啟停鍵暫停運行,并且再次按下時能夠在原來的時間上繼續計時;運行到整點是能夠自動響鈴,通過外部按鍵可以進行實踐的調整,并且在運行時相應的LED燈等同步亮滅。
1.3 設計課題總體方案介紹及工作原理說明
本電子鐘主要由單片機、4*4獨立鍵盤、顯示接口電路和電源電路構成,設 計課題的總體方案如圖1.1所示:
圖1.1 總體設計方案圖
本電子鐘的所有的程序、參數均存放在AT89S52的內部RAM中。鍵盤采用動態掃描方式。利用單片機定時器產生定時效果通過編程形成數字鐘效果,再利用數碼管動態掃描顯示單片機內部處理的數據,同時通過端口讀入當前外部控制狀態來改變程序的不同狀態,實現不同功能。設計課題硬件系統的設計 2.1 設計課題硬件系統各模塊功能簡要介紹
本設計的硬件系統主要采用以下基本模塊來實現,單片機最小系統模塊,輸入模塊、輸出模塊、電源模塊。
(1)單片機最小系統模塊:包括8位微控制器AT89S52;電源復位電路;晶振電路。本模塊AT89S52系統控制核心,單片機系統復位由電源上電完成。
(2)輸入模塊:本模塊共用到了4個按鍵(S12、S13、S14、S15),分別完成時間的調整、啟停。1個電源開關(具有復位功能)。
(3)輸出模塊:本次設計顯示為8位,采用兩個四位一體數碼管(共陽極)8個PNP三極管驅動,并且還有蜂鳴器模塊。(4)電源模塊:USB供電及下載器。
設計課題軟件系統的設計
3.1 設計課題軟件系統個模塊功能簡要介紹
本設計的軟件系統主要采用以下基本模塊來實現,主程序、中斷服務程序、鍵盤輸入程序模塊、數碼管及其驅動模塊和延時模塊。
主程序:主要是用于對輸入信號的處理、輸出信號的控制和對各個功能程序模塊的控制。
中斷服務程序:主要是用于電子鐘的1S延時。鍵盤輸入程序模塊:主要是用于完成特定時間調整。
數碼管及其驅動模塊:主要是用于驅動數碼管及利用數碼管顯示時間。延時模塊:短延時用于數據的動態顯示,按鍵的判斷。
3.2 設計課題軟件系統程序流程框圖
系統程序采用匯編語言按模塊化方式進行設計,然后通過Keil軟件開發平臺將程序轉變成可燒寫文件。
主循環程序框圖如3.1所示;判斷進位程序如3.2所示; 計時一秒中斷程序如3.3所示; 啟停中斷框圖如3.4所示; 延時子程序框圖如3.5所示; 圖3.1 主循環程序 5
圖3.2 判斷進位子程序
圖3.3 計時一秒中斷
圖3.4 啟停中斷程序
圖3.5 延時子程序 設計結論、運行結果、誤差分析
4.1 設計課題的設計結論及使用說明
本設計為基于單片機的電子鐘的設計。剛開始,我們很多地方理不清頭緒,無從下手,只能從平時的實驗中得到一些方法,但通過認真研究設計課題,找書上網查資料,確定基本設計方案,對所用芯片功能進行查找、調試,設計中有四個按鍵,其中S12為分鐘加1調整,S13為小時加1調整,S14為外部響鈴按鍵,S15為啟停按鍵,另外當整點時間到時,蜂鳴器報警。這樣的結果與設計基本相符,基本上完成了設計任務。
4.2 設計課題的誤差分析
該電子鐘在運行中存在一定的誤差,誤差產生有三種原因,首先是采用的計時利用中斷來實現。而當電子鐘運行時間1秒時,又得去執行中斷程序,這個過程需要幾個機器周期。第二,硬件系統有一定的影響。第三,設計用到12MHz晶振,計算是滿20次為一秒鐘,實際會慢很多。
4.3 設計體會
本次課程設計,讓我們三人受益匪淺,認識到了自己的許多缺點和不足,使我深深的感受到了理論聯系實際的必要性及其重要性。
參考文獻
[1] 李全利.單片機原理與接口技術[M].高等教育出版社.2009.1.[2] 劉文秀.單片機應用系統仿真的研究[J].現代電子技術.2005, 第286 期.[3] 胡學海.單片機原理及應用系統設計[M],北京:電子工業出版社,2005.[4] 李廣第.單片機基礎[M],北京航空航天大學出版社,2006.7.附錄
程序代碼為:
ORG 0000H LJMP START ORG 0003H LJMP INTT0 ORG 0013H LJMP INTT1 ORG 000BH LJMP INTT ORG 0100H START:SETB EA SETB ET0 SETB IT0 SETB EX0 SETB IT0 SETB EX1 SETB IT1 MOV R7,#16 MOV TMOD,#01H MOV TH0,#15536/256 MOV TL0,#15536 MOD 256 MOV R0,#12 MOV R1,#0 MOV R2,#0 MOV R6,0FEH CLR TR0 L1:
LCALL PANDUAN;*****************
;記秒
MOV A,R2
MOV B,#10
DIV AB
MOV P2,#0FDH
LCALL XIANSHI
LCALL DELAY
MOV A,B
MOV P2,#0FEH
LCALL XIANSHI
LCALL DELAY;***************
;調分
JB P3.0,L40 L41:JB P3.0,L42 LJMP L41 L42:INC R1
;計分
L40: MOV A,R1
MOV B,#10
DIV AB
MOV P2,#0EFH
LCALL XIANSHI
LCALL DELAY
MOV A,B
MOV P2,#0F7H
LCALL XIANSHI
LCALL DELAY
MOV P2,#0FBH
MOV P0,#0BFH
LCALL DELAY;******************
;調時
JB P3.1,L45 L47:JB P3.1,L46 LJMP L47 L46:INC R0
;計時
L45: MOV A,R0
MOV B,#10
DIV AB
MOV P2,#07FH
LCALL XIANSHI
LCALL DELAY
MOV A,B
MOV P2,#0BFH
LCALL XIANSHI
LCALL DELAY
MOV P2,#0DFH
MOV P0,#0BFH
LCALL DELAY
;*************************;判斷5分鐘鬧鈴
CJNE R1,#5,L51
CLR P3.5
MOV P1,R6
MOV A,R6
RL A
MOV R6,A
LJMP L52 L51:CJNE R1,#6,L52
SETB P3.5 L52: LJMP L1
;***************;執行1秒鐘
INTT:DJNZ R7,L33
MOV R7,#16
INC R2
MOV P1,R6
MOV A,R6
RL A
MOV R6,A L33:RETI;*********************
;外部中斷
INTT0:CPL P3.5
MOV P1,#0
RETI;***********************
;啟停功能
INTT1:MOV P1,#0
LCALL DELAY
JB P3.3,L97
CPL TR0
L97: RETI;**********************
;顯示子程序
XIANSHI:MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
RET
;**********************
;延時子程序
DELAY:MOV R3,#20
DEL1:MOV R4,#50
DEL2:DJNZ R4,DEL2
DJNZ R3,DEL1
RET
;*******************
;判斷進位子程序
PANDUAN:
CJNE R2,#60,L31
MOV R2,#0
INC R1
L31:CJNE R1,#60,L32
MOV R1,#0
INC R0
L32:CJNE R0,#24,L35
MOV R0,#0
L35:RET
;********************
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
END
第四篇:單片機課程設計 (51單片機實現電子時鐘)
湖北文理學院
單片機課程設計
題目:用51單片機實現電子時鐘
院 部 物理與電子信息工程學院 專 業 名 稱 電子信息科學與技術 班 級 1111 姓 名 楊慶月 學 號 2011111136 指 導 教 師 李剛
2013年12月09日
目錄
摘要------------------------------1 1 單片機的相關知識------------1 1.1 單片機的簡介--------------------1 1.2 單片機的特點--------------------1 1.3 89C52單片機的基本特點------------2 2 電子時鐘--------------------3 2.1電子時鐘的基本特點----------------3 2.2電子時鐘的原理-------------------4 控制系統的硬件設計---------4 3.1單片機型號的選擇-----------------4 3.2 lcd1602工作的原理---------------4 3.3 鍵盤電路的設計------------------6 3.4 復位電路設計-------------------------6
3.5 時鐘電路設計-------------------7 3.6 整體電路原理圖-----------------7 控制系統的軟件的設計------8 4.1程序的設計----------------------8 4.2程序源代碼----------------------8 5 仿真結果和實物圖---------------19 5.1仿真結果------------------------------19 5.2實物圖-19 6 總結--20
參考文獻------------------------21
摘要:單片計算機即單片微型計算機。由 RAM ,ROM,CPU構成,定時,計數和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應用于智能產業和工業自動化上。而 51系列單片機是各單片機中最為典型和最有代表性的一種。這次課程設計通過對它的學習,應用,從而達到學習、設計、開發軟、硬的能力。
本設計主要設計了一個基于 AT89C52單片機的電子時鐘。并在 1602上顯示相應的時間。并通過一個控制鍵用來實現時間的調節和是否進入省電模式的轉換。
具有時鐘和日歷的功能,年限顯示范圍是2013-2099(可修改),且具有閏年自動修正功能
關鍵字:單片機;子時鐘;鍵盤控制;LCD1602。單片機識的相關知識 1.1 單片機簡介
MCS-51是 INTEL公司在成功推廣的 MCS-48單片機基礎上加以改進而成的 8位單片機。
這種單片機大約是上世紀 70年代末推出的,內部程序可重寫的為 8751,外擴程序的是 8031,一次性生產,不可改變程序的是 8051。外形一般為 DIP40封裝。不久又推出了增強型的 8052,其資源更加豐富。以后又采用 CHMOS技術推出了 80c51,耗電大大降低。到了 90年代,INTEL公司把精力放到更賺錢的計算機上,將 51單片機技術轉讓給了一此其它公司,如 ATMEL Philips等半導體制造公司,使 51系列單片機的市場份額不斷擴大。
盡管十多年前就有人認為 51單片機會很快淘汰,但事實證明 51單片機經過不斷的改進后,由于技術成熟,使用方便,至今在 8位單片機市場仍然擁有龐大的用戶。特別是 MCS-51技術的 20年專利期限到期后,大量的兼容型號不斷推出。從上世紀 90年代后期開始,美國 ATMEL公司在掌握快速擦寫的存儲器后,推出了 AT89C系列,此系列在中國獲得了廣泛的應用。
在此之前,由于可擦寫的 8751價格昂貴,國內長時間采用 8031+27C64這樣的外擴存程序儲器方式。
51單片機最初只有 DIP40這種很古老的封裝,后來推出了 CHMOS工藝的80C51后開始有了 PLCC44這種相對較小的方形封裝。AT89C系列中開始有 20腳的 DIP20的精簡型封裝,這極大方便了在一些相對簡單的單片機應用,縮小了 PCB的體積。20腳的有 AT89C1051、AT89C1051、AT89C1051,對應程序存儲器分別為 1K、2K、4K。
標準的 51為 4K程序空間,128字節的 RAM,32條端口,5個中斷,2個定時/計數器,12個時鐘周期執行一條基本指令,最長的除法為 48個周期。52為 8K程序空間,256字節的 RAM,32條端口,6個中斷,3個定時/計數器。AT89S51是可在板上直接下載程序的改進型號,并增加了看門狗功能,AT89C51只能在編程器下寫入程序,所以經常會有人在 PCB上安裝 IC插座,以便取下來編程更新程序。
AT的 51系列后來也推出了單周期的 51,但價格沒什么優勢,國內很少使用。最近幾年宏晶在國內大量推廣 STC51系列單片機,最近又推出不少所謂 1T的單
片機,價格較低
STC采用串口直接下載程序,寫入程序很方便。
1.2 單片機的特點.單片機的存儲器ROM 和RAM 時嚴格區分的。ROM 稱為程序存儲器,只存放 程序,固定常數,及數據表格。RAM 則為數據存儲器,用作工作區及存放用戶數 據。2.采用面向控制的指令系統。為滿足控制需要,單片機有更強的邏輯控制能力,特別是單片機具有很強的位處理能力。.單片機的I/O 口通常時多功能的。由于單片機芯片上引腳數目有限,為了 解決實際引腳數和需要的信號線的矛盾,采用了引腳功能復用的方法,引腳處于 何種功能,可由指令來設置或由機器狀態來區分。.單片機的外部擴展能力很強。在內部的各種功能部件不能滿足應用的需求 時,均可在外部進行擴展,與許多通用的微機接口芯片兼容,給應用系統設計帶 來了很大的方便。
1.3 89C52單片機介紹
P0 口:P0 口為一個8 位漏級開路雙向I/O 口,每腳可吸收8TTL 門電流。當 P1 口的管腳第一次寫1 時,被定義為高阻輸入。P0 能夠用于外部程序數據存儲 器,它可以被定義為數據/地址的第八位。在FIASH 編程時,P0 口作為原碼輸入 口,當FIASH 進行校驗時,P0 輸出原碼,此時P0 外部必須被拉高。
P1 口:P1 口是一個內部提供上拉電阻的8 位雙向I/O 口,P1 口緩沖器能接 收輸出4TTL 門電流。P1 口管腳寫入1 后,被內部上拉為高,可用作輸入,P1 口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH 編程和校驗時,P1 口作為第八位地址接收。
P2 口:P2 口為一個內部上拉電阻的8 位雙向I/O 口,P2 口緩沖器可接收,輸出4 個TTL 門電流,當P2 口被寫“1”時,其管腳被內部上拉電阻拉高,且 作為輸入。并因此作為輸入時,P2 口的管腳被外部拉低,將輸出電流。這是由 于內部上拉的緣故。P2 口當用于外部程序存儲器或16 位地址外部數據存儲器 進行存取時,P2 口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優 勢,當對外部八位地址數據存儲器進行讀寫時,P2 口輸出其特殊功能寄存器的 內容。P2 口在FLASH 編程和校驗時接收高八位地址信號和控制信號。
P3 口:P3 口管腳是8 個帶內部上拉電阻的雙向I/O 口,可接收輸出4 個TTL 門電流。當P3 口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸 入,由于外部下拉為低電平,P3 口將輸出電流(ILL)這是由于上拉的緣故。P3 口也可作為AT89C52 的一些特殊功能口,如下表所示: 口管腳備選功能
P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時器0 外部輸入)P3.5 T1(記時器1 外 部輸入)P3.6 /WR(外部數據存儲器寫選通)P3.7 /RD(外部數據存儲器讀選通)P3 口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST 腳兩個機器周期的高電平時 間。
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的 地位字節。在FLASH 編程期間,此引腳用于輸入編程脈沖。在平時,ALE 端以不
變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外
部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE 脈沖。如想禁止ALE 的輸出可在SFR8EH 地址上置0。此時,ALE 只有在執行MOVX,MOVC 指令是ALE 才起作用。另外,該引腳被略微拉高。
如果微處理器在外部執行狀態ALE 禁止,置位無效。PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機 器周期兩次/PSEN 有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN 信號
將不出現。
EA/VPP:當/EA 保持低電平時,則在此期間外部程序存儲(0000H-FFFFH),不
管是否有內部程序存儲器。注意加密方式1 時,/EA 將內部鎖定為RESET;當/EA 端保持高電平時,此間內部程序存儲器。在FLASH 編程期間,此引腳也用于施加 12V 編程電源(VPP)。電子時鐘
2.1 電子時鐘的基本特點
現在高精度的計時工具大多數都使用了石英晶體振蕩器,由于電子鐘、石英 鐘、石英表都采用了石英技術,因此走時精度高,穩定性好,使用方便,不需要 經常調試,數字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用用液晶顯 示器代替指針顯示進而顯示時間,減小了計時誤差,這種表具有時、分、秒顯示 時間的功能,還可以進行時和分的校對,片選的靈活性好。
2.2 電子時鐘的原理
該電子時鐘由89C52,1602 液晶等構成,采用晶振電路作為驅動電路,由延時程序和循環程序達到時分秒的計時,六十秒為一分鐘,六十分鐘為一小時,滿二十四小時為一天。而電路中有四個控制按鍵,一個是選擇,一個進行加數,一個進行減數,還有一個保存。例如按下選擇鍵,然后1602顯示光標,此時可以用加或減來進行調節,在按下選擇鍵,光標移到不同的單位上,同理進行調節,最后待日期時間調節好后,按下保存鍵,時鐘開始計時。控制系統的硬件設計 3.1 單片機型號的選擇
通過對51單片機的學習,認為STC89C52 是最理想的電子時鐘開發芯片。STC89C52,最終認為89C52是一種帶8K 字節閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,器件采用高密度非易失存儲器制造技術制造,與工業標準的MCS-52指令集和輸出引腳相兼容。還有一點重要原因,就是采用AT89C52時不能用開發板進行程序的下載,所以最終選用STC89C52進行設計。
3.2 1602 工作原理及顯示電路
字符型LCD 通常有14 條引腳線或16 條引腳線的LCD,多出來的2 條線是背 光電源線VCC(15 腳)和地線GND(16 腳),其控制原理與14 腳的LCD 完全一樣 1602液晶的基本的操作分為以下四種:
狀態字讀操作:輸入RS=低、RW=高、EP=高; 輸出:DB0~7 讀出為狀態字; 數據讀出操作:輸入RS=高、RW=高、EP=高; 輸出:DB0~7 讀出為數據; 指令寫入操作:輸入RS=低、RW=低、EP=上升沿; 輸出:無; 數據寫入操作:輸入RS=高、RW=低、EP=上升沿; 輸出:無。
如圖 1602模塊的引腳
LCD1602正面
LCD1602背面
1602與單片機連接圖 3.3 鍵盤電路設計
本時鐘采用四個按鍵控制,一個(實物圖藍色線24號引腳)是選擇,一個進行加數(實物圖紫色線25號引腳),一個進行減數(實物圖灰色線26號引腳),還有一個保存(實物圖白色線27號引腳)。例如按下選擇鍵,然后1602顯示光標,此時可以用加或減來進行調節,在按下選擇鍵,光標移到不同的單位上,同理進行調節,最后待日期時間調節好后,按下保存鍵,時鐘開始計時。
3.4 復位電路設計
單片機復位有上電復位和手動復位兩種方式,上電復位是接通電源后利用RC充電來實現復位。手動復位是通過人為干預,強制系統復位。
連接至9號復位引腳
復位電路如圖所示,可以實現上電復位和手動復位功能。
3.5 時鐘電路設計
系統時鐘源由內部時鐘方式產生,時鐘電路由12MH晶振和兩個30PF瓷片電容組成,構成自激振蕩,形成振蕩源提供給單片機。電容可在5PF到30PF之間選擇,電容的大小對振蕩頻率有微小影響,可起頻率微調作用。
3.6整體電路原理圖 控制系統的軟件設計 4.1 程序設計
由于C 語言程序設計較匯編可讀性強,可移植性,且可以大大降低編程的難 度和縮短開發周期,本系統程序采用c 語言設計。
4.2 程序源代碼
#include
//包含單片機寄存器的頭文件 #include
#define uchar unsigned char #define uint unsigned int
sbit RS=P2^0;
//寄存器選擇位,將RS位定義為P2.0引腳 sbit RW=P2^1;
//讀寫選擇位,將RW位定義為P2.1引腳 sbit E=P2^2;
//使能信號位,將E位定義為P2.2引腳 sbit BF=P0^7;
//忙碌標志位,將BF位定義為P0.7引腳
uchar code table[]=“2013-12-07 WEEK6”;
//初始化液晶顯示 16 uchar code table1[]=“TIME: 19-27-50”;
//14
uchar count,s1num;char second,minute,hour,day,month,year,week;
sbit s1=P2^3;
//功能鍵
sbit s2=P2^4;
//加鍵 sbit s3=P2^5;
//減鍵
sbit s4=P2^6;
//保存并退出
/*
延時若干毫秒
*/ void delay(uchar n){ uchar i,a,b;for(i=0;i for(b=199;b>0;b--) for(a=1;a>0;a--);} /*********************************************** 函數功能:判斷液晶模塊的忙碌狀態 返回值:result。result=1,忙碌;result=0,不忙 ************************************************/ uchar BusyTest(void){ bit result;RS=0;//根據規定,RS為低電平,RW為高電平時,可以讀狀態 RW=1;E=1; //E=1,才允許讀寫 _nop_(); //空操作 _nop_();_nop_();_nop_(); //空操作四個機器周期,給硬件反應時間 result=BF;//將忙碌標志電平賦給result E=0; //將E恢復低電平 return result;} /******************************************** 函數功能:寫指令 入口參數:dictate *********************************************/ void WriteInstruction(uchar dictate){ while(BusyTest()==1); //如果忙就等待 RS=0;//根據規定,RS和R/W同時為低電平時,可以寫入指令 RW=0;E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,//就是讓E從0到1發生正跳變,所以應先置“0” _nop_(); _nop_(); //空操作兩個機器周期,給硬件反應時間 P0=dictate; //將數據送入P0口,即寫入指令或地址 _nop_();_nop_();_nop_();_nop_(); //空操作四個機器周期,給硬件反應時間 E=1; //E置高電平 _nop_();_nop_();_nop_();_nop_(); //空操作四個機器周期,給硬件反應時間 E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令 } /********************************************* 函數功能:寫數據 入口參數:y(為字符常量)**********************************************/ void WriteData(uchar y){ while(BusyTest()==1);RS=1; //RS為高電平,RW為低電平時,可以寫入數據 RW=0;E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,//就是讓E從0到1發生正跳變,所以應先置“0” P0=y;//將數據送入P0口,即將數據寫入液晶模塊 _nop_();_nop_();_nop_();_nop_(); //空操作四個機器周期,給硬件反應時間 E=1; //E置高電平 _nop_();_nop_();_nop_();_nop_(); //空操作四個機器周期,給硬件反應時間 E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令 } /****************************************** 函數功能:對LCD的顯示模式進行初始化設置 *******************************************/ void LcdInitiate(void){ uchar num; second=50;minute=27;hour=19;week=6;day=7;month=12;year=13;count=0;s1num=0;E=0;delay(15);//延時15ms,首次寫指令時應給LCD一段較長的反應時間 WriteInstruction(0x38);//顯示模式設置:16×2顯示,//5×7點陣,8位數據接口 delay(5);//延時5ms?,給硬件一點反應時間 WriteInstruction(0x38);delay(5);WriteInstruction(0x38);//連續三次,確保初始化成功 delay(5);WriteInstruction(0x0c);//顯示模式設置:顯示開,無光標,//光標不閃爍 delay(5);WriteInstruction(0x06);//顯示模式設置:光標右移,字符不移 delay(5);WriteInstruction(0x01);//清屏幕指令,將以前的顯示內容清除 delay(5);WriteInstruction(0x80);for(num=0;num<16;num++)//讓液晶顯示日期 { WriteData(table[num]);delay(5);} WriteInstruction(0x80+0x40);for(num=0;num<14;num++)//讓液晶顯示時間 { WriteData(table1[num]);delay(5);} TMOD=0x01; //定時器中斷初始化 TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1; ET0=1;TR0=1;} //-------寫年月日---------------void write_nyr(uchar add,uchar date){ uchar i,j;i=date/10;j=date%10;WriteInstruction(0x80+add);WriteData(0x30+i);WriteData(0x30+j);} //--------寫時分秒---------------void write_sfm(uchar add,uchar date){ uchar i,j;i=date/10;j=date%10;WriteInstruction(0x80+0x40+add);WriteData(0x30+i);WriteData(0x30+j);} //-------------寫星期-------------void write_week(uchar add,uchar date){ WriteInstruction(0x80+add);WriteData(0x30+date);} //---------該年是否是閏年-------------bit leap_year(){ int leap;if((year%4==0&&year%100!=0)||year%400==0) leap=1; //是閏年 else leap=0; //非閏年 return leap;} //----------鍵盤掃描--------------------void keyscan(){ if(s1==0) //第一個鍵是否按下 { delay(5); if(s1==0) { while(!s1); s1num++; if(s1num>7) s1num=1; if(s1num==1) //第一個鍵被按一次 { TR0=0; WriteInstruction(0x80+0x40+13); WriteInstruction(0x0f); } if(s1num==2) { WriteInstruction(0x80+0x40+10); } if(s1num==3) { WriteInstruction(0x80+0x40+7); } if(s1num==4) { WriteInstruction(0x80+9); } if(s1num==5) { WriteInstruction(0x80+6); } if(s1num==6) { WriteInstruction(0x80+3); } if(s1num==7) { WriteInstruction(0x80+15); } } } if(s1num!=0) //如果功能鍵被按下 { if(s2==0)//第二個按下 { delay(5); if(s2==0) { while(!s2); if(s1num==1) //第一個鍵被按一次,秒鐘加一 { second++; if(second==60) second=0; write_sfm(12,second); WriteInstruction(0x80+0x40+13); } if(s1num==2) //第一個鍵被按二次,分鐘加一 { minute++; if(minute==60) minute=0; write_sfm(9,minute); WriteInstruction(0x80+0x40+10); } if(s1num==3) //第一個鍵被按三次,時鐘加一 { hour++; if(hour==24) hour=0; write_sfm(6,hour); WriteInstruction(0x80+0x40+7); } if(s1num==4) //日期加一 { day++; if(day==32) day=1; write_nyr(8,day); WriteInstruction(0x80+9); } if(s1num==5) //月加一 { month++; if(month==13) month=1; write_nyr(5,month); WriteInstruction(0x80+6); } if(s1num==6) //年加一 { year++; if(year==99) year=0; write_nyr(2,year); WriteInstruction(0x80+3); } if(s1num==7) //星期加一 { week++; if(week==8) week=1; write_week(15,week); WriteInstruction(0x80+15); } } } if(s3==0) //第三個鍵被按下 { delay(5);if(s3==0){ while(!s3); if(s1num==1) //秒減一 { second--; if(second==-1) second=59; write_sfm(12,second); WriteInstruction(0x80+0x40+13); } if(s1num==2) //分減一 { minute--; if(minute==-1) minute=59; write_sfm(9,minute); WriteInstruction(0x80+0x40+10); } if(s1num==3) //時減一 { hour--; if(hour==-1) hour=23; write_sfm(6,hour); WriteInstruction(0x80+0x40+7);} if(s1num==4) //日減一 { day--; if(day==0) day=31; write_nyr(8,day); WriteInstruction(0x80+9);} if(s1num==5) //月減一 { month--; if(month==0) month=12; write_nyr(5,month); WriteInstruction(0x80+6);} if(s1num==6) //年減一 { year--; if(year==-1) year=99; write_nyr(2,year); WriteInstruction(0x80+3);} if(s1num==7) //日期減一 { week--; if(week==0) week=7; write_week(15,week); WriteInstruction(0x80+15); } } } if(s4==0) //保存并退出 { s1num=0; WriteInstruction(0x0c); TR0=1; } } } /****************************************** main function *******************************************/ void main(void){ uchar k=0;LcdInitiate(); //調用LCD初始化函數 while(1){ keyscan(); k=1;} } /***************************************** 函數功能:定時器T0的中斷服務函數 ******************************************/ void timer0()interrupt 1 { count++;if(count==13){ count=0; second++; if(second==60) //秒計滿60,秒歸0,分+1 { second=0; minute++; if(minute==60)//分計滿60,分歸0,時+1 { minute=0; hour++; if(hour==24)//時計滿24,時歸0,星期+1,日+1 { hour=0; week++; day++; if(week==8) week=1;//星期計滿7,星期歸1 if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//大月三十一天 { if(day==32) //大月天數計滿31,日歸1,月+1 { day=1; month++; } } if(month==4||month==6||month==9||month==11)//小月三十天 { if(day==31) { //小月天數計滿30,日歸1,月+1 day=1; month++; } } if(month==2) { if(leap_year()) { if(day==30)//閏年二月29天??計滿,日歸1,月+1 { day=1; month++; } } else { if(day==29)//非閏年二月28天 計滿,日歸1,月+1 { day=1; month++; } } } if(month==13)//月計滿12,月歸1,年+1 { month=1; year++; } if(year==99)//年計滿99,年歸0 { year=0; } write_nyr(2,year); } write_nyr(5,month); } write_nyr(8,day); write_week(15,week); } write_sfm(6,hour); } write_sfm(9,minute);} write_sfm(12,second);5 仿真結果和實物圖 5.1 仿真結果 5.2 實物圖 總結: 說句實話,這個時鐘在硬件上沒有什么太多的技術含量,只有一個單片機的最小系統和一個顯示電路,其實它們可以結合在一起,但是為了以后的方便,我還是將它們設計了兩個部分,方便以后最小系統的其他方面的應用。還有就是程序,這個時鐘程序如果讓我自己寫的話那我肯定不能再規定時間內完成,所以還是靠外界力量的幫忙。也正是如此,我找到我學習單片機的弱點,那就是程序的編寫,記得室友百度開玩笑說:“程序是單片機的靈魂”,想想當時很搞笑,但仔 細一想,那還真是個恰當的比喻,如果說單片機沒有程序的輸入,那么它不能完成任何事情。雖然本學期的單片機課程即將結束,但是我學習單片機的過程還沒有結束,以后還是要在程序的編寫上多多下工夫。 此次的電子時鐘設計給我奠定了一個實踐基礎,我會在以后的學習、生活中磨練自己,使自己適應于以后的競爭。當遇到不會或是設計不出來的地方,我們就會在QQ 群里討論或者是同學之間相互幫助。團結就是力量,無論在現在的學習中還是在以后的工作中,團結都是至關重要的,有了團結會有更多的理念、更多的思維、更多的情感。 參考文獻 [1]郭天祥.新概念51單片機C語言教程—— 入門,提高,開發,拓展 全攻略[M].北京:電子工業出版社,2009. 五.實驗總結及感想 在實驗的開始幾天,基本上沒有收獲,不知何從下手,不知所措。為了看得更遠,不妨站在前人的肩膀上,我在整體思路模糊的情況下,在網上大量招資糧,各種與電子時鐘相關的文章,我閱讀了不少。隨著涉獵的點滴積累,我對電子時鐘的設計方案已經慢慢醞釀而成。有了方向和不少知識儲備后,在接下來的幾天,幾乎每天都有突破,雖然有時只是一句程序的修改或誕生,但那種收獲的感覺很暖人心。 實驗中遇到了不少問題,接下來總結一下,共同探討。 1,按鍵問題。我的設計中,很多功能選擇是通過按鍵開關實現的。在仿真中發現,調整數值時,有時按鍵反應太快,按一次,跳了幾下,使設置時間,日期很不方便。但是仿真多了之后,找到了按鍵(實際上是按鼠標)的節奏,對按鍵的掌控力提高了不少,不怎么會出現跳變的情況了。有些開關我采用了長按鍵的方式來防抖,效果不錯,但是每次都要長按鍵,調整效率太低,我沒有普及。本來想把所有的按鍵都加延時防抖電路,但仿真中感覺對鍵盤的控制力沒提高多少,有時還是會出問題,這個方案放棄了。索性將板子焊接出來了在調試軟件吧,仿真畢竟不是那么“真”啊!實際電路調試中,按鍵反應沒有出現過于靈敏的問題,基本可控制。 出現以上問題,我認為是電路板上焊接點太多,接觸不是很好,影響了信號的傳輸時間,從而解決了按鍵問題!也有可能是按鍵質量問題,接觸不良。 2,P0口開關問題。P0口比較特殊,它存在高阻態,要使其輸入不是高電平就是低電平,就要接上拉電阻,給其高電平輸入。 3,音樂鬧鈴問題。在鬧鈴時間到,鬧鈴提醒時,我的數碼管為熄滅狀態,因為開始我的響鈴程序內,沒有數碼管掃描顯示程序。但加入數碼管顯示子程序后,我的鬧鈴音樂被影響了,一開始不知所措,有點懷疑是顯示程序時間過長,影響音樂的定時(節拍),我就在響鈴程序中加延時模塊,延時長度逐漸提高,最后出現了類似的問題,看來時顯示程序占用時間太長,使音樂每個音符的節拍出現了紊亂,音樂功能被遏制了!魚和熊掌不能兼得,我只能犧牲顯示來獲得音樂鬧鈴,但為了彌補顯示,我設計了閃爍提醒方案,就是在手動或音樂自然停止后,進入當前時間閃爍提示,8秒后若不按返回鍵,則自動跳入主程序。 在仿真中,老師提供的響鈴電路不能實現功能,但是在我的電路板中效果很好,令人費解!4,中斷沖突問題,為了實現秒表,我在T0中斷嵌套了秒表相關進位程序,由于秒表要求精度0.01秒,故我的T0中斷定時為就剛好0.01秒,中斷100次,剛好1秒。秒表確實實現了,但是我的鬧鈴音質變差了。一開始以為是鬧鈴程序存太多冗余環節,影響了T1的音樂輸出中斷,但是檢查程序后,發現沒什么多余的,裁剪無從下手。 在仿真中,我讓音樂模塊運行,發現音質很好。添加T0中斷服務程序,但是將中斷進入的間隔變大,即0.05秒進入一次中斷,發現音質有所下降,有滋滋聲,但比原來的好。最后認定應該是T0中斷過于頻繁,T1音樂頻率發生中斷被打破,當單位時間內被打破的次數達到一定程度時,音符和節拍的對應發生紊亂,最終音質變差。 雖然如此,我的焊接的電路板的表現卻很爭氣,鬧鈴音質可以接受!雖然這次實際表現不錯,但問題還是有的,還是要解決的,我的方案是把秒表程序放在T1中斷服務程序,雖然音樂的發生要用到T1中斷,但是秒表的顯示和鬧鈴音樂的演奏上不會重合在一起,鬧鈴判斷是在主程序,而秒表實現是在秒表子程序,故原本相互矛盾的兩個功能,在T1中斷服務程序中找到了共同的歸宿,和諧相處。 5,顯示數字分隔問題。本實驗中用8個共陰極數碼管顯示日歷及其時間,但是8個數碼管連在一起,顯示過程中不能有效地區分時,分,秒和年,月,日,數碼管是兩兩組合起來,形成某位的十位和個位,故用小數點在適當位置一直保持高亮狀態,形成分隔符,實現方便的讀取數據。具體方法是,將需要小數點位高亮的數碼管找出來,在動態顯示掃描到該數碼管時,先將提取的字段碼的最高位變為1,利用語句 ORL A,#10000000B 實現,修正字碼后,再將字碼送入P1口顯示數字,如此問題得以解決。 6,添加倒計時器嘀嘀聲提示功能。這個功能我用到了T1中斷,作為音調頻率發生器,但是T1已經承擔了音樂鬧鈴的音調發生功能,在此通過設立標志位實現中斷服務程序的轉變。即使我將秒表的實現服務程序放入T1中斷實現,也沒問題,只要選擇標志位判斷就可以了。在此,我們用調整狀態指示燈的狀態來做標志位,具體的說是P0.1口做標志位。 還有一個問題就是如何使鈴聲有間隔的響,這就牽涉到定時,在此我們用硬件定時,即T1中斷的次數作為定時參數。我的設計是音調響0.25秒,然后用T1延時0.5秒,由于計數器工作于方式1時,12MHZ時鐘頻率下時,一次中斷最多定時65536*1us=0.065536秒,為了實現0.5秒的響聲間隔,將T1中斷1次定時為0.05秒,中斷10次后,重新裝音調發生計數初值。對于響鈴時間的設定原理類似,可以有發聲頻率求出一次發聲定時中斷的時間,N次發聲定時中斷后,使時間變化0.25秒,而后轉入發聲間隔定時程序。 設計體會 以前看別人的一個電子表賣十幾塊錢,心里面有點憤憤不平,現在,自己做過一個電子鐘,才發現,其中的不容易,還有艱辛。其實做其他的事情也是一樣,都會經過很多的困難,才能成功。突然想起一句話“不經歷風雨,怎么見彩虹”。其實想想,這一個月,也留下了很多美好的回憶。一分耕耘,一分收獲。只有親自用實踐來驗證這句話,在能得其要領。經過這次單片機課程設計,我從一個單片機實踐的門外漢,已經越升為略知一二的新手。雖然還有很多有關單片機的應用有待學習,但萬變不離其宗,只要深入了解單片的原理,全部知識點,各個細節,一切設計皆有可能。還記得那個晚上通宵達旦仿真,不成功,誓不睡覺,很困了,都還在弄著。卻當仿真成功時,沒有一絲睡意,有的只是心中的喜悅通過這次的設計使我認識到本人對單片機方面的知識知道的太少了,對于書本上的很多知識還不能靈活運用,尤其是對程序設計語句的理解和運用,不能夠充分理解每個語句的具體含義,導致編程的程序過于復雜,使得需要的存儲空間增大。損耗了過多的內存資源。本次的設計使我從中學到了一些很重要的東西,那就是如何從理論到實踐的轉化,怎樣將我所學到的知識運用到我以后的工作中去。只要我們有耐心,夠細心,都可以把它們解決。在大學的課堂的學習只是在給我們灌輸專業知識,而我們應把所學的用到我們現實的生活中去,此次的電子時鐘設計給我奠定了一個實踐基礎,我會在以后的學習、生活中磨練自己,使自己適應于以后的競爭,同時在查找資料的過程中我也學到了許多新的知識,在和同學協作過程中增進同學間的友誼,使我對團隊精神的積極性和重要性有了更加充分的理解。我知道,今后我的路還是很長,我要學的東西也有很多。通過這次實習,我深刻的認識到計算機專業的路的不平坦,但我會以一種良好的態度去迎接每一個挫折和挑戰。第五篇:單片機數字時鐘課程設計感想