欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

led.txt

这次课程设计的内容是LED、步进电机和喇叭的控制
TXT
字号:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TM1
ORG 0030H
MAIN: MOV A,#80H
      MOV DPTR,#0FF2bH   ;8255控制 口
      MOVX @DPTR,A
      A_BIT equ 20h ;数码管个位数存放内存位置
      B_BIT equ 21h ;数码管十位数存放内存位置
      TEMP equ 22h ;计数器数值存放内存位置

      CLR P1.4  ;喇叭清0
      MOV DPTR,#0FF2AH;8255的C口地址
      MOV 24H,#08H;灯泡显示
AA1:  MOV A,24H;将08h放入A中   第一个功能:灯泡循环亮

      MOVX @DPTR,A
      LCALL DELAY
      RR A;右循环
      MOV 24H,A

      MOV A,#0FH

      MOV P1,A   ;P1口放置开关
       
      MOV A,P1
      ANL A,#0FH
      SUBB A,#0FH
      JZ AA1;如果A为0则没有开关按下,跳转到AA1

KEY:  MOV DPTR,#0FF29H  ;B口地址   判断开关情况
      MOV A,#05H
      MOVX @DPTR,A;让步进电机复位
      MOV A,#0FFH
      MOV P1,A  ;P1口开关地址全部置1
      MOV A,P1;读P1口

      ANL A,#0FH
      CLR C
      SUBB A,#0EH
      JZ LEW;如果第一个开关按下,则跳转至LEW
      MOV A,#0FFH
      MOV P1,A
      MOV A,P1
      ANL A,#0FH
      CLR C
      SUBB A,#09H;如果第二个和第三个开关都按下,则跳转至LEW2
      JZ LEW2

      MOV A,#0FFH
      MOV P1,A
      MOV A,P1
      ANL A,#0FH
      CLR C
      SUBB A,#07H;如果第四个开关按下,则跳转至PP
      JZ PP
      RET
      LJMP KEY
LEW:  MOV R3,#50 ;正向循环步数   第二功能:单独按下开关1,步进电机正向慢走50,反向快走100步,依次循环
KEY1: MOV R4,#08

      MOV R6,#00H

KEY10:CLR P1.4;喇叭清0
      MOV A,R6
      MOV DPTR,#PSTB;表首地址
      MOVC A,@A+DPTR;把第一个数据赋给A
      MOV DPTR,#0FF29H ;B口地址,送步进电机
      MOVX @DPTR,A

KEY11:LCALL DEL

      INC R6;依次将表中地址赋给A
      DEC R3;走的步数减一
      MOV A,P1;转的过程中判断有没有开关按下
      ANL A,#0FH
      SUBB A,#0FH
      JNZ KEY;如果 有开关按下则跳回KEY
      MOV A,R3;判断是否走完50步
      JZ REW;如果走完就跳转到REW
      DEC R4
      MOV A,R4
      JNZ KEY10;不等于0就继续赋值
      LJMP KEY1;等于0就重新赋值

TM1:LJMP TM2

PP:LJMP PP1     第四个功能:单独按下开关4时,步进电机先慢走50步,扬声器响2声,停留50秒
KK:LJMP KEY
REW:  MOV R3,#100;开始反转
L1:   MOV R4,#08

      MOV R6,#07H
L2:   CLR P1.4
      MOV A,R6
      MOV DPTR,#PSTB
      MOVC A,@A+DPTR
      MOV DPTR,#0FF29H ;B口步进电机
      MOVX @DPTR,A

DL1:  LCALL DELAY
      DEC R6
      DEC R3

      MOV A,P1
      ANL A,#0FH
      SUBB A,#0FH
      JNZ KK

      MOV A,R3
      JZ LEW
      DEC R4 ;100步未到,检查循环次数
      MOV A,R4

      JNZ L2;不等于0就继续
      LJMP L1;等于0就跳转到L1

PP1:LJMP REW3
KK1:LJMP KK
LEW2:MOV R3,#100;走100步  第三功能:同时按下开关2,开关3时,步进电机来回走100步,然后扬声器发声10次,依次循环
KEY2: MOV R4,#08

      MOV R6,#00H

KEY20:CLR P1.4
      MOV A,R6
      MOV DPTR,#PSTB
      MOVC A,@A+DPTR
      MOV DPTR,#0FF29H ;步进电机B口地址
      MOVX @DPTR,A

KEY21:LCALL DELAY

      INC R6
      DEC R3
      MOV A,P1
      ANL A,#0FH
      SUBB A,#0FH
      JNZ KK
      MOV A,R3
      JZ REW2
      DEC R4
      MOV A,R4
      JNZ KEY20
      LJMP KEY2
KK2:LJMP KK1
REW2:  MOV R3,#100
L12:   MOV R4,#08

      MOV R6,#07H
L22:  CLR P1.4
      MOV A,R6
      MOV DPTR,#PSTB
      MOVC A,@A+DPTR
      MOV DPTR,#0FF29H ;B口
      MOVX @DPTR,A

