單片機(課程設計)帶有LCD的定時鬧鐘_第1頁
單片機(課程設計)帶有LCD的定時鬧鐘_第2頁
單片機(課程設計)帶有LCD的定時鬧鐘_第3頁
單片機(課程設計)帶有LCD的定時鬧鐘_第4頁
單片機(課程設計)帶有LCD的定時鬧鐘_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、設計總說明這次課程設計的任務是是利用MCS51系列單片外加必要的輔助電路從而設計一個帶有LCD顯示的定時鬧鐘。該鬧鐘應具有的功能是:當定時鬧鐘到了人為設定好的時間后,它就發(fā)出聲音,并且在LCD顯示器上顯示出你所設定的鬧鐘時間以及當前時間,并能夠隨時調(diào)整時間。本課設所用器件有:AT89C52單片機、LCD顯示器(LM016L)、上拉電阻(Respack-8)、晶振電路、復位電路(帶有復位鍵)以及四個控制鍵。1、在控制時分電路設計中,分別設置了四個鍵:K1鍵-用來設置當前時間以及在設置中用來設置時鐘 K2鍵-顯示鬧鐘時間以及在設置中用來設置分鐘 K3鍵-設置鬧鐘時間 K4鍵-控制鬧鈴的開關2、 在

2、控制時分秒電路的設計中,分別設置了五個鍵,即在1的基礎上增加了一個控制秒的按鍵。當然本課程設計中所用到的元器件還可以應用其他的一些器件。比如AT89C52完全可以用AT89C51來代替,LM016L型號的LCD顯示器可以用LM017L型號的LCD顯示器來代替(其他一些顯示器也可以用),上來電阻也可以用分電阻來表示。 初次做課程設計,肯定會有許多不足之處,希望老師們指點!關鍵字: AT89C52單片機 LCD顯示器 鬧鐘目錄1、 主要內(nèi)容32、 目的和意義33、 基本要求3 3.1、顯示時-分功能3 3.2、 顯示時-分-秒功能34、 系統(tǒng)設計4.1 AT89C52單片機簡介44.2 電路總體設

3、計64.3 主程序流程圖75、 詳細設計5.1 設計電路圖75.2 程序代碼12 5.2.1 時-分程序代碼12 5.2.2 時-分-秒程序代碼236、 結(jié)論6.1 結(jié)果分析336.2 心得體會337、 設計總結(jié)348、 參考文獻34 1、 主要內(nèi)容: 本次課程設計的內(nèi)容為設計一個以MCS51單片機為核心的帶有LCD顯示的定時鬧鐘,完成原理圖設計,軟件編制及設計報告。設使用AT89C52單片機結(jié)合字符型LCD顯示器設計一個簡易的定時鬧鐘LCD時鐘,若LCD選擇有背光顯示的模塊,在夜晚或黑暗的場合中也可以使用。2、 設計本電子定時鬧鐘的目的和意義 本課程設計的目的和意義在于提高對單片機課程的認識

4、以及對該課程的實踐應用能力。 通過本次課程設計的實踐,了解單片機工作的原理及應用技術,掌握根據(jù)硬件電路設計軟件的方法,了解設計過程中的各個基本環(huán)節(jié),也為今后的實際應用奠定基礎3、基本要求:.字符型LCD(16*2)顯示器.顯示格式“時時:分分:秒秒”。.一旦時間到則發(fā)出聲響,表示程序開始執(zhí)行,LCD顯示“00 00”,按下操作鍵K1-k4動作如下:3.1、顯示時-分功能:(1) K1設置現(xiàn)在的時間。(2) K2顯示鬧鈴的時間(3) K3設置鬧鈴的時間。(4) K4鬧鈴ON/OFF(即按下k4鍵可以開啟或停止聲響)的狀態(tài)設置,定時“開始”按鍵,啟動定時。(5) K5復位鍵設置當前時間或鬧鈴時間如

5、下: K1對時的調(diào)整。 K2對分的調(diào)整。 K3設置完成。3.2、 顯示時-分-秒功能:(6) K1設置現(xiàn)在的時間。(7) K2顯示鬧鈴的時間(8) K3設置鬧鈴的時間。(9) K4設置完成。(10) K5鬧鈴ON/OFF(即按下k4鍵可以開啟或停止聲響)的狀態(tài)設置,定時“開始”按鍵,啟動定時(11) K6復位鍵設置當前時間或鬧鈴時間如下: K1對時的調(diào)整。 K2對分的調(diào)整。 K3對秒的調(diào)整。 K4設置完成。4、系統(tǒng)設計4.1 AT89C52單片機簡介許多由關硬件設計中都使用到單片機AT89C52,其功能比以往的單片機強大的多。AT89C52是一種高性能低功耗的采用CMOS工藝制造的8位微控制器

6、,它提供下列標準特征:4K字節(jié)的程序存儲器,128字節(jié)的RAM,32條I/O線,2個16位定時器/計數(shù)器, 一個5中斷源和兩個優(yōu)先級的中斷結(jié)構(gòu),一個雙工的串行口, 片上震蕩器和時鐘電路。引腳說明:VCC:電源電壓GND:地P0口:P0口是一組8位漏極開路型雙向I/O口,作為輸出口用時,每個引腳能驅(qū)動8個TTL邏輯門電路。當對0端口寫入1時,可以作為高阻抗輸入端使用。當P0口訪問外部程序存儲器或數(shù)據(jù)存儲器時,它還可設定成地址數(shù)據(jù)總線復用的形式。在這種模式下,P0口具有內(nèi)部上拉電阻。圖89S52引腳圖在EPROM編程時,P0口接收指令字節(jié),同時輸出指令字節(jié)在程序校驗時。程序校驗時需要外接上拉電阻。

7、P1口:P1口是一帶有內(nèi)部上拉電阻的8位雙向I/O口。P1口的輸出緩沖能接受或輸出4個TTL邏輯門電路。當對P1口寫1時,它們被內(nèi)部的上拉電阻拉升為高電平,此時可以作為輸入端使用。當作為輸入端使用時,P1口因為內(nèi)部存在上拉電阻,所以當外部被拉低時會輸出一個低電流(IIL)。P2口:P2是一帶有內(nèi)部上拉電阻的8位雙向的I/O端口。P2口的輸出緩沖能驅(qū)動4個TTL邏輯門電路。當向P2口寫1時,通過內(nèi)部上拉電阻把端口拉到高電平,此時可以用作輸入口。作為輸入口,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出電流(IIL)。P2口在訪問外部程序存儲器或16位地址的外部數(shù)據(jù)存儲器(例如MOVX DP

8、TR)時,P2口送出高8位地址數(shù)據(jù)。在這種情況下,P2口使用強大的內(nèi)部上拉電阻功能當輸出1時。當利用8位地址線訪問外部數(shù)據(jù)存儲器時(例MOVX R1),P2口輸出特殊功能寄存器的內(nèi)容。當EPROM編程或校驗時,P2口同時接收高8位地址和一些控制信號。P3口:P3是一帶有內(nèi)部上拉電阻的8位雙向的I/O端口。P3口的輸出緩沖能驅(qū)動4個TTL邏輯門電路。當向P3口寫1時,通過內(nèi)部上拉電阻把端口拉到高電平,此時可以用作輸入口。作為輸入口,因為內(nèi)部存在上拉電阻,某個引腳被外部信號拉低時會輸出電流(IIL)。P3口同時具有AT89C52的多種特殊功能,具體如下表1所示:端口引腳第二功能P3.0RXD (串

9、行輸入口)P3.1TXD(串行輸出口)P3.2 (外部中斷0)P3.3(外部中斷1)P3.4T0(定時器0)P3.5T1(定時器1)P3.6(外部數(shù)據(jù)存儲器寫選通)P3.7(外部數(shù)據(jù)存儲器都選通)表1 P3口的第二功能RST:復位輸入。當振蕩器工作時,RST引腳出現(xiàn)兩個機器周期的高電平將使單片機復位。ALE/:當訪問外部存儲器時,地址鎖存允許是一輸出脈沖,用以鎖存地址的低8位字節(jié)。當在Flash編程時還可以作為編程脈沖輸出()。一般情況下,ALE是以晶振頻率的1/6輸出,可以用作外部時鐘或定時目的。但也要注意,每當訪問外部數(shù)據(jù)存儲器時將跳過一個ALE脈沖。:程序存儲允許時外部程序存儲器的讀選通

