⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shumaguan.asm

📁 ch451的一个跑马表小程序
💻 ASM
字号:
/*******************************************************************************
*  标题:  启东微芯LJD-SY-5100单片机开发系统演示程序
*  文件:  数码管.asm
*  日期:  2005-7-4
*  版本:  1.0
*  作者:  启东微芯
*  网站: http://www.ljd-2008.com
********************************************************************************
*  描述:                                                                       *
*         数码管轮流显0--F                                                     *
*                                                                              *
*                                                                              *
********************************************************************************
* 【版权】 Copyright(C)微芯科技 http://www.ljd-2008.com    All Rights Reserved *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
*******************************************************************************/

LOAD        BIT      P1.2
DIN         BIT      P1.0
DCLK        BIT      P1.1
DOUT        BIT      P3.3
;**********************************
DATA_F      DATA     034H
DATA_KEY    DATA     035H
TIMER       DATA     030H
TIMER1      DATA     031H
TIMER2      DATA     032H
TIMER3      DATA     033H
;***********************************
            ORG      0000H
 	    JMP      START
            ORG      0013H
            LJMP     CH451_INT1
	    ORG      080H

START:

             MOV      SP,#60H

;***********************************
             mov p1,#60h              ;禁止其它芯片
             CLR     DIN              ;初始化CH451
	     SETB    DCLK
	     SETB    DIN
	     SETB    LOAD
	     SETB    DOUT
        NOP
        MOV     B,#04H ;设置CH451
	     MOV     A,#03H         ;关看门狗开显示键盘
             nop
      	     LCALL   WRITE
	     NOP

START1:
             CLR     IT1              ;置外部信号为低电平触发
	     CLR     IE1               ;清中断标志
             SETB    PX1
	     SETB    EX1               ;允许键盘中断
	     SETB    EA               ;开总中断

             MOV      R5,#00H
TT1:
  	     MOV     A,R5
             LCALL   TT
             MOV     B,#08H         ;加载字数据1
             LCALL   WRITE
	     LCALL   DELAY_1S
             LCALL   DELAY_1S
             MOV     B,#03H         ;字数据左移
	     MOV     A,#00H
	     LCALL   WRITE
	     INC     R5
	     CJNE    R5,#010H,TT1
	     JMP     START1
TT:
             MOV     DPTR,#TAB
	     MOVC    A,@A+DPTR
     	     RET
	     NOP
	     JMP     START1
TAB:
             DB      03FH           ;0
	     DB      006H           ;1
	     DB      05BH           ;2
             DB      04FH           ;3
	     DB      066H           ;4
	     DB      06DH           ;5
             DB      07DH           ;6
	     DB      07H            ;7
	     DB      07FH           ;8
             DB      06FH           ;9
	     DB      77H            ;A
	     DB      07CH           ;B
             DB      039H           ;C
	     DB      5EH            ;D
	     DB      079H           ;E
	     DB      071H           ;F

;****************键盘处理*****************************
CH451_INT1:
            PUSH    PSW              ;现场保护
            PUSH    ACC
	    PUSH    B
            MOV     R4,#06H
YY:
            MOV     B,#08H
   	    MOV     A,#00H
            LCALL   WRITE
	    MOV     B,#03H         ;字数据左移
	    MOV     A,#00H
	    LCALL   WRITE
	    DJNZ    R4,YY
            LCALL   INTER

K1:
	    MOV     R3,DATA_KEY
            CJNE    R3,#40H,K2
	    JMP     LED_0
K2:
            MOV     R3,DATA_KEY
            CJNE    R3,#41H,K3
	    JMP     LED_1
K3:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#42H,K4
	    JMP     LED_2
K4:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#43H,K5
	    JMP     LED_3
K5:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#48H,K6
	    JMP     LED_4
K6:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#49H,K7
	    JMP     LED_5
K7:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#4AH,K8
	    JMP     LED_6
K8:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#4BH,K9
	    JMP     LED_7
K9:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#50H,K10
	    JMP     LED_8
K10:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#51H,K11
	    JMP     LED_9
K11:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#52H,K12
	    JMP     LED_A
K12:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#53H,K13
	    JMP     LED_B
K13:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#58H,K14
	    JMP     LED_C
K14:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#59H,K15
	    JMP     LED_D
K15:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#5AH,K16
	    JMP     LED_E
K16:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#5BH,K17
	    JMP     LED_F
K17:
            POP   ACC
	    POP   PSW
	    CLR   IE1
	    RETI
            NOP
            LJMP     START
LED_A:
            MOV     B,#08H
   	    MOV     A,#077H
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_B:
            MOV     B,#08H
   	    MOV     A,#07CH
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_C:
            MOV     B,#08H
   	    MOV     A,#039H
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_D:
           MOV     B,#08H
   	    MOV     A,#05EH
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_E:
	    MOV     B,#08H
   	    MOV     A,#079H
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_F:
	    MOV     B,#08H
   	    MOV     A,#071H
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_0:
	    MOV     B,#08H
   	    MOV     A,#03FH
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_1:
	    MOV     B,#08H
   	    MOV     A,#06H
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_2:
	    MOV     B,#08H
   	    MOV     A,#05BH
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_3:
	    MOV     B,#08H
   	    MOV     A,#04FH
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_4:
	    MOV     B,#08H
   	    MOV     A,#066H
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_5:
	    MOV     B,#08H
   	    MOV     A,#06DH
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_6:
	    MOV     B,#08H
   	    MOV     A,#07DH
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_7:
	    MOV     B,#08H
   	    MOV     A,#007H
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_8:
	    MOV     B,#08H
   	    MOV     A,#07FH
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
LED_9:
	    MOV     B,#08H
   	    MOV     A,#06FH
            LCALL   WRITE
	    JMP     DELAY1
            NOP
	    LJMP     START
DELAY1:
            CLR     IT1               ;置外部信号为低电平触发
	    CLR     IE1               ;清中断标志
            SETB    PX1
	    SETB    EX1               ;允许键盘中断
	    SETB    EA
            LCALL    DELAY_1S
            LCALL    DELAY_1S
            LCALL    DELAY_1S
            LCALL   DELAY_1S

	    POP      B
	    POP      ACC
	    POP      PSW
	    RETI
	    NOP
	    LJMP     START
;**********************************
WRITE:
            PUSH     ACC
            CLR       EX0
	    CLR       LOAD
	    MOV       R7,#08H
WRITE_1:
            RRC       A
	    CLR       DCLK
	    MOV       DIN,C
	    SETB      DCLK
	    DJNZ      R7,WRITE_1
	    MOV       A,B
	    MOV       R7,#004H
WRITE_2:
            RRC       A
	    CLR       DCLK
	    MOV       DIN,C
	    SETB      DCLK
	    DJNZ      R7,WRITE_2
	    SETB      LOAD
	    SETB      EX1
	    POP       ACC
	    RET
;*********************************

INTER:
            PUSH  PSW              ;现场保护
            PUSH  ACC
	    CLR       EX1
            CLR   LOAD             ;命令开始
	    MOV   A,#0F7H          ;读键值命令,忽略12位命令的低8位,高4位用作结束标志
INTER_4:
            SETB  C                ;在高位添0以检测位数据结束
	    RRC   A                ;低位在前,高位在后
	    CLR   DCLK
            MOV   DIN,C               ;送出一位数据
	    SETB  DCLK                ;产生时钟上升沿锁通知CH451输入位数据
	    CJNE  A,#0FFH,INTER_4     ;位数据未完继续,共4位,完成后为0FFH
  	    SETB  LOAD                ;产生加载上升沿通知CH451处理命令数据
	    MOV   A,#0FCH             ;该数据用以检测位数据结束
INTER_7:
            MOV   C,DOUT              ;读入一位数据
	    CLR   DCLK                    ;产生时钟下升沿通知CH451输出下一位
	    RLC   A                       ;数据移入ACC,高位在前,低位在后
	SETB  DCLK
	JC    INTER_7                  ;位数据未完继续,共7位,完成后才移出0
	MOV   DATA_KEY,A               ;保存键值
        INC   DATA_F
	POP   ACC
	POP   PSW
	SETB  EX1
	CLR   IE1              ;清中断标志,该指令需根据实际情况作修改
	RET

;**********************************
DELAY_1S:
             MOV      TIMER1,#1
TEST_DYA:    MOV      TIMER2,#255
TEST_DYA1:   MOV      TIMER3,#255
TEST_DYA2:   NOP
	    NOP
	    DJNZ     TIMER3,TEST_DYA2
             DJNZ     TIMER2,TEST_DYA1
	    DJNZ     TIMER1,TEST_DYA
	    RET
;*************************************

END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -