單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)_第1頁
單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)_第2頁
單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)_第3頁
單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)_第4頁
單片機課程設(shè)計 (51單片機實現(xiàn)電子時鐘)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、湖北文理學(xué)院湖北文理學(xué)院 單片機課程設(shè)計題目:用 51 單片機實現(xiàn)電子時鐘院 部 物理與電子信息工程學(xué)院 專 業(yè) 名 稱 電子信息科學(xué)與技術(shù) 班 級 1111 姓 名 楊慶月 學(xué) 號 2011111136 指 導(dǎo) 教 師 李剛 2013 年 12 月 09 日 目錄摘要-11 單片機的相關(guān)知識 -11.1 單片機的簡介-11.2 單片機的特點-11.3 89C52單片機的基本特點-22 電子時鐘-32.1電子時鐘的基本特點-32.2電子時鐘的原理-43 控制系統(tǒng)的硬件設(shè)計 -43.1單片機型號的選擇-43.2 lcd1602工作的原理-43.3 鍵盤電路的設(shè)計-63.4 復(fù)位電路設(shè)計-63.5

2、 時鐘電路設(shè)計-73.6 整體電路原理圖-74 控制系統(tǒng)的軟件的設(shè)計 -84.1程序的設(shè)計-84.2程序源代碼-85 仿真結(jié)果和實物圖-195.1仿真結(jié)果-195.2實物圖-196 總結(jié)-20參考文獻 -210摘要:單片計算機即單片微型計算機。由 RAM ,ROM,CPU構(gòu)成,定時,計數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強,廣泛應(yīng)用于智能產(chǎn)業(yè)和工業(yè)自動化上。而 51系列單片機是各單片機中最為典型和最有代表性的一種。這次課程設(shè)計通過對它的學(xué)習,應(yīng)用,從而達到學(xué)習、設(shè)計、開發(fā)軟、硬的能力。本設(shè)計主要設(shè)計了一個基于 AT89C52單片機的電子時鐘。并在 1602上顯示相應(yīng)的時間。并通

3、過一個控制鍵用來實現(xiàn)時間的調(diào)節(jié)和是否進入省電模式的轉(zhuǎn)換。具有時鐘和日歷的功能,年限顯示范圍是2013-2099(可修改),且具有閏年自動修正功能關(guān)鍵字:單片機;子時鐘;鍵盤控制;LCD1602。1 1 單片機識的相關(guān)知識1.11.1 單片機簡介MCS-51是 INTEL公司在成功推廣的 MCS-48單片機基礎(chǔ)上加以改進而成的 8位單片機。這種單片機大約是上世紀 70年代末推出的,內(nèi)部程序可重寫的為 8751,外擴程序的是 8031,一次性生產(chǎn),不可改變程序的是 8051。外形一般為 DIP40封裝。不久又推出了增強型的 8052,其資源更加豐富。以后又采用 CHMOS技術(shù)推出了 80c51,耗

4、電大大降低。到了 90年代,INTEL公司把精力放到更賺錢的計算機上,將 51單片機技術(shù)轉(zhuǎn)讓給了一此其它公司,如 ATMEL Philips等半導(dǎo)體制造公司,使 51系列單片機的市場份額不斷擴大。盡管十多年前就有人認為 51單片機會很快淘汰,但事實證明 51單片機經(jīng)過不斷的改進后,由于技術(shù)成熟,使用方便,至今在 8位單片機市場仍然擁有龐大的用戶。特別是 MCS-51技術(shù)的 20年專利期限到期后,大量的兼容型號不斷推出。從上世紀 90年代后期開始,美國 ATMEL公司在掌握快速擦寫的存儲器后,推出了 AT89C系列,此系列在中國獲得了廣泛的應(yīng)用。在此之前,由于可擦寫的 8751價格昂貴,國內(nèi)長時