10、信號。當AT89S52執(zhí)行外部程序存儲器的指令時,每個機器周期兩次有效,除了當訪問外部數(shù)據(jù)存儲器時,將跳過兩個信號。/VPP:外部訪問允許。為了使單片機能夠有效的傳送外部數(shù)據(jù)存儲器從0000H到FFFH單元的指令,必須同GND相連接。需要主要的是,如果加密位1被編程,復位時EA端會自動內(nèi)部鎖存。當執(zhí)行內(nèi)部編程指令時,應該接到VCC端。XTAL1:振蕩器反相放大器以及內(nèi)部時鐘電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。4.2 電路總體設計 LCD定時鬧鐘,是以單片機及外圍接口電路為核心硬件,輔以其他外圍硬件電路,用C語言設計的程序來實現(xiàn)的。根據(jù)C51單片機的外圍接口特點擴展相應的硬件電路

11、,然后根據(jù)單片機的指令設計出數(shù)字鐘相應的軟件,再利用軟件執(zhí)行一定的程序來實現(xiàn)數(shù)字鐘的功能。由于采用集成芯片性的單片機來制作電子鐘,這樣設計制作簡單而且功能多、精確度高,也可方便擴充其他功能,實現(xiàn)也十分簡單。本設計是利用AT89C52單片機為主控芯片,由LCD、電阻、電容、按鍵、蜂鳴器等元件組成硬件電路,通過編寫軟件程序來實現(xiàn)和控制的數(shù)字定時鬧鐘AT89C52震蕩電路調(diào)時電路蜂鳴器LCD片選代碼4.3 主程序流程圖系統(tǒng)初始化定時器初始化定時器初始化串口初始化顯示待機指示符設定鬧鈴時間設置鬧鈴時間否?顯示刷新啟動走時有關變量初始化刷新顯示判斷復位狀況秒指示判斷時間是否變化鬧鈴判是否到鬧鈴時間?延時

12、YYYY開始開始NNNN結(jié)束5、詳細設計5.1 硬件電路設計5.1.1 所需硬件 主控芯片AT89C52(或AT89C51) 單片機 上拉電阻respack -8 液晶顯示器(LM016L) LCD 1 蜂鳴器speaker5.1.2 單片機硬件資源分配1、時-分功能的控制鍵接口:P1.0 連接按鍵K1P1.2 連接按鍵K2P1.3 連接按鍵K3P1.4 連接按鍵K4RST 連接復位鍵K5P3.4 連接蜂鳴器P0.0/AD0P0.7/AD7依次接LCD1(LM016L)的0007,為數(shù)據(jù)線連接2、 時-分-秒功能的控制接口:P1.0 連接按鍵K1P1.1 連接按鍵K2P1.2 連接按鍵K3P1

13、.3 連接按鍵K4P1.4 連接按鍵K4RST 連接復位鍵K6P3.4 連接蜂鳴器P0.0/AD0P0.7/AD7依次接LCD1(LM016L)的0007,為數(shù)據(jù)線連接5.1.3本LCD電子鬧鐘的特點和功能介紹 數(shù)字鐘介紹時鐘是將小時、分鐘、秒顯示于人的肉眼的計時裝置。而單片機模塊中最常見的正是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術實現(xiàn)時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更長的使用壽命,因此得到了廣泛的使用。而LCD電子定時鬧鐘是以單片機為基礎的數(shù)字電路實現(xiàn)對時、分、秒的數(shù)字顯示的數(shù)字計時裝置,它的計時周期為24小時,另外應有校時功能和鬧鐘等附加功能。

14、一個基本的數(shù)字鐘電路主要由譯碼顯示器、“時”,“分”,“秒”,“星期”計數(shù)器、校時電路、報時電路和振蕩器組成。目前電子鐘廣泛用于各種私人和公眾場合,成為我們生活、工作和學習中不可缺少的好幫手。1602LCD液晶顯示器介紹為了獲得更好的效果,本設計并沒有采用常見的LED,而是采用了型號為LM016L(1602)的 LCD。LCD有比LED數(shù)碼顯示更好更直觀的效果,也更加經(jīng)久耐用。液晶顯示模塊體積小、功耗低、顯示內(nèi)容豐富,現(xiàn)在字符型液晶顯示模塊已經(jīng)是單片機應用設計中最常用的信息顯示器件之一了。本LCD是2行16列液晶,可顯示2行16列英文字符,有8位數(shù)據(jù)總線D0-D7,RS,R/W,E三個控制端口

15、(共14線),工作電壓為5V。沒背光,和常用的1602B功能和引腳一樣(除了調(diào)背光的二個線腳)。D4-D7作為四位數(shù)據(jù)分兩次傳送。這樣的話可以節(jié)省MCU的I/O口資源。引腳說明,見表3.1。VDD:電源正極,4.55.5V,通常使用5V電壓;RS:MCU寫入數(shù)據(jù)或者指令選擇端。MCU要寫入指令時,使RS為低電平;MCU要寫入數(shù)據(jù)時,使RS為高電平;R/W:讀寫控制端。R/W為高電平時,讀取數(shù)據(jù);R/W為低電平時,寫入數(shù)據(jù);E:LCD模塊使能信號控制端。寫數(shù)據(jù)時,需要下降沿觸發(fā)模塊。D0D7:8位數(shù)據(jù)總線,三態(tài)雙向。如果MCU的I/O口資源緊張的話,該模塊也可以只使用4位數(shù)據(jù)線D4D7接口傳送數(shù)

16、據(jù)。本充電器就是采用4位數(shù)據(jù)傳送方式;表3.1 LCD1(LM016L)顯示屏引腳說明編號符號引腳說明編號符號引腳說明1VSS電源,接地9D2雙向數(shù)據(jù)口2VDD電源,接+5V10D3雙向數(shù)據(jù)口3VEE電源,LCD亮度調(diào)節(jié)。電壓越低,屏幕越亮。11D4雙向數(shù)據(jù)口4RS數(shù)據(jù)/命令選擇12D5雙向數(shù)據(jù)口5R/W讀/寫選擇13D6雙向數(shù)據(jù)口6E模塊使能端14D7雙向數(shù)據(jù)口5.2軟件設計5.2.1軟件設計概述這里用C的單片機程序構(gòu)成了本LCD電子鬧鐘的軟件系統(tǒng)。該程序?qū)崿F(xiàn)時間及定時(時間以0點0分0秒為基準計算,鬧鈴定時以0時0分為基準計算)的顯示,有外部中斷0和五個開關實現(xiàn)校時,鬧鐘功能。其中程序的晶

17、振頻率為12MHz,最小計時單位為1/20秒。主芯片p0.1-p0.7輸出數(shù)據(jù)到LCD數(shù)據(jù)總線,p3.0-p3.2輸出LCD控制信號,P2.6輸出聲音信號,.P1.0-P1.3輸入外部控制信號,整個軟件系統(tǒng)也是根據(jù)這個關系連接成一個完整的系統(tǒng)。1、程序初始化在系統(tǒng)開始通電時,需要.首先初始化液晶:void TimeInit()write_com(0x01); /初始化1602液晶write_com(0x80); /設置現(xiàn)實初始坐標for(num=0;num9;num+) /顯示時分秒write_date(tablenum); delay(5);write_com(0x80+0x40+6); /

18、寫出時間顯示部分的兩個冒號write_date(:);delay(5);write_com(0x80+0x40+9);write_date(:);delay(5);write_sfm(4,shi); /分別送去液晶顯示write_com(0x80+0x40+4);write_sfm(7,fen);write_com(0x80+0x40+7);write_sfm(10,miao);write_com(0x80+0x40+10)2、鬧鐘的實現(xiàn)鬧鐘功能的實現(xiàn)涉及到兩個方面:鬧鈴時間設定和是否鬧鈴判別與相應處理。鬧鈴時間設定模塊的設計可參照時間設定模塊,這里著重闡述鬧鈴判別與處理模塊的設計問題。鬧鈴判

19、別與鬧鈴處理的關鍵在于判別何時要進行鬧鈴。當時-十位、時-個位、分-十位、分-個位中任一位發(fā)生改變(進位)時,就必須進行鬧鈴判別。程序設計思想如圖4.3。 8時十位、個位,分十位、個位改變了設置鬧鈴標志是否設置了鬧鈴清除鬧鈴標志判當前時間是設定時間中斷返回中斷返回鬧鈴判別處理 圖4.3N3、顯示程序顯示程序包括時鐘顯示和定時顯示程序。具體程序見附錄。液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時需先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表4.1是LM016LLCD1液晶模塊的內(nèi)部顯示地址。15表4.1 內(nèi)部顯

20、示地址12345678910111213141516000102030405060708090A0B0C0D0E0F404142434445464748494A4B4C4D4E4F、硬件原理圖、硬件電路圖5.2.2程序代碼如下:1、顯示時-分:#include / reg52.h是AT89C52的頭文件#define uint unsigned int#define uchar unsigned charuchar code table=NOW TIME:;uchar code table1=SET NOW TIME:;uchar code table2=SET ALARM TIME:;uch

21、ar code alarm=ALARM TIME:;uchar code alarmoff=ALARM TIME: OFF;uchar code alarmon=ALARM TIME: ON;sbit lcden=P32; /定義icden的地址為P3.2(以下的 sbit 命令以此類推)sbit lcdrs=P30;sbit lcdrw=P31;sbit K1=P10;sbit K2=P11;sbit K3=P12;sbit K4=P13;sbit beep=P26;uchar flag,num,count,k1num,k2num,k3num,k4num;char miao,shi,fen,

22、ashi,afen;void delay(uint z) /延時函數(shù)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void di() /蜂鳴器子程序beep=0;delay(100);beep=1;void write_com(uchar com) /寫命令函數(shù)lcdrs=0;lcdrw=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date) /寫數(shù)據(jù)函數(shù)lcdrs=1;lcdrw=0;lcden=0;P0=date;delay(5);lcden=1;dela

23、y(5);lcden=0;void write_sfm(uchar add,uchar date) /寫時間函數(shù)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void TimeInit() /顯示時間初始化write_com(0x01);write_com(0x80);for(num=0;num9;num+)write_date(tablenum);delay(5);write_com(0x80+0x40+6);write_date(:)

24、;delay(5);write_com(0x80+0x40+9);write_date(:);delay(5);write_sfm(4,shi);write_com(0x80+0x40+4);write_sfm(7,fen);write_com(0x80+0x40+7);write_sfm(10,miao);write_com(0x80+0x40+10);void SetNowTime() /設置當前時間if(K1=0)delay(5);if(K1=0)while(!K1);di();shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x

25、40+4);if(K2=0)delay(5);if(K2=0)while(!K2);di();fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(K3=0)delay(5);if(K3=0)while(!K3);di();k1num=0;TR0=1;TimeInit();void SetAlarmTime() /設置鬧鐘時間flag=0;if(K1=0)delay(5);if(K1=0)while(!K1);di();ashi+;if(ashi=24)ashi=0;write_sfm(4,ashi);write_com

26、(0x80+0x40+4);if(K2=0)delay(5);if(K2=0)while(!K2);di();afen+;if(afen=60)afen=0;write_sfm(7,afen);write_com(0x80+0x40+7);if(K3=0)delay(5);if(K3=0)while(!K3);di();k3num=0;EA=1;flag=1;TimeInit();void DisplayAlarmTime() /顯示鬧鐘函數(shù)write_com(0x01);write_com(0x80);for(num=0;num11;num+)write_date(alarmnum);del

