版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p><b> 學(xué)號(hào):xxx</b></p><p><b> 姓名:xxx</b></p><p><b> 指導(dǎo)老師:xxx </b></p><p> 題目:定時(shí)鬧鈴LCD&
2、lt;/p><p> 目的:通過本課程設(shè)計(jì)可以學(xué)習(xí)8051定時(shí)器時(shí)間計(jì)時(shí)處理,按鍵掃描及LCD顯示的設(shè)計(jì)方法。</p><p><b> 功能說明:</b></p><p> 定時(shí)鬧鈴的基本功能如下:</p><p> 1,文字型LCD(16x2)顯示。</p><p> 2,顯示格式為“時(shí)
3、時(shí) 分分”。</p><p> 3,由LED閃動(dòng)來做秒計(jì)數(shù)表示。</p><p> 4,具有4個(gè)按鍵來做功能設(shè)置,可以設(shè)置現(xiàn)在的時(shí)間及顯示鬧鈴設(shè)置時(shí)間。</p><p> 程序執(zhí)行后工作指示燈LED閃動(dòng),表示程序開始執(zhí)行,LCD顯示“00 00”,按下操作鍵K1~K4動(dòng)作如下:</p><p> 操作鍵K1:設(shè)置現(xiàn)在的時(shí)間。<
4、;/p><p> 操作鍵K2:顯示鬧鈴設(shè)置時(shí)間。</p><p> 操作鍵K3:設(shè)置鬧鈴時(shí)間。</p><p> 操作鍵K4:鬧鈴ON/OFF的狀態(tài)設(shè)置,設(shè)為ON時(shí)連續(xù)三次發(fā)出嗶的一聲,設(shè)為OFF時(shí)發(fā)出嗶的一聲。</p><p> 設(shè)置現(xiàn)在的時(shí)間或是鬧鈴時(shí)間設(shè)置如下:</p><p> 操作鍵K1:調(diào)整時(shí)。<
5、;/p><p> 操作鍵K2:調(diào)整分。</p><p> 操作鍵K3:設(shè)置完成。</p><p> 時(shí)間到時(shí)發(fā)出一陣聲響,按下K4鍵可以停止聲響。</p><p><b> 控制電路:</b></p><p> 定時(shí)鬧鈴的控制電路分為以下幾部分: </p><p>&
6、lt;b> ? 單片機(jī)8051</b></p><p><b> ? LCD顯示器 </b></p><p><b> ? 按鍵控制 </b></p><p><b> ? 壓電喇叭 </b></p><p> 完整的控制電路圖如下: </p
7、><p><b> LCD接口設(shè)計(jì):</b></p><p> LCD接口可以分為8位及4位控制方式,本課程設(shè)計(jì)使用的是4位控制方式,使用D4~D7數(shù)據(jù)線來傳送控制命令及數(shù)據(jù)。使用4位數(shù)據(jù)線做控制時(shí)需分兩次來傳送,先送出高4位數(shù)據(jù),再送出低4位數(shù)據(jù)。 </p><p> 4為控制電路如圖所示:</p><p> 以8
8、051 P0的6條輸出控制線來實(shí)現(xiàn)控制,P0還接有提升電阻以增加其驅(qū)動(dòng)能力,控制信號(hào)說明如下: </p><p> ?。?)R/W LCD讀寫控制線 </p><p> 直接接地,由于R/W=0時(shí),LCD執(zhí)行寫入的動(dòng)作,R/W=1時(shí)則執(zhí)行讀取的動(dòng)作。因此簡(jiǎn)化設(shè)計(jì)后,則無法對(duì)LCD實(shí)現(xiàn)讀取動(dòng)作。所有控制數(shù)據(jù)的寫入需加入適當(dāng)?shù)难舆t ,以配合LCD內(nèi)部控制信號(hào)的執(zhí)行 </p>
9、;<p> (2)RS 寄存器選擇控制線 </p><p> 由P0.0控制,當(dāng)RS=0時(shí),可以寫入指令寄存器,如果RS=1則寫入數(shù)據(jù)寄存器。 </p><p> ?。?)EN 啟用控制線 </p><p> 由P0.1控制,高電平動(dòng)作。高電平時(shí)LCD動(dòng)作啟用有效。 </p><p> ?。?)VO 亮度調(diào)整控制引腳 &l
10、t;/p><p> 直接接地,是字符顯示最亮。 </p><p> ?。?)D0~D7 雙向的數(shù)據(jù)總線 </p><p> LCD 數(shù)據(jù)讀寫方式以4為方式進(jìn)行寫入,只用到D7~D4,分別由P0.7~P0.4控制。</p><p><b> 壓電喇叭:</b></p><p> 在IO51單板上
11、8051端口3的第4位(P3.4)是壓電喇叭的驅(qū)動(dòng)位,持續(xù)送出工作脈沖可以推動(dòng)喇叭發(fā)出嗶的響聲,當(dāng)工作頻率越高時(shí),聲音越清脆,工作頻率低時(shí),聲音則較低沉,太低的工作頻率則無法使喇叭發(fā)出聲音.</p><p><b> 按鍵:</b></p><p> 按鍵采用低電平有效,由于本設(shè)計(jì)中接8051的片P2.7~p2.4口,已有內(nèi)部上拉電阻,故外電路無需加上拉電阻,斷開
12、時(shí)表現(xiàn)為高電平,當(dāng)閉合時(shí),為低電平,則該按鍵有效。</p><p><b> 匯編環(huán)境:</b></p><p> 8051匯編編譯器:KEIL匯編編譯器</p><p> 主程序控制的工作流程:</p><p><b> N</b></p><p><b>
13、; Y</b></p><p><b> 程序清單</b></p><p><b> 引腳定義</b></p><p> K1:ADJ TIME K2:HOUR K3:MIN K4:OK</p><p> ;定時(shí)器0及時(shí)中斷程序每隔5ms中斷一次</p>
14、<p> ;MOV TL0,#(8192-5000).MOD.32</p><p> ;MOV TH0,#(8192-5000)/32</p><p><b> LO EQU 24</b></p><p><b> HI EQU 99</b></p><p><b>
15、;</b></p><p> CO EQU 200 ;5ms中斷計(jì)數(shù)時(shí)間常數(shù), 計(jì)數(shù)200次表示1s</p><p> ALB EQU 20H.0 ;鬧鐘設(shè)置標(biāo)志</p><p> HOUR EQU 30H ;存放小時(shí)變量</p><p> MIN EQU 31H ;存放分
16、鐘變量</p><p> SEC EQU 32H ;存放秒鐘變量</p><p> DEDA EQU 33H ;5ms計(jì)數(shù)器</p><p> SECO EQU 34H ;存放舊的秒數(shù)</p><p> X EQU 35H ;LCD位置變量</p><p>
17、; HH EQU 36H ;加載低字節(jié)</p><p> MM EQU 37H ;加載高字節(jié)</p><p><b> ;</b></p><p><b> ;KEY4</b></p><p> K1 EQU P2.4 ;按鍵1引腳定義</
18、p><p> K2 EQU P2.5 ;按鍵2引腳定義</p><p> K3 EQU P2.6 ;按鍵3引腳定義</p><p> K4 EQU P2.7 ;按鍵4引腳定義</p><p> ;LCD控制信號(hào)引腳定義</p><p> RS EQU P0.0
19、 ;LCD RS 引腳定義</p><p> EN EQU P0.1 ;LCD EN 引腳定義</p><p> SPK EQU P3.4 ;壓電喇叭信號(hào)</p><p> WLED EQU P3.7 ;工作指示燈引腳定義</p><p><b> ;</b></p>
20、;<p> ORG 0H ;程序代碼由地址0開始執(zhí)行</p><p><b> JMP START</b></p><p> ORG 0BH ;定時(shí)器0中斷地址設(shè)置</p><p> JMP T0_INT</p><p><b> ;</b
21、></p><p><b> START:</b></p><p> CLR EN ;LCD OFF</p><p> CLR ALB ;消除鬧鈴標(biāo)志</p><p> MOV HH,#1 ;內(nèi)定鬧鈴時(shí)間為1h</p><p
22、> MOV MM,#I ;內(nèi)定鬧鈴時(shí)間為1 min</p><p> CALL SET_LCD ;LCD 初始化</p><p><b> CALL BZ</b></p><p><b> CALL BZ</b></p><p> CALL L
23、ED_BL ;LCD 閃動(dòng),表示程序開始執(zhí)行 </p><p> CALL INIT ;初始變量 </p><p> CALL INIT_TIMER ;初始化定時(shí)器</p><p> CALL MENU</p><p><b> 按鍵掃描子程序</b>&
24、lt;/p><p> LOOP: ;無窮循環(huán)</p><p> CALL TIME_PRO ;時(shí)間計(jì)時(shí)處理 </p><p> ;TEST KEY</p><p> JB K1 ,L1 ;未按下K1鍵則繼續(xù)掃描</p><p> ;K
25、1 KEYED..........</p><p> CALL BZ </p><p> MOV DPTR,#MADJ ;顯示執(zhí)行消息</p><p><b> MOV A,#1</b></p><p> CALL LCD_PRINT </p&
26、gt;<p> CALL SET_TIME ;設(shè)置目前時(shí)間</p><p> CALL MENU</p><p><b> JMP LOOP</b></p><p> L1: JB K2,L2 ;未按下K2 鍵則繼續(xù)掃描</p><p> ;K2
27、 KEYED</p><p> CALL BZ </p><p> MOV DPTR, #MLAL ;顯示執(zhí)行消息</p><p> MOV A, #1</p><p> CALL LCD_PRINT </p><p> CALL LOOK_ATIM
28、E ;顯示鬧鈴時(shí)間</p><p> CALL LED_BL</p><p> CALL LED_BL</p><p> CALL MENU</p><p><b> JMP LOOP</b></p><p><b> ;</b></p
29、><p> L2: JB K3,L3 ;未按下K3鍵則繼續(xù)掃描</p><p> JNB K3,$ ;等K3鍵放開</p><p> ;K3 KEYED</p><p><b> CALL BZ</b></p><p>
30、 MOV DPTR,#MAADJ</p><p><b> MOV A,#1</b></p><p> CALL LED_PRINT</p><p> CALL SET_ATIME ;設(shè)置鬧鈴時(shí)間</p><p> CALL LED_BL</p><p>
31、 CALL LED_BL</p><p><b> CALL MENU</b></p><p><b> JMP LOOP</b></p><p><b> ;</b></p><p> L3: JB K4,L4 ;未按下K4鍵則繼
32、續(xù)掃描</p><p> ;K4 KEYED ALARM ALB ON/OFF</p><p><b> CPL ALB</b></p><p> JNB ALB, L31</p><p> ;ALARM ON ;鬧鈴啟動(dòng)</p>
33、<p><b> CALL BZ</b></p><p><b> CALL BZ</b></p><p><b> CALL BZ</b></p><p><b> JMP LOOP</b></p><p><b> L3
34、1:</b></p><p> ;ALARM OFF ;鬧鈴未啟動(dòng)發(fā)出一聲響</p><p><b> CALL BZ</b></p><p><b> JMP LOOP</b></p><p><b> L4:</b><
35、;/p><p><b> JMP LOOP</b></p><p> LMESSI1: DB"PCLL IO51 CLCOK",0</p><p> LMESSI2: DB"TIME: ",0</p><p> TITLE: DB"PCLL.ASM
36、8051 CLOCK WITH LCDCK WITH LCD+ALARM+BZ"</p><p><b> 初始化程序 </b></p><p> INIT: ;初始化控制變量</p><p> MOV DEDA,#0 ;5ms計(jì)數(shù)器清除為0<
37、/p><p> MOV SECO,#0 ;舊的秒數(shù)清除為0</p><p> MOV SEC,#0 ;秒的變量清除為0 </p><p> MOV MIN,#0 ;分鐘變量清除為0</p><p> MOV HOUR,#0
38、 ;小時(shí)變量清除為0 </p><p><b> RET </b></p><p> INT_TIME: ;初始化定時(shí)器接口,使用定時(shí)器0 模式0計(jì)時(shí)</p><p> MOV TMOD,#00000000B ;設(shè)置定時(shí)器0工作模式為0 </p><p> MOV IE
39、,#10000010B ;啟動(dòng)定時(shí)器0中斷產(chǎn)生</p><p> MOV TL0,#LO ;加載低字節(jié)</p><p> MOV THO,#H1 ;加載高字節(jié)</p><p> SETB TR0 ;啟動(dòng)定時(shí)器0開始計(jì)時(shí)&
40、lt;/p><p><b> RET</b></p><p><b> 計(jì)時(shí)程序</b></p><p> USE TIMER MODE 0 </p><p> COUNT=5ms/0.001ms=5000 </p><p> T0_I
41、NT: ;定時(shí)器0中斷程序每隔5ms中斷一次</p><p> PUSH ACC ;將累加器放入堆棧</p><p> MOV TL0,#L0 ;加載低字節(jié)</p><p> MOV TH0,#H1 ;加
42、載高字節(jié) </p><p> INC DEDA ;5s計(jì)數(shù)值加1 </p><p> 1 SEC TIME OUT CHECK</p><p> MOV A,DEDA</p><p> CJNE A,#CO, TT ;一秒是否到了 </p>
43、;<p> MOV DEDA, #0 ;計(jì)數(shù)值清除為0</p><p> CPL WLED ;LED燈亮滅變換</p><p> INC SEC ;秒計(jì)數(shù)加1</p><p> MOV A,SEC
44、 </p><p> CJNE A,#60,TT ;是否1min到了?</p><p> 1 MIN TIME OUT </p><p> INC MIN ;分計(jì)數(shù)加1</p><p&g
45、t; MOV SEC,#0 ;秒計(jì)數(shù)清零</p><p> MOV A,MIN </p><p> CJNE A,#60,TT ;是否1h到了? </p><p> 1 HOUR TIME OUT</p><p> INC HOUR
46、 ;小時(shí)計(jì)數(shù)加1</p><p> MOV MIN,#0 ;分計(jì)數(shù)清零</p><p> MOV A,HOUR </p><p> CJNE A#24,TT ;是否24h到了? <
47、;/p><p> MOV SEC,#0 ;秒鐘變量清除為0</p><p> MOV MIN,#0 ;分鐘變量清除為0</p><p> MOV HOUR,#0 ;小時(shí)變量清除為0</p><p><
48、b> TT:</b></p><p> POP ACC ;將累加器由堆棧取出</p><p><b> RETI</b></p><p> ;K2:HH K3:MM K4:OK ;設(shè)置目前時(shí)間</p><p>
49、<b> SET_TIME</b></p><p> CLR TRO ;定時(shí)器動(dòng)作暫停</p><p> Mov sec,#0 ;秒鐘變量清除為0</p><p> ?。籗CAN 3 KEY TO ADJ;。。。。</p>
50、<p><b> SO:</b></p><p> JB K2,S1 ;未按下K2鍵繼續(xù)掃描 </p><p> ;K1 KEYED ADJ HH 。。。。 ;小時(shí)調(diào)整</p><p> CALL BZ
51、 ;發(fā)出嗶的一聲 </p><p> INC HOUR ;小事計(jì)數(shù)加1 </p><p> MOV A ,HOUR </p><p> CJNE A ,# 24,S11 ;是否24小時(shí)到了?</p><p> MOV HOUR ,# 0
52、 ;小時(shí)變量清除為零</p><p><b> S11</b></p><p> CALL CONV ;轉(zhuǎn)換數(shù)據(jù)至LCD </p><p> MOV R5 ,#20 ;延遲一下</p>
53、<p> CALL DELAY </p><p> JMP S0 ;繼續(xù)程序執(zhí)行 </p><p><b> ;……………………</b></p><p> S1:JB K3 ,S2 ;未按下K3鍵則繼續(xù)掃描
54、 </p><p> ;K2 KEYED ADJ MM………….. ;分鐘調(diào)整</p><p><b> CALL BZ </b></p><p> INC MIN ;分鐘計(jì)數(shù)器加1</p><p> MOV A,MIN
55、 </p><p> CJNE A ,#60 S21 ;是否60min到了?</p><p> MOV MIN ,#0 ;分計(jì)數(shù)器清0</p><p><b> S21:</b></p><p> CALL CONV
56、 ;轉(zhuǎn)換顯示數(shù)據(jù)到LCD</p><p> MOV R5,#20 ;延遲一下</p><p> CALL DELA; </p><p> JMP SO ;繼續(xù)執(zhí)行</p><p>
57、;<b> ;……………..</b></p><p> S2:JB K4 ,SO ;未按下K3鍵則繼續(xù)掃描</p><p> JNB K4 ,S ;有按下則等待放開</p><p> K3 KEYED OK …..
58、 ;設(shè)置完成</p><p><b> CALL BZ </b></p><p><b> CALL BZ </b></p><p> SETB TRO ;啟動(dòng)定時(shí)器</p><p><b> RET <
59、/b></p><p><b> ………………</b></p><p> ;A:DIG X:LCD X POS ;在LCD第一行顯示數(shù)字</p><p> ;SHOW ON LCD LINE1</p><p> SHOW_DIG: </p><p&g
60、t; MOV B ,#10 ;設(shè)置被除數(shù)</p><p> DIV AB ;除法運(yùn)算,結(jié)果A存除數(shù),B存余數(shù)</p><p> ADD A ,#30H ;A為十進(jìn)制,轉(zhuǎn)換為字符</p><p> PUSH B
61、 ;B放入堆棧暫存</p><p> MOV B ,X ;設(shè)置LCD顯示的位置</p><p> CALL LCDP1 ;由LCD顯示出來</p><p> POP B ;B有堆棧取出來</p><p> MOV A
62、,B ;B為個(gè)位數(shù)</p><p> ADD A ,#30H ;轉(zhuǎn)換為字符</p><p> INC X ;LCD顯示位置加1</p><p> MOV B,X ;設(shè)置LCD顯示位置</p>
63、<p> CALL LCDP1 ;由LCD顯示出來</p><p><b> RET</b></p><p><b> ;……………..</b></p><p> ;A:DIG X:LCD X POS</p><p> ;SHOW_D
64、IG2:</p><p><b> MOV B,#10</b></p><p><b> DIV AB </b></p><p> ADD A,#30H</p><p><b> INC X </b></p><p><b> MOV
65、 B ,X</b></p><p> CALL LCDP2</p><p><b> RET</b></p><p><b> ;………………</b></p><p> ;顯示現(xiàn)在的時(shí)間 時(shí)時(shí):分分:秒秒 數(shù)據(jù)</p><p> ;CONVERT TO
66、ASCII AND SHOW </p><p><b> CONV:</b></p><p> ;SHOW HOUR ….. ;顯示小時(shí)數(shù)</p><p> MOV A ,HOUR</p><p><b> MOV X ,#5</b></p>
67、<p> CALL SHOW _DIG2</p><p><b> INC X</b></p><p> MOV A,#’:’</p><p><b> MOV B ,X</b></p><p> CALL LCDP2</p><p> ;SHOW M
68、IN ……………. ;顯示分鐘數(shù)據(jù)</p><p> MOV A ,MIN</p><p><b> INC X </b></p><p> CALL SHOW_DIG2</p><p><b> INC X </b></p><p> M
69、OV A,#’:’</p><p><b> MOV B, X </b></p><p> CALL LCDP2</p><p> ;SHOW SEC………………. ;顯示時(shí)間秒數(shù)</p><p> MOV A ,SEC</p><p><b>
70、 INC X</b></p><p> CALL SHOW_DIG2</p><p><b> RET</b></p><p> INIT_LCD1: ;LCD控制指令初始化</p><p> MOV A,#28H ;雙行顯示,字符使
71、用5*7點(diǎn)陣</p><p> CALL WCOM </p><p> MOV A,#0CH ;光標(biāo)出現(xiàn),不閃爍</p><p> CALL WCOM</p><p> MOV A,#0EH ;每向右移動(dòng)一位,顯示屏不移動(dòng)<
72、/p><p> CALL WCOM</p><p> MOV A#01H ;清除LCD顯示屏</p><p> CALL WCOM </p><p><b> RET</b></p><p> ;---------------------------
73、--------</p><p> CLR_LINE1 ;清除LCD的第一行字符</p><p> MOV A,#80H ;設(shè)置第一行地址</p><p> CALL WCOM </p><p> MOV R0 ,#24
74、 ;設(shè)置計(jì)數(shù)器</p><p> C1:MOV A,#’’ ;載入空格符至LCD</p><p> CALL WDATA ;輸出字符至LCD</p><p> DJNZ R0 ,C1 ;計(jì)數(shù)結(jié)束</p><
75、p><b> RET</b></p><p> ;--------------------------------</p><p> ;A=LIEN 1 OR 2 ;在LCD的第一行或第二行顯示字符</p><p> ;DPTR=MESSAGE POINTER </p><
76、;p> LCD_PRINT:</p><p> CJNE A ,#1,LINE2 ;判斷是否是第一行</p><p> LINE1: MOV A,#80H ;設(shè)置LCD的第一行地址</p><p> CALL WCOM ;寫入命令</p>
77、<p> CALL CLR_LINE ;清除該行字符數(shù)據(jù)</p><p> MOV A,#80H ;設(shè)置LCD的第一行地址</p><p> CALL WCOM ;寫入命令</p><p><b> JMP FILL
78、</b></p><p> LINE2: MOV A,#OCOH</p><p> CALL WCOM </p><p> CALL CLR_LINE</p><p> MOV A,#OCOH</p><p><b> CALL WCOM</b></p><
79、;p> FILL: ;填入字符</p><p><b> CLR A </b></p><p> MOVC A ,@A+DPTR ;由消息區(qū)取出字符</p><p> CJNE A#0,LC1 ;判斷是否是結(jié)束碼<
80、;/p><p><b> RET</b></p><p><b> LC1:</b></p><p> CALL WDATA ;寫入數(shù)據(jù)</p><p> INC DPTR ;指針加1</p>&
81、lt;p> JMP FILL ;繼續(xù)填入字符</p><p> RET </p><p> ;--------------------------------</p><p> CLR_LINE: ;清除該行LCD字符</p>&l
82、t;p> MOV R0,#24 </p><p> CL1: MOV A,#’’ </p><p> CALL WDATA</p><p> DJNZ R0, CL1</p><p><b> RET</b></p><p> ;-------------
83、------------------- </p><p> DE:MOV R7,#5 ;短暫延時(shí)</p><p> DJNZ R7,#5 </p><p><b> DJNZ R7,$</b></p><p><b> RET</b></p>
84、<p> ;-------------------------</p><p> EN1: ;短脈沖產(chǎn)生啟用信號(hào)</p><p><b> SETB EN</b></p><p><b> CALL DE</b></p><
85、;p><b> CLR EN</b></p><p><b> CALL DE</b></p><p><b> RET</b></p><p> INIT_LCD: ;4位I/O控制LCD接口初始化</p><p&g
86、t; MOV PO,#30H ;RS=0 R/W=0 D7~D4=0011</p><p> CALL EN1 </p><p> MOV PO ,#30H</p><p><b> CALL EN1</b></p><p>
87、MOC PO,#30H</p><p><b> CALL EN1</b></p><p> MOV PO ,#20H ;啟動(dòng)4位接口指令</p><p><b> CALL EN1</b></p><p> CALL INIT_LCD1
88、 ;LCD指令設(shè)置初始化</p><p><b> RET</b></p><p> ;-----------------------</p><p> WCOM: ;以4位控制方式將命令寫至LCD</p><p> ;WRITE HI 4BI
89、T ;寫入高4位數(shù)據(jù)</p><p> MOV PO , A</p><p> CLR RS ;設(shè)置寫入命令</p><p><b> CALL EN1</b></p><p> RLC A
90、 ;左移4位</p><p><b> RLC A</b></p><p><b> RLC A</b></p><p><b> RLC A</b></p><p> ;WRITE LO 4 BIT ;寫入低4
91、位</p><p><b> MOV PO,A</b></p><p> CLR RS;SET COMMAN ;設(shè)置寫入命令</p><p><b> CALL EN1</b></p><p><b> RET</b></p>
92、<p><b> ;</b></p><p> WDATA: ;以4位控制方式將數(shù)據(jù)寫入LCD</p><p> ;WRITE HO 4 BIT ;寫入高4位數(shù)據(jù)</p><p> MOV PO,A </p>&
93、lt;p> SETB RS ;設(shè)置寫入數(shù)據(jù)</p><p><b> CALL EN1</b></p><p><b> RLC A</b></p><p> RLC A ;左移4位</p&g
94、t;<p><b> RLC A</b></p><p><b> RLC A</b></p><p> ;WRITE LO 4 BIT</p><p><b> MOV PO,A</b></p><p> SETB RS
95、 ;設(shè)置寫入數(shù)據(jù)</p><p><b> CALL EN1</b></p><p><b> RET</b></p><p><b> ;</b></p><p> ;PRINT A CHAR ON LCD LINE 1 </p>
96、<p> ;A=ASC DATA</p><p> ;B=LINE X POS.</p><p> LCDP1: ;在第一行顯示字符</p><p><b> ;LINE 1</b></p><p> PUSH ACC
97、 ;將A放入堆棧</p><p> MOV A,B ;設(shè)置現(xiàn)實(shí)的地址</p><p> ADD A,#80H ;設(shè)置LCD第一行地址</p><p> CALL WCOM ;寫入命
98、令</p><p> POP ACC ;由堆棧取出A</p><p> CALL WDATA ;寫入數(shù)據(jù)</p><p><b> RET</b></p><p><b> ;</b>&
99、lt;/p><p> ;PRINT A CHAR ON LCD LINE 2</p><p> ;A=ASC DATA</p><p> ;B=LINE X POS.</p><p><b> LCDP2:</b></p><p><b> ;LINE 1</b><
100、;/p><p><b> PUSH ACC</b></p><p><b> MOVE A,B</b></p><p> ADD A,#0C0H</p><p><b> CALL WCOM</b></p><p><b> POP AC
101、C</b></p><p> CALL WDATA</p><p><b> RET</b></p><p><b> ;</b></p><p> ;DELAY R5*10ms ;延遲子程序</p><p>
102、DELAY: ;總延遲時(shí)間R5*10ms</p><p> MOV R6,#50 </p><p> D1:MOV R7,#100</p><p><b> DJNZ R7,$</b></p><p> DJNZ R6,D1</p><
103、;p> DJNZ R5,DELAY</p><p><b> RET</b></p><p><b> ;</b></p><p> LED_BL ;工作指示燈閃爍</p><p><b> MOV R4,#4<
104、;/b></p><p> LEO:CPL WLED ;位相反</p><p> MOV R5,#10 ;延遲100ms</p><p> CALL DELAY</p><p> DJNZ R4,LE0</p><
105、;p><b> RET</b></p><p> MMENU:DB"1-SET 2-AL 3-SAL",0 ;LCD顯示數(shù)據(jù)</p><p> MADJ:DB"K2:H K3:M K4:OK",0</p><p> MLAL:DB"NOW ALARM TIME:&
106、quot;,0</p><p> MAADJ:DB"K2 K3:M K4:OK",0</p><p> MENU: ;LCD顯示菜單</p><p> MOV DPTR,#MMENU</p><p><b> MOV A,#1</b>
107、</p><p> CALL LCD_PRINT</p><p><b> RET</b></p><p><b> ;</b></p><p> BZ: ;壓電喇叭發(fā)出嘩的一聲</p><p><
108、;b> MOV R6,#0</b></p><p> BI:CALL DEX</p><p><b> CPL,SPK</b></p><p> DJNZ R6,B1</p><p> MOV R5,#10 </p><p&
109、gt; CALL DELAY</p><p><b> RET</b></p><p><b> ;</b></p><p> DEX:MOV R7,#180 ;短暫延遲</p><p><b> DE1:NOP</b>&l
110、t;/p><p> DJNZ R7,DE1</p><p><b> RET</b></p><p><b> ;</b></p><p> ;LOOK ALARM TIME ;查看已設(shè)置的鬧鐘時(shí)間</p><p> LOOK_
111、ATIME:</p><p> ;SHOW HOUR............. ;顯示小時(shí)數(shù) </p><p><b> MOV A,HH</b></p><p><b> MOV X,#5</b></p><p> CALL SHOW_DIG
112、2</p><p><b> INC X</b></p><p> MOV A,#':'</p><p><b> MOV B,X</b></p><p> CALL LCDP2</p><p> ;SHOW MIN.........
113、 ;顯示分鐘數(shù)</p><p><b> MOV A,MM</b></p><p><b> INC X</b></p><p> CALL SOW_DIG2</p><p><b> INC.X</b></p><
114、p> MOV A,#':'</p><p><b> MOV B,X</b></p><p> CALLL CDP2</p><p> SHOW SEC……………….. ;顯示秒鐘數(shù)為0</p><p><b> MOV A,#0 <
115、;/b></p><p><b> INC X</b></p><p> CALL SHOW_DIG2</p><p><b> RET</b></p><p><b> 鬧鐘時(shí)間設(shè)置</b></p><p> K2:HH K3:MM K
116、4:OK ;顯示鬧鐘時(shí)間</p><p> SET_ATIME:</p><p> CALL LOOK_ATIME ;加載鬧鐘時(shí)間數(shù)據(jù)</p><p> SCEAN 3 KEY TO ADJ………………….</p><p><b>
117、ASO:</b></p><p> JB K2,AS1 ;未按下K2繼續(xù)掃描</p><p> K1 KEYED ADJ HH……. ;調(diào)整小時(shí)</p><p><b> CALL BZ</b></p><p&
118、gt;<b> INC HH</b></p><p><b> MOV A,HH</b></p><p> CJNE A,#24,AS11 ;是否24h到了?</p><p> MOV HH,#0 ;小時(shí)清零&l
119、t;/p><p><b> AS11:</b></p><p> CALL LOOK_ATIME ;加載鬧鐘數(shù)據(jù)到LCD</p><p> MOV R5,#20 ;延遲一下</p><p> CALL DELAY</p>
120、;<p> JMP ASO </p><p> ………………………………………………..</p><p> AS1: JB K3,AS2 </p><p> K2 KEYED ADJ MM…….</p><p><b>
121、CALL BZ</b></p><p><b> INC MM</b></p><p><b> MOV A,MM</b></p><p> CJNE A,#60,AS21</p><p><b> MOV MM,#0</b></p><
122、p><b> AS21:</b></p><p> CALL LOOK_ATIME</p><p> MOV R5,#20</p><p> CALL DELAY</p><p><b> JMP ASO</b></p><p> …………………………………
123、…………………….</p><p> AS2: JB K4,AS0 ;未按下K4鍵則繼續(xù)掃描</p><p> JNB K4,$ ;燈K4鍵放開</p><p> K3 KEYED OK………………………….</p><p><b&
124、gt; CALL BZ</b></p><p><b> CALL BZ</b></p><p><b> RET</b></p><p> --------------------------------------------------------</p><p> JB
125、 ALB,TI3</p><p><b> RET</b></p><p><b> TI:</b></p><p> CHECK ALARM………………….. ;檢查鬧鐘時(shí)間是否到了</p><p> MOV A,HOUR </p><p>
126、<b> MOV B,HH</b></p><p> CJNE A,B,BK ;檢查鬧鐘小時(shí)時(shí)間</p><p><b> MOV A,MIN</b></p><p><b> MOV B,MM</b></p><p>
127、 CJNE A,B,BK ;檢查鬧鐘分鐘時(shí)間</p><p> TIME MATCH……………………..</p><p> CALL TIME_OUT ;執(zhí)行檢查鬧鐘時(shí)間到了處理</p><p><b> BK: </b></p><p&
128、gt;<b> RET</b></p><p> ---------------------------------------------------- </p><p> TIME_OUT: ;所設(shè)時(shí)間到了</p><p> M1: CALL LED_BL
129、 ;LED閃動(dòng)</p><p> CALL BZ </p><p> KEY 4 STOP………………. </p><p> JB K4,M1 ;等待是否按下K4鍵</p><p> JNB K4,$ ;有
130、按下則等待放開</p><p> CALL LED_BL ;LED閃動(dòng)</p><p> CLR ALB ;清除鬧鈴位</p><p><b> RET </b></p><p> ----------------------
131、----------------------------------- </p><p><b> END</b></p><p><b> 英文: 89c51</b></p><p> Pin Description</p><p><b> VCC</b></
132、p><p> Supply voltage.</p><p><b> GND</b></p><p><b> Ground.</b></p><p><b> Port 0</b></p><p> Port 0 is an 8-bit ope
133、n drain bidirectional I/O port. As an</p><p> output port each pin can sink eight TTL inputs. When 1s</p><p> are written to port 0 pins, the pins can be used as highimpedance</p><p
134、><b> inputs.</b></p><p> Port 0 may also be configured to be the multiplexed loworder</p><p> address/data bus during accesses to external program</p><p> and dat
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)---- lcd電子定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)—帶有l(wèi)cd的定時(shí)鬧鐘
- 單片機(jī)課程設(shè)計(jì)--帶有l(wèi)cd顯示的定時(shí)鬧鐘
- 基于單片機(jī)的定時(shí)鬧鈴設(shè)計(jì)開題報(bào)告
- 單片機(jī)課程設(shè)計(jì)--定時(shí)插座
- lcd單片機(jī)原理課程設(shè)計(jì)
- 單片機(jī)定時(shí)鬧鐘課程設(shè)計(jì)
- 單片機(jī)在定時(shí)鬧鈴中的應(yīng)用
- lcd顯示設(shè)計(jì)單片機(jī)課程設(shè)計(jì)
- 單片機(jī)定時(shí)鬧鐘課程設(shè)計(jì)
- 定時(shí)鬧鐘—單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)—定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)—定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--定時(shí)鬧鐘設(shè)計(jì)
- 單片機(jī)lcd系統(tǒng)顯示課程設(shè)計(jì)
- 數(shù)字鐘單片機(jī)課程設(shè)計(jì)-- lcd顯示的定時(shí)鬧鐘制作
- 課程設(shè)計(jì)--單片機(jī)定時(shí)鬧鐘設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)---定時(shí)鬧鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的定時(shí)鬧鐘設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論