版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 網(wǎng)絡(luò)教育學(xué)院?jiǎn)纹瑱C(jī)原理及應(yīng)用大作業(yè) 單片機(jī)電子時(shí)鐘設(shè)計(jì) 題 目: 學(xué)習(xí)中心: 大連學(xué)習(xí)中心 層 次: 高中起點(diǎn)專(zhuān)科 專(zhuān) 業(yè): 電氣工程及其自動(dòng)化 年 級(jí): 1209年 春/秋 季 學(xué) 號(hào): 120001209088 學(xué)生姓名: 楊建軍 單片機(jī)電子時(shí)鐘設(shè)計(jì)一、 摘要1957年,Ventura發(fā)明了世界上第一個(gè)電子表,從而奠定了電子時(shí)鐘的基礎(chǔ),電子時(shí)鐘開(kāi)始迅速發(fā)展起來(lái)?,F(xiàn)代的電子時(shí)鐘是基于單片機(jī)的一種計(jì)時(shí)工具,采用延時(shí)程序產(chǎn)生一定的時(shí)間中斷,用于一秒的定義,通過(guò)計(jì)數(shù)方式進(jìn)行滿(mǎn)六十秒分鐘進(jìn)一,滿(mǎn)六十分小時(shí)進(jìn)一,滿(mǎn)二十四小時(shí)小時(shí)清零。從而達(dá)到計(jì)時(shí)的功能,是人民日常生活補(bǔ)課缺少的工具?,F(xiàn)在高精度的計(jì)時(shí)
2、工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘、石英鐘、石英表都采用了石英技術(shù),因此走時(shí)精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)試,數(shù)字式電子鐘用集成電路計(jì)時(shí)時(shí),譯碼代替機(jī)械式傳動(dòng),用LED顯示器代替指針顯示進(jìn)而顯示時(shí)間,減小了計(jì)時(shí)誤差,這種表具有時(shí)、分、秒顯示時(shí)間的功能,還可以進(jìn)行時(shí)和分的校對(duì),片選的靈活性好。二、時(shí)鐘的基本原理電子時(shí)鐘由89C51,BUTTON,六段數(shù)碼管等構(gòu)成,采用晶振電路作為驅(qū)動(dòng)電路,由延時(shí)程序和循環(huán)程序產(chǎn)生的一秒定時(shí),達(dá)到時(shí)分秒的計(jì)時(shí),六十秒為一分鐘,六十分鐘為一小時(shí),滿(mǎn)二十四小時(shí)為一天。而電路中唯一的一個(gè)控制鍵卻擁有多種不同的功能,按下又松開(kāi),可以實(shí)現(xiàn)屏蔽數(shù)碼管顯示的
3、功能,達(dá)到省電的目的;直接按下不松開(kāi),則可以通過(guò)按鍵實(shí)現(xiàn)分鐘的累加,每按一次分鐘加一;而連續(xù)兩次按下按鍵不放松,則可實(shí)現(xiàn)小時(shí)的調(diào)節(jié),同樣每按一次小時(shí)加一并通過(guò)一個(gè)控制鍵用來(lái)實(shí)現(xiàn)時(shí)間的調(diào)節(jié)和是否進(jìn)入省電模式的轉(zhuǎn)換。應(yīng)用Proteus的ISIS軟件實(shí)現(xiàn)了單片機(jī)電子時(shí)鐘系統(tǒng)的設(shè)計(jì)與仿真。該方法仿真效果真實(shí)、準(zhǔn)確,節(jié)省了硬件資源。 三、設(shè)計(jì)方案和論證本次設(shè)計(jì)時(shí)鐘電路,使用了ATC89C51單片機(jī)芯片控制電路,單片機(jī)控制電路簡(jiǎn)單且省去了很多復(fù)雜的線(xiàn)路,使得電路簡(jiǎn)明易懂,使用鍵盤(pán)鍵上的按鍵來(lái)調(diào)整時(shí)鐘的時(shí)、分、秒,用一揚(yáng)聲器來(lái)進(jìn)行定時(shí)提醒,同時(shí)使用匯編語(yǔ)言程序來(lái)控制整個(gè)時(shí)鐘顯示,使得編程變得更容易,這樣通過(guò)
4、四個(gè)模塊:鍵盤(pán)、芯片、揚(yáng)聲器、LED顯示即可滿(mǎn)足設(shè)計(jì)要求。(一) 總設(shè)計(jì)原理框圖如下圖所示:微型控制器時(shí)鐘電路聲光報(bào)時(shí)校時(shí)輸入數(shù)據(jù)顯示(二)設(shè)計(jì)方案的選擇1.計(jì)時(shí)方案 方案1:采用實(shí)時(shí)時(shí)鐘芯片現(xiàn)在市場(chǎng)上有很多實(shí)時(shí)時(shí)鐘集成電路,如DS1287、DS12887、DS1302等。這些實(shí)時(shí)時(shí)鐘芯片具備年、月、日、時(shí)、分、秒計(jì)時(shí)功能和多點(diǎn)定時(shí)功能,計(jì)時(shí)數(shù)據(jù)的更新每秒自動(dòng)進(jìn)行一次,不需要程序干預(yù)。因此,在工業(yè)實(shí)時(shí)測(cè)控系統(tǒng)中多采用這一類(lèi)專(zhuān)用芯片來(lái)實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘功能。 方案2:使用單片機(jī)內(nèi)部的可編程定時(shí)器。利用單片機(jī)內(nèi)部的定時(shí)計(jì)數(shù)器進(jìn)行中端定時(shí),配合軟件延時(shí)實(shí)現(xiàn)時(shí)、分、秒的計(jì)時(shí)。該方案節(jié)省硬件成本,但程序設(shè)計(jì)較
5、為復(fù)雜。2.顯示方案對(duì)于實(shí)時(shí)時(shí)鐘而言,顯示顯然是另一個(gè)重要的環(huán)節(jié)。通常LED顯示有兩種方式:動(dòng)態(tài)顯示和靜態(tài)顯示。靜態(tài)顯示的優(yōu)點(diǎn)是程序簡(jiǎn)單、顯示亮度有保證、單片機(jī)CPU的開(kāi)銷(xiāo)小,節(jié)約CPU的工作時(shí)間。但占有I/O口線(xiàn)多,每一個(gè)LED都要占有一個(gè)I/O口,硬件開(kāi)銷(xiāo)大,電路復(fù)雜。需要幾個(gè)LED就必須占有幾個(gè)并行口,比較適用于LED數(shù)量較少的場(chǎng)合。當(dāng)然當(dāng)LED數(shù)量較多的時(shí)候,可以使用單片機(jī)的串行口通過(guò)移位寄存器的方式加以解決,但程序編寫(xiě)比較麻煩。LED動(dòng)態(tài)顯示硬件連接簡(jiǎn)單,但動(dòng)態(tài)掃描的顯示方式需要占有CPU較多的時(shí)間,在單片機(jī)沒(méi)有太多實(shí)時(shí)測(cè)控任務(wù)的情況下可以采用。本系統(tǒng)需要采用6位LED數(shù)碼管來(lái)分別顯
6、示時(shí)、分、秒,因數(shù)碼管個(gè)數(shù)較多,故本系統(tǒng)選擇動(dòng)態(tài)顯示方式。(三)硬件部分1、STC89C51單片機(jī)介紹STC89C51單片機(jī)是由深圳宏晶公司代理銷(xiāo)售的一款MCU,是由美國(guó)設(shè)計(jì)生產(chǎn)的一種低電壓、高性能CMOS 8位單片機(jī),片內(nèi)含8kbytes的可反復(fù)寫(xiě)的FlashROM和128bytes的RAM,2個(gè)16位定時(shí)計(jì)數(shù)器5。 STC89C51單片機(jī)內(nèi)部主要包括累加器ACC(有時(shí)也簡(jiǎn)稱(chēng)為A)、程序狀態(tài)字PSW、地址指示器DPTR、只讀存儲(chǔ)器ROM、隨機(jī)存取存儲(chǔ)器RAM、寄存器、并行I/O接口P0P3、定時(shí)器/計(jì)數(shù)器、串行I/O接口以及定時(shí)控制邏輯電路等。這些部件通過(guò)內(nèi)部總線(xiàn)聯(lián)接起來(lái),構(gòu)成一個(gè)完整的微型
7、計(jì)算機(jī)。其管腳圖如圖所示。STC89C51單片機(jī)管腳結(jié)構(gòu)圖VCC:電源。GND:接地。P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P1口的管腳第一次寫(xiě)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位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作 輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH
8、編程和校驗(yàn)時(shí),P1口作為第八位地址接收。 P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“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)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器 的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接
9、收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:口管腳 備選功能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(記時(shí)器0外部輸入)P3.5 T1(記時(shí)器1外部輸入)P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通)P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保
10、持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。ALE/PROG:當(dāng)訪(fǎng)問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE 端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器 時(shí),將跳過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。 PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期
11、間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪(fǎng)問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí), /EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。2、上電按鈕復(fù)位電路 本設(shè)計(jì)采用上電按鈕復(fù)位電路:首先經(jīng)過(guò)上電復(fù)位,當(dāng)按下按鍵時(shí),RST直接與VCC相連,為高電平形成復(fù)位,同時(shí)電解電容被電路放電;按鍵松開(kāi)時(shí),VCC對(duì)電容充電,充電電流在電阻上,RST依然為高電平,仍然是復(fù)位,充電
12、完成后,電容相當(dāng)于開(kāi)路,RST為低電平,單片機(jī)芯片正常工作。其中電阻R2決定了電容充電的時(shí)間,R2越大則充電時(shí)間長(zhǎng),復(fù)位信號(hào)從VCC回落到0V的時(shí)間也長(zhǎng)。3、晶振電路本設(shè)計(jì)晶振電路采用12M的晶振。晶振的作用是給單片機(jī)正常工作提供穩(wěn)定的時(shí)鐘信號(hào)。單片機(jī)的晶振并不是只能用12M,只要不超過(guò)20M就行,在準(zhǔn)許的范圍內(nèi),晶振越大,單片機(jī)運(yùn)行越快,還有用12M的就是好算時(shí)間,因?yàn)橐粋€(gè)機(jī)器周期為1/12時(shí)鐘周期,所以這樣用12M的話(huà),一個(gè)時(shí)鐘周期為12us,那么定時(shí)器計(jì)一次數(shù)就是1us了,電容范圍在20-40pF之間,這里連接的是30pF的電容。機(jī)器周期=10*晶振周期=12*系統(tǒng)時(shí)鐘周期4.下載端口設(shè)
13、計(jì)用到的STC89C52單片機(jī)芯片的ISP下載線(xiàn)是通過(guò)單片機(jī)的TXD,RXD引腳把程序燒進(jìn)去的。管腳TXD和RXD用于異步串行通信。其實(shí)STC89C52單片機(jī)的ISP下載線(xiàn)就是一個(gè)max232芯片連接STC和計(jì)算機(jī)的串行通信口。計(jì)算機(jī)把程序從九針串口送到max232芯片,電平轉(zhuǎn)換后送進(jìn)單片機(jī)的串行口,也就是TXD和RXD。然后單片機(jī)的串行模塊把數(shù)據(jù)送到程序區(qū)。5、顯示電路 就時(shí)鐘而言,通常可采用液晶顯示或數(shù)碼管顯示。由于一般的段式液晶屏,需要專(zhuān)門(mén)的驅(qū)動(dòng)電路,而且液晶顯示作為一種被動(dòng)顯示,可視性相對(duì)較差;對(duì)于具有驅(qū)動(dòng)電路和微處理器接口的液晶顯示模塊(字符或點(diǎn)陣),一般多采用并行接口,對(duì)微處理器的
14、接口要求較高,占用資源多。另外,89C2051本身無(wú)專(zhuān)門(mén)的液晶驅(qū)動(dòng)接口,因此,本時(shí)鐘采用數(shù)碼管顯示方式。數(shù)碼管作為一種主動(dòng)顯示器件,具有亮度高、價(jià)格便宜等優(yōu)點(diǎn),而且市場(chǎng)上也有專(zhuān)門(mén)的時(shí)鐘顯示組合數(shù)碼管。對(duì)于實(shí)時(shí)時(shí)鐘而言,顯示顯然是另一個(gè)重要的環(huán)節(jié)。通常LED顯示有兩種方式:動(dòng)態(tài)顯示和靜態(tài)顯示。靜態(tài)顯示的優(yōu)點(diǎn)是程序簡(jiǎn)單、顯示亮度有保證、單片機(jī)CPU的開(kāi)銷(xiāo)小,節(jié)約CPU的工作時(shí)間。但占有I/O口線(xiàn)多,每一個(gè)LED都要占有一個(gè)I/O口,硬件開(kāi)銷(xiāo)大,電路復(fù)雜。需要幾個(gè)LED就必須占有幾個(gè)并行口,比較適用于LED數(shù)量較少的場(chǎng)合。當(dāng)然當(dāng)LED數(shù)量較多的時(shí)候,可以使用單片機(jī)的串行口通過(guò)移位寄存器的方式加以解決
15、,但程序編寫(xiě)比較麻煩。LED動(dòng)態(tài)顯示硬件連接簡(jiǎn)單,但動(dòng)態(tài)掃描的顯示方式需要占有CPU較多的時(shí)間,在單片機(jī)沒(méi)有太多實(shí)時(shí)測(cè)控任務(wù)的情況下可以采用。本系統(tǒng)需要采用6位LED數(shù)碼管來(lái)分別顯示時(shí)、分、秒,因數(shù)碼管個(gè)數(shù)較多,故本系統(tǒng)選擇動(dòng)態(tài)顯示方式。6、 時(shí)鐘顯示校正電路本設(shè)計(jì)利用按鍵開(kāi)關(guān)來(lái)校正時(shí)鐘顯示的數(shù)字。當(dāng)按鈕按下時(shí),將在相應(yīng)的端口輸入一個(gè)低電平,通過(guò)相應(yīng)的程序來(lái)改變時(shí)鐘顯示。其中S1按鍵開(kāi)關(guān)用來(lái)選擇要修改的數(shù)字;S2按鍵用來(lái)增加所選數(shù)字的數(shù)值;S3按鍵用來(lái)減少所選數(shù)字的數(shù)值。7、蜂鳴器電路電路接法:三極管選定PNP型,基極B連接5V電壓,發(fā)射極E連接一個(gè)1K左右的電阻后接I/O口,集電極C連接蜂鳴
16、器后接地。單片機(jī)在復(fù)位后的個(gè)I/O口是高電平,此時(shí)三極管是截止的,編寫(xiě)程序使選定的I/O為低電平,此時(shí)三極管導(dǎo)通,導(dǎo)通后蜂鳴器與電源正極連通,構(gòu)成一個(gè)工作回路,從而發(fā)出滴滴的響聲。其中電阻R1在電路里起分壓限流的作用,PNP三極管起到模擬開(kāi)關(guān)的作用。8、外接電源電路外接電源電路用于連接外部5V電源與電子時(shí)鐘電路,通過(guò)自鎖開(kāi)關(guān)控制電路的導(dǎo)通與斷開(kāi),當(dāng)開(kāi)關(guān)閉合時(shí),電路導(dǎo)通,外部電源給電路正常供電,電子時(shí)鐘正常工作。當(dāng)開(kāi)關(guān)斷開(kāi)時(shí),電路停止工作。9、總電路原理圖(五) 軟件部分 根據(jù)上述電子時(shí)鐘的工作流程,軟件設(shè)計(jì)可分為以下幾個(gè)功能模塊:(1)主程序模塊。主程序主要用于系統(tǒng)初始化:設(shè)置計(jì)時(shí)緩沖區(qū)的位置
17、及初值,設(shè)置8155的工作方式、定時(shí)器的工作方式和計(jì)數(shù)初值等參數(shù)。主程序流程如下圖所示。開(kāi)始定義堆棧區(qū)8155、 T0、數(shù)據(jù)緩沖區(qū)、標(biāo)志位初始化調(diào)用鍵盤(pán)掃描程序 否是C/R鍵? 是地址指針指向計(jì)時(shí)緩沖區(qū) 調(diào)用時(shí)間設(shè)置程序 主程序流程圖(2)計(jì)時(shí)模塊。即定時(shí)器0中斷子程序,完成刷新計(jì)時(shí)緩沖區(qū)的功能。系統(tǒng)使用6MHz的晶振,假設(shè)定時(shí)器0工作在方式1,則定時(shí)器的最大定時(shí)時(shí)間為65.536ms,這個(gè)值遠(yuǎn)遠(yuǎn)小于1s。因此本系統(tǒng)采用定時(shí)器與軟件循環(huán)相結(jié)合的定時(shí)方法。設(shè)定時(shí)器0工作在方式1,每隔50ms溢出中斷一次,則循環(huán)中斷20次延時(shí)時(shí)間是1s,上述過(guò)程重復(fù)60次為1分,分計(jì)時(shí)60次為1小時(shí),小時(shí)計(jì)時(shí)24
18、次則時(shí)間重新回到00:00:00。因定時(shí)器0工作在方式1,則50ms定時(shí)對(duì)應(yīng)的定時(shí)器初值為:6553650ms/2us=40536=9E58H,即TH0=9EH,TH0=58H。但應(yīng)當(dāng)指出:CPU從響應(yīng)T0中斷到完成定時(shí)器初值重裝這段時(shí)間,定時(shí)器T0并不停止工作,而是繼續(xù)計(jì)數(shù)。因此,為了確保T0能準(zhǔn)確定時(shí)50ms,重裝的定時(shí)器初值必須加以修正,修正的定時(shí)器初值必須考慮到從原定時(shí)器初值中扣除計(jì)數(shù)器多計(jì)的脈沖個(gè)數(shù)。由于定時(shí)器計(jì)數(shù)脈沖的周期恰好和機(jī)器周期吻合,因此修正量等于CPU從響應(yīng)中斷到重裝完TL0為止所用的機(jī)器周期數(shù)。CPU響應(yīng)中斷通常要38個(gè)機(jī)器周期。經(jīng)過(guò)測(cè)試,定時(shí)器0重裝的計(jì)數(shù)初值設(shè)為9E
19、5FH9E67H,可以滿(mǎn)足精度要求。另外,MCS-51單片機(jī)只有二進(jìn)制加法指令,而時(shí)間是按十進(jìn)制遞增,因此用加法指令后必須進(jìn)行二-十進(jìn)制轉(zhuǎn)換。計(jì)時(shí)模塊流程圖如下圖所示。保護(hù)現(xiàn)場(chǎng)重裝定時(shí)器初值循環(huán)次數(shù)減1否滿(mǎn)20次?是秒單元加1否60s到?是秒單元清0,分單元加1否60分到?是分單元清0,時(shí)單元加1否24小時(shí)到?是時(shí)單元清0恢復(fù)現(xiàn)場(chǎng)返回計(jì)時(shí)模塊流程圖(3)時(shí)間設(shè)置模塊。該模塊由鍵盤(pán)輸入相應(yīng)的數(shù)據(jù)來(lái)設(shè)置當(dāng)前時(shí)間。程序通過(guò)調(diào)用一個(gè)鍵盤(pán)設(shè)置子程序通過(guò)鍵盤(pán)掃描將鍵入的6位時(shí)間值送入顯示緩沖區(qū)。設(shè)置時(shí)間后,時(shí)鐘要從這個(gè)時(shí)間開(kāi)始計(jì)時(shí),而時(shí)分秒單元各占一個(gè)字節(jié),鍵盤(pán)占6個(gè)字節(jié)。因此程序中要調(diào)用一個(gè)合字子程序?qū)?/p>
20、顯示緩沖區(qū)中的6位BCD碼合并為3位壓縮BCD碼,并送入計(jì)時(shí)緩沖區(qū),作為當(dāng)前計(jì)時(shí)起始時(shí)間。該程序同時(shí)要檢測(cè)輸入時(shí)間值的合法性,若鍵盤(pán)輸入的小時(shí)值大于23,分、秒值大于59,則不合法,將取消本次設(shè)置,清零重新開(kāi)始計(jì)時(shí)。時(shí)間設(shè)置和鍵盤(pán)設(shè)置子程序的流程圖如下圖所示。保護(hù)現(xiàn)場(chǎng)調(diào)用鍵盤(pán)設(shè)置子程序KETIN調(diào)用合字子程序COMB恢復(fù)現(xiàn)場(chǎng)返回時(shí)間設(shè)置流程圖保護(hù)現(xiàn)場(chǎng)顯示緩沖區(qū)首地址送R0鍵盤(pán)輸入次數(shù)送R7調(diào)用鍵盤(pán)掃描程序KEYSCAN鍵號(hào)送R0顯示緩沖區(qū)地址加1循環(huán)次數(shù)減1否循環(huán)結(jié)束?是恢復(fù)現(xiàn)場(chǎng)返回鍵盤(pán)設(shè)置子程序流程圖 (4)顯示模塊。該模塊完成時(shí)分秒6位LED的動(dòng)態(tài)顯示。因?yàn)轱@示為6位,二計(jì)時(shí)是3個(gè)字節(jié)單元
21、,為此,必須將3字節(jié)計(jì)時(shí)緩沖區(qū)中的時(shí)分秒壓縮BCD碼拆分為6字節(jié)BCD碼,并送入顯示緩沖區(qū)中。當(dāng)按下調(diào)整時(shí)間鍵后,在6位設(shè)置完成之前,這6個(gè)LED應(yīng)該顯示鍵人的數(shù)據(jù),不顯示當(dāng)前的時(shí)間。為此,我們?cè)O(shè)置了一個(gè)計(jì)時(shí)顯示允許標(biāo)志位F0,在時(shí)間設(shè)置期間F0=1,不調(diào)用刷新顯示緩沖區(qū)的子程序。顯示程序流程圖如下圖所示。保護(hù)現(xiàn)場(chǎng)否允許顯示? 調(diào)用拆字程序 是動(dòng)態(tài)掃描顯示返回顯示程序流程圖掃描鍵盤(pán)否調(diào)用顯示程序 有鍵按下?是調(diào)用顯示程序否有鍵按下?是求取鍵號(hào)返回鍵盤(pán)掃描程序流程圖程序:ORG 0000HAJMP MAINORG 000BHAJMP TIMEORG 0300HMAIN:mov 20h,#00hM
22、OV 21H,#00HMOV 22H,#00HMOV 23H,#00HMOV IP,#02H ;IP,IE初始化MOV IE,#82HMOV TMOD,#01H ;設(shè)定定時(shí)器工作方式?MOV TL0,#0B0HMOV TH0,#3CHSETB TR0 ;啟動(dòng)定時(shí)?MOV SP,#40H ;重設(shè)堆棧指針NEXT: LCALL DISP ;調(diào)用顯示子程序?LCALL KEY ;調(diào)用按鍵檢測(cè)子程序JZ NEXT ;LCALL ANKEY ;調(diào)用按鍵處理子程序SJMP NEXT ;重新循環(huán)NOPNOPNOP;定時(shí)中斷處理程序:TIME: PUSH ACC ;保護(hù)現(xiàn)場(chǎng)PUSH PSWMOV TL0,#0
23、B4H ;賦定時(shí)初值MOV TH0,#3CHINC 20H ;MOV A,20HCJNE A,#20,RETI1MOV 20H,#00H ;一秒鐘時(shí)間到MOV A,21HADD A,#01HDA AMOV 21H,ACJNE A,#60H,RETI1MOV 21H,#00H ;一分鐘時(shí)間到MOV A,22HADD A,#01HDA AMOV 22H,ACJNE A,#60H,RETI1MOV 22H,#00H ;一小時(shí)時(shí)間到MOV A,23HADD A,#01HDA AMOV 23H,ACJNE A,#24H,RETI1MOV 23H,#00H ;到時(shí)間達(dá)到24小時(shí),清零.RETI1: POP
24、 PSW ;恢復(fù)現(xiàn)場(chǎng)POP ACCRETI ;中斷返回?NOPNOP;顯示子程序DISP: ANL 2FH,#10H ;處理小數(shù)點(diǎn)MOV A,21H ;處理秒21H->2DH,2EHANL A,#0FHORL A,2FHMOV 2FH,AMOV A,21HANL A,#0F0HSWAP AMOV 2EH,AANL 2DH,#10HMOV A,22H ;處理分鐘22H->2CH,2DHANL A,#0FHORL A,2DHMOV 2DH,AMOV A,22HANL A,#0F0HSWAP AMOV 2CH,AANL 2BH,#10HMOV A,23H ;處理小時(shí)23H->2AH
25、,2BHANL A,#0FHORL A,2BHMOV 2BH,AMOV A,23HANL A,#0F0HSWAP AMOV 2AH,AMOV R0,#2FH ;顯示偏移量MOV R3,#06HMOV DPTR,#TABLEMOV A,#0BFHLOOP1: MOV B,A ;MOV P2,aMOV A,R0MOVC A,A+DPTRMOV P0,a ;送顯示MOV R2,#80H ;延時(shí)DJNZ R2,$DEC R0MOV A,BRR ADJNZ R3,LOOP1 ;循環(huán)顯示RETTABLE: db 28h,7eh,0a2h,62h,74h,61h,21h ;不帶小數(shù)點(diǎn)DB 7ah,20h,6
26、0h,00,00,00,00,00,00DB 8H,5eH,82H,42H,54H,41H,1H,5aH ;帶小數(shù)點(diǎn)DB 00H,40H,00,00,00,00,00,00NOPNOP;按鍵判斷程序KEY: MOV P3,#0FFH ;MOV A,P3CPL AANL A,#3CHJZ RETX ;無(wú)鍵按下則返回LCALL DISP ;LCALL DISPMOV A,P3CPL AANL A,#3CHJZ RETX ;鍵盤(pán)去抖動(dòng)。MOV R6,A ;將鍵值存入R6。LOOP2: LCALL DISP ;MOV A,P3CPL AANL A,#3CHJNZ LOOP2 ;等待鍵釋放MOV A,R
27、6RETX: RETNOPNOP;按鍵處理子程序ANKEY: CLR EA ;關(guān)中斷LX: MOV A,R6JB ACC.2,L1 ;是功能鍵轉(zhuǎn)L1JB ACC.3,L2 ;是確認(rèn)鍵轉(zhuǎn)L2JB ACC.4,L3 ;是減1鍵轉(zhuǎn)L3JNB ACC.5,L12 ;不是增1鍵,轉(zhuǎn)L12JB 2BH.4,L6 ;判斷使哪一位(時(shí)、分、秒)的值加1JB 2DH.4,L8JB 2FH.4,L9L12: LCALL DISPLCALL DISPLCALL KEY ;判斷有無(wú)鍵按下。JZ L12LJMP LXL2: MOV 25H,#00H ;確認(rèn)鍵處理程序CLR 2BH.4CLR 2DH.4CLR 2FH.4
28、SETB EARETL3: JB 2BH.4,L61 ;增一鍵處理程序JB 2DH.4,L81JB 2FH.4,L91AJMP L12L1: MOV A,25H ;功能鍵處理程序JZ LB1JB ACC.0,LB2JB ACC.1,LB3JNB ACC.2,L12LB1: MOV 25H,#01H ;25H單元是標(biāo)志位,(25H)=01H調(diào)節(jié)時(shí)單元的值SETB 2BH.4CLR 2DH.4CLR 2FH.4AJMP L12LB3: MOV 25H,#04H ;25H單元是標(biāo)志位,(25H)=01H調(diào)節(jié)秒單元的值SETB 2FH.4CLR 2DH.4CLR 2BH.4AJMP L12LB2: M
29、OV 25H,#02H ;25H單元是標(biāo)志位,(25H)=01H調(diào)節(jié)分單元的值SETB 2DH.4CLR 2BH.4CLR 2FH.4AJMP L12L61: AJMP L611 ;L81: AJMP L811 ;L91: AJMP L911L6: MOV A,23H ;時(shí)加一ADD A,#01HDA AMOV 23H,ACJNE A,#24H,L15L15: JC L112MOV 23H,#00HL112: AJMP L12L8: MOV A,22H ;分加一ADD A,#01HDA AMOV 22H,ACJNE A,#60H,L16L16: JC L112MOV 22H,#00HAJMP
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 器械采購(gòu)合同范本
- 持股協(xié)議合同范本
- 觸電模擬演練
- 增強(qiáng)安全意識(shí)預(yù)防校園欺凌
- 智慧港航解決方案
- 水果銷(xiāo)售答辯
- 勤儉節(jié)約安全教育
- 頸椎病的預(yù)防及康復(fù)訓(xùn)練
- 噴灌購(gòu)買(mǎi)合同范本
- 兒童養(yǎng)老合同范本
- 公共機(jī)構(gòu)節(jié)能知識(shí)講座
- 幼小銜接那些事兒
- 代人貸款免責(zé)協(xié)議
- 傷口評(píng)估(測(cè)量)專(zhuān)項(xiàng)考核試題及答案
- 礦山開(kāi)采與環(huán)境保護(hù)
- 質(zhì)子泵抑制劑用藥參考匯總
- 認(rèn)識(shí)飛機(jī)(課堂PPT)
- 江蘇省南通市海門(mén)四校2023-2024學(xué)年八年級(jí)上學(xué)期期中生物試題
- 疼痛評(píng)估:準(zhǔn)確評(píng)估病人疼痛的方法
- 橋式起重機(jī)安全操作培訓(xùn)
- 建筑施工規(guī)范大全
評(píng)論
0/150
提交評(píng)論