5、間采用 8031+27C64這樣的外擴存程序儲器方式。51單片機最初只有 DIP40這種很古老的封裝,后來推出了 CHMOS工藝的80C51后開始有了 PLCC44這種相對較小的方形封裝。AT89C系列中開始有 20腳的 DIP20的精簡型封裝,這極大方便了在一些相對簡單的單片機應(yīng)用,縮小了 PCB的體積。20腳的有 AT89C1051、AT89C1051、AT89C1051,對應(yīng)程序存儲器分別為 1K、2K、4K。標準的 51為 4K程序空間,128字節(jié)的 RAM,32條端口,5個中斷,2個定時/計數(shù)器,12個時鐘周期執(zhí)行一條基本指令,最長的除法為 48個周期。52為 8K程序空間,256字

6、節(jié)的 RAM,32條端口,6個中斷,3個定時/計數(shù)器。AT89S51是可在板上直接下載程序的改進型號,并增加了看門狗功能,AT89C51只能在編程器下寫入程序,所以經(jīng)常會有人在 PCB上安裝 IC插座,以便取下來編程更新程序。AT的 51系列后來也推出了單周期的 51,但價格沒什么優(yōu)勢,國內(nèi)很少使用。最近幾年宏晶在國內(nèi)大量推廣 STC51系列單片機,最近又推出不少所謂 1T1的單片機,價格較低STC采用串口直接下載程序,寫入程序很方便。1.21.2 單片機的特點1 . 單片機的存儲器ROM 和RAM 時嚴格區(qū)分的。ROM 稱為程序存儲器,只存放程序,固定常數(shù),及數(shù)據(jù)表格。RAM 則為數(shù)據(jù)存儲器

7、,用作工作區(qū)及存放用戶數(shù)據(jù)。2 . 采用面向控制的指令系統(tǒng)。為滿足控制需要,單片機有更強的邏輯控制能力,特別是單片機具有很強的位處理能力。3 . 單片機的I/O 口通常時多功能的。由于單片機芯片上引腳數(shù)目有限,為了解決實際引腳數(shù)和需要的信號線的矛盾,采用了引腳功能復(fù)用的方法,引腳處于何種功能, 可由指令來設(shè)置或由機器狀態(tài)來區(qū)分。4 . 單片機的外部擴展能力很強。在內(nèi)部的各種功能部件不能滿足應(yīng)用的需求時,均可在外部進行擴展,與許多通用的微機接口芯片兼容,給應(yīng)用系統(tǒng)設(shè)計帶來了很大的方便。1.31.3 89C5289C52 單片機介紹P0 口:P0 口為一個8 位漏級開路雙向I/O 口,每腳可吸收8

8、TTL 門電流。當P1 口的管腳第一次寫1 時,被定義為高阻輸入。P0 能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH 編程時,P0 口作為原碼輸入口,當FIASH 進行校驗時,P0 輸出原碼,此時P0 外部必須被拉高。P1 口:P1 口是一個內(nèi)部提供上拉電阻的8 位雙向I/O 口,P1 口緩沖器能接收輸出4TTL 門電流。P1 口管腳寫入1 后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1 口作為第八位地址接收。P2 口:P2 口為一個內(nèi)部上拉電阻的8 位雙向I/O 口,P2 口緩沖器可

9、接收,輸出4 個TTL 門電流,當P2 口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2 口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2 口當用于外部程序存儲器或16 位地址外部數(shù)據(jù)存儲器進行存取時,P2 口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2 口輸出其特殊功能寄存器的內(nèi)容。P2 口在FLASH 編程和校驗時接收高八位地址信號和控制信號。P3 口:P3 口管腳是8 個帶內(nèi)部上拉電阻的雙向I/O 口,可接收輸出4 個TTL門電流。當P3 口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作

10、為輸入,由于外部下拉為低電平,P3 口將輸出電流(ILL)這是由于上拉的緣故。2P3 口也可作為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(外部數(shù)據(jù)存儲器寫選通)P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)P3 口同時為閃爍編程和編程校驗接收一些控制信號。RST:復(fù)位輸入。當振蕩器復(fù)位器件時,要保持RST 腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器

