基于單片機的電子時鐘的設(shè)計Protues課程設(shè)計_第1頁
基于單片機的電子時鐘的設(shè)計Protues課程設(shè)計_第2頁
基于單片機的電子時鐘的設(shè)計Protues課程設(shè)計_第3頁
基于單片機的電子時鐘的設(shè)計Protues課程設(shè)計_第4頁
基于單片機的電子時鐘的設(shè)計Protues課程設(shè)計_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 成績課程論文題 目: 電子時鐘的設(shè)計 學(xué)生姓名: 陳 臣 學(xué)生學(xué)號: 1008030203 系 別: 電氣信息工程學(xué)院 專 業(yè): 電子信息工程 年 級: 10 任課教師: 張 水 鋒 電氣信息工程學(xué)院制目錄前言2第一章 系統(tǒng)的結(jié)構(gòu)及功能介紹31.1 系統(tǒng)設(shè)計任務(wù)3(1) 設(shè)計任務(wù)3(2) 設(shè)計要求31.2 系統(tǒng)結(jié)構(gòu)介紹31.3 系統(tǒng)的工作原理4 (1)電子時鐘原理4 (2)LCD1602顯示器4 (3)報警器4 1.4系統(tǒng)設(shè)計方案論證 4 (1)單片機設(shè)計方案 4(2)液晶屏設(shè)計方案 4 1.5系統(tǒng)設(shè)計方案選定 5 (1)單片機方案選定5 (2) 液晶方案選定 51.6 系統(tǒng)的特點和使用說明

2、5 (1) 系統(tǒng)特點 5 (2) 系統(tǒng)使用說明 5第二章 系統(tǒng)硬件電路設(shè)計6 (1)系統(tǒng)電路流程設(shè)計7 (2)系統(tǒng)單元電路設(shè)計7第三章 系統(tǒng)軟件設(shè)計8 (1)功能軟件流程圖 8第四章 系統(tǒng)測試 9(1) 測試儀器 9 (2) 測試方法 9(3) 測試結(jié)果 9第五章 設(shè)計總結(jié) 9參考文獻(xiàn)9 附件 完整電路圖10PCB圖 10 源程序11電子時鐘的設(shè)計 學(xué)生:陳臣 指導(dǎo)教師:張水鋒電氣信息工程學(xué)院 電子信息工程前言目前市場上出現(xiàn)了很多種類的電子時鐘,用途也是各種各樣,但據(jù)調(diào)查顯示這些時鐘都存在一些不足之處,因此通過學(xué)習(xí)和查找資料,我設(shè)計了一款新型的電子時鐘,它繼承了傳統(tǒng)時鐘的優(yōu)點,并在此基礎(chǔ)上做出

3、了改進(jìn)以及一些新增功能。我設(shè)計的電子時鐘可以調(diào)節(jié)時間,設(shè)定鬧鈴,液晶顯示歡迎語和鬧鈴提示語,其中最大的亮點是使用時鐘芯片DS1302,即使單片機系統(tǒng)斷電時間也不會改變下次時鐘時可直接用,能夠節(jié)省電。作品經(jīng)過試驗驗證,符合試驗要求,滿足用戶使用。第一章 系統(tǒng)的結(jié)構(gòu)及功能介紹1.1 系統(tǒng)設(shè)計任務(wù)與要求(1) 設(shè)計任務(wù)制作電子時鐘顯示時間,并附有時間可調(diào),鬧鈴聲音 語音提示(2) 設(shè)計要求 a :能夠產(chǎn)生時間值b :可以通過按鍵調(diào)節(jié)系統(tǒng)的時間 c :可設(shè)定鬧鈴時間1.2 系統(tǒng)結(jié)構(gòu)介紹 電子時鐘的設(shè)計,共分為三個部分:控制部分,檢測部分,顯示部分。控制部分采取MCS51單片機為主控芯片,檢測部分采取時

