打印
[51单片机]

汇编的摇摇棒程序

[复制链接]
1807|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
;=========================================
OUTPUT1   EQU     30H                         ;查表的暂存器
OUTPUT2   EQU     31H                         ;查表的暂存器
COUNT1    EQU     32H
C1        EQU     33H
C2        EQU     34H
C3        EQU     35H
C4        EQU     36H
C5        EQU     37H
C6        EQU     38H
C7        EQU     39H
C8        EQU     3AH
C9        EQU     3BH
C10       EQU     3CH                          
KEY       BIT     P3.7
        ORG       0000H                                 ;起始地址
        JMP      RESET
        ORG       0003H                                 ;外部中断入口地址
        JMP       INT
        ORG       0030H
/*====================复位程序============================*/
RESET:
        MOV       C1,#00H                         ;偏移量
        MOV       C2,#00H
        MOV       C3,#00H
        MOV       C4,#00H
        MOV       C5,#00H
        MOV       C6,#00H
        MOV       C7,#00H
        MOV       C8,#00H
        MOV       C9,#00H
        MOV       C10,#00H
        MOV       OUTPUT1,#00H
        MOV       OUTPUT2,#00H
        SETB      KEY                                 ;准备按键输入
        MOV       COUNT1,#00H
        SETB     EX0                         ;分中断
        SETB      EA                         ;总中断  
        clr     IT0                        ;触发方式选择
/*=================主程序===============================*/
MAIN:                  
         CALL      KEY_SCAN       
;         CALL      NOAD               
           LJMP       MAIN

/*==按键处理程序(只做了两种模式,大家可以再加)======*/
KEY_SCAN:
     JB       KEY,KEY_RET    ;为1则转移;按键未按下转移
         LCALL    DELAY
         JB       KEY,KEY_RET                ;按键确认未按下转移
         INC      COUNT1
         INC      COUNT1
         MOV      A,COUNT1
         CJNE     A,#4,KEY_D                ; 累加器内容与立即数比较,不等则转移
         MOV      COUNT1,#00H
KEY_D:
     JNB      KEY,$        ;若为0则等待

  
KEY_RET:
     RET
/*============ 散转程序==========================*/
NOAD:                                                                                                                          
     MOV       DPTR,#TAB_B                 ;设置散转表地址
         MOV       A,COUNT1
         JMP       @A+DPTR
TAB_B:                                                         ;散转表
         AJMP       OPR_0
         AJMP       OPR_2               

OPR_0:
     MOV      DPTR,#TAB1
         MOV      A,C1
         MOVC     A,@A+DPTR
         MOV      OUTPUT1,A

         MOV      DPTR,#TAB2
         MOV      A,C2
         MOVC     A,@A+DPTR
         MOV       OUTPUT2,A                                                           
        CALL LLL

         INC      C1
         INC      C2
         MOV      A,C2
         CJNE     A,#64,OPR_0
         MOV      C1,#00H
         MOV      C2,#00H
         MOV       P1,#0FFH
   call DELAY
         LJMP     OPR_RET


OPR_2:
     MOV      DPTR,#TAB3
         MOV      A,C3
         MOVC     A,@A+DPTR
         MOV      OUTPUT1,A

         MOV      DPTR,#TAB4
         MOV      A,C4
         MOVC     A,@A+DPTR
         MOV       OUTPUT2,A                                                                                                            
CALL LLL

         INC      C3
         INC      C4
         MOV      A,C4
         CJNE     A,#64,OPR_2
         MOV      C3,#00H
         MOV      C4,#00H
         LJMP     OPR_RET
OPR_RET:
     RET
;-------------------------------------------
LLL:MOV R3,#3
HHH:        MOV      P1,OUTPUT2
         CLR  P3.1
         CALL         DELAY2
         SETB P3.1
         MOV      P1,OUTPUT1
         CLR P3.0
         CALL     DELAY2
         SETB P3.0
DJNZ R3,HHH
RET
/*===================中断处理程序===================*/
INT:
clr ea          ;保证散转程序的完整显示
   CALL      NOAD        ;散转程序
   MOV       P1,#0FFH
        MOV       C1,#00H                         ;偏移量
        MOV       C2,#00H
setb ea
         RETI
/*=================  延时程序=====================*/          
DELAY:
     MOV      R7,#50
D1:  MOV      R6,#250                                                                                 
     DJNZ     R6,$
         DJNZ     R7,D1
         RET
DELAY2:MOV R6,#50
                DJNZ R6,$
                RET
;==立新爱你==阳字逆向取码,列行方式========================
TAB1:
        DB 0FFH, 0EFH, 0EFH, 6FH, 0EFH, 0EFH, 0EEH, 0E9H, 0EFH, 0EFH, 0FH, 0AFH, 0EFH, 0EFH, 0FFH, 0FFH;;"立"上部分
        DB 0DFH, 0DBH, 0D3H, 0CAH, 19H, 0CBH, 0D3H, 0DBH, 0FFH, 03H, 0DBH, 0DBH, 1DH, 0DDH, 0DDH, 0FFH;"新"上部分
        DB 0FFH, 0BFH, 4DH, 69H, 65H, 6DH, 09H, 65H, 6CH, 6EH, 66H, 68H, 6EH, 6FH, 0CFH, 0FFH;
        DB 7FH, 0BFH, 0FH, 0D3H, 0BCH, 0DFH, 67H, 0F0H, 0F5H, 17H, 0F7H, 77H, 0D7H, 0E3H, 0F7H, 0FFH;
TAB2:
        DB 0BFH, 0BFH, 0BFH, 0BFH, 0BCH, 0B1H, 0BFH, 9FH, 0A7H, 0B8H, 0BFH, 0BFH, 0BFH, 9FH, 0BFH, 0FFH  ;"立"下部分
        DB 0DEH, 0EEH, 0B2H, 7EH, 80H, 0FAH, 0A6H, 0DEH, 0E7H, 0F8H, 0FFH, 0FFH, 00H, 0FFH, 0FFH, 0FFH   ;"新"下部分
        DB 0BFH, 0DFH, 5FH, 6FH, 0B3H, 0B8H, 0D5H, 0D5H, 0EDH, 0E5H, 0D9H, 0DDH, 0BFH, 3FH, 0BFH, 0FFH   ;"爱"
        DB 0FFH, 0FFH, 80H, 0FFH, 0EFH, 0F3H, 0FCH, 0DEH, 0BFH, 0C0H, 0FFH, 0FFH, 0FCH, 0E3H, 0F7H, 0FFH ;"你"

;=======================================================
         END          ;结束 程序是借鉴的,完全成功了,字是自己换上去的,

相关帖子

沙发
香水橙| | 2014-3-1 14:08 | 只看该作者
说说看,你的程序是做什么的?什么效果?怎么用?

使用特权

评论回复
板凳
liudanwei| | 2014-3-1 16:56 | 只看该作者
飘过!!!!

使用特权

评论回复
地板
立新家电维修|  楼主 | 2014-3-26 20:33 | 只看该作者
摇摇棒呀,还怎么介绍,简单的很,水银开关触发中断,分两段扫描16灯,看懂程序,电路图自己就懂了,电路简单的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

粉丝