新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)控制的鐵道口報(bào)警

基于單片機(jī)控制的鐵道口報(bào)警

作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏

BUF1 EQU 60H ;緩沖單元1
BUF2 EQU 46H ;緩沖單元2
SBF EQU 47H ;秒存儲單元
MBF EQU 48H ;分存儲單元
HBF EQU 49H ;時存儲單元
TMCOUNT EQU 50H
VMAX EQU 55H ;設(shè)定的最大壓力存儲單元
VMIN EQU 56H ;設(shè)定的最小壓力存儲單元
CCOUNT EQU 57H ;來車次數(shù)記錄單元

本文引用地址:http://m.butianyuan.cn/article/201611/316469.htm

ST BIT P3.5 ;傳感器啟動信號線
EOC BIT P3.4 ;傳感器轉(zhuǎn)化信號線
OE BIT P3.3 ;傳感器輸出使能信號線
SOUND BIT P3.2 ;揚(yáng)聲器


ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTM0 ;中斷0入口地址
ORG 001BH
LJMP INTM1 ;中斷1入口地址
ORG 1000H

MAIN:

MOV TMOD,#11H
MOV TH1,#3CH ;定時器1定時50ms
MOV TL1,#0B0H
MOV TH0,#3CH ;定時器0定時50ms
MOV TL0,#0B0H
SETB EA
SETB ET1
SETB ET0
MOV P2,#00H
MOV BUF2,#00H
MOV BUF1,#00H
MOV CCOUNT,#00H
SETB P3.0
CLR P3.1
CLR P3.4
CLR P3.3
CLR P3.6
CLR P3.7
CLR PSW.5
CLR PSW.1
MOV VMAX,#180 ;對應(yīng)的顯示為3.6
MOV VMIN,#101 ;對應(yīng)的現(xiàn)實(shí)為2

;程序開始部分
START: LCALL INPUT_TIME ;首先調(diào)用時間輸入子程序

NEXT1: LCALL KEY_SCAN ;鍵盤掃描以判斷下一次案件是時間重設(shè)還是確定按鍵
CJNE A,#0FH,NEXT2
JMP START
NEXT2: CJNE A,#0EH, NEXT3 ;時間設(shè)定是否確定,如果按的是=則表示時間確定,同時要開始計(jì)時時間運(yùn)行。
SETB TR1 ;啟動定時器1開始計(jì)時
LCALL ADC_START ;調(diào)用傳感器數(shù)據(jù)采集程序
JMP $
NEXT3: JMP NEXT1
INPUT_TIME: ;時間輸入子程序
LCALL KEY_SCAN
MOV 40H,A
LCALL KEY_SCAN
MOV 41H,A
LCALL KEY_SCAN
MOV 42H,A
LCALL KEY_SCAN
MOV 43H,A ;輸入時和分時間,因?yàn)闀r和分都是2位數(shù)故要按鍵4次
TIME_SAVE: ;時間保存部分
MOV SBF,1
MOV A,42H
SWAP A
ORL A,43H
MOV MBF,A
MOV A,40H
SWAP A
ORL A,41H
MOV HBF,A ;輸入的時間要進(jìn)行數(shù)據(jù)整合然后放到對應(yīng)的存儲單元里

MOV DPTR,#LEDSEG
MOV TMCOUNT,#180
TIME_SHOW: ;時間顯示部分,通過這部分可以看看所設(shè)的時間格式是否正確
SETB P2.5 ;在時間顯示這部分總體思路時先選定位碼,然后在輸出段碼
MOV A,#1 ;從而可做到時間顯示
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAYDIS
CLR P2.5

SETB P2.4
MOV A,#0
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAYDIS
CLR P2.4

SETB P2.3
MOV A,43H
MOVC A,@A+DPTR
XRL A,#80H
MOV P0,A
LCALL DELAYDIS
CLR P2.3

SETB P2.2
MOV A,42H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAYDIS
CLR P2.2

SETB P2.1
MOV A,41H
MOVC A,@A+DPTR
XRL A,#80H
MOV P0,A
LCALL DELAYDIS
CLR P2.1

SETB P2.0
MOV A,40H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAYDIS
CLR P2.0
DJNZ TMCOUNT,TIME_SHOW
RET

ADC_START : ;傳感器數(shù)據(jù)采集部分,通過對外部的模擬量轉(zhuǎn)化為數(shù)字量,從而判斷外部
CLR ST ;狀態(tài),
SETB ST ;思路是這樣的。由于傳感器采用的是5v電源。所以量程是0~5v
CLR ST ;由于傳感器的位數(shù)是8位所以采集的最大數(shù)值為255,所以一個單位對應(yīng)的
HERE: SETB EOC ;模擬量位5/255即1/51.所以在這里設(shè)模擬量為3.6表示車來,模擬量為
JNB EOC,HERE ;2.0表示車離開,總體思路就是這樣。
SETB OE
MOV P0,#0FFH
MOV A,P0
CLR OE
MOV 51H,A ;采集的模擬值保存到51H這個單元里

MOV A,51H ;將二進(jìn)制數(shù)值轉(zhuǎn)化為對應(yīng)量程的十進(jìn)制表示
MOV B ,#51
DIV AB
MOV 52H, A
MOV A, #5
XCH A, B
DIV AB
MOV 53H, A
MOV A, B
MOV 54H, A
CLR C
;下面進(jìn)行數(shù)值比較。當(dāng)顯示高于3.8時表示列車開來。
;當(dāng)顯示小于1.0且列車已來過即出現(xiàn)過數(shù)值大于3.8時表明列車已離開
JNB PSW.5,BJMAX
CLR C
MOV A,51H
SUBB A,VMIN
JNC TIME_DELAY ;若大于最小值則跳到采集的數(shù)據(jù)顯示部分,如果小于則
;表明車已經(jīng)離開,這是進(jìn)行復(fù)原以等待下一輛車到來。

