当前位置: 代码迷 >> 综合 >> 课设:简易温度控制系统(proteus仿真+MASM)
  详细解决方案

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

热度:13   发布时间:2023-12-06 14:08:57.0

课设:简易温度控制系统

课题

将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

代码

; 端口改成实际的端口,例如我所使用的实验箱上的IOY0的地址为首0600H
; 则APORT地址则为0600H,BPORT:0602H,CPORT:0604H,CTRLP:0600H
APORT  EQU  0000H
BPORT  EQU  0002H
CPORT  EQU  0004H
CTRLP  EQU  0006H
DATA SEGMENTOBUF 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,40HWHICH DB 0
DATA ENDS
CODE SEGMENTASSUME CS:CODE,DS:DATA
START:MOV SI,DATAMOV DS,SI;设置控制字MOV AL,89HMOV DX,CTRLPOUT DX,AL
READ:MOV DX,CPORTIN AL,DXMOV AH,0HMOV CX,3MOV DX,0DIV CX; 判断正负CMP AX,20JAE CHAIJMP CHAI1;CALL BTOAD;CALL PRINT;JMP READ; 计算正数
CHAI:SUB AX,20CMP AX,60JB YYY
XXX:MOV AX,60
YYY:MOV BX,03HMOV CX,10MOV DI,OFFSET OBUF+3
LOOP1:MOV DX,0DIV CXMOV DS:[DI],DLDEC DIDEC BXJNZ LOOP1
JMP KEY1; 计算负数,基本上和正数一样
CHAI1:MOV DX,20SUB DX,AXMOV AX,DXMOV DI,OFFSET OBUF+1MOV DX,0BHMOV DS:[DI],DXMOV BX,02HMOV CX,10MOV DI,OFFSET OBUF+3
LOOP2:MOV DX,0DIV CXMOV DS:[DI],DLDEC DIDEC BXJNZ LOOP2
JMP KEY1; 显示数字; 设置延时MOV CX,0FH
KEY1:MOV SI,DATAMOV DS,SIMOV BX,03H; 控制数码管显示的位置MOV AL,11111011BMOV DI,OFFSET WHICHMOV DS:[DI],AL
KEY11:MOV DX,BPORTMOV AL,11111111BOUT DX,ALMOV AH,0HMOV DI,OFFSET OBUFADD DI,BXMOV AL,DS:[DI]MOV SI,DATAMOV DI,OFFSET NUMSADD DI,AXMOV DS,SIMOV AL,DS:[DI]MOV DX,APORTOUT DX,ALMOV DX,BPORTMOV DI,OFFSET WHICHMOV AL,DS:[DI]OUT DX,ALROR AL,1MOV DS:[DI],ALDEC BXJNZ KEY11DEC CX
JNZ KEY1
JMP READ;RET
;PRINT ENDP
CODE ENDSEND START
  相关解决方案