基于单片机控制的铁道口报警

发布者:advancement4最新更新时间:2016-08-17 来源: eefocus关键字:单片机控制  铁道口报警 手机看文章 扫描二维码
随时随地手机看文章
原创:基于单片机控制的铁道口报警论文完整版 - wc - wuchuang8114994 的博客

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              ;来车次数记录单元

ST  BIT P3.5                ;传感器启动信号线
EOC BIT P3.4                ;传感器转化信号线
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    ;对应的现实为2

                        ;程序开始部分
START: LCALL INPUT_TIME               ;首先调用时间输入子程序

NEXT1: LCALL KEY_SCAN                 ;键盘扫描以判断下一次案件是时间重设还是确定按键
       CJNE A,#0FH,NEXT2
       JMP START
NEXT2: CJNE A,#0EH, NEXT3     ;时间设定是否确定,如果按的是=则表示时间确定,同时要开始计时时间运行。
       SETB TR1               ;启动定时器1开始计时 
       LCALL ADC_START        ;调用传感器数据采集程序
       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位数故要按键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                                 ;输入的时间要进行数据整合然后放到对应的存储单元里

       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 :                                     ;传感器数据采集部分,通过对外部的模拟量转化为数字量,从而判断外部                         
          CLR  ST                              ;状态,
   SETB  ST                              ;思路是这样的。由于传感器采用的是5v电源。所以量程是0~5v
   CLR  ST                              ;由于传感器的位数是8位所以采集的最大数值为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                 ;将二进制数值转化为对应量程的十进制表示
         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
                                   ;下面进行数值比较。当显示高于3.8时表示列车开来。
                                   ;当显示小于1.0且列车已来过即出现过数值大于3.8时表明列车已离开
         JNB PSW.5,BJMAX
  CLR C
         MOV A,51H
         SUBB A,VMIN
         JNC TIME_DELAY             ;若大于最小值则跳到采集的数据显示部分,如果小于则
                                    ;表明车已经离开,这是进行复原以等待下一辆车到来。  
                        
         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                   ;若小于最大值则跳到数值显示部分,若大于最大值,此时便显示当前时间和车来次数
  SETB PSW.5
  INC 57H 
  SETB TR0 
  CLR P3.0
  SETB P3.1
         SETB P3.6                      ;使电动机开始正向转动
         CLR  P3.7
TIME_DELAY:LCALL TIME_DISP              ;不仅要显示当前时间此时还要报警和警告灯显示即黄灯亮。
         LJMP QUIT
SHOW_CJ: MOV   DPTR,#LEDSEG
         SETB P2.2
         MOV A,54H 
  MOVC A,@A+DPTR
         MOV P0,A
  LCALL DELAYDIS
  CLR P2.2

         SETB P2.1
  MOV A,53H
  MOVC A,@A+DPTR         
  MOV P0,A
  LCALL DELAYDIS
  CLR P2.1

         SETB P2.0
  MOV A,52H
  MOVC A,@A+DPTR
  XRL A,#80H
  MOV P0,A
  LCALL DELAYDIS
         CLR P2.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
         DJNZ R7,$
         DJNZ R6,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              ;对应位置的数据
END


关键字:单片机控制  铁道口报警 引用地址:基于单片机控制的铁道口报警

上一篇:8051单片机抢答器C程序
下一篇:C51中精确的延时与计算的实现

推荐阅读最新更新时间:2024-03-16 15:05

单片机控制红外编码探测障碍物
1 探测障碍的原理 在室内自动感知障碍的设备中,常使用红外线探测障碍物的存在与否。探测的基本原理是:在测量的范围内,主动向探测方向发射红外信号,如果存在障碍物,就会把发射的信号反射回发送端。在发送端,如果收到反射的信号,就确认障碍物的存在。 但是在实际应用中,红外干扰源较多;而且在有反射光的情况下,由于光线的干扰,很容易判断失误,出现虚警。因此,有些设备在发射信号时,改进为发送一串连续的红外脉冲,然后接收反射的信号。如果接收到的红外脉冲数量超过某一门限值时,就判断障碍存在。这种方法尽管在一定程度上可以降低虚警率,但实验表明,在较强的反射光和使用电子镇流器方式的日光灯起辉时,仍很容易出现干扰现象。 本文提出解决干扰的方案是:由
[单片机]
单片机控制220VAC开断
器件简介 1.三极管简述 三极管(晶体管)分NPN和PNP型​,有发射极(Emitter)、基极(Base)、集电极(Collect). ​三极管属于流控流元件一般应用如下: NPN 基极高电平时 EC导通 集电极接 VCC PNP 基极低电平时 EC导通 集电极接 GND 如三极管​H桥电机驱动电路 ​三极管一般设计电流放大电路,进而控制其他器件(如继电器)来控制AC220,但继电器的导通频率以及开断次数对系统的限制,不考虑。 2.场效应管中种类较多,仅考虑MOS管MOS管,实际上就是绝缘栅型场效应管,全名叫Mosfet。分NMOS(N沟道 NPN型的)和PMOS(P沟道 PNP型
[单片机]
<font color='red'>单片机控制</font>220VAC开断
采用PIC单片机控制的电话小总机
  本小总机以PIC单片机控制,使用简单,分机间可互相内线通话,最大优点是当供电停止时,各分机仍可打外线,且保持通话保密的功能。   电路原理:   IC2-8870作DTMF信号检测,送入单片机IC3-PIC16C54单片机中,单片机根据情况控制继电器的吸合,完成对各分机的控制。当需要内线通话时,提起某一分机(如DHJ1),提机信号通过光电耦合O2-TLP521送入IC3中,拨打分机号码由8870检测送入IC3,IC3驱动相应分机的继电器吸合,以及由REL继电器送入响铃信号,当被叫分机提机时,REL1接通由IC4、R1组成的恒流源供电给各分机工作;当有外线电话打入时,其中一分机提机,需转到另一分机时,拨打该分机号码后挂机,
[单片机]
采用PIC<font color='red'>单片机控制</font>的电话小总机
单片机控制10BitDA正弦信号发生器
功能:单片机驱动 10BitDA正弦信号发生器 用示波器测量弦波形 程序C语言源代码如下: #include reg52.h //接口定义 sbit DA = P1^1; sbit CK = P1^2; sbit CS = P1^4; //10bit取样,1024点正弦查表数据 unsigned int code sine_dot = { 0x200,0x203,0x206,0x209,0x20c,0x20f,0x212,0x215,0x219,0x21c,0x21f,0x222,0x225,0x228,0x22b,0x22f,0x232, 0x235,0x238,0x23b,0x23e,0x241,0x244
[单片机]
<font color='red'>单片机控制</font>10BitDA正弦信号发生器
AD0804单片机控制程序
/*采用AD0804芯片,硬件 电路 :cs片选端接P2.3,WR写数据端写P3.6,RD读数据端接P3.7,锁存端接P2.6脚, 数码管 位选端分别接P3.2 ,P3.3,P3.4,段选端接P1口*/  #include reg52.h //头文件  #define uint unsigned int//宏文件  #define uchar unsigned char//宏文件  uchar num;//变量  void delay3(uint z);//延时定义  void dissy();//延时函数定义  sbit ge=P3^2;//个位定义  sbit shi=P3^3;//十位定义  sbit bai=P3^4;
[单片机]
用51单片机控制直流电机
一、 设计方案比较与分析: 1、电机调速控制模块: 方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。 方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性不高。 方案三:采用由达林顿管组成的H型PWM电路。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单
[单片机]
用51<font color='red'>单片机控制</font>直流电机
单片机控制器改善大屏幕LCD TV的图像质量
虽然LCD背光有多种方式,例如LED、EL、CCFL等,但对于大尺寸LCD屏来说,由于CCFL发光效率高而成为主流背光光源。传统的LCD屏主要用于笔记本电脑或台式电脑,背光组件在有一定亮度的前提下,还要尺寸小和重量轻等,大多采用侧面背光方式(CCFL灯管安装在屏的二边或四周,通过导光板将光漫射到整个屏幕后面);而LCD TV特别是大尺寸LCD TV,由于对显示亮度(450cd/m2)、视角广角(170°)、图像对比度(500:1)等有更高的要求,因而需要采用光源利用率更高的垂直背光技术。 1 垂直背光 垂直背光,顾名思义,是将CCFL灯管直接安装在LCD屏后面,并利用全反射膜将发散到其他方向的光线反射到屏幕发光面,以提高光
[单片机]
<font color='red'>单片机控制</font>器改善大屏幕LCD TV的图像质量
值得注意的单片机控制板的设计原则
需要遵循的原则如下:    (1) 在元器件的布局方面,应该把相互有关的元件尽量放得靠近一些,例如,时钟发生器、晶振、CPU的时钟输入端都易产生噪声,在放置的时候应把它们靠近些。对于那些易产生噪声的器件、小电流电路、大电流电路开关电路等,应尽量使其远离单片机的逻辑控制电路和存储电路(ROM、RAM),如果可能的话,可以将这些电路另外制成电路板,这样有利于抗干扰,提高电路工作的可靠性。 (2) 尽量在关键元件,如ROM、RAM等芯片旁边安装去耦电容。实际上,印制电路板走线、引脚连线和接线等都可能含有较大的电感效应。大的电感可能会在Vcc走线上引起严重的开关噪声尖峰。防止Vcc走线上开关噪声尖峰的唯一方法,是在VCC与电源地之
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved