新聞中心

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

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

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

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

        本文引用地址:http://www.104case.com/article/201611/316469.htm

        ST BIT P3.5 ;傳感器啟動(dòng)信號(hào)線
        EOC BIT P3.4 ;傳感器轉(zhuǎn)化信號(hào)線
        OE BIT P3.3 ;傳感器輸出使能信號(hào)線
        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 ;定時(shí)器1定時(shí)50ms
        MOV TL1,#0B0H
        MOV TH0,#3CH ;定時(shí)器0定時(shí)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 ;對(duì)應(yīng)的顯示為3.6
        MOV VMIN,#101 ;對(duì)應(yīng)的現(xiàn)實(shí)為2

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

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

        MOV DPTR,#LEDSEG
        MOV TMCOUNT,#180
        TIME_SHOW: ;時(shí)間顯示部分,通過(guò)這部分可以看看所設(shè)的時(shí)間格式是否正確
        SETB P2.5 ;在時(shí)間顯示這部分總體思路時(shí)先選定位碼,然后在輸出段碼
        MOV A,#1 ;從而可做到時(shí)間顯示
        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ù)采集部分,通過(guò)對(duì)外部的模擬量轉(zhuǎn)化為數(shù)字量,從而判斷外部
        CLR ST ;狀態(tài),
        SETB ST ;思路是這樣的。由于傳感器采用的是5v電源。所以量程是0~5v
        CLR ST ;由于傳感器的位數(shù)是8位所以采集的最大數(shù)值為255,所以一個(gè)單位對(duì)應(yīng)的
        HERE: SETB EOC ;模擬量位5/255即1/51.所以在這里設(shè)模擬量為3.6表示車(chē)來(lái),模擬量為
        JNB EOC,HERE ;2.0表示車(chē)離開(kāi),總體思路就是這樣。
        SETB OE
        MOV P0,#0FFH
        MOV A,P0
        CLR OE
        MOV 51H,A ;采集的模擬值保存到51H這個(gè)單元里

        MOV A,51H ;將二進(jìn)制數(shù)值轉(zhuǎn)化為對(duì)應(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時(shí)表示列車(chē)開(kāi)來(lái)。
        ;當(dāng)顯示小于1.0且列車(chē)已來(lái)過(guò)即出現(xiàn)過(guò)數(shù)值大于3.8時(shí)表明列車(chē)已離開(kāi)
        JNB PSW.5,BJMAX
        CLR C
        MOV A,51H
        SUBB A,VMIN
        JNC TIME_DELAY ;若大于最小值則跳到采集的數(shù)據(jù)顯示部分,如果小于則
        ;表明車(chē)已經(jīng)離開(kāi),這是進(jìn)行復(fù)原以等待下一輛車(chē)到來(lái)。

        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ù)值顯示部分,若大于最大值,此時(shí)便顯示當(dāng)前時(shí)間和車(chē)來(lái)次數(shù)
        SETB PSW.5
        INC 57H
        SETB TR0
        CLR P3.0
        SETB P3.1
        SETB P3.6 ;使電動(dòng)機(jī)開(kāi)始正向轉(zhuǎn)動(dòng)
        CLR P3.7
        TIME_DELAY:LCALL TIME_DISP ;不僅要顯示當(dāng)前時(shí)間此時(shí)還要報(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: ;車(chē)來(lái)時(shí)當(dāng)前時(shí)間顯示
        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 ;延時(shí)程序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 ;定時(shí)器0定時(shí)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 ;鍵盤(pán)掃描程序
        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 ;對(duì)應(yīng)位置的數(shù)據(jù)
        END




        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 鹤壁市| 翁牛特旗| 平潭县| 丹凤县| 岳池县| 略阳县| 仙游县| 横山县| 阿拉善盟| 城口县| 凤山市| 焦作市| 新野县| 聂拉木县| 普安县| 奇台县| 峨边| 北安市| 五常市| 山东省| 响水县| 肇州县| 北辰区| 施秉县| 宁明县| 连城县| 磐安县| 六枝特区| 桐柏县| 临西县| 鲁甸县| 故城县| 保山市| 鄂尔多斯市| 宁波市| 罗山县| 民和| 福州市| 汉寿县| 襄垣县| 达拉特旗|