<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于單片機控制的鐵道口報警

          基于單片機控制的鐵道口報警

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

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

          本文引用地址:http://www.ex-cimer.com/article/201611/316469.htm

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


          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 ;對應的顯示為3.6
          MOV VMIN,#101 ;對應的現(xiàn)實為2

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

          NEXT1: LCALL KEY_SCAN ;鍵盤掃描以判斷下一次案件是時間重設還是確定按鍵
          CJNE A,#0FH,NEXT2
          JMP START
          NEXT2: CJNE A,#0EH, NEXT3 ;時間設定是否確定,如果按的是=則表示時間確定,同時要開始計時時間運行。
          SETB TR1 ;啟動定時器1開始計時
          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 ;輸入時和分時間,因為時和分都是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 ;輸入的時間要進行數(shù)據(jù)整合然后放到對應的存儲單元里

          MOV DPTR,#LEDSEG
          MOV TMCOUNT,#180
          TIME_SHOW: ;時間顯示部分,通過這部分可以看看所設的時間格式是否正確
          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,所以一個單位對應的
          HERE: SETB EOC ;模擬量位5/255即1/51.所以在這里設模擬量為3.6表示車來,模擬量為
          JNB EOC,HERE ;2.0表示車離開,總體思路就是這樣。
          SETB OE
          MOV P0,#0FFH
          MOV A,P0
          CLR OE
          MOV 51H,A ;采集的模擬值保存到51H這個單元里

          MOV A,51H ;將二進制數(shù)值轉(zhuǎ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
          ;下面進行數(shù)值比較。當顯示高于3.8時表示列車開來。
          ;當顯示小于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)離開,這是進行復原以等待下一輛車到來。

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

          SETB PSW.1
          ; CLR TR0
          LJMP QUIT

          BJMAX: MOV A,51H ;與設定的最大值進行比較
          SUBB A,VMAX
          JC SHOW_CJ ;若小于最大值則跳到數(shù)值顯示部分,若大于最大值,此時便顯示當前時間和車來次數(shù)
          SETB PSW.5
          INC 57H
          SETB TR0
          CLR P3.0
          SETB P3.1
          SETB P3.6 ;使電動機開始正向轉(zhuǎn)動
          CLR P3.7
          TIME_DELAY:LCALL TIME_DISP ;不僅要顯示當前時間此時還要報警和警告燈顯示即黃燈亮。
          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: ;車來時當前時間顯示
          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 ;對應位置的數(shù)據(jù)
          END




          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();