4、鐘芯片DS1302產(chǎn)生時間值,顯示部分采取LCD1602屏為顯示器,顯示當(dāng)前信息。系統(tǒng)結(jié)構(gòu)框圖如圖1所示: 傳感器檢測部分按鍵調(diào)節(jié)部分液晶顯示部分報警部分?jǐn)?shù)據(jù)處理部分1.3 系統(tǒng)的工作原理 (1)時鐘芯片DS1302工作原理通過內(nèi)部硬件和外部晶振共同作用產(chǎn)生模擬時間值,內(nèi)部的硬件直接將此模擬值轉(zhuǎn)化為數(shù)字值,在發(fā)給單片機使用(2)LCD1602 ,1602 可顯示字母,數(shù)字,符號及少量特定漢字(3)報警器 采用蜂鳴器做報警器,通過程序控制,當(dāng)檢測到系統(tǒng)時間與設(shè)定的鬧鈴時間按相等時單片機發(fā)出高電平,使報警器發(fā)出嘀嘀嘀的聲音。1.4系統(tǒng)設(shè)計方案論證(1)單片機設(shè)計方案方案一:AT89S51單片機+

5、+A/D轉(zhuǎn)換芯片。使用煙霧傳感器檢測空氣中該氣體的含量,使用A/D轉(zhuǎn)換芯片,將采集到得模擬值轉(zhuǎn)化為數(shù)值,在通過52單片機進(jìn)行數(shù)據(jù)處理,但內(nèi)部空間較小。方案二:AVR ATMAGE 16,ATMAGE 16內(nèi)部集成的8位AD,可以直接將采集的模擬量轉(zhuǎn)化為數(shù)字量,在通過單片機進(jìn)行數(shù)據(jù)處理,且內(nèi)部有16KRAM的空間可供使用。方案三:以LPC2138 為主控芯片:其本身自帶A/D轉(zhuǎn)換功能,帶大容量的32KRAM 512KFLASH ,內(nèi)部資源豐富且系統(tǒng)穩(wěn)定,芯片價格昂貴。(2)液晶屏設(shè)計方案 方案一:LCD1602 ,1602 可顯示字母,數(shù)字,符號及少量特定漢字,顯示數(shù)量為2行16列,價格為16元

6、左右。方案二:LCD12864,12864可顯示字母,數(shù)字,符號,漢字,圖片等內(nèi)容,顯示數(shù)量為7頁7行64列,價格為60元左右。方案三:諾基亞5110,5110可顯示字母,數(shù)字,符號,漢字,圖片等內(nèi)容,顯示數(shù)量為7行81列,價格為9元左右。1.5 系統(tǒng)設(shè)計方案選定綜合考慮,方案確定如下:(1)單片機方案選定采用方案一,LPC2138 ,ATMAGE16單片機價格較MCS-51貴,AD采集也使用不到,而51單片機以能滿足需求。(2) 液晶屏方案選定采用方案一,選擇LCD1602屏作為顯示器, LCD1602顯示器已能滿足需求,且顯示內(nèi)容較大,方便觀察。而5110顯示器程序設(shè)置太過繁瑣很多功能使用

7、不到,顯示內(nèi)容太小。而LCD12864價格太高,體積過大,有些功能使用不到,因此LCD1602可以滿足本次試驗的要求。1.6 系統(tǒng)的特點和使用說明(1)系統(tǒng)特點系統(tǒng)使用時鐘芯片DS1302產(chǎn)生時間值,此值為數(shù)字量,可直接傳給單片機,單片機接收到時鐘數(shù)據(jù)后用液晶屏LCD1602去顯示,同時可通過按鍵去調(diào)節(jié)時間值和設(shè)定鬧鈴。(2)使用說明直接給單片機最小系統(tǒng)提供+5V直流電壓,將DS1302d的電壓端口接到單片機的穩(wěn)壓塊的正負(fù)級上,將DS1302的輸出口接到單片機的P30口,蜂鳴器接到單片機的P20口,LCD1602接到單片機的P00-7口和P10-2口。系統(tǒng)的程序下載使用串口直接下載。第二章 系

8、統(tǒng)硬件電路設(shè)計(1) 系統(tǒng)電路流程設(shè)計時鐘芯片產(chǎn)生時間值液晶顯示當(dāng)前狀態(tài)按鍵設(shè)定時間單片機對數(shù)據(jù)處理蜂鳴器提示(2)系統(tǒng)單元電路設(shè)計用于產(chǎn)生時間,再向單片機發(fā)送數(shù)據(jù) 主要顯示歡迎語 當(dāng)前時間值 鬧鈴值 MCS-51單片機用來 將輸入的電壓轉(zhuǎn)化為+5v的直流 作為主控芯片 電壓供單片機 傳感器使用 當(dāng)時間與頂定時間相等時 會發(fā)出聲音提示 用于調(diào)節(jié)系統(tǒng)時間 和設(shè)定鬧鈴時間單片機的最小系統(tǒng),使單片機可以正常工作第三章 系統(tǒng)軟件設(shè)計(1) 軟件流程圖開始始顯示歡迎語顯示系統(tǒng)時間否是否有按鍵按下是按鍵一按下否是設(shè)定鬧鈴時間按鍵調(diào)時結(jié)束第四章 系統(tǒng)測試一:給單片機供正5V電壓;二:液晶屏上出現(xiàn)“Welco

