微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 汽车电子 > 一种用AT89C2051制作的新颖汽车尾灯指示器

一种用AT89C2051制作的新颖汽车尾灯指示器

时间:11-05 来源:互联网 点击:
本文介绍一种新颖的汽车尾灯指示器,指示器由特制的发光二极管点阵组成,共有八组,每组同时点亮由九个发光二极管,置于汽车后玻璃窗上,共有五种显示状态,当有停车或刹车信号时,八组发光管点阵全点,有后退信号时,发光二极管点阵闪亮,当有危险信号时,八组发光二极管分为左右两组交替闪亮,有右转弯信号时,右边四组发光二极管从中间向右边依次点亮,有左转弯信号时,左边四组发光二极管从中间向左边依次点亮,在转弯信号未消失时不断重复,此指示器新颖别致,给人以赏新悦目的感觉。
本装置采用的AT89C2051芯片是Atmel公司生产的自带2KB可编程Flash存储器的与MSC-51兼容的高性能处理器。它与常规的51芯片有相同的核心和相近的结构功能如RAM、定时/记数器、中断结构、串行口、振荡器和时钟电路等;有最高达24MHz的振荡频率,有较少的精简I/O端口,因此体积很小,非常适用做小型应用系统的处理器。

汇编程序及详细注释如下:
STOP          BIT 32H    ;刹车标志
DANGE         BIT 33H    ;危险标志
BACK          BIT 34H    ;倒车标志
RIGHT         BIT 35H    ;右转标志
LEFT          BIT 36H    ;左转标志
FLASH         BIT 37H    ;闪烁标志
LRSET         BIT 38H    ;依次点亮标志
COUNT         EQU 32H    ;依次亮点计数器

        ORG   0000H
        AJMP  MAIN    ;跳转主程序
        ORG   0030H
        AJMP  MAIN
MAIN:   NOP
        MOV   R0,#20H      ;20H至60H单元清零
        MOV   A,#0
RES:    MOV   @R0,A
        INC   R0
        CJNE  R0,#60H,RES

        MOV   SP,#60H      ;设置堆栈指针为60H
        MOV   COUNT,#0     ;清依次显示循环计数器
        CLR   TIME_OUT     ;清定时时间到标志
        CLR   EA
        CLR   RIGHT        ;清右转标志
        CLR   STOP         ;清刹车标志
        CLR   DANGE        ;清危险标志
        CLR   BACK         ;清倒车标志
        CLR   LEFT         ;清左转标志
        CLR   LRSET        ;清依次点亮标志

LOP:    ACALL  DL1          ;调用延时子程序
        ACALL  DL1          ;调用延时子程序

        CPL   FLASH       ;闪烁标志取反
        JNB   LRSET,LOP1  ;无依次点亮标志转LOP1
        INC   COUNT       ;依次点亮计数器加1
        MOV   A,COUNT
        CJNE  A,#5,LOP1
        MOV   COUNT,#0    ;计数计到5清零
LOP1:   ACALL CL          ;调用过程处理子程序
LOPA:   ACALL KEY         ;调用按键处理子程序
        AJMP  LOP         ;返回主循环

DL1 :     MOV   R6,#200  ;延时子程序
DL11:     MOV   R5,#250
          DJNZ  R5,$
          DJNZ  R6,DL11
          RET

CL:     NOP              ;过程处理子程序
JNB   STOP,CL1
        MOV   A,#0FFH    ;有停车或刹车标志

        CPL   A          ; 显示器全亮
        MOV   P1,A
        AJMP  CLE
CL1:    JNB   DANGE,CL2
        JB    FLASH,CL11     ;有危险标志

        MOV   A,#0FH         ;左右两组显示器交替闪烁
        MOV   P1,A
        AJMP  CLE
CL11:   MOV   A,#0F0H
        MOV   P1,A
        AJMP  CLE
CL2:    JNB   BACK,CL3         
        JB    FLASH,CL21    ;有倒车标志
        MOV   A,#0FFH       ;显示器做全亮或全灭交替
        MOV   P1,A          ;显示器全亮
        AJMP  CLE
CL21:   MOV   A,#00H
        MOV   P1,A          ;显示器全灭
        AJMP  CLE
CL3:    JNB   RIGHT,CL4

        MOV   DPTR,#RIGHT_CHAR  ;有右转标志
        MOV   A,COUNT ;右边四个一组的发光阵列依次循环亮
        MOVC  A,@A+DPTR  ;取显示值
        CPL   A
        MOV   P1,A
        AJMP  CLE
CL4:    JNB   LEFT,CL5
        MOV   DPTR,#LEFT_CHAR    ;有左转标志
        MOV   A,COUNT ;左边四个一组的发光阵列依次循环亮
        MOVC  A,@A+DPTR   ;取显示值
        CPL   A
        MOV   P1,A
        AJMP  CLE
CL5:    MOV   A,#0   ;若无任何标志,关闭显示器
        CPL   A
        MOV   P1,A
CLE:    RET

KEY:    NOP                ;  按键处理子程序
CLR   STOP         ;  清除停止标志  
        CLR   DANGE        ;  清除危险标志  
        CLR   BACK         ;  清除倒车标志  
        CLR   RIGHT        ;  清除右转标志
        CLR   LEFT         ;  清除左转标志
        JNB   P3.2,KEY1
        SETB  STOP         ;  P3.2有键按下,置停止标志
        AJMP  KEYE
KEY1:   JNB   P3.3,KEY11
        SETB  DANGE        ;  P3.3有键按下,置危险标志
KEY11:  MOV   A,P3
        CJNE  A,#22H,KEY2  

        SETB  DANGE    ;  P3.5 P3.1同时按下,置危险标志
        AJMP  KEYE
KEY2:   JNB   P3.4,KEY3
        SETB  BACK      ;P3.4有键按下,置倒车标志
        AJMP  KEYE
KEY3:   JNB   P3.5,KEY4
        SETB  RIGHT      ;P3.5有键按下,置右转标志
        JB    LRSET,KEYE
        SETB  LRSET      ;设置左右转循环显示标志         
        MOV   COUNT,#0   ;循环显示计数器清零
        AJMP  KEYE
KEY4:   JNB   P3.1,KEY5
        SETB  LEFT       ;P3.1有键按下,置左转标志
        JB    LRSET,KEYE
        SETB  LRSET      ;设置左右转循环显示标志
        MOV   COUNT,#0   ;循环显示计数器清零
        AJMP  KEYE
KEY5:   CLR   LRSET     ;清左右转循环显示标志
KEYE:   RET
LEFT_CHAR:   DB 00H,10H,30H,70H,0F0H   ;从右到左依次点亮值
RIGHT_CHAR:  DB 00H,08H,0CH,0EH,0FH  ;从左到右依次点亮值
    END

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top