《單片機原理》課程設計報告電子鐘
《《單片機原理》課程設計報告電子鐘》由會員分享,可在線閱讀,更多相關《《單片機原理》課程設計報告電子鐘(27頁珍藏版)》請在裝配圖網上搜索。
1、 物理與機電工程學院課程設計報告 課程名稱: 單片機課程設計 系 部: 物理與機電工程學院 專業(yè)班級: 電子信息工程 學生姓名: 桑 勝 金 指導教師: 王 清 輝 完成時間: 2012-3-16 報告成績: 評閱意見: 評閱教師 日期
2、 一、設計任務與要求 二、方案設計與論證 三、硬件電路設計 四、軟件設計 五、仿真過程與仿真結果 六、安裝與調試 七、結論與心得 八、參考文獻 《單片機原理》課程設計報告 一、設計任務與要求 1、設計基本要求。 設計一個電子鐘: (1)具有小時分秒時間顯示。 (2)能夠設置鬧鐘至少5次鬧鐘時間。 (3)可利用按鍵修改時間,具有上午下午的提示信息。 2、。通過課程設計的教學實踐,進一步學習、掌握單片機應用系統(tǒng)的有關知識,加深了解單片機的工作原理。初步掌握簡單單片機應用系統(tǒng)的設計
3、、制作、調試的方法。提高動手實踐能力、提高科學的思維能力。 二、方案設計與論證 1 電子時鐘 1.1 電子時鐘簡介 1957年,Ventura發(fā)明了世界上第一個電子表,從而奠定了電子時鐘的基礎,電子時鐘開始迅速發(fā)展起來。現(xiàn)代的電子時鐘是基于單片機的一種計時工具,采用延時程序產生一定的時間中斷,用于一秒的定義,通過計數方式進行滿六十秒分鐘進一,滿六十分小時進一,滿二十四小時小時清零。從而達到計時的功能,是人民日常生活補課缺少的工具。 1.2 電子時鐘的基本特點
4、 現(xiàn)在高精度的計時工具大多數都使用了石英晶體振蕩器,走時精度高,穩(wěn)定性好,使用方便,不需要經常調試,數字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用LED顯示器代替指針顯示進而顯示時間,減小了計時誤差,這種表具有時、分、秒顯示時間的功能,還可以進行時和分的校對,片選的靈活性好。 1.3 電子時鐘的原理 該電子時鐘由89C51,BUTTON,六段數碼管等構成,采用晶振電路作為驅動電路,由延時程序和循環(huán)程序產生的一秒定時,達到時分秒的計時,六十秒為一分鐘,六十分鐘為一小時,滿二十四小時
5、為一天。而電路中兩個控制鍵功能直接按下不松開,則可以通過按鍵實現(xiàn)分鐘的累加,每按一次分鐘加一;而另一按鍵按下又放松,則可實現(xiàn)小時的調節(jié),同樣每按一次小時加一。 2 單片機識的相關知識 2.1 單片機簡介 單片機全稱為單片機微型計算機(Single Chip Microsoftcomputer)。從應用領域來看,單片機主要用來控制,所以又稱為微控制器(Microcontroller Unit)或嵌入式控制器。單片機是將計算機的基本部件微型化并集成在一塊芯片上的微型計算機。 2.2 89C51單片機介紹
6、 VCC:供電電壓。 GND:接地。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLA
7、SH編程和校驗時,P1口作為第八位地址接收。 P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 P3口:P3口管腳是8個帶內部上拉電阻
8、的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3口也可作為AT89C51的一些特殊功能口,如下表所示: 口管腳 備選功能 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口同時為閃爍編程和編程
9、校驗接收一些控制信號。 RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。 ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁
10、止,置位無效。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。 /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。 3 控制系
11、統(tǒng)的軟件設計 3.1 單片機型號的選擇 通過對多種單片機性能的分析,最終認為89C51是最理想的電子時鐘開發(fā)芯片。89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能器件,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,89C51是一種高效微控制器,而且它與MCS-51兼容,且具有4K字節(jié)可編程閃爍存儲器和1000寫/擦循。 3.2 數碼管顯示工作原理 數碼管是一種把多個LED顯示段集成在
12、一起的顯示設備。有兩種類型,一種是共陽型,一種是共陰型。共陽型就是把多個LED顯示段的陽極接在一起,又稱為公共端。共陰型就是把多個LED顯示段的陰極接在一起,即為公共商。通常的數碼管又分為8段,即8個LED顯示段,分別為A、B、C、D、E、F、G、DP,其中DP 是小數點位段。而多位數碼管,除某一位的公共端會連接在一起,不同位的數碼管的相同端也會連接在一起。即,所有的A段都會連在一起,其它的段也是如此,這是實際最常用的用法。數碼管顯示方法可分為靜態(tài)顯示和動態(tài)顯示兩種。靜態(tài)顯示就是數碼管的8段輸入及其公共端電平一直有效。動態(tài)顯示的原理是,各個數碼管的相同段連接在一起,共同占用8 位段引管線;每位
13、數碼管的陽極連在一起組成公共端。利用人眼的視覺暫留性,依次給出各個數碼管公共端加有效信號,在此同時給出該數碼管加有效的數據信號,當全段掃描速度大于視覺暫留速度時,顯示就會清晰顯示出來。 3.3 鍵盤電路設計 該設計只用了兩個鍵盤,但實現(xiàn)的功能卻是比較完善,減少了硬件資源的損耗,該鍵可以實現(xiàn)小時和分鐘的調節(jié)。當按鍵按下又松開,則可以通過按鍵實現(xiàn)分鐘的累加,每按一次分鐘加一;另一個按鍵則可實現(xiàn)小時的調節(jié),同樣每按一次小時加一。達到時間調節(jié)的目的。 三、硬件電路設計 引腳功能說明 89C51外
14、部引腳圖:(可以直接拷入ASM程序文件中,作注釋使用,十分方便) ;┏━┓┏━┓ ; P1.0 ┫1 ┗┛40┣ Vcc ; P1.1 ┫239┣ P0.0 ; P1.2 ┫3 38┣ P0.1 ; P1.3 ┫437┣ P0.2 ; P1.4 ┫5 36┣ P0.3 ; P1.5 ┫6 35┣ P0.4 ; P1.6 ┫7 34┣ P0.5 ; P1.7 ┫8 33┣ P0.6 ; RST/Vpd ┫9 32┣ P0.7 ; RXD P3.0 ┫10 31┣ -EA/Vpp(內1/外0 程序地址選擇) ; TXD P3.1 ┫11 30┣ ALE/-P (地址鎖
15、存輸出) ; -INT0 P3.2 ┫12 29┣ -PSEN (外部程序讀選通輸出) ; -INT1 P3.3 ┫13 28┣ P2.7 ; T0 P3.4 ┫14 27┣ P2.6 ; T1 P3.5 ┫15 26┣ P2.5 ; -WR P3.6 ┫16 25┣ P2.4 ; -RD P3.7 ┫17 24┣ P2.3 ; X2 ┫18 23┣ P2.2 ; X1 ┫1922┣ P2.1 ; GND ┫20 21┣ P2.0 ; ┗━━━━┛ 89c51引腳圖管腳圖 引腳說明: ①電源引腳 Vcc(40腳):典型值+5V。 Vss(20腳):
16、接低電平。 ②外部晶振 X1、X2分別與晶體兩端相連接。當采用外部時鐘信號時,X2接振蕩信號,X1接地 。 ③輸入輸出口引腳: P0口:I/O雙向口。作輸入口時,應先軟件置“ 1”。 P1口:I/O雙向口。作輸入口時,應先軟件置“ 1”。 P2口:I/O雙向口。作輸入口時,應先軟件置“ 1”。 P3口:I/O雙向口。作輸入口時,應先軟件置“ 1”。 ④控制引腳: RST/Vpd、ALE/-PROG、-PSEN、-EA/Vpp組成了MSC-51的控制總線。 RST/Vpd(9腳):復位信號輸入端(高電平有效)。 第二功能:加+5V備用電源,可
17、以實現(xiàn)掉電保護RAM信息不丟失。
ALE/-PROG(30腳):地址鎖存信號輸出端。
第二功能:編程脈沖輸入。
-PSEN(29腳):外部程序存儲器讀選通信號。
-EA/Vpp(31腳):外部程序存儲器使能端。
第二功能:編程電壓輸入端(+21V)。
原理圖:
四、軟件設計
程序: #include
18、[]={" 00:00:00 "}; uchar code table2[]={" Alarm Clock_1 "}; uchar code table3[]={" Alarm On "}; uchar code table4[]={" Alarm Off "}; uchar code table0[]={" "}; sbit dula=P2^6; //定義鎖存器鎖存端 sbit wela=P2^7; sbit lcden=P1^0; sbit rs=P1^1; uchar a,shi,fen,miao,ww,aa,bb,s3num,s4num
19、,num,yy; sbit s1=P2^0; sbit s2=P2^1; sbit s3=P2^2; sbit s4=P2^3; sbit s5=P2^4; sbit beep=P2^5; void delay(uint z) //延時函數 毫秒 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_com(uchar com) //寫指令函數 { rs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0;
20、 } void write_date(uchar date) //寫數據函數 { rs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; } void write_sfm(uchar add,uchar date) //時分秒的地址+數據函數 { uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); delay(10); write_date(0x30+shi); delay(10);
21、 write_date(0x30+ge); delay(10); } void write_sfm1(uchar add,uchar date) //時分秒的地址+數據函數 { uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+add); delay(10); write_date(0x30+shi); delay(10); write_date(0x30+ge); delay(10); } void init() //初始化函數 { dula=0
22、;//關閉兩鎖存器鎖存端,防止操作液晶時數碼管會出亂碼 wela=0; lcden=0; write_com(0x38); //顯示模式設置 write_com(0x0c); //開顯示 write_com(0x06); //光標設置 write_com(0x01); //顯示清屏 write_com(0x80); //光標初始地址 for(num=0;num<16;num++) { write_date(table[num]); delay(10); } write_com(0x80
23、+0x40); for(num=0;num<16;num++) { write_date(table1[num]); delay(10); } TMOD=0x01; //設置定時器0為工作方式1 TH0=(65536-50000)/256; //裝初值,定時50ms TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void keyscan() //鍵盤函數 { uchar s1num; if
24、(s1==0) { delay(5); if(s1==0) { s1num++; while(!s1); if(s1num==1) //光標跳到秒位置閃爍 { TR0=0; write_com(0x80+0x40+10); write_com(0x0f); } if(s1num==2) //光標跳到分位置閃爍 { write_com(0x80+0x40+7); write_com(0x0f); } if(s1num==
25、3) //光標跳到時位置閃爍 { write_com(0x80+0x40+4); write_com(0x0f); } if(s1num==4) //恢復時鐘 { TR0=1; write_com(0x0c); //開顯示 write_com(0x06); //光標設置 s1num=0; } } } if(s1num!=0) { if(s1num==1) //調整秒鐘 { if(s2=
26、=0) { delay(5); if(s2==0) { while(!s2); miao++; if(miao==60) miao=0; } write_sfm(10,miao); } } if(s1num==2) //調整分鐘 { if(s2==0) { delay(5); if(s2==0) { while(!s2); fen++; if(fen==60)
27、 fen=0; } write_sfm(7,fen); } } if(s1num==3) //調整小時 { if(s2==0) { delay(5); if(s2==0) { while(!s2); shi++; if(shi==24) shi=0; } write_sfm(4,shi); } } } //鬧鐘 if(s3==0) { delay(10); if(s3==
28、0) { s3num++; while(!s3); if(s3num==1) { ww=1; write_com(0x01); write_com(0x80); for(num=0;num<16;num++) { write_date(table1[num]); delay(10); } write_com(0x80+0x40); //光標初始地址 for(num=0;num<16;num++) {
29、 write_date(table2[num]); delay(10); } } if(s3num==2) { yy=1; ww=0; write_com(0x01); write_com(0x80); for(num=0;num<16;num++) { write_date(table[num]); delay(10); } write_com(0x80+0x40); for(num=0;num<16;num+
30、+) { write_date(table1[num]); delay(10); } write_sfm(4,shi); write_sfm(7,fen); write_sfm(10,miao); s3num=0; } } } if(s4==0) { delay(5); if(s4==0) { s4num++; while(!s1); if(s4num==1) //
31、光標跳到分位置閃爍 { write_com(0x80+7); write_com(0x0f); } if(s4num==2) //光標跳到時位置閃爍 { write_com(0x80+4); write_com(0x0f); } if(s4num==3) { write_com(0x0c); //開顯示 write_com(0x06); //光標設置 s4num=0; } } }
32、 if(s4num!=0) { if(s4num==1) //調整分鐘 { if(s2==0) { delay(5); if(s2==0) { while(!s2); bb++; if(bb==60) bb=0; } write_sfm1(7,bb); } } if(s1num==2
33、) //調整小時 { if(s2==0) { delay(5); if(s2==0) { while(!s2); aa++; if(aa==24) aa=0; } write_sfm1(4,aa); } } } if(s5==0) { delay(10); if(s5==0) { while(!
34、s5); write_com(0x01); //顯示清屏 write_com(0x80); //光標初始地址 for(num=0;num<16;num++) { write_date(table[num]); delay(10); } write_com(0x80+0x40); for(num=0;num<16;num++) { write_date(table1[num]); delay(10); } write_sfm(4,shi); write_sfm(
35、7,fen); write_sfm(10,miao); } } } void main() { init(); ww=0; while(1) { keyscan(); if(yy==1) { if(shi==aa&&fen==bb) { beep=0; delay(1000); beep=1; delay(1000); beep=0; delay(1000); beep=1; yy=0;
36、 } } } } void timer0() interrupt 1 { TH0=(65536-50000)/256; //重裝初值 TL0=(65536-50000)%256; a++; if(a==20) //定時到達1s { a=0; miao++; if(s3num==2) { if(shi==aa&&fen==bb) { beep=0; delay(1000); beep=1;
37、 delay(1000); beep=0; delay(1000); beep=1; } } if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; } if(ww==0) { write_sfm(4,shi); } }
38、 if(ww==0) { write_sfm(7,fen); } } if(ww==0) { write_sfm(10,miao); } } } 五、仿真過程與仿真結果 PDB仿真: 元器件清單: 名稱 規(guī)格 數量 電阻 1K 1 200歐 1 瓷片電容 104 1 30pf 2 三極管 pnp9012 1 蜂鳴器 1 晶振 12M 2 輕觸按鍵 6 單片機 at89c51 1 排阻 10K 2 排針
39、 2 IC座 40腳 1 藍白可調 10K 1 LCD1602 1 六、安裝與調試 制板過程:打印預覽-----轉印-----腐蝕-----轉孔-----焊接… 焊接情況; 七、結論與心得 經過一學期的學習,我們完成了這次單片機電子時鐘設計,通過這次的設計使我認識到本人對單片機方面的知識知道的太少了,對于書本上的很多知識還不能靈活運用,尤其是對程序設計語句的理解和運用,不能夠充分理解每個語句的具體含義,導致編程的程序過于復雜,使得需要的存儲空間增大。損耗了過多的內存資源。 本次的設計使我從中學到了一些很重要的東西,那就是如何從理論到實踐的轉化,怎
40、樣將我所學到的知識運用到我以后的工作中去。在大學的課堂的學習只是在給我們灌輸專業(yè)知識,而我們應把所學的用到我們現(xiàn)實的生活中去,此次的電子時鐘設計給我奠定了一個實踐基礎,我會在以后的學習、生活中磨練自己,使自己適應于以后的競爭,同時在查找資料的過程中我也學到了許多新的知識,在和同學協(xié)作過程中增進同學間的友誼,使我對團隊精神的積極性和重要性有了更加充分的理解。 實踐中獲得的知識能讓我對單片機的知識有更好的認識和理解。雖然這次的課程設計我參考了一些文獻資料,沒有做到創(chuàng)新,但在對程序的讀寫過程中我明白了許多。這次課程設計的最大收獲是只有把理論用到實踐中我們才能真正掌握好所學知識。相信這對我以后的課程設計和畢業(yè)設計將會有很大的幫助! 八、參考文獻 [1] 謝自美.電子線路設計?實驗?測試[M].武漢:華中理工大學出版社 1992. [2] 何立民.單片機應用系統(tǒng)設計[M].北京:北京航空航天大學出版社 1993. [3] 樓然笛.單片機開發(fā)[M].北京:人民郵電出版社 1994. [4] 付家才.單片機控制工程實踐技術[M].北京:化學工業(yè)出版社 2004.3. [5] 李光才.單片機課程設計實例指導[M].北京:北京航空航天大學出版社 2004 第 27 頁
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工重大危險源安全管理制度
- 安全培訓資料:典型建筑火災的防治基本原則與救援技術
- 企業(yè)雙重預防體系應知應會知識問答
- 8 各種煤礦安全考試試題
- 9 危險化學品經營單位安全生產管理人員模擬考試題庫試卷附答案
- 加壓過濾機司機技術操作規(guī)程
- 樹脂砂混砂工藝知識總結
- XXXXX現(xiàn)場安全應急處置預案
- 某公司消防安全檢查制度總結
- 1 煤礦安全檢查工(中級)職業(yè)技能理論知識考核試題含答案
- 4.燃氣安全生產企業(yè)主要負責人模擬考試題庫試卷含答案
- 工段(班組)級安全檢查表
- D 氯化工藝作業(yè)模擬考試題庫試卷含答案-4
- 建筑起重司索信號工安全操作要點
- 實驗室計量常見的30個問問答題含解析