11、時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH 編程期間,此引腳用于輸入編程脈沖。在平時,ALE 端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE 脈沖。如想禁止ALE 的輸出可在SFR8EH 地址上置0。此時,ALE 只有在執(zhí)行MOVX,MOVC 指令是ALE 才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE 禁止,置位無效。PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN 有效。但在訪問外部數(shù)據(jù)存儲器

12、時,這兩次有效的/PSEN 信號將不出現(xiàn)。EA/VPP:當/EA 保持低電平時,則在此期間外部程序存儲(0000H-FFFFH) ,不管是否有內(nèi)部程序存儲器。注意加密方式1 時, /EA 將內(nèi)部鎖定為RESET;當/EA3端保持高電平時,此間內(nèi)部程序存儲器。在FLASH 編程期間,此引腳也用于施加12V 編程電源(VPP) 。2 2 電子時鐘2.1 電子時鐘的基本特點 現(xiàn)在高精度的計時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘、石英鐘、石英表都采用了石英技術(shù),因此走時精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)試,數(shù)字式電子鐘用集成電路計時時,譯碼代替機械式傳動,用用液晶顯示器代替指針顯示進而顯

13、示時間,減小了計時誤差,這種表具有時、分、秒顯示時間的功能,還可以進行時和分的校對,片選的靈活性好。2.2 電子時鐘的原理該電子時鐘由89C52,1602 液晶等構(gòu)成,采用晶振電路作為驅(qū)動電路,由延時程序和循環(huán)程序達到時分秒的計時,六十秒為一分鐘,六十分鐘為一小時,滿二十四小時為一天。而電路中有四個控制按鍵,一個是選擇,一個進行加數(shù),一個進行減數(shù),還有一個保存。例如按下選擇鍵,然后1602顯示光標,此時可以用加或減來進行調(diào)節(jié),在按下選擇鍵,光標移到不同的單位上,同理進行調(diào)節(jié),最后待日期時間調(diào)節(jié)好后,按下保存鍵,時鐘開始計時。3 3 控制系統(tǒng)的硬件設(shè)計3.1 單片機型號的選擇通過對51單片機的學(xué)

14、習,認為STC89C52 是最理想的電子時鐘開發(fā)芯片。STC89C52,最終認為89C52是一種帶8K 字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,器件采用高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-52指令集和輸出引腳相兼容。還有一點重要原因,就是采用AT89C52時不能用開發(fā)板進行程序的下載,所以最終選用STC89C52進行設(shè)計。3.2 1602 工作原理及顯示電路 字符型LCD 通常有14 條引腳線或16 條引腳線的LCD,多出來的2 條線是背光電源線VCC(15 腳)和地線GND(16 腳),其控制原理與14 腳的LCD 完全一樣 1602液晶的基本的操

15、作分為以下四種:4狀態(tài)字讀操作:輸入RS=低、RW=高、EP=高; 輸出:DB07 讀出為狀態(tài)字;數(shù)據(jù)讀出操作:輸入RS=高、RW=高、EP=高; 輸出:DB07 讀出為數(shù)據(jù);指令寫入操作:輸入RS=低、RW=低、EP=上升沿; 輸出:無;數(shù)據(jù)寫入操作:輸入RS=高、RW=低、EP=上升沿; 輸出:無。如圖 1602 模塊的引腳 LCD1602 正面5LCD1602 背面1602 與單片機連接圖3.3 鍵盤電路設(shè)計6本時鐘采用四個按鍵控制,一個(實物圖藍色線24號引腳)是選擇,一個進行加數(shù)(實物圖紫色線25號引腳) ,一個進行減數(shù)(實物圖灰色線26號引腳) ,還有一個保存(實物圖白色線27號引

16、腳) 。例如按下選擇鍵,然后1602顯示光標,此時可以用加或減來進行調(diào)節(jié),在按下選擇鍵,光標移到不同的單位上,同理進行調(diào)節(jié),最后待日期時間調(diào)節(jié)好后,按下保存鍵,時鐘開始計時。3.4 復(fù)位電路設(shè)計 單片機復(fù)位有上電復(fù)位和手動復(fù)位兩種方式,上電復(fù)位是接通電源后利用 RC 充電來實現(xiàn)復(fù)位。手動復(fù)位是通過人為干預(yù),強制系統(tǒng)復(fù)位。 連接至9號復(fù)位引腳 復(fù)位電路如圖所示,可以實現(xiàn)上電復(fù)位和手動復(fù)位功能。3.5 時鐘電路設(shè)計7系統(tǒng)時鐘源由內(nèi)部時鐘方式產(chǎn)生,時鐘電路由 12MH 晶振和兩個 30PF 瓷片電容組成,構(gòu)成自激振蕩,形成振蕩源提供給單片機。電容可在 5PF 到 30PF之間選擇,電容的大小對振蕩頻

17、率有微小影響,可起頻率微調(diào)作用。 3.6 整體電路原理圖4 控制系統(tǒng)的軟件設(shè)計 4.1 程序設(shè)計 由于C 語言程序設(shè)計較匯編可讀性強,可移植性,且可以大大降低編程的難8度和縮短開發(fā)周期,本系統(tǒng)程序采用c 語言設(shè)計。4.2 程序源代碼#include /包含單片機寄存器的頭文件#include /包含_nop_()函數(shù)定義的頭文件#define uchar unsigned char#define uint unsigned intsbit RS=P20; /寄存器選擇位,將RS位定義為P2.0引腳sbit RW=P21; /讀寫選擇位,將RW位定義為P2.1引腳sbit E=P22; /使能信

18、號位,將E位定義為P2.2引腳sbit BF=P07; /忙碌標志位,將BF位定義為P0.7引腳uchar code table=2013-12-07 WEEK6; /初始化液晶顯示 16uchar code table1=TIME: 19-27-50; /14 uchar count,s1num;char second,minute,hour,day,month,year,week;sbit s1=P23; /功能鍵sbit s2=P24; /加鍵sbit s3=P25; /減鍵sbit s4=P26; /保存并退出 /* 延時若干毫秒 */void delay(uchar n)uchar

19、i,a,b;for(i=0;i0;b-) for(a=1;a0;a-);/*函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌;result=0,不忙*/uchar BusyTest(void)bit result;RS=0; /根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)RW=1;E=1; /E=1,才允許讀寫9_nop_(); /空操作_nop_();_nop_();_nop_(); /空操作四個機器周期,給硬件反應(yīng)時間result=BF; /將忙碌標志電平賦給resultE=0; /將E恢復(fù)低電平return result;/*函數(shù)功能:寫指令入口參數(shù):d

20、ictate*/void WriteInstruction(uchar dictate)while(BusyTest()=1); /如果忙就等待RS=0; /根據(jù)規(guī)定,RS和R/W同時為低電平時,可以寫入指令RW=0;E=0; /E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖, /就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置0_nop_();_nop_(); /空操作兩個機器周期,給硬件反應(yīng)時間P0=dictate; /將數(shù)據(jù)送入P0口,即寫入指令或地址_nop_();_nop_();_nop_();_nop_(); /空操作四個機器周期,給硬件反應(yīng)時間E=1; /E置高電平_nop_();_nop

21、_();_nop_();_nop_(); /空操作四個機器周期,給硬件反應(yīng)時間E=0; /當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令/*函數(shù)功能:寫數(shù)據(jù)入口參數(shù):y(為字符常量)*/void WriteData(uchar y)while(BusyTest()=1);RS=1; /RS為高電平,RW為低電平時,可以寫入數(shù)據(jù)RW=0;10E=0; /E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖, /就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置0P0=y; /將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊_nop_();_nop_();_nop_();_nop_(); /空操作四個機器周期,給硬件反應(yīng)時

22、間E=1; /E置高電平_nop_();_nop_();_nop_();_nop_(); /空操作四個機器周期,給硬件反應(yīng)時間E=0; /當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令/*函數(shù)功能:對LCD的顯示模式進行初始化設(shè)置*/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,首次寫指令時應(yīng)給LCD一段較長的反應(yīng)時間WriteInstruction(0 x38); /顯示模式設(shè)置:

