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

📄 温度控制系统 备分2.asm

📁 温度控制系统原程序.要用Altium Designer 6.X打开
💻 ASM
字号:
SDATA    EQU     P1.0   ;数据输出线
SLCK     EQU     P1.1   ;数据锁存信号线
SCLK     EQU     P1.2   ;时钟脉冲输出线
HH       EQU     3DH    ;高两位LED显示数存储区
MID      EQU     3EH    ;中间两位LED显示数存储区
LL       EQU     3FH    ;低两位LED显示数存储区
LEDBUF1  EQU     40H    ;LED1显示缓冲区
LEDBUF2  EQU     41H    ;LED2显示缓冲区
LEDBUF3  EQU     42H    ;LED3显示缓冲区
LEDBUF4  EQU     43H    ;LED4显示缓冲区
LEDBUF5  EQU     44H    ;LED5显示缓冲区
LEDBUF6  EQU     45H    ;LED6显示缓冲区
TT1      EQU     32H    ;温度上限
TT2      EQU     33H    ;温度下限
TT0      EQU     31H    ;实际所测温度
WEI      EQU     21H    ;按键标志位
   ;WEI.0 设置键标志位
   ;WEI.1 + 或-键按下标志位
   ;WEI.2 移位键标志位
   ;WEI.3 确定键标志位
         ORG     0000H
         LJMP    MAIN

;**********************************************************
;程序开始
         ORG    0030H

MAIN:
         MOV     SP,#60H
         MOV     A,#0FFH
         MOV     P0,A    	;P0、P1、P3端口置1
         MOV     P1,A    	;
         MOV     P3,A    	;
         LCALL   CLEAR
         CLR     P2.6           ;关闭指示灯
         CLR     P2.7
         MOV    WEI,#00H
         MOV    TT1,#25H        ;温度显示初值
         MOV    TT2,#45H
LP2:     MOV    HH,#0ABH       ;开机显示HELLO!,等待按键按下
         MOV    MID,#0CDH
         MOV    LL,#00EH
         LCALL  DISPLAY
         JNB    P1.7,LP
         JMP    LP2
;****************************************************
;**********************************************
;显示温度
 LP:     JB     WEI.0,LP1
         LCALL  DELAY100MS    ;调延时
         LCALL  DELAY100MS
         LCALL  DELAY100MS    ;调延时
         LCALL  AD_CONVERT
         MOV    LL,TT0
         MOV    MID,TT2       ;上限TT1,下限TT2,所测温度为TT0
         MOV    HH,TT1
         LCALL  DISPLAY
         LCALL  TESTKEY
         LCALL  Signal
         LJMP   LP
;显示设定闪烁
LP1:     MOV    MID,TT2
         MOV    HH,TT1
         LCALL  AD_CONVERT
         LCALL  DISPLAY
         LCALL  TESTKEY
         JNB    P1.7,LP
         LCALL  SHANSHUO
         ;LCALL  Signal
         LJMP   LP
 ;*********************************************
 ;*********************************************
;显示子程序
 DISPLAY: LCALL  BCD2LED
         LCALL  WRITE5950
         RET
;BCD码转化为LED显示码子程序
BCD2LED: MOV     A,LL
         ANL     A,#0FH         ;屏蔽高4位
         LCALL    TABLE
         MOV     LEDBUF6,A
         MOV     A,LL
         SWAP    A
         ANL     A,#0FH         ;屏蔽原来的低4位
         LCALL    TABLE
         MOV      LEDBUF5,A

         MOV     A,MID
         ANL     A,#0FH         ;屏蔽高4位
         LCALL    TABLE
         MOV     LEDBUF4,A
         MOV     A,MID
         SWAP    A
         ANL     A,#0FH         ;屏蔽原来的低4位
         LCALL    TABLE
         MOV      LEDBUF3,A

         MOV     A,HH
         ANL     A,#0FH         ;屏蔽高4位
         LCALL    TABLE
         MOV     LEDBUF2,A
         MOV     A,HH
         SWAP    A
         ANL     A,#0FH         ;屏蔽原来的低4位
         LCALL    TABLE
         MOV      LEDBUF1,A
         RET
;共阳LED字型码查表子程序
TABLE:  INC     A
        MOVC    A, @A+PC
        RET
        DB 0C0H,0F9H,0A4H,0B0H,099H,092H,82H,0F8H
        ;   0     1    2    3    4    5   6    7
        DB 80H,90H,89H,86H,0C7H,0C7H,079H,0FFH
        ;   8   9   H   E   L    L    !
