微机课程设计报告
设计题目 温度采集及显示控制
学 院 计算机科学与技术学院
班 级 学 号
姓 名 王成 范俊 张浩俊 吉萌
指导老师
提交时间
一. 设计内容
1 利用ADC0809采用中断方式设计一个温度测控系统,在七段数码管上显示温度值,并根据测试的温度进行控制。
2用红绿灯指示温度范围,当检测温度到达温度上限60℃时红灯显示警告,而温度低于60℃时红灯熄灭,绿灯亮。数码管上的显示内容为:XX ℃(采用十进制显示)(温度值在数码管上显示)。
二. 设计原理及方案
1. 电路原理图
上图中ADC0809的INO 输入端接温度传感的ANZ 端,进行温度量的采集,CLOCK 接1M ;8255A 中A 、B 口与数码管连接如上图,PC 0接直流电机的DCIN ,其中地址端口接200。
2. . 硬件连接示意图
如上图所示,ADC0809的INO 输入端接温度传感的ANZ 端,CLOCK 接1M ,CS09接地址端口208,8255A 中地址端口接200,A 口接下图中的数码管的LA-LH ,B 口接数码管的Y 0-Y 5;PC 0接直流电机DCIN 。
3. 系统功能框图
4. 程序流程图
上图实现了本次实验所要要求的功能:检测温度到达温度上限60℃时启动直流电动机,而温度低于下限30℃时停止直流电动机,并在数码管上显示所采集到的数字量和转换后的模拟量。
三. 汇编源程序代码
code segment ;定义代码段
assume cs:code,ds:code
start: push cs
pop ds
mov dx,203h
mov al,80h ;8255A 初始化设置。8255A 控制字,A 口为输出,B 口为
输出,C 口的低四位为输出,C 口的高四位为输出
out dx,al
mov al,00h
mov dx,200h
out dx,al ;A 口清空
mov al,0ffh
mov dx,201h
out dx,al ;不选中任何位选
fore:mov dx,208h ;启动ADC0809
mov al,00h
out dx,al
nop
nop
nop
mov count,100
fore2:mov dx,208h ;读取转换后的数字量
in al,dx
mov bl,al
lea si,buf
cbw ;获取数字量的个、十、百位
mov cl,10
div cl
mov [si],ah
inc si
mov ah,0
mov cl,10
div cl
mov [si],ah
inc si
mov ah,0
mov cl,10
div cl
mov [si],ah
inc si
mov al,bl
shr al,1 逻辑右移一位,减小位扩展时的误差
cbw
mov cl,10 ;获取模拟温度值的个、十、百位
div cl
mov [si],ah
inc si
mov ah,0
mov cl,10
div cl
mov [si],ah
inc si
mov ah,0
mov cl,10
div cl
mov [si],ah
mov al,bl
shr al,1
cmp al,00111100B ;高于60℃跳至next1
ja next1
cmp al,00011110B ;小于等于30℃跳至next2
jna next2
lop:mov ch,0feh ;数码管显示温度及数字量值 位码的选取, 1110 共阴极 所以1 熄灭0 亮 lea si,buf 段码的选取
disp:mov al,[si] 段码赋值
mov ah,0
lea di,tab
add di,ax
mov al,[di]
mov dx,200h 段码写入
out dx,al
mov al,ch 位码写入
mov dx,201h
out dx,al
call delay
inc si
rol ch,1 不带进位的逻辑循环左移
cmp ch,7fh 判断 位码段 是否为0111 1111 ?
jnz disp
dec count 循环 100 次 让眼睛能够看清楚
jnz lop
jmp fore
next1:
mov dx,203h ;当C 0置位为1时,启动直流电动机
mov al,01h
out dx,al 1111
jmp lop
next2:
mov dx,203h ;当C 0复位时,停止直流电动机转动
mov al,00h
out dx,al
jmp lop
delay proc near ;延时实现
push cx
mov cx,0ffh
lop1:loop lop1
pop cx
ret
delay endp
tab db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
count db 100
buf db 6 dup(?)
code ends
end start
四. 实施结果
1. 数码管显示结果
前三位显示的是模拟温度值,后三位显示的是A/D转换后的数字量。
2.直流电机运行图
当温度高于60度时启动直流电动机
五. 课程设计体会
平时上机实验顺利完成的次数不多,总会碰到一些难缠的小问题而耽误了进度。而这个课程设计实验的成功给我们带来了很大的成就感,一方面一周的课程设计时候给了我们足够的时间准备,另外一方面也离不开我们的积极思考和老师的精心辅导。
在整个课程设计中,我们是这样安排时间的:第1天主要是进行选题,并上网进行了相关内容的查询,设计了大概的完成构思;第2天完成了完成了利用ADC0809和8255A 设计一个温度测控系统,在七段数码管上显示出采集过来的数字量部分;第3、4天完成了当检测温度到数字量上限60时启动直流电动机,而温度低于下限30时停止电动机这个功能。本以为到此功能都实现就完成了,但是老师要求我们把数字量转换为温度量显示,由于转换之间的关系我们不知道,于是实验就停滞下来了;后来我们上网查了相关的资料,并请教了一些同学,得出了ADC0809中35mv/1℃这个公式,也就是大致是数据量的一半为温度值,所以我们在程序中将采集到的数字量右移了一位,得到模拟量。虽然我们对这个值仍感觉到不确定,但这是我们能找到的惟一的公式了,如果还有不对的地方,希望老师能改正。后来第5天我们对程序进行了完善,将三位的数字量转换为了温度并和数字量一并在数码管上显示出来。
刚开始拿到设计题目时候,觉得很难,后来查询了相关资料就有了头绪。然后在实验过程中由简单到难,逐步实现了各个功能。当然在实现各个功能的过程也出现了不少大大小小问题。端口测试不通过、实验箱旁边的白色的开关没有打开导致数码管不能显示数字等等都属于一些小问题。其他的主要就是程序本身的问题了:如何将直接采集来的数字量转化为温度?经过思考和讨论,这些问题在设计过程中都一一被解决了。
经过此次实验,相当于把所学的接口知识又复习了一遍,同时将平时实验中存在的一些疑问都解决掉了。对于8255数码管的显示和0809 A/D转换器基本工作原理有了更深入的了解,对两者结合起来实现比较复杂的功能(本实验中实现了在数码管上显示温度值,并用温度值来控制直流电机的运行情况的功能)也有了一定的了解。总之,受益匪浅。
六. 参考文献
《微机原理及应用》 徐晨 陈继红 王春明 徐慧编著 高等教育出版社 《微型计算机原理及应用实验》 股代红 侯晓霞编著 化学工业出版社 《微机原理与接口实验指导与实验题集》周明德 蒋本珊编著 人民邮电出版社 《微机原理应用实验教程》 陈够喜 邵坚婷 张军编著 人民邮电出版社