該系�(tǒng)�(nèi)�(shè)有一服務(wù)器,該服�(wù)器透過�(wǎng)�(luò)與一個以上的自動打鈴裝置及工作站相連接,該服務(wù)器及打鈴裝置中分別設(shè)有一時鐘芯片(RTC),該等時鐘芯片系用來產(chǎn)生時間訊息,�(dāng)該打鈴裝置透過�(wǎng)�(luò)定時將時鐘芯片(RTC)所�(chǎn)生之時間訊息傳送至服務(wù)器時,該服務(wù)器在接收到該時間訊息,會將本身時鐘芯片所�(chǎn)生之時間訊息與之比較,若不符,則將其所�(chǎn)生之時間訊息回饋至各打鈴裝置�,使各打鈴裝置之時間訊息�(tǒng)一,而使所�(shè)定之打鈴時間亦統(tǒng)一,本系統(tǒng)具有打鈴時間�(tǒng)一、設(shè)備維�(hù)方便的優(yōu)�(diǎn)�
?�?)基本計時和顯示功能(�12小時制顯�)。包括上下午�(biāo)�,時、分的數(shù)字顯�,秒信號指示�
?�?)能�(shè)置當(dāng)前時�(含上、下�,時,分)
?�?)能�(shí)�(xiàn)基本打鈴功能,規(guī)定:
上午6�00起床鈴:打鈴5�、停2�、再打鈴5秒�
下午10�30熄燈鈴:打鈴5�、停2�、再打鈴5��
鈴聲可用小喇叭播�,凡是用到鈴聲功能的均按此處��
?�?)增加整�(diǎn)報時功能,整�(diǎn)時響�5�,要求有控制啟動和關(guān)閉功��
?�?)增加調(diào)整起床鈴、熄燈鈴時間的功��
�3)增�(shè)上午4節(jié)課的上下課打鈴功�,規(guī)定如下:
7�30 上課�8�20下課�8�30上課�9�20下課�9�40 上課�10�30下課�10�40上課�11�30下課;每次鈴�5��
程序簡要說明
1)�(shí)�(xiàn)24小時制電子鐘�8位數(shù)碼管顯示,顯示時分秒
2)顯示格式�23-59-59(小時十位如果為0則不顯示�
3)到預(yù)定時間啟動蜂鳴器模擬打鈴,蜂鳴器BEEP:P3.7
4)打鈴方式分起床、熄燈鈴和上、下課鈴兩種
5)系統(tǒng)使用4只按鍵,3只按鍵用來調(diào)整時�,另一只為�(qiáng)制打鈴按�
6)�(diào)整選擇鍵SET[_]KEY:P1.0;通過選擇鍵選擇調(diào)整位,選中位閃爍
7)增加鍵ADD[_]KEY:P1.1;按一次使選中位加1
8)減少鍵DEC[_]KEY;P1.2;按一次使選中位減1
9)如果長按ADD[_]KEY或DEC[_]KEY,識別后則�(jìn)行調(diào)時快�(jìn),此時停止閃�
10)如果選中位是�,則按增加鍵或減少鍵都是將秒清零
11)�(qiáng)制打鈴鍵DALING[_]KEY:P1.3;用來強(qiáng)制打鈴或�(qiáng)制關(guān)閉鈴�
12)P0口輸出數(shù)碼管段選信號,P2口輸出數(shù)碼管位選信號。晶�12M
源程�
BEEP EQU P3.7 ;定義蜂鳴器(電鈴)控制信號輸出口
ORG 0000H ;程序入口地址
LJMP START
ORG 000BH ;定時�0中斷入口地址
LJMP TIMER[_]0
ORG 0300H
/*****程序開始,初始化*****/
START:
SETB BEEP ;�(guān)閉蜂鳴器(電鈴)
SETB 48H ;使用一個bit位用于調(diào)時閃爍標(biāo)�
SETB 47H ;使用一個bit位用于產(chǎn)生脈沖用于調(diào)時快�(jìn)時基
CLR 45H ;�(guān)閉響鈴方�1�(biāo)�
CLR 44H ;�(guān)閉響鈴方�2�(biāo)�
MOV R1,#0 ;�(diào)整選擇鍵功能�(biāo)志:0正常走時�1�(diào)��2�(diào)��3�(diào)�
MOV 20H,#00H ;用于控制秒基�(zhǔn)時鐘源的�(chǎn)�
MOV 21H,#00H ;清零秒寄存器
MOV 22H,#00H ;清零分寄存器
MOV 23H,#00H ;清零時寄存器
MOV 24H,#00H ;用于控制�(diào)時閃爍的基準(zhǔn)時鐘的產(chǎn)�
MOV IP,#02H ;IP,IE初始�
MOV IE,#82H
MOV TMOD,#01H ;�(shè)定定時器0工作方式1
MOV TH0,#3CH
MOV TL0,#0B0H ;賦定時初值,定時50ms
SETB TR0 ;啟動定時�
MOV SP,#40H ;重設(shè)堆棧指針
/*****主程�*****/
MAIN:
CJNE R1,#00H,MAIN1 ;是否為正常走時狀�(tài)
LCALL BIJIAO1 ;�(diào)用起�、熄燈打鈴比較子程序
LCALL BIJIAO2 ;�(diào)用上、下課打鈴比較子程序
LCALL DALING1 ;�(diào)用響鈴方�1�(zhí)行子程序
LCALL DALING2 ;�(diào)用響鈴方�2�(zhí)行子程序
MAIN1:
LCALL DISPLAY ;�(diào)用顯示子程序
LCALL KEY[_]SCAN ;�(diào)用按鍵檢測子程序
JZ MAIN ;無鍵按下則返回重新循�(huán)
LCALL SET[_]KEY ;�(diào)用選擇鍵處理子程�
JB 46H,MAIN ;如果已�(jìn)行長按調(diào)整(�(diào)時快�(jìn)�,則不再�(zhí)行下面的單步�(diào)�
LCALL ADD[_]KEY ;�(diào)用增加鍵處理子程�
LCALL DEC[_]KEY ;�(diào)用減少鍵處理子程�
LCALL DALING[_]KEY ;處理�(qiáng)制打�/�(qiáng)制關(guān)閉鈴聲鍵
LJMP MAIN ;重新循環(huán)
/*****定時中斷服務(wù)程序*****/
TIMER[_]0:
PUSH ACC
PUSH PSW ;保護(hù)�(xiàn)�
MOV TH0,#3CH
MOV TL0,#0B0H ;重新賦定時初�
CPL 47H ;�(chǎn)生脈沖用于調(diào)時快�(jìn)時基
INC 24H
MOV A,24H
CJNE A,#10,ADD[_]TIME ;�(chǎn)�0.5秒基�(zhǔn)時鐘,用于調(diào)時閃�
CPL 48H ;取反�(diào)時閃爍標(biāo)志位
MOV 24H,#00H
ADD[_]TIME:
INC 20H
MOV A,20H
CJNE A,#20,RETI1 ;�(chǎn)�1秒基�(zhǔn)時鐘
MOV 20H,#00H ;一秒鐘時間�,清�20H
MOV A,21H
ADD A,#01H
DA A ;作十�(jìn)制調(diào)�
MOV 21H,A
CJNE A,#60H,RETI1
MOV 21H,#00H ;一分鐘�
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,RETI1
MOV 22H,#00H ;一小時�
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,RETI1
MOV 23H,#00H ;�24�(diǎn),清零小時
RETI1:
POP PSW
POP ACC ;恢復(fù)�(xiàn)�
RETI ;中斷返回
/*****顯示處理*****/
DISPLAY:
MOV A,21H ;�
ANL A,#0FH
MOV 2FH,A ;�(zhuǎn)換出秒個位,存�2FH
MOV A,21H
ANL A,#0F0H
SWAP A
MOV 2EH,A ;�(zhuǎn)換出秒十�,存�2EH
JB 46H,MIN ;如果長按按鍵(調(diào)時快�(jìn)�,則跳過閃爍處理
CJNE R1,#3,MIN ;如果R1�3,閃爍秒位待�(diào)�
JB 48H,MIN
MOV 2FH,#0AH ;使該位為10,查表得到使該位不顯示的輸出
MOV 2EH,#0AH
MIN:
MOV A,22H ;�
ANL A,#0FH
MOV 2DH,A ;�(zhuǎn)換出分個位,存�2DH
MOV A,22H
ANL A,#0F0H
SWAP A
MOV 2CH,A ;�(zhuǎn)換出分十�,存�2CH
JB 46H,HOUR ;如果長按按鍵(調(diào)時快�(jìn)�,則跳過閃爍處理
CJNE R1,#2,HOUR ;如果R1�2,閃爍分位待�(diào)�
JB 48H,HOUR
MOV 2DH,#0AH ;使該位為10,查表得到使該位不顯示的輸出
MOV 2CH,#0AH
HOUR:
MOV A,23H ;�
ANL A,#0FH
MOV 2BH,A ;�(zhuǎn)換出時個位,存�2BH
MOV A,23H
ANL A,#0F0H
SWAP A
MOV 2AH,A ;�(zhuǎn)換出時十�,存�2AH
JB 46H,DISP ;如果長按按鍵(調(diào)時快�(jìn)�,則跳過閃爍處理
CJNE R1,#1,DISP ;如果R1�1,閃爍時位待�(diào)�
JB 48H,DISP
MOV 2BH,#0AH ;使該位為10,查表得到使該位不顯示的輸出
MOV 2AH,#0AH
/*****�(shù)碼管動態(tài)掃描顯示*****/
DISP:
MOV DPTR,#TABLE
MOV A,2FH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.7
LCALL DELAY
SETB P2.7 ;顯示秒個位
MOV A,2EH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
LCALL DELAY
SETB P2.6 ;顯示秒十�
MOV A,#0BFH
MOV P0,A
CLR P2.5
LCALL DELAY
SETB P2.5 ;顯示�-�
MOV A,2DH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.4
LCALL DELAY
SETB P2.4 ;顯示分個位
MOV A,2CH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.3
LCALL DELAY
SETB P2.3 ;顯示分十�
MOV A,#0BFH
MOV P0,A
CLR P2.2
LCALL DELAY
SETB P2.2 ;顯示�-�
MOV A,2BH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.1
LCALL DELAY
SETB P2.1 ;顯示時個位
MOV DPTR,#TABLE1 ;該位使用TABLE1以消除前�
MOV A,2AH
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
LCALL DELAY
SETB P2.0 ;顯示時十�
RET
/*****按鍵檢測子程�*****/
KEY[_]SCAN:
CLR 46H ;�(guān)閉長按調(diào)整(�(diào)時快�(jìn))標(biāo)�
MOV P1,#0FFH ;將P1口設(shè)置成輸入狀�(tài)
MOV A,P1
CPL A
ANL A,#0FH ;P1口低4位連接4個按鍵,只判斷該4�
JZ EXIT[_]KEY ;無鍵按下則返�
LCALL DELAY ;延時去抖�
MOV A,P1 ;重新判斷
CPL A
ANL A,#0FH
JZ EXIT[_]KEY ;鍵盤去抖�
MOV R5,A ;臨時將鍵值存入R5
MOV R4,#00H ;用于控制�(diào)時快�(jìn)速度
;�(shè)置為00H是為了在�(jìn)入長按處理前加長延時區(qū)分用戶的長按與短�,防止誤快�(jìn)
LOOP: ;�(jìn)入長按處�
LCALL DISPLAY ;使長按時顯示正常
MOV A,P1
CPL A
ANL A,#0FH
JB 47H,LOOP1
INC R4 ;�(diào)時快�(jìn)間隔時間基準(zhǔn)�
LOOP1:
CJNE R1,#03H,LOOP2 ;如果�(diào)秒時長按,則不處�
LJMP LOOP3
LOOP2:
CJNE R4,#99H,LOOP3
MOV R4,#70H ;確認(rèn)用戶長按�,重新設(shè)定起始值,加快�(diào)時快�(jìn)速度
SETB 46H ;長按�(diào)整(�(diào)時快�(jìn))標(biāo)�
LCALL ADD[_]KEY
LCALL DEC[_]KEY
LOOP3:
JNZ LOOP ;等待鍵釋�
MOV A,R5 ;輸出鍵�
RET
EXIT[_]KEY:
RET
/*****延時子程�*****/
DELAY:
MOV R7,#150
DJNZ R7,$
RET
/*****選擇鍵處理子程序*****/
SET[_]KEY:
CJNE R5,#01H,EXIT ;選擇鍵鍵�
INC R1 ;�(diào)整選擇功能標(biāo)志加一
SETB BEEP
CJNE R1,#4,EXIT
MOV R1,#0
MOV 24H,#00H ;�(diào)時閃爍基�(zhǔn)清零
RET
/*****增加鍵處理子程序*****/
ADD[_]KEY:
CJNE R5,#02H,EXIT ;增加鍵鍵�
CJNE R1,#01H,NEXT1 ;選擇鍵功能標(biāo)志為1,調(diào)�,否則跳�
MOV A,23H
ADD A,#01H
DA A
MOV 23H,A
CJNE A,#24H,EXIT
MOV 23H,#00H
NEXT1:
CJNE R1,#02H,NEXT2 ;選擇鍵功能標(biāo)志為2,調(diào)�,否則跳�
MOV A,22H
ADD A,#01H
DA A
MOV 22H,A
CJNE A,#60H,EXIT
MOV 22H,#00H
NEXT2:
CJNE R1,#03H,EXIT ;選擇鍵功能標(biāo)志為3,調(diào)�,否則跳�
MOV 21H,#00H ;如增加鍵按下直接清零�
RET
/*****減少鍵處理子程序*****/
DEC[_]KEY:
CJNE R5,#04H,EXIT ;減少鍵鍵�
CJNE R1,#01H,NEXT3 ;選擇鍵功能標(biāo)志為1,調(diào)�,否則跳�
MOV A,23H
ADD A,#99H
DA A
MOV 23H,A
CJNE A,#99H,EXIT
MOV 23H,#23H
NEXT3:
CJNE R1,#02H,NEXT4 ;選擇鍵功能標(biāo)志為2,調(diào)�,否則跳�
MOV A,22H
ADD A,#99H
DA A
MOV 22H,A
CJNE A,#99H,EXIT
MOV 22H,#59H
NEXT4:
CJNE R1,#03H,EXIT ;選擇鍵功能標(biāo)志為3,調(diào)�,否則跳�
MOV 21H,#00H ;如較少鍵按下直接清零�
RET
/*****�(qiáng)制響鈴鍵處理子程�*****/
DALING[_]KEY:
CJNE R5,#08H,EXIT ;選擇鍵鍵�
CPL BEEP
RET
/*****萬用返回程序*****/
EXIT:
RET
/*****�(shù)碼管字形編碼�*****/
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;字形顯示編碼
TABLE1:
DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;小時位的十位�(shù)編碼,該位如果為0則不顯示
/*****打鈴時間對比程序(起�、熄燈)*****/
BIJIAO1:
MOV A,23H
CJNE A,#06H,B0
MOV A,22H
CJNE A,#00H,B0 ;6:00�
SETB 45H ;開啟響鈴方式1
RET
B0: MOV A,23H
CJNE A,#22H,EXIT[_]1
MOV A,22H
CJNE A,#30H,EXIT[_]1 ;22:30�
SETB 45H ;開啟響鈴方式1
RET
EXIT[_]1:
CLR 45H
RET
/*****打鈴時間對比程序(上、下課)*****/
BIJIAO2:
MOV A,23H
CJNE A,#07H,B1
MOV A,22H
CJNE A,#30H,B1 ;7:30
SETB 44H ;開啟響鈴方式2
RET
B1: MOV A,23H
CJNE A,#08H,B2
MOV A,22H
CJNE A,#20H,B2 ;8:20
SETB 44H
RET
B2: MOV A,23H
CJNE A,#08H,B3
MOV A,22H
CJNE A,#30H,B3 ;8:30
SETB 44H
RET
B3: MOV A,23H
CJNE A,#09H,B4
MOV A,22H
CJNE A,#20H,B4 ;9:20
SETB 44H
RET
B4: MOV A,23H
CJNE A,#09H,B5
MOV A,22H
CJNE A,#40H,B5 ;9:40
SETB 44H
RET
B5: MOV A,23H
CJNE A,#10H,B6
MOV A,22H
CJNE A,#30H,B6 ;10:30
SETB 44H
RET
B6: MOV A,23H
CJNE A,#10H,B7
MOV A,22H
CJNE A,#40H,B7 ;10:40
SETB 44H
RET
B7: MOV A,23H
CJNE A,#11H,EXIT[_]2
MOV A,22H
CJNE A,#30H,EXIT[_]2 ;11:30
SETB 44H
RET
EXIT[_]2:
CLR 44H
RET
/*****響鈴方式1程序(響5秒停2秒再�5秒)*****/
DALING1:
JNB 45H,EXIT[_]DALING
MOV A,21H ;響鈴起始時間由秒�(shí)時控�
CJNE A,#00H,L1
CLR BEEP
L1:
MOV A,21H
CJNE A,#05H,L2
SETB BEEP
L2:
CJNE A,#07H,L3
CLR BEEP
L3:
CJNE A,#12H,EXIT[_]DALING
SETB BEEP
RET
/*****響鈴方式2程序(響5秒)*****/
DALING2:
JNB 44H,EXIT[_]DALING
MOV A,21H ;響鈴起始時間由秒�(shí)時控�
CJNE A,#00H,L4
CLR BEEP
L4:
MOV A,21H
CJNE A,#05H,EXIT[_]DALING
SETB BEEP
RET
EXIT[_]DALING:
RET
END ;程序�(jié)�
維庫電子�,電子知�,一查百��
已收錄詞�155781