




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、黑龍江農業(yè)經(jīng)濟職業(yè)學院畢業(yè)論文電子鐘的設計與制作 姓 名: 指導教師: 專 業(yè): 機電一體化 班 級: 09 1 2011年11月25日目 錄摘 要1前 言21 設計任務與要求32 設計方案33 硬件設計 33.1 AT89C51單片機簡介33.1.1 單片機的構成33.1.2 AT89C51單片機性能及特點44466665仿真結果分析15結論16參考文獻17致 謝18電子鐘的設計與制作摘要:單片機自20世紀70年代問世以來,以其極高的性能價格比受到人們的重視和關注,應用很廣、發(fā)展很快。單片機體積小、重量輕、抗干擾能力強、環(huán)境要求不高、價格低廉、可靠性高、靈活性好。而51單片機是各單片機中最為
2、典型和最有代表性的一種。這次畢業(yè)設計通過對它的學習、應用,以AT89C51芯片為核心,輔以必要的電路,設計了一個簡易的電子時鐘。關鍵詞:51單片機、AT89C51、電子時鐘前 言隨著科技的不斷發(fā)展,人們的生活水平也在逐漸的提高,每天忙碌的的工作、學習和生活,單我們無時無刻都與時間相伴。說道時間那就離不開鐘表,想在的鐘表種類繁多,從機械表到電子表,不斷的發(fā)展進步。今天我以AT89C51芯片為主體,輔以必要的電路設計了一個電子時鐘。下面就是設計的具體過程。1.設計一個電子時鐘,并且能夠實現(xiàn)日期,星期和時分秒的現(xiàn)實和調節(jié)。2.設計出硬件電路。 3.設計出軟件編程方法,并寫出源代碼。4.用PROTEU
3、S進行仿真。5.用匯方式實現(xiàn)目的。6.利用查表,中斷等清楚,有序。本設計主要設計了一個基于AT89C51單片機的電子時鐘。并在液晶屏上顯示相應的時間,日期和星期。并通過一個控制鍵用來實現(xiàn)時間的調節(jié)。應用ISIS軟件實現(xiàn)了單片機電子時鐘系統(tǒng)的設計與仿真。該方法仿真效果真實、準確,節(jié)省了硬件資源。該設計的硬件部分主要包括89C51多功能接口芯片用于開發(fā)電子時鐘芯片、液晶顯示器用于顯示時間。3.1 AT89C51單片機簡介AT89C51單片機是一種低功耗,高性能的片內含有4KB可編程/擦除只讀存儲器(FPEROMFlash Programmable and Erasable Read Only Me
4、mory)的8位COMS微控制器,使用高密度,非易失存儲技術制造,并且與AT89C51引腳和指令系統(tǒng)完全兼容。芯片上的FPEROM允許在線編程或采用通用的非易失存儲編程器對存儲器重復編程。 單片機的構成AT89C51單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多種功能的I/O線等一臺計算機所需要的基本功能部件,AT89C51單片機單片機內包含下列幾個部件:(1) 一個8位CPU;(2)一個片內振蕩器及時鐘電路;(3)4K字節(jié)ROM程序存儲器;(4)128字節(jié)RAM數(shù)據(jù)存儲器;(5)兩個16位定時器/計數(shù)器;(6)可尋址64K外部數(shù)據(jù)存儲器和64K外部程序存儲器空間的控制電
5、路;(7)32條可編程的I/O線(四個8位并行I/O端口);(8)一個可編程全雙工串行口;(9)具有五個中斷源、兩個優(yōu)先級嵌套中斷結構。其內部機構框圖如圖3.1所示: 圖3.1 MCS-51單片機內部機構框圖3.1.2 AT89C51單片機性能及特點(1)與MCS-51微控制器產品系列兼容。(2)片內有4KB可在線重復編程的快閃擦寫存儲器(Flash Memory)。(3)存儲器可循環(huán)寫入/擦除1000次。(4)存儲數(shù)據(jù)保存時間為10年。(5)6V。(6)全靜態(tài)工作:可從0HZ到16MHZ。(7)程序存儲器具有3級加密保護。(8)1288位內部RAM。(9)32條可編程I/O線。(10)兩個1
6、6位定時器/計數(shù)器。(11)中斷結構具有5個中斷源和2個優(yōu)先級。(13) 可編程全雙工串行通道。(13)空閑狀態(tài)維持低功耗和掉電狀態(tài)保存存儲內容。振蕩器特性XTAL1和XTAL2分別為反向放大器的輸入和輸出,該反向放大器可以配置為片內振蕩器。3.1.4 AT89C51單片機的引腳說明AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節(jié)閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以
7、反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器。圖3.3 AT89C51單片機引腳圖AT89C51單片機的內部硬件結構中除了程序存儲器由FPEROM取代了87C51單片機的EPROM外,其余部分完全相同,其管腳說明如下:(1)VCC:供電電壓(2)GND:接地(3)時鐘電路XTAL1(19腳)芯片內部振蕩電路(單級反相放大器)輸入端。XTAL2(18腳)芯片內部振蕩電路(單級反相放大器)輸出端。 (4)控制信號RST(9腳)復位
8、信號:時鐘電路工作后,在此引腳上將出現(xiàn)兩個機器周期的高電平,芯片內部進行初始復位,P0口P3口輸出高電平,將初值07H寫入堆棧指針。ALE(30腳)地址鎖存信號:當訪問外部存儲器時,P0口輸出的低8位地址由ALE輸出的控制信號鎖存到片外地址鎖存器,P0口輸出地址低8位后,又能與片外存儲器之間傳送信息。另外,ALE可驅動4個TTL門。PSEN(29腳)片外程序存儲器讀選通:PSEN低電平有效,PSEN作為程序存儲器的讀信號,輸出負脈沖,將相應的存儲單元的指令讀出并送到P0口,PSEN可驅動8個TTL門。EA/Vpp(30腳):當EA為高電平且PC值小于0FFFH時,CPU執(zhí)行內部程序存儲器程序;
9、當EA為低電平時,CPU僅執(zhí)行外部程序存儲器程序。(5)I/O接口P0口(P0.0P0.7,3932腳)三態(tài)雙向口:P0口結構包括一個輸出鎖存器、兩個三態(tài)緩沖器、一個輸出驅動電路和一個輸出控制端。P1口(P1.0P1.7,18腳)準雙向口:P1口做通用I/O接口使用,P1口的每一位口線能獨立地作用于輸入線,P1口可驅動4個TTL門。P2口(P2.0P2.7,2128腳)通用I/O接口:它做通用I/O接口使用時,是一個準雙向口,此時轉換開關MUX倒向左邊,輸出極與鎖存器相連,引腳可作為用戶I/O口線使用,輸入/輸出操作與P1口完全相同,P2口做地址總線使用。P3口(P3.0P3.7,1017腳)
10、雙功能口:P3口做通用I/O接口使用,輸出功能控制線為高電平,與非門的輸出取決于鎖存器的狀態(tài),此時鎖存器Q端的狀態(tài)與其引腳狀態(tài)是一致的。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(外部數(shù)據(jù)存儲器寫選通);P3.7 /RD(外部數(shù)據(jù)存儲器讀選通); 單片機型號的選擇 通過對多種單片機性能的分析,最終認為89C51是最理想的電子時鐘開發(fā)芯片。89C51是一種帶4K字節(jié)
11、閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的89C51是一種高效微控制器,而且它與MCS-51兼容,且具有4K字節(jié)可編程閃爍存儲器和1000寫/擦循環(huán),數(shù)據(jù)保留時間為10年等特點,是最好的選擇。 數(shù)碼管顯示工作原理數(shù)碼管是一種把多個LED顯示段集成在一起的顯示設備。有兩種類型,一種是共陽型,一種是共陰型。共陽型就是把多個LED顯示段的陽極接在一起,又稱為公共端。共陰型就是把多個LED顯示段的陰極接在一起,即為公共商
12、。陽極即為二極管的正極,又稱為正極,陰極即為二極管的負極,又稱為負極。通常的數(shù)碼管又分為8段,即8個LED顯示段,這是為工程應用方便如設計的,分別為A、B、C、D、E、F、G、DP,其中DP 是小數(shù)點位段。4.1 程序模塊及介紹#include#define uchar unsigned char /宏定義#define uint unsigned int /宏定義sbit rs=P35; /液晶數(shù)據(jù)/指令選擇端:1-數(shù)據(jù),0-指令sbit lcden=P34; /液晶使能控制端:1-有效,0-無效sbit shift_key=P32;/位置移動鍵sbit up_key=P33;/增加鍵uch
13、ar temp=0;/定義定時器溢出計數(shù)變量,每隔50ms產生1次溢出,temp加1uint year=2011;/定義年變量并賦初值2011年uchar month=06,day=01,week;/定義月、日、星期變量,并賦初值5月23日uchar hour=23,minute=59,second=58;/定義時、分、秒變量,并賦初值12時00分00秒uchar code week_string74=MON,TUE,WED,THU,FRI,SAT,SUN;/定義星期英文縮寫表uchar data month_day12=31,0,31,30,31,30,31,31,30,31,30,31;/
14、定義每月天數(shù)表/*-定時計數(shù)器T0及中斷初始化函數(shù)-*/ void init(void) TMOD=0x01;/設置定時器0為工作方式1 TH0=(65536-50000)/256;/16位計數(shù)初值除以256得到高8位初值 TL0=(65536-50000)%256;/16位計數(shù)初值除以256的余數(shù)得到低8位初值 EA=1;/開總中斷 ET0=1;/開啟定時器0中斷 EX0=1;/開啟外部中斷,外部中斷用于調整時間 PT0=1;/將定時器0中斷設置高優(yōu)先級,調整時間期不停止計時 TR0=1;/啟動定時器0/*-1ms延時函數(shù)-*/void delay(uint n) uint i,j; for
15、(i=n;i0;i-) for(j=114;j0;j-);/*-LCD1602寫指令函數(shù)-*/void LCD1602_write_com(uchar com) rs=0;/rs=0,置指令輸入狀態(tài) P0=com;/輸出指令碼 delay(1);/延時1mslcden=1;/lcden=1,使能端有效 delay(1);/延時1ms lcden=0;/lcden=0,使能端無效/*-LCD1602寫數(shù)據(jù)函數(shù)-*/void LCD1602_write_dat(uchar dat) rs=1;/rs=1,置數(shù)據(jù)輸入狀態(tài) P0=dat; /輸出待顯示字符的字符碼(ASCII碼) delay(1);/
16、延時1ms lcden=1;/lcden=1,使能端有效 delay(1);/延時1ms lcden=0;/lcden=0,使能端無效 /*公歷平年的2月只有28天,公歷閏年的2月有29天。判斷公歷閏年的算法:、普通年能被4整除且不能被100整除的為閏年。 如:2011年不是閏年,2012年是閏年.2100年也不是閏年。、世紀年能被400整除的是閏年。 如:2000年是閏年,1900年不是閏年。*/void leapyear() /判斷某年是否閏年函數(shù) if (0) month_day1=29;/閏年2月29天 else month_day1=28;/平年2月28天 /*由年、月、日計算星期的
17、算法(基姆拉爾森計算公式): W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7公式中d表示日期中的日數(shù),m表示月份數(shù),y表示年數(shù)。注意:計算時要將一月和二月看成是上一年的十三月和十四月。例:2012-1-10需要換算成2011-13-10來代入公式計算。*/uchar CaculateWeek(int y,char m, char d)/由年、月、日計算星期函數(shù) uchar w; if(m=1)m=13;y=y-1;else if(m=2)m=14;y=y-1; w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; retur
18、n w;/*定時計數(shù)器中斷程序,每當定時計數(shù)器溢出時觸發(fā)中斷,執(zhí)行該程序*/void time0() interrupt 1 TH0=(65536-50000)/256;/重裝初值 TL0=(65536-50000)%256; if(temp=19)/為了加快仿真速度,將temp設為1,實際應為20 temp=0; if(second=59)/為了加快仿真速度,將second設為2,實際應為59 second=0; if(minute=59)/為了加快仿真速度,將minute設為2,實際應為59 minute=0; if(hour=23)/為了加快仿真速度,將hour設為2,實際應為23 ho
19、ur=0; leapyear();/閏、平年計算 if(day=month_daymonth-1)/判斷日期是否到了每月最后一天 day=1; if(month=12) month=1; year+; else month+; else day+; else hour+; else minute+; else second+; else temp+; week=CaculateWeek(year,month,day);/根據(jù)年月日計算星期void int0() interrupt 0/外部中斷函數(shù),當按下setup鍵時產生外部中斷進入調整狀態(tài) bit flag; uchar setup_bit
20、=0;/setup_bit用于計數(shù)移位次數(shù) EX0=0;/關閉中斷函數(shù) do/循環(huán) if(shift_key=0)/判斷移位鍵是否按下 delay(1);/延時消抖 if(shift_key=0)/確認移位鍵是否按下 while(!shift_key);/等待移位鍵釋放 if(setup_bit=10)/共12位 setup_bit=0; /移位計數(shù)值返回0 LCD1602_write_com(0x0c);/設置不顯示光標模式 else setup_bit+;/移位計數(shù)值加1 LCD1602_write_com(0x0e);/設置顯示光標模式 switch(setup_bit)/判斷調整哪位,
21、從而確定光標顯示位置 case 1: LCD1602_write_com(0x80+0x44+4);/光標設置到分個位顯示位置 break; case 2: LCD1602_write_com(0x80+0x44+3);/光標設置到分十位顯示位置 break; case 3: LCD1602_write_com(0x80+0x44+1);/光標設置到時個位顯示位置 break; case 4: LCD1602_write_com(0x80+0x44+0);/光標設置到時十位顯示位置 break; case 5: LCD1602_write_com(0x80+0x01+9);/光標設置到日個位顯
22、示位置 break; case 6: LCD1602_write_com(0x80+0x01+8);/光標設置到日十位顯示位置 break; case 7: LCD1602_write_com(0x80+0x01+6);/光標設置到月個位顯示位置 break; case 8: LCD1602_write_com(0x80+0x01+5);/光標設置到月十位顯示位置 break; case 9: LCD1602_write_com(0x80+0x01+3);/光標設置到年個位顯示位置 break; case 10: LCD1602_write_com(0x80+0x01+2);/光標設置到年十位
23、顯示位置 break; case 11: LCD1602_write_com(0x80+0x01+1);/光標設置到年百位顯示位置 break; case 12: LCD1602_write_com(0x80+0x01+0);/光標設置到年千位顯示位置 break; default: break; if(up_key=0)/判斷增加鍵是否按下 delay(1);/延時消抖 if(up_key=0)/確認增加鍵是否按下 while(!up_key);/等待增加鍵釋放 flag=1;/增加鍵已按動 else flag=0;/增加鍵未按動 else flag=0;/增加鍵未按動 if(flag)/若
24、增加鍵按動 switch(setup_bit)/判斷是哪位,從而調整哪位 case 1:if(minute%10=9)/若分個位為9 minute=minute-9;/則分個位清零 else minute+;/否則分個位加1 /LCD1602_write_com(0x80+0x44+4);/分個位顯示位置 LCD1602_write_dat(0x30+minute%10);/寫入1602 break; case 2: if(minute/10=5)/若分十位為5 minute=minute-50;/則分十位清零 else minute=minute+10;/否則分十位加1 /LCD1602_w
25、rite_com(0x80+0x44+3);/分十位顯示位置 LCD1602_write_dat(0x30+minute/10);/寫入1602 break; case 3: if(hour%10=9) hour=hour-9; else hour+; /LCD1602_write_com(0x80+0x44+1);/時個位顯示位置 LCD1602_write_dat(0x30+hour%10);/寫入1602 break; case 4: if(hour/10=2) hour=hour-20; else hour=hour+10; /LCD1602_write_com(0x80+0x44+0
26、);/時十位顯示位置 LCD1602_write_dat(0x30+hour/10);/寫入1602 break; case 5: if(day%10=9) day=day-9; else day+; /LCD1602_write_com(0x80+0x01+9);/日個位顯示位置 LCD1602_write_dat(0x30+day%10);/寫入1602 break; case 6: if(day/10=3) day=day-30; else day=day+10;/LCD1602_write_com(0x80+0x01+8);/日十位顯示位置 LCD1602_write_dat(0x30
27、+day/10);/寫入1602 break; case 7: if(month%10=9) month=month-9; else month+; /LCD1602_write_com(0x80+0x01+6);/月個位顯示位置 LCD1602_write_dat(0x30+month%10);/寫入1602 break; case 8: if(month/10=1) month=month-10; else month=month+10; /LCD1602_write_com(0x80+0x01+5);/月十位顯示位置 LCD1602_write_dat(0x30+month/10);/寫
28、入1602 break; case 9: if(year%10=9) year=year-9; else year+; /LCD1602_write_com(0x80+0x01+3);/年個位顯示位置 LCD1602_write_dat(0x30+year%10);/寫入1602 break; case 10: if(year%100/10=9) year=year-90; else year=year+10; /LCD1602_write_com(0x80+0x01+2);/年十位顯示位置 LCD1602_write_dat(0x30+year%100/10);/寫入1602 break;
29、default: break; while(setup_bit!=0);/若所有位未調整完則返回,否則退出調整模式 EX0=1;/重新打開外部中斷/*-LCD1602初始化函數(shù)-*/void LCD1602_init() LCD1602_write_com(0x38); /設置液晶顯示方式:16x2行,5x7點陣,8位數(shù)據(jù)總線 LCD1602_write_com(0x0c); /設置字符顯示開關及光標顯示模式:開啟字符顯示,不顯示光標 LCD1602_write_com(0x06); /設置數(shù)據(jù)指針及顯示屏移動模式:數(shù)據(jù)指針增(即光標右移),顯示屏不移 LCD1602_write_com(0x
30、01); /液晶屏幕清屏/*-主函數(shù)-*/void main() init();/定時計數(shù)器T0及中斷初始化 LCD1602_init();/LCD1602初始化 while(1) uchar i; LCD1602_write_com(0x80+0x01); /設置第1行顯示首地址01 LCD1602_write_dat(0x30+year/1000);/輸出年千位的字符碼 LCD1602_write_dat(0x30+(year%1000)/100);/輸出年百位的字符碼 LCD1602_write_dat(0x30+(year%100)/10);/輸出年十位的字符碼 LCD1602_wri
31、te_dat(0x30+year%10);/輸出年個位的字符碼 LCD1602_write_dat(-);/輸出-字符碼 LCD1602_write_dat(0x30+month/10);/輸出月十位的字符碼 LCD1602_write_dat(0x30+month%10);/輸出月個位的字符碼 LCD1602_write_dat(-);/輸出-字符碼 LCD1602_write_dat(0x30+day/10);/輸出日十位的字符碼 LCD1602_write_dat(0x30+day%10);/輸出日個位的字符碼 LCD1602_write_dat();/輸出(字符碼 for (i=0;i
32、3;i+) LCD1602_write_dat(week_stringweeki);/輸出星期英文縮寫字符碼 LCD1602_write_dat();/輸出)字符碼 LCD1602_write_com(0x80+0x40+0x04); /設置第2行顯示首地址04 LCD1602_write_dat(0x30+hour/10);/輸出小時十位的字符碼 LCD1602_write_dat(0x30+hour%10);/輸出小時個位的字符碼 LCD1602_write_dat(:);/輸出:字符碼 LCD1602_write_dat(0x30+minute/10);/輸出分十位的字符碼 LCD1602_write_dat(0x30+minute%10);/輸出分個位的字符碼 LCD1602_write_dat(:);/輸出:字符碼 LCD1602_write_dat(0x30+second/10);/輸出秒十位的字符碼 LCD1602_write_dat(0x30+second%10);/輸出秒個位的字符碼 5. 仿真結果
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 門面房抵押合同范本
- 房屋租賃合同樣本參考
- 建設工程監(jiān)工合同書樣本
- 玉米購銷及技術服務合同協(xié)議
- 產業(yè)技術合作合同書
- 11《牛郎織女》 (二)(教學設計)-2024-2025學年語文五年級上冊統(tǒng)編版
- 農業(yè)銀行商業(yè)房貸合同樣本
- 民用航空空運貨運代理合同協(xié)議
- 3《現(xiàn)代詩二首(秋晚的江上、花牛歌)》教學設計-2024-2025學年統(tǒng)編版語文四年級上冊
- 流動資金保證借款合同風險分析
- 中國民用航空飛行學院《大學數(shù)學(二)》2023-2024學年第一學期期末試卷
- ESG新政與國有企業(yè)ESG發(fā)展
- 幼兒園案例分析 意大利貝納通托兒所
- 2024年小學人教版一年級數(shù)學上冊教學工作總結
- 【人教版化學】選擇性必修1 知識點默寫小紙條(答案背誦版)
- 航司旅游業(yè)智能化客戶服務與管理系統(tǒng)方案
- 00015-英語二自學教程-unit1
- 2024天津高考英語試題及答案
- 國家電網(wǎng)招聘之財務會計類題庫及完整答案(各地真題)
- 2024版中山二手住宅交易合同指南2篇
- 2024年度中國寵物行業(yè)研究報告
評論
0/150
提交評論