9、me to use our clock!”的歡迎語;三: 按下按鍵,可發(fā)現(xiàn)時間在改變,即時間可調(diào);四:通過按鍵設(shè)定一個時間,等到系統(tǒng)時間與之相等時,蜂鳴器即會發(fā)出聲音,液晶顯示屏上出現(xiàn) “It is time to get up!”以提示用戶設(shè)定的時間已經(jīng)到了。 第五章 設(shè)計總結(jié)本系統(tǒng)主要以單片機(MCS-51)為主要控制芯片,采用DS1302時鐘芯片作為傳感器芯片產(chǎn)生時間。在設(shè)計過程中力求硬件電路簡單正確,充分發(fā)揮軟件設(shè)計的優(yōu)勢編程靈活方便來滿足系統(tǒng)的要求。經(jīng)試驗實驗證明,本次設(shè)計可滿足實驗要求,產(chǎn)生正確的時間,且設(shè)置了時間可調(diào),定時,鬧鈴等功能,能夠滿足日常使用。但實驗仍存在一些問題無法解

10、決。如:顯示時間與北京時間相比有毫秒的差別,這些可通過調(diào)節(jié)按鍵和用軟件中算法的方法改變這一問題。參考文獻(xiàn):【1】 模擬電子線路基礎(chǔ),華成英、童詩白著,北京:高等教育出版社,2006年;【2】 基于Protues的51系列單片機設(shè)計與仿真 電子工業(yè)出版社【3】 51單片機C語言高級程序設(shè)計周興華著,中國電力出版社,2008年;【4】 C語言高級程序設(shè)計譚浩強編著,清華大學(xué)出版社;【5】 AT89C51單片機C語言高級程序設(shè)計謝維誠著,清華大學(xué)出版社;【6】 數(shù)字電子新路基礎(chǔ)康華光 高等教育出版社附錄: 電路圖PCB圖源程序#include <REG52.H>#include &quo

11、t;LCD1602.h"#include "DS1302.h"void Delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);main()SYSTEMTIME CurrentTime;LCD_Initial();Initial_DS1302(); GotoXY(0,0);Print("Welcome to use our clock! ");GotoXY(0,0);Print("Date: ");Goto

12、XY(0,1);Print("Time: ");while(1)DS1302_GetTime(&CurrentTime);DateToStr(&CurrentTime);TimeToStr(&CurrentTime);GotoXY(6,0);Print(CurrentTime.DateString);GotoXY(6,1);Print(CurrentTime.TimeString);Delay1ms(300);/* 液晶程序LCD1602 */#ifndef LCD_CHAR_1602_2012_3_31#define LCD_CHAR_1602_2

13、012_3_31#include <intrins.h>#defineLCD_DATA P0/Port Definitions*sbit LcdRs= P10;sbit LcdRw= P11;sbitLcdEn= P25;sfr DBPort = 0x80;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口/內(nèi)部等待函數(shù)*unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();/while(DBPort&0x80);/在用Proteus仿真時,注意用屏蔽此語句,在調(diào)用Go

14、toXY()時,會進(jìn)入死循環(huán), /可能在寫該控制字時,該模塊沒有返回寫入完備命令,即DBPort&0x80=0x80 /實際硬件時打開此語句LcdEn=0;return DBPort;/向LCD寫入命令或數(shù)據(jù)*#define LCD_COMMAND0 / Command#define LCD_DATA1 / Data#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_HOMING 0x02 / 光標(biāo)返回原點void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=

15、0;_nop_();DBPort=input;_nop_();/注意順序LcdEn=1;_nop_();/注意順序LcdEn=0;_nop_();LCD_Wait();/設(shè)置顯示模式*#define LCD_SHOW0x04 /顯示開#define LCD_HIDE0x00 /顯示關(guān) #define LCD_CURSOR0x02 /顯示光標(biāo)#define LCD_NO_CURSOR0x00 /無光標(biāo) #define LCD_FLASH0x01 /光標(biāo)閃動#define LCD_NO_FLASH0x00 /光標(biāo)不閃動void LCD_SetDisplay(unsigned char Displa

16、yMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode);/設(shè)置輸入模式*#define LCD_AC_UP0x02#define LCD_AC_DOWN0x00 / default#define LCD_MOVE0x01 / 畫面可平移#define LCD_NO_MOVE0x00 /defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/移動光標(biāo)或屏幕*#define LCD_CURSOR0x02 #define LCD_SCREEN

17、0x08#define LCD_LEFT0x00#define LCD_RIGHT0x04void LCD_Move(unsigned char object, unsigned char direction)if(object=LCD_CURSOR)LCD_Write(LCD_COMMAND,0x10|direction);if(object=LCD_SCREEN)LCD_Write(LCD_COMMAND,0x18|direction); /初始化LCD*void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位數(shù)據(jù)端口,2行顯示,

18、5*7點陣LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /開啟顯示, 無光標(biāo)LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC遞增, 畫面不動/*void GotoXY(unsigned char x, unsigned char y)/在該位置顯示if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|

19、(x-0x40);void Print(unsigned char *str) /顯示函數(shù) 字符數(shù)字等while(*str!='0')LCD_Write(LCD_DATA,*str);str+; #endif/* DS1302時鐘程序 */#ifndef _REAL_TIMER_DS1302_2003_7_21_#define _REAL_TIMER_DS1302_2003_7_21_sbit DS1302_CLK = P36; /實時時鐘時鐘線引腳 sbit DS1302_IO = P37; /實時時鐘數(shù)據(jù)線引腳 sbit DS1302_RST = P35; /實時時鐘復(fù)位線

20、引腳sbit ACC0 = ACC0;sbit ACC7 = ACC7;typedef struct _SYSTEMTIME_unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString9;unsigned char TimeString9;SYSTEMTIME;/定義的時間類型#define AM(X)X#define PM(X)(X

21、+12) / 轉(zhuǎn)成24小時制#define DS1302_SECOND0x80#define DS1302_MINUTE0x82#define DS1302_HOUR0x84 #define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8C#define DS1302_RAM(X)(0xC0+(X)*2) /用于計算 DS1302_RAM 地址的宏 void DS1302InputByte(unsigned char d) /實時時鐘寫入一字節(jié)(內(nèi)部函數(shù)) unsigned

22、char i; ACC = d; for(i=8; i>0; i-) DS1302_IO = ACC0; /相當(dāng)于匯編中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; unsigned char DS1302OutputByte(void) /實時時鐘讀取一字節(jié)(內(nèi)部函數(shù)) unsigned char i; for(i=8; i>0; i-) ACC = ACC >>1; /相當(dāng)于匯編中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; r

23、eturn(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa)/ucAddr: DS1302地址, ucData: 要寫的數(shù)據(jù) DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 寫1Byte數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(unsigned char ucAddr)/讀取DS130

24、2某地址的數(shù)據(jù) unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); / 地址,命令 ucData = DS1302OutputByte(); / 讀1Byte數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_SetProtect(bit flag) /是否寫保護(hù)if(flag)Write1302(0x8E,0x10);elseWrite1302(0x8E,0x00);void

25、 DS1302_SetTime(unsigned char Address, unsigned char Value) / 設(shè)置時間函數(shù)DS1302_SetProtect(0);Write1302(Address, (Value/10)<<4 | (Value%10); void DS1302_GetTime(SYSTEMTIME *Time)unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second = (ReadValue&0x70)>>4)*10 + (ReadVa

26、lue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time->Minute = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = (ReadValue&0x70)

27、>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year

28、 = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);void DateToStr(SYSTEMTIME *Time)Time->DateString0 = Time->Year/10 + '0'Time->DateString1 = Time->Year%10 + '0'Time->DateString2 = '-'Time->DateString3 = Time->Month/10 + '0'Time->DateS

29、tring4 = Time->Month%10 + '0'Time->DateString5 = '-'Time->DateString6 = Time->Day/10 + '0'Time->DateString7 = Time->Day%10 + '0'Time->DateString8 = '0'void TimeToStr(SYSTEMTIME *Time)Time->TimeString0 = Time->Hour/10 + '0'Tim

30、e->TimeString1 = Time->Hour%10 + '0'Time->TimeString2 = ':'Time->TimeString3 = Time->Minute/10 + '0'Time->TimeString4 = Time->Minute%10 + '0'Time->TimeString5 = ':'Time->TimeString6 = Time->Second/10 + '0'Time->TimeString7 = Time->Se

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論