;**********************************************************
CLEAR:          CLR     A           ;
                MOV     P2,A        ;P2口置0
                MOV     R0,#31H     ;内存循环清零(31H-45H)
                MOV     R6,#15H
LOOP0:
                MOV     @R0,A
                INC     R0
                DJNZ    R6,LOOP0
                MOV     A,#0FFH     ;

                RET             	;子程序返回
;**********************************************************
;**********************************************************
WRITE5950:      LCALL WRITE595
                SETB SLCK
                NOP
                CLR SLCK
                NOP
                RET
                ;用到的寄存器: R5
WRITE595:       MOV R5,#08H
                MOV A,LEDBUF6
                LCALL    LOOP
                MOV R5,#08H
                MOV A,LEDBUF5
                LCALL    LOOP
                MOV R5,#08H
                MOV A,LEDBUF4
                LCALL    LOOP
                MOV R5,#08H
                MOV A,LEDBUF3
                LCALL    LOOP
                MOV R5,#08H
                MOV A,LEDBUF2
                LCALL    LOOP
                MOV R5,#08H
                MOV A,LEDBUF1
                LCALL    LOOP
                RET

LOOP:            RLC A
                 MOV SDATA,C
                SETB SCLK
                NOP
                CLR SCLK
                DJNZ R5,LOOP
                RET
 ;*************************************************
 ;**************************************************
 ;闪烁子程序    用到的寄存器:R1
   SHANSHUO: MOV   50H,HH
            MOV   51H,MID
            MOV   A,#HH
          ADD   A,R2
          MOV   R1,A
          MOV   A,@R1
          MOV   @R1,0FFH
          LCALL  DISPLAY       ;调显示 
          LCALL  DELAY100MS    ;调延时
          LCALL  DELAY100MS
          JNB   P1.4,SH
          JNB   P1.5,SH
          JNB   P1.7,SH
          LCALL DELAY100MS
          MOV   HH,50H
          MOV   MID,51H
          LCALL DISPLAY
          LCALL  DELAY100MS
          JNB   P1.4,SH
          JNB   P1.5,SH
          JNB   P1.7,SH
          DJNZ   52H,SH
  SH:     RET
  ;*************************************************************
  ;*************************************************************
   ;报警指示子程序
   Signal:
         MOV     A,TT0
         CLR     C
         SUBB    A,TT2
         JNC      L1         ;CY=0,(LL)>(MID),跳转到L1
         SETB     P2.6       ;CY=1,(LL)<(MID),点亮P2.6口LED,绿灯
         RET
  L1:    CLR     C
         SUBB    A,TT1
         JNC     L2          ;CY=0, (LL)>(HH),跳转到L2
          RET                ;CY=1, (MID)<(LL)<(HH) ,返回
  L2:
         SETB    P2.7        ; 点亮P2.7口LED,红灯
         RET
 ;**************************************************************
 ;**************************************************************
;按键扫描子程序
TESTKEY: JB    P1.3,JJ1   ;扫描设定键
         LCALL DELAY10     ;消抖
         JB    P1.3,JJ1
JJJ1:    LCALL DELAY10
         JNB   P1.3,JJJ1  ;
         SETB  WEI.0
         LCALL SETT1
         RET
JJ1:     JB    P1.4,JJ2   ;扫描移位键
         LCALL DELAY10     ;消抖
         JB    P1.4,JJ2
JJJ2:    LCALL DELAY10
         JNB   P1.4,JJJ2
         SETB  WEI.2
         LCALL MOV1
         RET
JJ2:     JB    P1.5,JJ3     ;扫描+键
         LCALL DELAY10      ;消抖
         JB    P1.5,JJ3
         SETB   WEI.1     ;+标志位置1
         LCALL DISPLAY
         LCALL JIA
         RET
JJ3:     JB    P1.7,JJ4    ;扫描确认键
         LCALL DELAY10      ;消抖
         JB    P1.7,JJ4
JJJ4:    LCALL DELAY10
         JNB   P1.7,JJJ4
         SETB  WEI.3
         LCALL OK
JJ4:     RET
;***********************************************
;***********************************************
;加键功能子程序
JIA:     JNB   WEI.0,J2
         MOV   A,R2
         CJNE  A,#00H,J1
         MOV   R1,#TT1           ;将TT1首地址放入R1
         ADD   A,R1
         MOV   R1,A
         INC   @R1
         MOV   A,@R1
         ADD   A,#00H
         DA    A
         MOV   R4,A
         LCALL DELAY100MS
         LCALL DELAY100MS
         LCALL DELAY100MS
         LCALL DISPLAY
         MOV   A,#90H
         CLR   C
         SUBB  A,@R1
         JNC    CC
         MOV   R4,#00H
