课设:简易温度控制系统(proteus仿真+MASM)

课设:简易温度控制系统

课题

将D/A(实验箱自带)温度实时地显示在数码管显示器上,数码管3位,显示(-20~60)间的温度值。温度传感器的输出用实验箱上的旋钮模拟给出。

分析

旋钮的输出是0-5V的,可以利用ADC0809将输出转换为0-255的数字,将0-255显示为-20到60,我是先将数字减去60再除以3产生新的数字,如果新的数字超过60,则显示60。设ADC0809转换的数字为x,则温度t=min(x/3,60),这里的除是整除。
关于数码管,我们其实就是用每个数码管显示一位数,所以要先对温度t进行拆分,拆分为3位数存到数组里,对于显示多个数字,只需要加个延时即可。

仿真图

这里的ADC0809无法仿真,所以只仿真了其他部分,0809就是个摆设(emm,好像可以用0808代替,但是我的版本依然不行)。
课设:简易温度控制系统(proteus仿真+MASM)_第1张图片

代码

; 端口改成实际的端口,例如我所使用的实验箱上的IOY0的地址为首0600H
; 则APORT地址则为0600H,BPORT:0602H,CPORT:0604H,CTRLP:0600H
APORT  EQU  0000H
BPORT  EQU  0002H
CPORT  EQU  0004H
CTRLP  EQU  0006H
DATA SEGMENT
    OBUF DB 0,0,0,0,0,0,0
    ; 分别代表-,0,1,2,3,4,5,6,7,8,9在数码管上的显示
    NUMS DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,79H,40H
    WHICH DB 0
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV SI,DATA
    MOV DS,SI
    ;设置控制字
    MOV AL,89H
    MOV DX,CTRLP
    OUT DX,AL
READ:
    MOV DX,CPORT
    IN AL,DX
    MOV AH,0H
    MOV CX,3
    MOV DX,0
    DIV CX
    ; 判断正负
    CMP AX,20
    JAE CHAI
    JMP CHAI1
    ;CALL BTOAD
    ;CALL PRINT
    ;JMP READ

; 计算正数
CHAI:
    SUB AX,20
    CMP AX,60
    JB YYY
XXX:
    MOV AX,60
YYY:
    MOV BX,03H
    MOV CX,10
    MOV DI,OFFSET OBUF+3
LOOP1:
    MOV DX,0
    DIV CX
    MOV DS:[DI],DL
    DEC DI
    DEC BX
    JNZ LOOP1
JMP KEY1

; 计算负数,基本上和正数一样
CHAI1:
    MOV DX,20
    SUB DX,AX
    MOV AX,DX
    MOV DI,OFFSET OBUF+1
    MOV DX,0BH
    MOV DS:[DI],DX
    MOV BX,02H
    MOV CX,10
    MOV DI,OFFSET OBUF+3
LOOP2:
    MOV DX,0
    DIV CX
    MOV DS:[DI],DL
    DEC DI
    DEC BX
    JNZ LOOP2
JMP KEY1

; 显示数字
    ; 设置延时
    MOV CX,0FH
KEY1:
    MOV SI,DATA
    MOV DS,SI
    MOV BX,03H
    ; 控制数码管显示的位置
    MOV AL,11111011B
    MOV DI,OFFSET WHICH
    MOV DS:[DI],AL
KEY11:
    MOV DX,BPORT
    MOV AL,11111111B
    OUT DX,AL

    MOV AH,0H
    MOV DI,OFFSET OBUF
    ADD DI,BX
    MOV AL,DS:[DI]


    MOV SI,DATA
    MOV DI,OFFSET NUMS
    ADD DI,AX
    MOV DS,SI
    MOV AL,DS:[DI]

    MOV DX,APORT
    OUT DX,AL

    MOV DX,BPORT
    MOV DI,OFFSET WHICH
    MOV AL,DS:[DI]
    OUT DX,AL
    ROR AL,1
    MOV DS:[DI],AL

    DEC BX
    JNZ KEY11
    DEC CX
JNZ KEY1
JMP READ

;RET
;PRINT ENDP
CODE ENDS
    END START

你可能感兴趣的:(汇编)