CLR PSW.5
MOV P2,#00H
SETB P3.0
CLR P3.1

SETB PSW.1
; CLR TR0
LJMP QUIT

BJMAX: MOV A,51H ;與設(shè)定的最大值進(jìn)行比較
SUBB A,VMAX
JC SHOW_CJ ;若小于最大值則跳到數(shù)值顯示部分,若大于最大值,此時便顯示當(dāng)前時間和車來次數(shù)
SETB PSW.5
INC 57H
SETB TR0
CLR P3.0
SETB P3.1
SETB P3.6 ;使電動機(jī)開始正向轉(zhuǎn)動
CLR P3.7
TIME_DELAY:LCALL TIME_DISP ;不僅要顯示當(dāng)前時間此時還要報(bào)警和警告燈顯示即黃燈亮。
LJMP QUIT
SHOW_CJ: MOV DPTR,#LEDSEG
SETBP2.2
MOVA,54H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAYDIS
CLRP2.2

SETBP2.1
MOVA,53H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELAYDIS
CLRP2.1

SETBP2.0
MOVA,52H
MOVCA,@A+DPTR
XRL A,#80H
MOVP0,A
LCALLDELAYDIS
CLRP2.0
QUIT: LJMP ADC_START

RET

TIME_DISP: ;車來時當(dāng)前時間顯示
MOV A,SBF
ANL A,#0FH
MOV 45H,A
MOV A,SBF
SWAP A
ANL A,#0FH
MOV 44H,A

MOV A,MBF
ANL A,#0FH
MOV 43H,A
MOV A,MBF
SWAP A
ANL A,#0FH
MOV 42H,A

MOV A,HBF
ANL A,#0FH
MOV 41H,A
MOV A,HBF
SWAP A
ANL A,#0FH
MOV 40H,A

MOV DPTR,#LEDSEG
SETB P2.7
MOV A,CCOUNT
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAYDIS
CLR P2.7

SETB P2.5
MOV A,45H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAYDIS
CLR P2.5
SETB P2.4
MOV A,44H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAYDIS
CLR P2.4
SETB P2.3
MOV A,43H
MOVC A,@A+DPTR
XRL A,#80H
MOV P0,A
LCALL DELAYDIS
CLR P2.3
SETB P2.2
MOV A,42H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAYDIS
CLR P2.2
SETB P2.1
MOV A,41H
MOVC A,@A+DPTR
XRL A,#80H
MOV P0,A
LCALL DELAYDIS
CLR P2.1
SETB P2.0
MOV A,40H
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAYDIS
CLR P2.0
RET

LEDSEG: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH ;0,1,2,3,4,5,6,7,8,9

DELAYDIS:MOV R6,#4 ;延時程序1
D1: MOV R7,#250
DJNZR7,$
DJNZR6,D1
RET


INTM1: MOV TH1,#3CH ;中斷1程序
MOV TL1,#0B0H
INC BUF2
MOV A,BUF2
CJNE A,#20,QUITINTM1 ;如果等于20則正好1秒到
MOV BUF2,#00H
MOV A,SBF
ADD A,#1
DA A
MOV SBF,A
CJNE A,#60H,QUITINTM1
MOV SBF,#00H
MOV A,MBF
ADD A,#1
DA A
MOV MBF,A
CJNE A,#60H,QUITINTM1
MOV MBF,#00H
MOV A,HBF
ADD A,#1
DA A
MOV HBF,A
CJNE A,#24H,QUITINTM1
MOV HBF,#00H

QUITINTM1:
RETI

INTM0: ;中斷0程序
MOV TH0,#3CH ;定時器0定時50ms
MOV TL0,#0B0H
JB PSW.1 ,MOTOR
CPL P3.2
JMP ENDINTM0
MOTOR: SETB P3.7
CLR P3.6
INC BUF1
MOV A,BUF1
CJNE A,#150,ENDINTM0 ;如果等于則正好1秒到
MOV BUF1,#00H
CLR P3.6
CLR P3.7
CLR PSW.1
CLR TR0
ENDINTM0:RETI
KEY_SCAN:MOV R0,#0F7H ;鍵盤掃描程序
MOV R1,#00H
WC1: MOV A,R0
MOV P1,A
MOV A,P1
MOV R2,A
SETB C
MOV R3,#04H
WC2:RLC A
JNC KEY
WC3:INC R1
DJNZ R3,WC2
MOV A,R0
SETB C
RRC A
MOV R0,A
JC WC1
LJMP KEY_SCAN
KEY:LCALL DTENMS
MOV A,P1
XRL A,R2
JNZ WC3
WC4:MOV A,P1
XRL A,R2
JZ WC4
MOV A,R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
DTENMS:MOV R6,#6
DD1:MOV R7,#248
DJNZ R7,$
DJNZ R6,DD1
RET
TAB:DB 07H,08H,09H,09H,04H,05H,06H,06H,01H,02H,03H,03H,00H,00H,0EH,0FH ;對應(yīng)位置的數(shù)據(jù)
END




評論


技術(shù)專區(qū)

關(guān)閉