CC:      MOV   A,R4
         MOV   @R1,A
         MOV   HH,A
         ;CLR   P0.0
         LCALL DISPLAY
         JNB   P1.5,JIA
         LJMP   J2
J1:      CJNE  R2,#01H,J2
         MOV   R1,#TT1
         MOV   A,R2
         ADD   A,R1
         MOV   R1,A
         INC   @R1
         MOV   A,@R1
         ADD   A,#00H
         DA    A
         MOV   R4,A
         LCALL DELAY100MS
         LCALL DELAY100MS
         LCALL DELAY100MS
         LCALL DISPLAY
         MOV   A,#90H
         CLR   C
         SUBB  A,@R1
         JNC   DD
         MOV   R4,#00H
DD:      MOV   A,R4
         MOV   @R1,A
         MOV   MID,A
         LCALL DISPLAY
         JNB   P1.5,JIA
J2:      MOV   50H,HH
         MOV   51H,MID
         RET
 ;******************************************************
 ;******************************************************
;设定键功能
SETT1:   JNB     P1.7,SE1
        MOV    R2,#00H
        MOV    52H,#90H
SE:     LCALL  SHANSHUO
        MOV      LL,#0FFH
        LCALL    DISPLAY
SE1:       RET
 ;***********************************************
;移位键功能
MOV1:    JNB    WEI.0,KK
         INC    R2
         MOV    A,R2
         CJNE   A,#02H,KK
         MOV    R2,#00H
KK:      RET
;************************************************
;确认键功能
OK:      JNB   WEI.0,OK1
         CLR   WEI.0         ;确认键按下,清所有其它键标志位
         CLR   WEI.1
         CLR   WEI.2
      ;   MOV   TT1,MID
      ;   MOV   TT2,HH
         MOV   R1,#0FFH
         INC   R1
         MOV   A,#TT1
         ADD   A,R1
         MOV   R1,A
         MOV   @R1,HH
         INC   R1
         MOV   @R1,MID
       ;  MOV   TT0,#00H
         LCALL DISPLAY
         LCALL DELAY100MS
OK1:     RET
;*************************************************************************
;模数转换测量子程序
AD_CONVERT:     CLR     A          ;清累加器A
                MOV     P2,A       ;清P2口
              ;  MOV     P3,A
                                   ;转换值存放首址
                SETB    P2.3       ;锁存测试通道地址
                NOP                ; 延时2微秒
                CLR     P2.3       ;测试通道地址锁存完毕
                NOP
                SETB    P2.4      ; 启动测试,发开始脉冲
                NOP               ; 延时2微秒
                NOP
                CLR     P2.4      ; 发启动脉冲完毕
                NOP               ;延时4微秒
                NOP
                NOP
                NOP
WAIT:           JB     P3.7,ADS   ;等A/D转换结束信号后转MOVD
                SJMP   WAIT        ;P3.7为0等待
ADS:            LCALL  MOVD
                RET
;-------------------------------------------------------------------
; 取A/D转换数据至3FH内存单元
MOVD:
                SETB    P2.5              ;0890输出允许
                NOP
                MOV     A,P0              ;将A/D转换值移入A
                MOV     B,#02D
                DIV     AB
                ADD     A,#13D
                MOV     53H,A
                LCALL   HEX2BCD            ;调用十六进制转化为BCD码子程序
                CLR     P2.5              ;关闭0890输出
                NOP
                CLR     A                 ;A/D转换结束,恢复端口
                MOV     P2,A              ; P2口置0
                MOV     A,#0FFH           ;
                MOV     P0,A              ; P0口置1
                MOV     P1,A              ; P1口置1
                MOV     P3,A              ; P3口置1
                RET

;********************************************************
;十六进制转化为BCD码子程序
HEX2BCD:
             MOV    A,53H
             MOV      B,#10D
             DIV      AB
             SWAP    A
             ADD     A,B
             DA      A
             MOV    TT0,A
             RET
;**********************************************************
;**********************************************************
;延时子程序
DELAY100MS:   MOV    53H,#04H
FF3:     MOV    46H,#58H
FF1:     MOV    47H,#8CH
FF2:     DJNZ   47H,FF2
         DJNZ   46H,FF1
         DJNZ   53H,FF3
         RET
;延时10毫秒
DELAY10:
         MOV    48H,#55H
GG1:     MOV    49H,#39H
GG2:     DJNZ   49H,GG2
         DJNZ   48H,GG1
         RET
         END

⌨️ 快捷键说明

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