首页 > 其他分享 >学生小组设计自选实验【硬件课设】

学生小组设计自选实验【硬件课设】

时间:2022-10-17 15:08:17浏览次数:47  
标签:课设 al AL MOV 硬件 自选 DX AX mov


学生分组和选题【硬件课程设计】

前言

2022/8/31

以下资源源自老师资料
仅供学习交流使用

说明:
此文章只为安装软件所做,为公开发布
其余文章在课设期间只作仅我可见

课设完毕后为公开

学生小组设计自选实验

第一周 周三:学生小组设计自选实验

学生小组对所选实验进行需求分析,建立计算模型。分别进行Proteus上连线和汇编程序开发。注意Proteus上进行相应电路连线,编写对应的汇编程序,同时注意访问端口地址设置。

1方案设计

最初的思路:
1.使用LM35温度传感器进行温度采集,
将采集到的电压值(模拟量)经过ADC0808芯片转换成数字信号
2.传入到8255的C端输入,(通过程序转换到-20到+60,低于-20按-20算,高于+60按+60算)
再通过8255的A、B端输出到4位数码管
另外:
如果温度传感器使用滑动变阻器模拟的话
可以(0-5V)等比例划分到(-20~+60)
(或者指定下(上)阈值,低于(高于)下(上)阈值,按-20(+60)算

要解决一下器件的使用

  1. LM35温度传感器
  2. adc0808模数转换
  3. 4位数码管

设计中思路:
1.利用滑动变阻器的电压来模拟温度的变化。
2.adc0808进行模数转换。把电压(0-5V)转换为数组(0-255)
3.将0-255变为-20到60
未用方案一:把输入到的0~255.除于3减去20 ,得0 ~65,大于60按60算
使用方案二:把输入的0~255中大于240按240算,除以3减去20直接就是0 ~60

2 系统原理图设计

学生小组设计自选实验【硬件课设】_硬件课设

图4-1 温控系统原理图

3 系统仿真与仿真结果

学生小组设计自选实验【硬件课设】_.net_02

实验结果说明:滑动变阻器,数字显示-20~60,继续滑动仍显示60。

学生小组设计自选实验【硬件课设】_protel9s_03

图4-2 温控系统仿真图

4 PCB板布线

Sch图:主要器件有8255和4位数码管。

学生小组设计自选实验【硬件课设】_.net_04


图 4-3 sch图Pcb图:根据sch图实现。

学生小组设计自选实验【硬件课设】_protel9s_05

图 4-4 pcb-2d图

学生小组设计自选实验【硬件课设】_硬件课设_06

图4-5 pcb-3d图

5附录代码

开发过程

参考

以下参考都没实现

单片机 数字电压表(ADC0809)​

1

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

学生小组设计自选实验【硬件课设】_数码管_07

IOY0 EQU 0600H
APORT EQU IOY0+0000H
BPORT EQU IOY0+0002H
CPORT EQU IOY0+0004H
CTRLP EQU IOY0+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

2

Proteus 8086模拟温度采集 使用LM35温度传感器​

学生小组设计自选实验【硬件课设】_硬件课设_08

IOY0    EQU 0600H
APORT EQU IOY0+0000H
BPORT EQU IOY0+0002H
CPORT EQU IOY0+0004H
CTRLP EQU IOY0+0006H

CODE SEGMENT
ASSUME CS:CODE
START:

mov dx,00h;选中
in al,dx;将输出值存入al寄存器

MOV AH,4CH
INT 21H

CODE ENDS
END START


CODE ENDS
END START

3

学生小组设计自选实验【硬件课设】_protel9s_09

MY8255_A      EQU  0600H
MY8255_B EQU 0602H
MY8255_C EQU 0604H
MY8255_CON EQU 0606H

SSTACK SEGMENT STACK
DW 16 DUP(?)
SSTACK ENDS

DATA SEGMENT

DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
VALUE DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:SSTACK
START:
MOV AX,DATA ;初始化数据段
MOV DS,AX
MOV AL,80H ;确定A,B端口输出
MOV DX,MY8255_CON ;初始化8255
OUT DX,AL

LP: MOV DX,640H;ADC0809采集数据
OUT DX,AL
CALL ADDLY
IN AL, DX
MOV VALUE, AL
CMP VALUE,0

CMP VALUE, 20
JGE LOOP1
MOV BL,20

SUB BL,AL
MOV AL,BL
MOV SI,1000
MOV AH,00H
MOV BL,100
DIV BL
MOV [SI],AL ;获得百位数

MOV AL,AH
MOV AH,00H
MOV BL,10
DIV BL
MOV [SI+1],AL ;获得十位数
MOV [SI+2],AH ;获得个位数

;显示部分
;百位数的显示
MOV BX,OFFSET DTABLE
MOV DI,0000H
MOV AL,[SI]
AND AX,00FFH
MOV BX,AX
MOV AL,40H
MOV DX,MY8255_A
OUT DX,AL
MOV AL,0FBH
MOV DX,MY8255_B
OUT DX,AL
CALL DISPDLY

;十位数的显示
MOV BX,OFFSET DTABLE
MOV AL,[SI+1]
AND AX,00FFH
ADD BX,AX
MOV AL,[BX]
MOV DX,MY8255_A
OUT DX,AL
MOV AL,0FDH
MOV DX,MY8255_B
OUT DX,AL
CALL DISPDLY

;个位数的显示
MOV BX,OFFSET DTABLE
MOV AL,[SI+2]
AND AX,00FFH
ADD BX,AX
MOV AL,[BX]
MOV DX,MY8255_A
OUT DX,AL
MOV AL,0FEH
MOV DX,MY8255_B
OUT DX,AL
CALL DISPDLY
JMP LP
LOOP1:
CMP AX,80
JNB QQQ
SUB AL,20
MOV SI,1000
MOV AH,00H
MOV BL,100
DIV BL
MOV [SI],AL ;获得百位数

MOV AL,AH
MOV AH,00H
MOV BL,10
DIV BL
MOV [SI+1],AL ;获得十位数
MOV [SI+2],AH ;获得个位数

;显示部分
;百位数的显示
MOV BX,OFFSET DTABLE
MOV DI,0000H
MOV AL,[SI]
AND AX,00FFH
MOV BX,AX
MOV AL,[BX]
MOV DX,MY8255_A
OUT DX,AL
MOV AL,0FBH
MOV DX,MY8255_B
OUT DX,AL
CALL DISPDLY

;十位数的显示
MOV BX,OFFSET DTABLE
MOV AL,[SI+1]
AND AX,00FFH
ADD BX,AX
MOV AL,[BX]
MOV DX,MY8255_A
OUT DX,AL
MOV AL,0FDH
MOV DX,MY8255_B
OUT DX,AL
CALL DISPDLY

;个位数的显示
MOV BX,OFFSET DTABLE
MOV AL,[SI+2]
AND AX,00FFH
ADD BX,AX
MOV AL,[BX]
MOV DX,MY8255_A
OUT DX,AL
MOV AL,0FEH
MOV DX,MY8255_B
OUT DX,AL
CALL DISPDLY

JMP LP
QQQ:;SAN三条
MOV AL,40H
MOV DX,MY8255_A
OUT DX,AL
CALL DISPDLY

MOV AL,40H
MOV DX,MY8255_A
OUT DX,AL
CALL DISPDLY

MOV AL,40H
MOV DX,MY8255_A
OUT DX,AL
CALL DISPDLY
JMP LP

;延迟部分
ADDLY PROC
PUSH CX
PUSH AX
MOV CX, 050H
A6: MOV AX, 050H
A7: DEC AX
JNZ A7
LOOP A6
POP AX
POP CX
RET
;显示部分
DISPDLY PROC
PUSH CX
MOV CX,000AH
T1: MOV AX,00FFH
T2: DEC AX
JNZ T2
LOOP T1
POP CX
RET
CODE ENDS
END START

4

ad转化输出电压值8086和ADC0808的Proteus仿真

学生小组设计自选实验【硬件课设】_原理图_10

DATA SEGMENT
;此处输入数据段代码
IOYO equ 0600h;对应的端口地址
a8255 equ IOYO+00H*4;A端口
b8255 equ IOYO+01H*4;B端口
c8255 equ IOYO+02H*4;C端口
m8255 equ IOYO+03H*4;8255控制字
adc0808 equ 0640h;对应的ADC0808的端口
table db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
db 80h,90h,88h,83h,0c6h,0a1h,86h,8eh
result db 5 dup(?)
buf db 5 dup(?)
DATA ENDS

STACK SEGMENT STACK
;此处输入堆栈段代码
db 200 dup(0)
STACK ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATA,SS:STACK
START:

MOV AX,DATA
MOV DS,AX
;准备工作写控制字
lea di,result;用来保存计算后转换的结果
mov dx,m8255
mov al,99h;1001 1001
out dx,al
mov dx,b8255
mov al,0fh
out dx,al
;相当与单片机的while(1)部分
;这里是0808测量部分部分,这里测量得到al的结果为1010 1000
LOOP1:
mov dx,adc0808
mov al,0
out dx,al
mov dx,c8255;C端读取EOC
EOC:
in al,dx
;mov al,1
test al,01h;00表示还在转换
jz eoc
jmp finish
Finish:
mov dx,a8255
in al,dx
;计算转换结果
mov ah,00h;将ah中的内容清零
mov bx,01f4h;500的16进制
mul bx;将al和500相乘,高位放到dx中,低位存在ax中
mov bx,0ffh
div bx;除以255得到的结果,ax中结果为0000 0001 0100 1001
mov cx,ax;cx中备份数据
;显示结果
;将数据转换为十进制
mov bx,10
mov si,2;三位
toDec:
mov dx,0
div bx;(dx,ax)/bx中的数据除以bx
mov [buf+si],dl;余数为该位上的值,第一次循环为个位,第二次为十位
dec si
cmp ax,0;商为0表示算法结束
ja toDec
;计算个位
inc si
mov al,[buf+si]
inc si
mov bx,offset table
xlat
and al,7fh;加上小数点
mov [di],al
;计算第一个小数点位
mov al,[buf+si]
inc si
xlat table
mov [di+1],al
;计算第二个小数点位
mov al,[buf+si]
xlat table
mov [di+2],al
;完成数码管动态扫描刷新
mov dx,b8255;8255芯片
or dx,0800h;;0000 1000 0000 0000
mov al,[di+2]
out dx,al
call delay_2ms
mov dx,b8255
or dx,1000h;0001 0000 0000 0000
mov al,[di+1]
out dx,al
call delay_2ms
mov dx,b8255
or dx,1800h;0001 1000 0000 0000
mov al,[di]
out dx,al
call delay_2ms
jmp LOOP1;循环
MOV AH,4CH
INT 21H

delay_2ms proc near
push bx
mov bx,1ffh
LP2:
pushf
popf
dec bx
jnz lp2
pop bx
ret
delay_2ms endp
CODES ENDS
END START

软件版本说明

我的系统版本:win11

学生小组设计自选实验【硬件课设】_原理图_11

Proteus版本:Proteus-Pro-crack-ha-7.8sp2

学生小组设计自选实验【硬件课设】_硬件课设_12

标签:课设,al,AL,MOV,硬件,自选,DX,AX,mov
From: https://blog.51cto.com/u_15719556/5762904

相关文章