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

📄 系统程序.asm

📁 这是一篇利用单片机设计的程序,是本人自行设计的,希望对大家有帮助.
💻 ASM
字号:


               ORG      0000H               
               LJMP     MAIN
               ORG      0010H

        MAIN:  MOV      SP,#60H              ;设置堆栈指针
               MOV      A,#0FFH
               MOV      P0,A                 ;P0口高电平,使灯灭
               MOV      P1,A                 ;P1口做输入先置位
               MOV      P2,A                 ;关LED显示
               SETB     P3.1                 ;关报警
         L1:   JB       P1.0,L1              ;判断P1.0是否按下,没有则等待
               LCALL    DELAY10MS            ;有键按下延时消抖
               JB       P1.0,L1              ;再次确定是否有键按下
               CLR      P0.0                 ;是则P0.0口对应的 灯亮
               LCALL    DELAY5S              ;延时5S

               ACALL    BELL                 ;5S时间到发出报警声
               SETB     P0.0                 ;P0.0口灯灭
               SETB     P1.0                 ;P1.0置位为下次再按下做准备


     DD1:   JNB         P1.1,SW1              ;键盘扫描程序,有键按下则转向相应子程序

            JNB         P1.2,SW2

            JNB         P1.3,SW3

            JNB         P1.4,SW4
               SJMP     DD1                   ;等待有键按下,没有则循环扫描
     DD2:      JB       P1.0,$                  ;P1.0再次按下则调用显示子程序
               LCALL    DELAY1MS              ;延时1MS消抖
               LCALL    DISP
               SJMP     MAIN                  ;无限循环

        SW1:  LCALL   DELAY10MS               ;调用程序
              LCALL   KEY1
              JMP     DD2                     ;调用的程序实行完后转回,等待P1.0键按下
        SW2:  LCALL   DELAY10MS
              LCALL   KEY2
              JMP     DD2
        SW3:  LCALL   DELAY10MS
              LCALL   KEY3
              JMP     DD2
        SW4:  LCALL   DELAY10MS
              LCALL   KEY4
              JMP     DD2
        KEY1:                                  ;各个按键功能子程序
               MOV    A,#0FFH                  ;关闭LED显示
               MOV    P2,A
               MOV    P1,A                     ;关闭位选
               ACALL  BELL                     ;调用报警程序
               CLR    P0.1                     ;灯亮
       LOOP1:  CLR    P1.6                     ;位选控制,右边的LED
               MOV    A,#0F9H                  ;数字1的段码
               MOV    P2,A                     ;送P2口显示
               LCALL  DELAY1MS
               MOV    P2,#0FFH                 ;关闭
               SETB   P1.6
               CLR    P1.5                     ;位选控制,左边的LED
               MOV    A,#0C0H                  ;数字0的段码
               MOV    P2,A                     ;送P2口显示
               LCALL  DELAY1MS
               MOV    P2,#0FFH                 ;关闭
               SETB   P1.5
               JNB    P1.0,W1                  ;等待P1.0键按下,按下则转回
               SJMP   LOOP1                    ;反复循环
          W1:  RET

        KEY2:
	       MOV    A,#0FFH
               MOV    P2,A
               MOV    P1,A
               ACALL  BELL                     ;调用报警程序
               CLR    P0.2                     ;灯亮

       LOOP2:  CLR    P1.6
               MOV    A,#0A4H
               MOV    P2,A
               LCALL  DELAY1MS
               MOV    P2,#0FFH
               SETB   P1.6
               CLR    P1.5
               MOV    A,#0C0H
               MOV    P2,A
               LCALL  DELAY1MS
               MOV    P2,#0FFH
               SETB   P1.5
               JNB    P1.0,W2
               SJMP   LOOP2
          W2:  RET

        KEY3:
	       MOV    A,#0FFH
               MOV    P2,A
               MOV    P1,A
	       ACALL  BELL                     ;调用报警程序
               CLR    P0.3                     ;灯亮
       LOOP3:  CLR    P1.6
               MOV    A,#0B0H
               MOV    P2,A
               LCALL  DELAY1MS
               MOV    P2,#0FFH
               SETB   P1.6
               CLR    P1.5
               MOV    A,#0C0H
               MOV    P2,A
               LCALL  DELAY1MS
               MOV    P2,#0FFH
               SETB   P1.5
               JNB    P1.0,W3
               SJMP   LOOP3
          W3:  RET

        KEY4:
	       MOV    A,#0FFH
               MOV    P2,A
               MOV    P1,A
	       ACALL  BELL                     ;调用报警程序
               CLR    P0.4                     ;灯亮
       LOOP4:  CLR    P1.6
               MOV    A,#99H
               MOV    P2,A
               LCALL  DELAY1MS
               MOV    P2,#0FFH
               SETB   P1.6
               CLR    P1.5
               MOV    A,#0C0H
               MOV    P2,A
               LCALL  DELAY1MS
               MOV    P2,#0FFH
               SETB   P1.5
               JNB    P1.0,W4
               SJMP   LOOP4
          W4:  RET

        BELL:                                  ;报警子程序
	       MOV     R3,#0FH
	       ACALL	MUSIC
	       DJNZ    R3,D5
          D5:  RET

       MUSIC:
	       MOV	R5,#60H			;控制音长
         MIC:
	       CPL	P3.1
	       ACALL	DELAY5MS		;控制音调
	       DJNZ	R5,MIC
	       RET

                                                ;显示子程序

       DISP:   MOV     A,#0FFH                  ;关闭显示器
               MOV     P2,A
               MOV     50H,#91                  ;90S初值送50H单元
               MOV     R4,#0DFH                 ;位选控制送R4,先选右边的LED
               MOV     R5,#20                   ;12MZH晶振定时50MS,循环20次得1S
               MOV     TMOD,#01H                ;工作方式1
      LOOP5:   MOV     TH0,#3CH                 ;置初值
               MOV     TL0,#0B0H
               SETB    TR0                      ;启动定时
               DEC     50H
               MOV     A,50H                    ;取出显示数
               MOV     B,#0AH                   ;拆分秒的十位个位
               DIV     AB
               MOV     DPTR,#TABLE              ;数据表首地址
               MOVC    A,@A+DPTR                ;查表
               MOV     R1,A
               MOV     A,B
               MOV     DPTR,#TABLE
               MOVC    A,@A+DPTR
               MOV     R2,A
               MOV     A,R4
               MOV     P1,A
               MOV     R1,A
               MOV     P2,A
               ACALL   DELAY1MS
               MOV     R4,A
               RL      A
               MOV     A,R4
               MOV     P1,A
               MOV     A,R2
               MOV     P2,A
               ACALL   DELAY1MS
               JNB     TF0,$
               CLR     TF0
               DJNZ    R5, LOOP5
               ACALL   BELL
               RET
      TABLE:   DB  0C0H,0F9H,0A4H,0B0H,99H       ;数据表
               DB  92H,82H,0F8H,80H,90H


   DELAY5MS:    MOV	R7,#3H                   ;延时5MS子程序
         D0:	MOV	R6,#40H
		DJNZ	R6,$
		DJNZ	R7,D0
		RET

   DELAY10MS:  MOV     R6,#20                    ;延时10MS子程序
          D1:  MOV     R7,#248
               DJNZ    R7,$
               DJNZ    R6,D1
               RET

    DELAY1MS:  MOV     R6,#2                     ;延时1MS子程序
          D2:  MOV     R7,#248
               DJNZ    R7,$
               DJNZ    R6,D2
               RET

     DELAY5S:  MOV     R5,#50                    ;延时5S子程序
          D3:  MOV     R6,#200
          D4:  MOV     R7,#248
               DJNZ    R7,$
               DJNZ    R6,D4
	       DJNZ    R5,D3
               RET

 	       END

⌨️ 快捷键说明

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