23、162顯示, /57點陣,8位數(shù)據(jù)接口delay(5); /延時5ms?,給硬件一點反應(yīng)時間WriteInstruction(0 x38);delay(5);WriteInstruction(0 x38); /連續(xù)三次,確保初始化成功delay(5);WriteInstruction(0 x0c); /顯示模式設(shè)置:顯示開,無光標, /光標不閃爍delay(5);WriteInstruction(0 x06); /顯示模式設(shè)置:光標右移,字符不移11delay(5);WriteInstruction(0 x01); /清屏幕指令,將以前的顯示內(nèi)容清除delay(5);WriteInstruct

24、ion(0 x80);for(num=0;num16;num+) /讓液晶顯示日期WriteData(tablenum);delay(5);WriteInstruction(0 x80+0 x40);for(num=0;num7)s1num=1;if(s1num=1) /第一個鍵被按一次TR0=0;WriteInstruction(0 x80+0 x40+13);WriteInstruction(0 x0f);if(s1num=2)WriteInstruction(0 x80+0 x40+10);if(s1num=3)13WriteInstruction(0 x80+0 x40+7);if(s

25、1num=4)WriteInstruction(0 x80+9);if(s1num=5)WriteInstruction(0 x80+6);if(s1num=6)WriteInstruction(0 x80+3);if(s1num=7)WriteInstruction(0 x80+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);WriteInstruct

26、ion(0 x80+0 x40+13);if(s1num=2) /第一個鍵被按二次,分鐘加一minute+;if(minute=60)minute=0;write_sfm(9,minute);WriteInstruction(0 x80+0 x40+10);14if(s1num=3) /第一個鍵被按三次,時鐘加一hour+;if(hour=24)hour=0;write_sfm(6,hour);WriteInstruction(0 x80+0 x40+7);if(s1num=4) /日期加一day+;if(day=32)day=1;write_nyr(8,day);WriteInstructi

27、on(0 x80+9);if(s1num=5) /月加一month+;if(month=13)month=1;write_nyr(5,month);WriteInstruction(0 x80+6);if(s1num=6) /年加一year+;if(year=99)year=0;write_nyr(2,year);WriteInstruction(0 x80+3);if(s1num=7) /星期加一week+;if(week=8)week=1;write_week(15,week);WriteInstruction(0 x80+15);if(s3=0) /第三個鍵被按下15delay(5);i

28、f(s3=0)while(!s3);if(s1num=1) /秒減一second-;if(second=-1)second=59;write_sfm(12,second);WriteInstruction(0 x80+0 x40+13);if(s1num=2) /分減一minute-;if(minute=-1)minute=59;write_sfm(9,minute);WriteInstruction(0 x80+0 x40+10);if(s1num=3) /時減一hour-;if(hour=-1)hour=23;write_sfm(6,hour);WriteInstruction(0 x80

29、+0 x40+7);if(s1num=4) /日減一day-;if(day=0)day=31;write_nyr(8,day);WriteInstruction(0 x80+9);if(s1num=5) /月減一month-;if(month=0)month=12;write_nyr(5,month);WriteInstruction(0 x80+6);16if(s1num=6) /年減一year-;if(year=-1)year=99;write_nyr(2,year);WriteInstruction(0 x80+3);if(s1num=7) /日期減一week-;if(week=0)we

30、ek=7;write_week(15,week);WriteInstruction(0 x80+15);if(s4=0) /保存并退出s1num=0; WriteInstruction(0 x0c);TR0=1;/*main function*/void main(void)uchar k=0;LcdInitiate(); /調(diào)用LCD初始化函數(shù)while(1)keyscan();k=1;/*函數(shù)功能:定時器T0的中斷服務(wù)函數(shù)17*/void timer0() interrupt 1count+;if(count=13)count=0;second+;if(second=60) /秒計滿60,秒歸0,分+1second=0;minute+;if(minute=60)/分計滿60,分歸0,時+1minute=0;hour+;if(hour=24) /時計滿24,時歸0,星期+1,日+1hour=0;week+;day+;if(week=8)week=1; /星期計滿7,星期歸1if(month=1|month=3|month=5|month=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論