27、ay(5);write_com(0x80+0x40+6);write_date(:);delay(5);write_sfm(4,ashi);write_com(0x80+0x40+4);write_sfm(7,afen);write_com(0x80+0x40+7);void keyscan() /鍵盤掃描函數(shù)if(K1=0)delay(5);if(K1=0)TR0=0;while(!K1);di();k1num+;if(k1num!=0)write_com(0x80);for(num=0;num13;num+)write_date(table1num);delay(5);SetNowTime

28、();elseif(K2=0)delay(5);if(K2=0)while(!K2);di();k2num+;if(k2num=1)EA=0;DisplayAlarmTime();k2num=2;if(k2num=3)k2num=0;EA=1;TimeInit();elseif(K3=0)delay(5);if(K3=0)while(!K3);di();k3num+;write_com(0x01);if(k3num=1)EA=0;write_com(0x80);for(num=0;num15;num+)write_date(table2num);delay(5);write_com(0x80+

29、0x40+6);write_date(:);delay(5);write_sfm(4,ashi);write_com(0x80+0x40+4);write_sfm(7,afen);write_com(0x80+0x40+7);SetAlarmTime();elseif(K4=0)delay(5);if(K4=0)while(!K4);di();k4num+;if(k4num=1)di();k4num=2;flag=0;if(k4num=3)k4num=0;di();delay(500);di();delay(500);di();flag=1; if(flag=1&shi=ashi&fen=af

30、en)beep=beep;delay(500);if(K4=0&flag=1)delay(5);if(K4=0&flag=1)while(!K4);di();flag=0;k4num=0;void init() /lcd1602初始化lcden=0;shi=0;fen=0;miao=0;ashi=0;afen=0;count=0;k1num=0;write_com(0x38);/設置16X2顯示,5X7點陣,8位數(shù)據(jù)接口write_com(0x0c);/設置開顯示,不顯示光標write_com(0x06);/寫一個字符后地址指針加1write_com(0x01);/顯示清0,數(shù)據(jù)指針清0Tim

31、eInit();TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;void main() /主函數(shù)init();write_com(0x80);while(1)keyscan();void timer0()interrupt 1 /中斷服務子程序TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;if(count=20)count=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)

32、shi=0;write_sfm(4,shi);write_sfm(7,fen);write_sfm(10,miao);4、單程序執(zhí)行結(jié)果如下(秒計數(shù)):5、仿真執(zhí)行結(jié)果如下:、按K5鍵-復位初始狀態(tài)(NOW TIME)、按K1鍵(SET NOW TIME)(3)、按K3鍵(SET ALARM TIME)(4)、再按K2鍵即可定時1分鐘或更長2、顯示時-分-秒: #include / reg52.h是AT89C52的頭文件#define uint unsigned int#define uchar unsigned charuchar code table=NOW TIME:; /code為程序

33、儲存器(即將語句NOW TIME存入程序以便顯示)uchar code table1=SET NOW TIME:;uchar code table2=SET ALARM TIME:;uchar code alarm=ALARM TIME:;uchar code alarmoff=ALARM TIME: OFF;uchar code alarmon=ALARM TIME: ON;sbit lcden=P32; /定義icden的地址為P3.2(以下的 sbit 命令以此類推)sbit lcdrs=P30;sbit lcdrw=P31;sbit K1=P10;sbit K2=P11;sbit K3

34、=P12;sbit K4=P13;sbit K5=P14;sbit beep=P26;uchar flag,num,count,k1num,k2num,k3num,k4num,k5num;char miao,shi,fen,ashi,afen,amiao;void delay(uint z) /延時函數(shù)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void di() /蜂鳴器子程序beep=0;delay(100);beep=1;void write_com(uchar com) /寫命令函數(shù)lcdrs=0;lcdrw=0;lcden=0;P0=com;del

35、ay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date) /寫數(shù)據(jù)函數(shù)lcdrs=1;lcdrw=0;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;void write_sfm(uchar add,uchar date) /寫時間函數(shù)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);void TimeInit() /顯示時間初始化

36、write_com(0x01);write_com(0x80);for(num=0;num9;num+)write_date(tablenum);delay(5);write_com(0x80+0x40+6);write_date(:);delay(5);write_com(0x80+0x40+9);write_date(:);delay(5);write_sfm(4,shi);write_com(0x80+0x40+4);write_sfm(7,fen);write_com(0x80+0x40+7);write_sfm(10,miao);write_com(0x80+0x40+10);voi

37、d SetNowTime() /設置當前時間 if(K1=0)delay(5);if(K1=0)while(!K1);di();shi+;if(shi=24)shi=0;write_sfm(4,shi);write_com(0x80+0x40+4);if(K2=0)delay(5);if(K2=0)while(!K2);di();fen+;if(fen=60)fen=0;write_sfm(7,fen);write_com(0x80+0x40+7);if(K3=0)delay(5);if(K3=0)while(!K3);di();miao+;if(miao=60)miao=0;write_sf

38、m(10,miao);write_com(0x80+0x40+10);if(K4=0)delay(5);if(K4=0)while(!K4);di();k1num=0;TR0=1;TimeInit();void SetAlarmTime() /設置鬧鐘時間flag=0;if(K1=0)delay(5);if(K1=0)while(!K1);di();ashi+;if(ashi=24)ashi=0;write_sfm(4,ashi);write_com(0x80+0x40+4);if(K2=0)delay(5);if(K2=0)while(!K2);di();afen+;if(afen=60)a

39、fen=0;write_sfm(7,afen);write_com(0x80+0x40+7);if(K3=0)delay(5);if(K3=0)while(!K3);di();amiao+;if(amiao=60)amiao=0;write_sfm(10,amiao);write_com(0x80+0x40+10);if(K4=0)delay(5);if(K4=0)while(!K4);di();k4num=0;EA=1;flag=1;TimeInit();void DisplayAlarmTime() /顯示鬧鐘函數(shù)write_com(0x01);write_com(0x80);for(nu

40、m=0;num11;num+)write_date(alarmnum);delay(5);write_com(0x80+0x40+6);write_date(:);delay(5);write_com(0x80+0x40+6);write_date(:);delay(5);write_sfm(4,ashi);write_com(0x80+0x40+4);write_sfm(7,afen);write_com(0x80+0x40+7); write_sfm(10,amiao);write_com(0x80+0x40+10);void keyscan() /鍵盤掃描函數(shù)if(K1=0)delay(

41、5);if(K1=0)TR0=0;while(!K1);di();k1num+;if(k1num!=0)write_com(0x80);for(num=0;num13;num+)write_date(table1num);delay(5);SetNowTime();elseif(K2=0)delay(5);if(K2=0)while(!K2);di();k2num+;if(k2num=1)EA=0;DisplayAlarmTime();k2num=2;if(k2num=3)k2num=0;EA=1;TimeInit();elseif(K4=0)delay(5);if(K4=0)while(!K

42、4);di();k4num+;write_com(0x01);if(k4num=1)EA=0;write_com(0x80);for(num=0;num15;num+)write_date(table2num);delay(5);write_com(0x80+0x40+6);write_date(:);delay(5);write_com(0x80+0x40+9);write_date(:);delay(5);write_sfm(4,ashi);write_com(0x80+0x40+4);write_sfm(7,afen);write_com(0x80+0x40+7); write_sfm(

43、10,amiao);write_com(0x80+0x40+10);SetAlarmTime();elseif(K5=0)delay(5);if(K5=0)while(!K5);di();k5num+;if(k5num=1)di();k5num=3;flag=0;if(k5num=4)k5num=0;di();delay(500);di();delay(500);di();flag=1; if(flag=1&shi=ashi&fen=afen&miao=amiao)beep=beep;delay(500);if(K5=0&flag=1)delay(5);if(K5=0&flag=1)while(!K5);di();flag=0;k5num=0;void init() /lcd1602初始化lcden=0;shi=0;fen=0;miao=0;ashi=0;afen=0;amiao=0;count=0;k1num=0;write_com(0x38);/設置16X2顯示,5X7點陣,8位數(shù)據(jù)接口write_com(0x0c);/設置開顯示,不顯示光標write_com(0x06);/寫一個字符后地址指針加1write_com(

溫馨提示

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

評論

0/150

提交評論