DL12:  LCALL DELAY
      DEC R6
      DEC R3

      MOV A,P1
      ANL A,#0FH
      SUBB A,#0FH
      JNZ KK
      CLR P1.4
      MOV A,R3

      JZ SO;跳转到喇叭的程序
      DEC R4 ;100步未到,检查循环次数
      MOV A,R4

      JNZ L22
      LJMP L12
TM2:LJMP TM3
SO:   MOV R5,#10
SOUND1:MOV 27H,#03H
CCC2:  MOV 26H,#0FFH
CCC1:   CLR P1.4
        LCALL DEE;延时
        SETB P1.4;产生一个脉冲
        DJNZ 26H,CCC1
        DJNZ 27H,CCC2
        LCALL DE
        DJNZ R5,SOUND1;如果没响够10次则继续响
        CLR P1.4;停止响喇叭
        LJMP LEW2;跳到LEW2继续转
REW3: MOV R3,#50;慢转50步
L13:   MOV R4,#08

      MOV R6,#00H
L23:   MOV A,R6
      MOV DPTR,#PSTB
      MOVC A,@A+DPTR
      MOV DPTR,#0FF29H ;B口地址
      MOVX @DPTR,A

DL13:  LCALL DE
      INC R6
      DEC R3

      MOV A,P1
      ANL A,#0FH
      SUBB A,#0FH
      JNZ KK2
      CLR P1.4
      MOV A,R3

      JZ SO2;转完50步,喇叭响两下
      DEC R4 ;50步未到,检查循环次数
      MOV A,R4

      JNZ L23
      LJMP L13



SO2:   MOV R5,#02
SOUND2:MOV 27H,#03H
CCC4:  MOV 26H,#0FFH
CCC3:   CLR P1.4
        LCALL DEE
        SETB P1.4
        DJNZ 26H,CCC3
        DJNZ 27H,CCC4
        LCALL DE
        DJNZ R5,SOUND2
        CLR P1.4
        LJMP LIGHT




TM3:LJMP IT0P
LIGHT:MOV TEMP,#50 ;初始化计数器
STLOP:ACALL DISPLAY
     ; LCALL DE
      DEC TEMP
      MOV A,TEMP
      CJNE A,#0,NEXT
      LJMP REW3
NEXT: LJMP STLOP
DISPLAY:MOV A,TEMP
        MOV B,#10
        DIV AB

        MOV B_BIT,A;十位在A
        MOV A_BIT,B;个位在B
        MOV DPTR,#NUMTAB;数码管数字的字型
        


DPLOP:  LCALL PT0M2
LOOP:   MOV C,F0

        CLR P1.4
        MOV A,A_BIT
        MOV DPTR,#NUMTAB
        MOVC A,@A+DPTR
        MOV 25H,A
        MOV DPTR,#0FF21H;选中字位口
        MOV A,#01H
        MOVX @DPTR,A
        MOV DPTR,#0FF22H ; 8155字型口
        
        MOV A,25H
        MOVX @DPTR,A

        LCALL DEE
        MOV DPTR,#0FF21H;选中自位口
        MOV A,#00H
        MOVX @DPTR,A
        MOV A,B_BIT

        MOV DPTR,#NUMTAB
        MOVC A,@A+DPTR
        MOV 25H,A
        MOV DPTR,#0FF21H
        MOV A,#02H
        MOVX @DPTR,A
        MOV DPTR,#0FF22H
        MOV A,25H
        ;CLR P2.6
        MOVX @DPTR,A

        LCALL DEE

        MOV DPTR,#0FF21H
        MOV A,#00H
        MOVX @DPTR,A
        ;DJNZ R1,DPLOP
        ;DJNZ R0,DPLL
        JNC LOOP
        RET

PT0M2:  MOV TMOD,#01H;方式1,16位定时计数器
        MOV TL0,#0B0H
        MOV B,#0AH
        MOV TH0,#3CH
        SETB TR0
        SETB ET0
        CLR F0
        SETB EA
        RET
IT0P:   MOV TL0,#0B0H
        MOV TH0,#3CH
        DJNZ B,LOOP1
        CLR TR0
        SETB F0
LOOP1:   RETI
DE:    MOV R2,#0FFH
DE_1:  MOV R7,#0FFH
DE_2:  DJNZ R7,DE_2
          DJNZ R2,DE_1

DEL:    MOV R2,#0FFH
DEL_1:  MOV R7,#0FFH
DEL_2:  DJNZ R7,DEL_2
          DJNZ R2,DEL_1



DELAY:    MOV R2,#0FFH
DELAY_1:  MOV R7,#0FFH
DELAY_2:  DJNZ R7,DELAY_2
          DJNZ R2,DELAY_1
DEE:MOV R2,#0FFH
DEE1:DJNZ R2,DEE1

          RET

PSTB: DB 05H,15H,14H,54H,50H,51H,41H,45H
NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

 END

⌨️ 快捷键说明

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