1課程設(shè)計(jì)總體目標(biāo)
1.1 功能 由單片機(jī)AT89C51芯片和LCD顯示器,輔以必要的的電路,構(gòu)成一個(gè)可編程作息時(shí)間控制器。電子鐘采用采用單片機(jī)來(lái)完成,LCD顯示“時(shí)”,“分”,LED閃動(dòng)來(lái)做秒計(jì)數(shù),定時(shí)時(shí)間到能發(fā)出相應(yīng)的提示,從而能夠?qū)崿F(xiàn)作息時(shí)間控制,F(xiàn)在是自動(dòng)化高度發(fā)達(dá)的時(shí)代,特別是電子類產(chǎn)品都是靠?jī)?nèi)部的控制電路來(lái)實(shí)現(xiàn)對(duì)產(chǎn)品的控制,達(dá)到自動(dòng)運(yùn)行的目的,這就需要我們這里要做的設(shè)計(jì)中的電器元件及電路的支持。
(1)在keiluVision和proteus上編寫軟件完成設(shè)計(jì)。
(2)以AT89C51單片機(jī)為核心結(jié)合字符型LCD顯示器的可編程作息時(shí)間控制器。
(3)按照給定的時(shí)間模擬控制,實(shí)現(xiàn)廣播、上下課打鈴、燈光控制(屏幕顯示),同時(shí)具備日期和時(shí)鐘顯示。
(4)上機(jī)調(diào)試程序。
(5)寫出設(shè)計(jì)報(bào)告。
1.2 總體系統(tǒng)結(jié)構(gòu)可編程作息時(shí)間控制器是由簡(jiǎn)單的一路鬧鐘的基礎(chǔ)上增加至四路可調(diào)鬧鐘,從而實(shí)現(xiàn)依次執(zhí)行作息時(shí)間的提醒任務(wù)。系統(tǒng)主頓是由時(shí)間程序和鬧鐘程序所構(gòu)成,由顯示模塊、時(shí)鐘模塊以及闌鐘模塊三大部分組成。其中時(shí)鐘運(yùn)算模塊要對(duì)時(shí)、分、秒的數(shù)值進(jìn)行操作,并且秒算到60時(shí),要自己清零并向分進(jìn)11分算到60時(shí),要自己清零并向時(shí)進(jìn)1,時(shí)算到24時(shí),要清零,這樣,才能循環(huán)記時(shí)。并在不同狀態(tài)下使得四個(gè)按鍵有著不同的功能,從而實(shí)現(xiàn)系統(tǒng)時(shí)間的調(diào)整,同時(shí)可以在不同狀態(tài)下可以調(diào)整鬧鐘的時(shí)間。當(dāng)定時(shí)到達(dá)時(shí)LCD將顯示出現(xiàn)在的鬧鐘是哪一路,響鈴一分鐘,并可以通過(guò)按鍵提前結(jié)束鬧鐘,恢復(fù)到時(shí)間顯示狀態(tài)。
使用7890單片機(jī)結(jié)合字符型LCD顯示器設(shè)計(jì)一個(gè)簡(jiǎn)易的可編程作息時(shí)間控制器,若LCD選擇有背光顯示的模塊,在夜晚或黑暗的場(chǎng)合中也可使用。程序執(zhí)行后工作指示燈LED閃動(dòng),表示程序開始執(zhí)行,同時(shí)顯示系統(tǒng)時(shí)間。作息時(shí)間控制器是由4路可調(diào)鬧鐘組成,從而實(shí)現(xiàn)打鈴等功能。當(dāng)四路鬧鐘中的任一路到時(shí),均會(huì)點(diǎn)亮燈、打鈴。其中操作鍵KI~K4的功能分別為。設(shè)置限制的時(shí)間/時(shí)的調(diào)整、顯示鬧鐘設(shè)置的時(shí)間/分的調(diào)整、設(shè)置鬧鐘的時(shí)間/設(shè)置完成、鬧鐘更換。
2硬件設(shè)計(jì)
2.1硬件電路芯片的選擇系統(tǒng)主要是由AT89C51單片機(jī)、1602LCD液晶顯示器以及其他重要元件組成,按鍵作為系統(tǒng)的控制輸入端,可以進(jìn)行時(shí)間、 鬧鐘等內(nèi)容的設(shè)定,并通過(guò)液晶顯示器顯示出時(shí)間等內(nèi)容。
AT89C5單片機(jī)本設(shè)計(jì)的核心硬件就是8051芯片,這里選擇了AT9C51, AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(PPEROM Falsh Progr amable and Erasable Read only Me的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。該器件采用AMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,AMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。
引腳及其功能:
P0口: P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收STTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。
P1口.:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I70. PI口緩沖器能接收輸出4TTL門電流。PI口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。
P2口: P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩仲器可接收,輸出4個(gè)TL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2 口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)時(shí),P2口輸出地址的高八位。在結(jié)出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2 口在PLAH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。
P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電陽(yáng)的雙向1/0口,可接收輸出4個(gè)TTL門電流。 當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3 口也可作為AT89051的一些特殊功能口,如下所示,
P3口管腳備選功能
P3.0 RXD(串行輸入口)
P3.1 TXD( 串行輸出口)
P3.2 /INTO( 外部中斷0)
P3.3 /INT1(外 部中斷1)
P3.4 TO(記時(shí)器 0外部輸入)
P3.5 T1(記2時(shí)器1外部輸入)
P3.6 /MR( 外部數(shù)據(jù)存儲(chǔ)器寫選通)
P3.7 /RD(外 部數(shù)據(jù)存儲(chǔ)器讀選通)
P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。
RST復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。
ALE/PROG當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸人編程脈沖。在平時(shí),ALE 端以不變的領(lǐng)率周期輸出正脈沖信號(hào)。此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈神或用于定時(shí)目的。然而要注意的是,每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈神。如想禁止ALE的輸出可在SFREH地址上置0。此時(shí),ALE只有在執(zhí)行MOVX,MOVC指令是ALB才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。
PSEN外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。
EA/VPP當(dāng)/EA 保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(000H-FFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTA1反向振蕩放大器的輸入及內(nèi)部時(shí)鐘I作電路的輸入。
XTA2來(lái)自反向振蕩器的輸出。
P1.0口接K1按鍵,P1.1口接K2按鍵,P1.2日接K3按鍵,P1.3口接K4按鍵,P2.0口接RS口, P2.1口接RW口, P2.2口接B口,P2.3口接發(fā)光二極管D2陽(yáng)極,P2.4口接發(fā)光二極管D1陽(yáng)極,P2.5口接電阻R3,P3口的8個(gè)口依飲和LCD的數(shù)據(jù)口D0~D7。
LMO16L 液晶模塊采用HD44780控制器。HD44780 具有簡(jiǎn)單面功能較強(qiáng)的指令集,可以實(shí)現(xiàn)字符移動(dòng)、閃爍等功能。UMOLEL 與單片機(jī)MOU Micrcontroller Unit)通訊可采用8位或者4位并行傳輸兩種方式。H44780控制器由兩個(gè)8位寄存器、指令寄存器( IR)和數(shù)據(jù)寄存器(DR)、忙標(biāo)志(FP)、顯示數(shù)據(jù)RMDDRM)、字符發(fā)生器ROM (OCROM)、字符發(fā)生器RAM (CGRAM)、地址計(jì)數(shù)器(AC)。IR用于寄存指令碼,只能寫入不能讀出: DR用于寄存數(shù)據(jù),數(shù)據(jù)由內(nèi)部操作自動(dòng)寫入CORAM和CORAM或者暫存從LCRAM和CRAM讀出的數(shù)據(jù)。BF為1時(shí),液晶模塊處干內(nèi)部處理模式,不響應(yīng)外部操作指令和接受效據(jù)。DDRAM 用來(lái)存儲(chǔ)顯示的字符,能存儲(chǔ)80個(gè)字符碼。OGROM由8位字符碼生成5*7點(diǎn)陣字符160種和5*10點(diǎn)陣字符32種,8位字符編碼和字符的對(duì)應(yīng)關(guān)系,可以查看參考文獻(xiàn)[3]中的表4.CGRAM是為用戶編寫特殊字符留用的,它的容量?jī)H64字節(jié)?梢宰远x8個(gè)547點(diǎn)陣字符或者4個(gè)5*10點(diǎn)陣字符。AC可以存儲(chǔ)ORA和OGRM的地址,如果地址碼隨指令寫入IR.則IR自動(dòng)把地址碼裝入AC. 同時(shí)選擇LORAM或者CGRM單元。UMO16L 液晶模塊的引腳功能見表:
第1腳,VsS為地電源。
第2腳: V0DD換5V正電源。
第3腳: VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。
第4腳,RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
第5腳,R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。
第6腳: B端為使能端,當(dāng)已端由高電平跳變成低電平時(shí),液品模塊執(zhí)行命令。
第7~14腳,00~D07為8位雙向數(shù)據(jù)線。
將reepack-8的1口接電源,2"8口順序和P3口相連接,并和LCD的數(shù)據(jù)口D1D7相接,VSS接地,VID接電源,VEE接滑動(dòng)變阻器,RS口接P2.0口,RW口接P2 .1口,B口接P2.2口。
2.2外圍電路
(1)獨(dú)立式鍵盤的接口電路。在單片機(jī)應(yīng)用系統(tǒng)中,有時(shí)只需要幾個(gè)簡(jiǎn)單的按鍵向系統(tǒng)輸入信息。這時(shí),可將每個(gè)按鍵接在一根1/0接口線上,這種方式的連接稱為獨(dú)立式鍵盤。每個(gè)獨(dú)立式按鍵單獨(dú)占有一根I/0接口線,每根I/O接口線的工作狀態(tài)不會(huì)影響到其他I/接口線 。這種按鍵接口電路配置靈活,硬件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一根I/0接口線,I/0 接口線浪費(fèi)較大。故只在按鍵數(shù)量不多時(shí)采用這種按鍵電路。在此電路中,按鍵輸入都采用低電平有效。上拉電阻保證了按鍵斷開時(shí),I/0 接口線有確定的高電平。當(dāng)I/0接口內(nèi)部有上拉電阻時(shí),外電路可以不配置上拉電阻。
(2) 蜂鳴器:將蜂鳴器的一端電源,另一端接至晶閘管集電極,當(dāng)需要鬧鐘響時(shí),P2.5 將發(fā)出有規(guī)律的電平使得晶閘管導(dǎo)通,從而使得蜂鳴器發(fā)出聲響。
(3) respack-8:上拉電阻鍵K1~K4分別與單片機(jī)的P1.0~P1.3口相接。

3 軟件設(shè)計(jì)
可編程作息時(shí)間控制器軟件編程主要包括系統(tǒng)初始化、系統(tǒng)時(shí)間校正、系統(tǒng)時(shí)間設(shè)定、作息時(shí)間設(shè)定、響鈴處理、邏輯控制以及1602LCD液晶顯示,整個(gè)程序中響鈴的合理處理以及顯示部分是核心部分,只有處理好鬧鐘的及時(shí)響應(yīng)才會(huì)使得整個(gè)可編程作息時(shí)間控制器按照預(yù)定的設(shè)計(jì)進(jìn)行工作,同時(shí)各個(gè)模塊邏輯上合理分配又將是整個(gè)功能實(shí)現(xiàn)的基礎(chǔ)。
3.1各模塊子程序流程3.1.1系統(tǒng)初始化程序
bit K1=P1^0; sbit rw=P2^1;
sbit k2=P1^1; sbit leden=P2^2;
sbit K3=P1^2; sbit LED2=P2^3;
sbit K4=P1^3; sbit led=P2^4;
sbit rs=P2^0; sbit beep=P2^5;
TH0=(65536-50000)/256; TLO= (65536-50000)%256;
此段程序主要是是定義電路的外部接口,包括KI^K4按鍵,LCD的rs口、rwD、廣播控制端LBD2、發(fā)光二極管控制端led以及蜂嗚器控制端beep.將定時(shí)器0的工作模式選擇為工作方式1,同時(shí)給定時(shí)器裝初值,并且開始計(jì)數(shù)。
3.1.2系統(tǒng)時(shí)間校正程序: fen+t;
THo=(65536-50000)/256; if(fen==60)
TL0=(65536-50000)%256; {fen=0;
aa++ shi++;
if(aa==20) if(shi==24)
{aa=0; {shi=0;}
Miao++; mite_ sfm(9, shi);
if(miao==60) write_ sfm(12, fen);}}
{miao=0;
首先初始化時(shí)定時(shí)器開始工作,當(dāng)計(jì)時(shí)時(shí)間到時(shí)進(jìn)入中斷服務(wù),由于方式1沒有自動(dòng)裝初值的功能,因此需再次裝入初值,每一次所定的時(shí)間為50ms,通過(guò)軟件計(jì)數(shù)的方法,當(dāng)計(jì)數(shù)達(dá)到20次時(shí)剛好1秒鐘,如果計(jì)數(shù)不到20次,則再次給定時(shí)器裝入初值,直到計(jì)數(shù)達(dá)到20次,把計(jì)數(shù)初值清零,并再次向計(jì)數(shù)器裝初值,重復(fù)執(zhí)行之前操作,同時(shí)分加一,并顯示,如果分為60時(shí)則不顯示,先清零然后將時(shí)加一,再顯示分,如果時(shí)不是24時(shí),則直接通過(guò)LCD顯示出來(lái),如果時(shí)剛好為24時(shí),則現(xiàn)需要清零,然后在用LCD顯示出來(lái)。
3.1.3系統(tǒng)時(shí)間設(shè)定程序:
if(K1==0) while(!K2);
while(!K1) fen++;
TRO=0; if(fen==60)
if (K1==0) fen=0;
shi++, if(K3==0)
if(shi==24) shi=0; TRO=1;
if (K2==0)
當(dāng)K1被按下時(shí),則修改系統(tǒng)的的時(shí)間,同時(shí)定時(shí)器停止工作。開始時(shí),光標(biāo)停留在分鐘上,當(dāng)再次按下K1時(shí),光標(biāo)將會(huì)跳到小時(shí)并且小時(shí)位的時(shí)間將會(huì)加一,如果時(shí)位的數(shù)等于24時(shí),則自動(dòng)清零,從零開始再往上加,如果按下K2鍵按下則分鐘自動(dòng)加一,如果分鐘達(dá)到60時(shí)則自動(dòng)清零,從零開始往上加,并通過(guò)LCD顯示出此時(shí)的狀態(tài)。當(dāng)按下K3鍵時(shí),則退出系統(tǒng)時(shí)間的更改,并啟動(dòng)定時(shí)器工作,開始通過(guò)LCD在第二行顯示出修改后的時(shí)間。此程序主要的作用就是通過(guò)人為的方法來(lái)設(shè)定系統(tǒng)的時(shí)間,使得系統(tǒng)時(shí)間滿足實(shí)際需要。
3.1.4作息時(shí)間設(shè)定程序
if (K3==0) if(shi2==24)
while(!K3); shi1=0;
write_ sfm(12, fen1); write_ sfm(9,shi1);
write_ sfm(9,shil); if(K2==0)
if(K2==0) {while(K2)
{write_ sfm(12, fen1); fen1++;
write sfm(9, shi1); if(fen1==60)
while(!K2); fen1=0,
write_ sfm(12, fen); write_ sfm(12, fen1),
write_ sfm(9, shi); if(K3==0)
if (K1==0) write_ sfm(12, fen);
while(!K1); write_ sfm(9, shi);
Shi1++,
由于可編程時(shí)間控制器是由四路鬧鐘構(gòu)成的。所以只要通過(guò)邏輯上的先后順序便可以實(shí)現(xiàn),并且這四路鬧鐘設(shè)定上都是相同的,因此在這里將四路鬧鐘選擇其中的第路做介紹。 當(dāng)通過(guò)K4鍵進(jìn)入鬧鐘設(shè)定電路后,如果處于廣播的鬧鐘時(shí)間設(shè)定時(shí),此時(shí)如果沒有按下任何開關(guān)鍵,LCD將顯示此時(shí)的鬧鐘標(biāo)志“GB”并且再其后面顯示現(xiàn)在的系統(tǒng)時(shí)間,在沒有按下K3鍵之前,如果按下K2鍵,則LCD將顯示此處鬧鐘時(shí)間,并且在其前面有此路標(biāo)志,如“CB”,松開按鍵K2時(shí),LCD將顯示之前的狀態(tài),如果按下首次按下K3鍵,則開始修改鬧鐘的時(shí)間,此時(shí)光標(biāo)在分鐘上閃爍,此時(shí)按下K2鍵則修改鬧鐘的分鐘,如果分等于60時(shí),則自動(dòng)清零,否則繼續(xù)往上加:如果按下K1鍵則修改鬧鐘的小時(shí),如果小時(shí)數(shù)等于24,則自動(dòng)清零,否則繼續(xù)往上加。當(dāng)?shù)诙伟聪翶3鍵,則完成次鬧鐘的設(shè)定,并顯示之前的狀態(tài),如果繼續(xù)按K4鍵則切換到下一路鬧鐘.也可以進(jìn)行上述的操作,或者返回系統(tǒng)時(shí)間界面。
3.1.5 響鈴處理程序:
if((((fen=fen1)&&(shi==shi1))||(fene==fen2)&&(shi=shi2)||((fen=fen3)&&(shi==shi3))||((fen==fen4)&&(shi==shi4))&&(flag2==1))
if((fen==fen1)&&shi==shi1)&(flag2==1))
ifl((((fen=fen1)&&(shi=sh1)&&(flag2==0)||((fen-1==fen1)&&(shi==shi1)))&&(flag4==0))
if((fen==fen2)& &(shi==shi2)& (flag2==1))
if((((fen=fen2)&&(shi==shi2)&&(flag2==0))||(fen-1==fen2)&&(shi==sh2)))&&(flag4==0))
if( (fen==fen3) &&(shi==shi3)&&flag2==1))
if((((fen==fen3)&&(shi==shi3)&&(flag2==0))||((fen-1=fen3)&&(shi=shi3)))&&(flag4==0))
if( (fen=fen4)&&(shi==shi4)&&(flag2==1))
if((((fen=fen4)&&(shi==shi4)&&(flag2==0)||(fen-1==fen4)&&(shi==shi4))&& (flag4==0))
if(K4==0&&flag3==0)
當(dāng)四個(gè)定時(shí)鬧鐘任意一路到達(dá)時(shí),在沒有按下響鈴終止鍵K4時(shí),flag2都等于1,此時(shí)鬧鐘響起,同時(shí)使得fla3等于0.在鬧鐘響鬧完一個(gè)周期后將繼續(xù)向下執(zhí)行,并且根據(jù)以后程序的判定是哪一路鬧鐘在響鬧,執(zhí)行這一路所要求的內(nèi)容,但是不論哪一路時(shí)間到都會(huì)響鈴并且燈閃,不同的是根據(jù)判斷選擇出時(shí)間到的那一路并通過(guò)LCD顯示出來(lái)鬧鐘時(shí)間及某路鬧鐘:此時(shí)若按下K4鍵,則使得flag2等于0.當(dāng)進(jìn)行是否鬧鐘響鬧時(shí)將會(huì)不在響應(yīng),也就是鬧鐘被手動(dòng)關(guān)閉,從而不需要一定要響鈴一分鐘后在關(guān)閉鬧鐘,實(shí)現(xiàn)手動(dòng)關(guān)斷鬧鐘的功能。當(dāng)鬧鐘關(guān)斷過(guò)后將及時(shí)跳出,并且使得LCD顯示當(dāng)前的時(shí)間。使得可編程時(shí)間控制器能夠在響鈴時(shí)能夠顯示當(dāng)前的鬧鈴及時(shí)間,同時(shí)可以手動(dòng)關(guān)斷鬧鈴,并且當(dāng)鬧鈴關(guān)斷過(guò)后可以跳出當(dāng)前顯示返回到系統(tǒng)時(shí)間。
3.1.6邏輯控制while(1) {K4num++;
{if ((K4==0)&& (flag3==1)) if(K4num==5)
K4num=0; flag4=1;}
if(K4num==0) if (K4num==3)
{time() ; {xiake();
flag4=0; } flag4=1;}
if(K4num==1;) if (K4num==4)
{guangbo(); {dengkong() ;
flag4=1;} flag4=1;}
if(K4num==2) clock();}}
{shangke();
只有當(dāng)沒有一路鬧鐘響鬧時(shí)才會(huì)執(zhí)行此程序,因?yàn)樵隰[鐘響鬧時(shí)K4鍵將會(huì)作為鬧鐘的停止的功能鍵使用,所以只有在沒有鬧鐘響鬧時(shí),K4鍵才會(huì)早為鬧鐘的更換,同時(shí)變量K4num將作為K4鍵所處的鬧鐘或者系統(tǒng)時(shí)間區(qū)別出來(lái),以實(shí)現(xiàn)邏輯上的合理。系統(tǒng)剛啟動(dòng)時(shí),按鍵K4處于系統(tǒng)時(shí)間狀態(tài),在此狀態(tài)下可以利用之前所介紹的功能進(jìn)行所需要的修改,當(dāng)?shù)谝淮伟聪翶4鍵時(shí),就會(huì)進(jìn)入廣播定時(shí)的控制口,此時(shí)可以根據(jù)需要修改所要定的時(shí)間,并可以顯示自己所定的鬧鐘時(shí)間,再次按下K4鍵時(shí),將會(huì)進(jìn)入上課定時(shí)的鬧鐘,和之前的鬧鐘一樣,可以進(jìn)行相同的操作,當(dāng)再次按下K4鍵時(shí)將進(jìn)入下課鬧鈴狀態(tài),然后將要進(jìn)入的的是燈光控制定時(shí),此時(shí)Knum4為4,當(dāng)再次按下K4鍵時(shí),將經(jīng)過(guò)判斷清零,重新開始,以此來(lái)實(shí)現(xiàn)按鍵K4可以更換鬧鐘的功能,同時(shí)更改鬧鐘時(shí)間的功能。
3.1.71602LC液晶顯示VSS引腳接地,VDD提供電源,VEE接滑動(dòng)變阻器來(lái)控制液晶屏的對(duì)比度。RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
程序:
void write_ com (uchar com) void write_ date (uchar date)
{rs=0; {rs=1;
rw=0; rw=0;
lcden=0; lcden=0;
P3=com, P3=date;
lcden=1; lcden=1;
lc den=0; } lcden=0; }
當(dāng)需要將內(nèi)容顯示到LCD顯示器上之前,首先要向液晶顯示器輸入寫命令函數(shù),有上硬件分析可以得到LCD液晶顯示上一排地址從80H'SFH,-共16位,下面一排地址從COH~CFH,同樣是16位,所以在進(jìn)行液晶顯示之前首先確定要將結(jié)果在哪一位上顯示,然后在調(diào)用液晶寫數(shù)據(jù)函數(shù),只有兩者結(jié)合使用才會(huì)得到想要的結(jié)果。
4心得通過(guò)此次的單片機(jī)課程設(shè)計(jì)讓我學(xué)到了許多新的知識(shí),讓我受益匪淺,其中對(duì)1602LCD液晶顯示器有了非常深刻的認(rèn)識(shí)。