您的位置:首页版主原创51示例程序
内容搜索: 标题内容作者
     
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

LED广告灯(调试OK)

[日期:2008-01-11 ] [来源:东哥开发网(www.picavr.com) 作者:东哥] [字体: (投递新闻)
LED广告灯

;********WAVE-E6000/T**************************
;*MCU:          AT89C51                       *
;*MCU-crystal:  12M                           *
;*Version:      00                            *
;*Last Updata:                                *
;*Author:       www.picavr.com                *
;*Description:
;               广告灯程序可通过按键切换不同的*
;               显示效果                      *      
;**********************************************
;**********************************************
;           中断入口程序
;**********************************************
            ORG     0000H       ;程序执行开始地址
            AJMP    MAIN        ;到主程序
            ORG     0003H       ;外中断0中断入口地址
            RETI                ;中断返回(不开中断)
            ORG     000BH       ;定时器T0中断入口地址
            RETI                ;中断返回(不开中断)
            ORG     0013H       ;外中断1中断入口地址
            RETI                ;中断返回(不开中断)
            ORG     001BH       ;定时器T1中断入口地址
            RETI                ;中断返回(不开中断)
            ORG     0023H       ;串行口中断入口地址
            RETI                ;中断返回(不开中断)
;----------------------------------------------
            ORG 0030H           ;
;**********************************************
MAIN:
            MOV 20H,#00H        ;清通用寄存器
            MOV 21H,#00H        ;清通用寄存器
            MOV 22H,#00H        ;
            MOV 23H,#00H        ;
            MOV 24H,#00H        ;
            MOV 25H,#00H        ;
            MOV 26H,#00H        ;
            CLR 00H             ;清位标志
            CLR 01H             ;
            CLR 02H             ;
            CLR 03H             ;
            MOV SP,#60H         ;
            SETB    00H         ;20H.0位置1(上电时自动执行闪烁功能1)
;*********************************************
LOOP:
            CALL    KEYWORK     ;调用键扫描子程序
            JB      00H,LED1    ;20H.0位为1时执行LED1
            JB      01H,LED2    ;20H.1位为1时执行LED2
            JB      02H,LED3    ;20H.2位为1时执行LED3
            JB      03H,LOOP    ;
            AJMP    LOOP        ;返回主程序LOOP
LED3:
            AJMP    LED33       ;
;**********************************************
;第1种闪烁功能程序
LED1:
            MOV   P1,#01111111B
            ACALL DELAY
            MOV   P1,#10111111B
            ACALL DELAY
            MOV   P1,#11011111B
            ACALL DELAY
            MOV   P1,#11101111B
            ACALL DELAY
            MOV   P1,#11110111B
            ACALL DELAY
            MOV   P1,#11111011B
            ACALL DELAY
            MOV   P1,#11111101B
            ACALL DELAY
            MOV   P1,#11111110B
            ACALL DELAY
            MOV   P1,#0FFH
            ACALL DELAY
            ACALL DELAY
            MOV   P1,#00H
            ACALL DELAY
            ACALL DELAY
            MOV   P1,#0FFH
            ACALL DELAY
            MOV   P1,#11111110B
            ACALL DELAY
            MOV   P1,#11111101B
            ACALL DELAY
            MOV   P1,#11111011B
            ACALL DELAY
            MOV   P1,#11110111B
            ACALL DELAY
            MOV   P1,#11101111B
            ACALL DELAY
            MOV   P1,#11011111B
            ACALL DELAY
            MOV   P1,#10111111B
            ACALL DELAY
            MOV   P1,#01111111B
            ACALL DELAY
            AJMP  LED1
;***********************************************
;第2种闪烁功能程序
LED2:
            MOV   P1,#11100111B
            ACALL DELAY
            MOV   P1,#11011011B
            ACALL DELAY
            MOV   P1,#10111101B
            ACALL DELAY
            MOV   P1,#01111110B
            ACALL DELAY
            ACALL DELAY
            MOV   P1,#10111101B
            ACALL DELAY
            MOV   P1,#11011011B
            ACALL DELAY
            MOV   P1,#11100111B
            ACALL DELAY
            MOV   P1,#55H
            ACALL DELAY
            AJMP  LED2
;************************************************
; 第3种闪烁功能程序
LED33:
             MOV   22H,0FFH      ;P1.0---P1.7 left_move_ALL_DISP
             MOV   R1,#08H       ;
LED3_1:
             MOV   A,22H         ;
             CLR   C             ;
             RLC   A             ;
             MOV   22H,A         ;
             MOV   P1,A          ;
             ACALL DELAY         ;
             DJNZ  R1,LED3_1     ;

             MOV   P1,#0FFH      ;
             ACALL DELAY         ;
             ACALL DELAY         ;

             MOV   22H,#00H      ;
             MOV   R1,#08H       ;P1.0---P1.7 right_move_OFF_DISP
LED3_2:
             MOV   A,22H         ;
             SETB  C             ;
             RRC   A             ;
             MOV   22H,A         ;
             MOV   P1,A          ;
             ACALL DELAY         ;
             DJNZ  R1,LED3_2     ;
             AJMP  LOOP          ;转MAIN
;**************************************************
;扫键程序
;**************************************************
KEYWORK:
       MOV       P2,#0FFH    ;置P3口为输入状态
       JNB       P2.4,KEY0   ;读P3.0口,若为0转KEY0
       JNB       P2.5,KEY1   ;读P3.1口,若为0转KEY1
       JNB       P2.6,KEY2   ;读P3.2口,若为0转KEY2
       JNB       P2.7,KEY3   ;读P3.3口,若为0转KEY3
       RET                   ;子程序返回
;****************************************************
;闪烁功能0键处理程序
KEY0:
       LCALL      DL10MS      ;延时10毫秒消抖
       JB         P3.0,OUT0   ;P3.0为1,子程序返回(干扰)
       SETB       00H         ;20H.0位置1(执行闪烁功能1标志)
       CLR        01H         ;20H.1位清0
       CLR        02H         ;20H.2位清0
       CLR        03H         ;20H.3位清0
OUT0:  RET                    ;子程序返回
;****************************************************
; 闪烁功能1键处理程序
KEY1:
       LCALL      DL10MS
       JB         P3.1,OUT1
       SETB       01H         ;20H.1位置1(执行闪烁功能2标志)
       CLR        00H
       CLR        02H
       CLR        03H
OUT1:  RET
;****************************************************
;闪烁功能2键处理程序
KEY2:
       LCALL      DL10MS
       JB         P3.2,OUT2
       SETB       02H         ;20H.2位置1(执行闪烁功能3标志)
       CLR        01H
       CLR        00H
       CLR        03H
OUT2:  RET
;****************************************************
;闪烁功能(备用)键处理程序
KEY3:
       LCALL      DL10MS
       JB         P3.3,OUT3
       SETB       03H         ;20H.3位置1(执行备用闪烁功能标志)
       CLR        01H
       CLR        02H
       CLR        00H
OUT3:
       RET
;****************************************************

;***************************************************;
;  延时程序                                         ;
;***************************************************;
;0.5毫秒延时子程序,执行一次时间为513微秒
DL512:
       MOV      R2,#0FFH
LOOP1:
       DJNZ     R2,LOOP1
       RET
;****************************************************
;10毫秒延时子程序(调用20次0.5毫秒延时子程序)
DL10MS:
       MOV      R3,#14H
LOOP2:
       LCALL    DL512
       DJNZ     R3,LOOP2
       RET
;*****************************************************
;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为15×25毫秒)
DELAY:
       MOV      R4,#0FH
LOOP3:
       LCALL    DL25MS
       DJNZ     R4,LOOP3
       RET
;*****************************************************
;25毫秒延时子程序,用调用扫键子程序延时,可快速读出功能按键值
DL25MS:
       MOV      R5,#0FFH
LOOP4:
       LCALL    KEYWORK
       DJNZ     R5,LOOP4
       RET
;*****************************************************
       END                  ;程序结束

 

阅读:
录入:admin

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
赞助商广告