org 000h
jmp main
org 0030h
main:
mov r0,#40h
mov dptr,#0bff8h 指向0809首地址
movx @dptr,a 启动A/D转换
tt1:
movx a,@dptr 读数
movx @r0,a存数
movx @dptr,a 启动A/D转换
lcall delay128us 等待转换完毕(至少128us)
movx a,@dptr
mov @r0,a
lcall tran模数-数据转换
lcall disp数据的静态显示
lcall delay1s
sjmp main
数据转换
tran: 数据转换
mov r0,#40h
mov r3,#00h
mov a,@r0 把r0中的数给a
mov b,#03h 标度变换 3格一度
div ab
mov r3,b
mov b,#0ah 将标度变换结果的整数部分进行BCD码转换
div ab
mov @r0,a 将十位数送显示缓冲单元
inc r0 指向缓冲单元下一地址
mov @r0,b 将个位数送显示缓冲单元
mov a,r3标度转换结果小数部分处理
mov b,#03h 实现三格一度
mul ab
inc r0
mov @r0,a 送显示缓冲单元
lop: ret
静态显示子程序-串入并出
disp:
mov dptr,#tab
mov r0,#40h r0指向缓存区首地址
mov a,@r0将整数位数给a
movc a,@a+dptr 利用表格计算十位七段LED数码管的段码
mov 40h,a将段码结果送入40h
inc r0 r0指向缓存区下一地址
mov a,@r0将个位数给a
movc a,@a+dptr 利用表格计算个位七段LED数码管的段码
mov 41h,a将段码结果送入41h
inc r0 r0指向缓存区棚侍下一地址
mov a,@r0将小数给a
movc a,@a+dptr 利用表格计算小伍举数位七段LED数码管腔和碧的段码
mov 42h,a将段码结果送入42h
最后一位清零
mov 43h,#00h
mov a,43h
mov r7,#8
ccc: jb acc.7,aaa
clr p3.0
jmp bbb
aaa: setb p3.0
bbb: setb p3.1
clr p3.1
rl a
djnz r7,ccc
小数位数显示
mov a,42h
mov r7,#8
cc:
jb acc.7,aa
clr p3.0
jmp bb
aa: setb p3.0
bb: setb p3.1
clr p3.1
rl a
djnz r7,cc 所有位检测后顺序执行
个位数显示
orl 41h,#80h 个位数后置小数点
mov a,41h
mov r7,#8
dd: jb acc.7,ee
clr p3.0
jmp ff
ee: setb p3.0
ff: setb p3.1
clr p3.1
rl a
djnz r7,dd
十位数数显示
mov a,40h
mov r7,#8
gg: jb acc.7,hh
clr p3.0
jmp ii
hh: setb p3.0
ii: setb p3.1
clr p3.1
rl a
djnz r7,gg
tab: db 3fh,06h,5bh,4fh,66h
db 6dh,7dh,07h,7fh,6fh
lop1:
ret
ADC0809转换所需时间
delay128us:
mov r5,#30
delay1:
mov r7,#5
delay2:
nop
nop
djnz r7,delay2
djnz r5,delay1
ret
为使数据显示稳定延时
delay1s:
mov r4,#10
delay00:
mov r5,#100
delay11:
mov r7,#249
delay22:
nop
nop
djnz r7,delay22
djnz r5,delay11
djnz r4,delay00
Ret
.温度传感器AD590基本知识AD590产生的电流与绝对温度成正比,它可接收的工作电压为4V-30V,检测的温度范围为-55℃-+150℃,它有非常好的线性输出性能,温度每增加1℃,其电流增加1uA。
AD590温度与电流的关系如下表所示
摄氏温度
AD590电流
经10KΩ电压
0℃
273.2 uA
2.732V
10℃
283.2 uA
2.832 V
20℃
293.2 uA
2.932 V
30℃
303.2 uA
3.032 V
40℃
313.2 uA
3.132 V
50℃
323.2 uA
3.232 V
60℃
333.2 uA
3.332 V
100℃
373.2 uA
3.732 V
AD590引脚图
2.实验任务
利用AD590温度传感器完成温度的测量,把转换的温度值的模拟量送入ADC0809的其中一个通道进行A/D转换,将转换的结果进行温度值变换之后送入数码管显示。
3.电路原理图
图4.30.1
4.系统板上硬件连线
(1).把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。
(2).把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。
(3).把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。
(4).把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。
(5).把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。
(6).把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。
(7).把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。
(8).把“模数转换模块”区域中的IN0端子用导线连接到自制烂前的AD590电路上。
(9).把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。
5.程序设计内容
(1). ADC0809的CLK信号由单片机的P3.3管脚提供
(2). 由于AD590的温度变化范围在-55℃-+150℃之间,经过10KΩ之后采样到的电压变化在2.182V-4.232V之间,不超过5V电压所表示的范围,因此参考电压取电源电压VCC,(实测VCC=4.70V)。由此可计算出经过A/D转换之后的摄氏温度显示的数据为:
如果(D*2350/128)<2732,则显示的温度值为-(2732-岩烂(D*2350/128))
如果(D*2350/128)≥2732,则显示的温度值为+((D*2350/128)-2732)
6.汇编源程序
(略)
7.C语言源程粗历漏序
#include <AT89X52.H>
#include <ctype.h>
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f}
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}
unsigned char dispbuf[8]={10,10,10,10,10,10,0,0}
unsigned char dispcount
unsigned char getdata
unsigned long temp
unsigned char i
bit sflag
sbit ST=P3^0
sbit OE=P3^1
sbit EOC=P3^2
sbit CLK=P3^3
sbit LED1=P3^6
sbit LED2=P3^7
sbit SPK=P3^5
void main(void)
{
ST=0
OE=0
TMOD=0x12
TH0=0x216
TL0=0x216
TH1=(65536-4000)/256
TL1=(65536-4000)%256
TR1=1
TR0=1
ET0=1
ET1=1
EA=1
ST=1
ST=0
getdata=148
while(1)
{
}
}
void t0(void) interrupt 1 using 0
{
CLK=~CLK
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-4000)/256
TL1=(65536-4000)%256
if(EOC==1)
{
OE=1
getdata=P0
OE=0
temp=(getdata*2350)
temp=temp/128
if(temp<2732)
{
temp=2732-temp
sflag=1
}
else
{
temp=temp-2732
sflag=0
}
i=3
dispbuf[0]=10
dispbuf[1]=10
dispbuf[2]=10
if(sflag==1)
{
dispbuf[7]=11
}
else
{
dispbuf[7]=10
}
dispbuf[3]=0
dispbuf[4]=0
dispbuf[5]=0
dispbuf[6]=0
while(temp/10)
{
dispbuf[i]=temp%10
temp=temp/10
i++
}
dispbuf[i]=temp
ST=1
ST=0
}
P1=dispcode[dispbuf[dispcount]]
P2=dispbitcode[dispcount]
dispcount++
if(dispcount==8)
dispcount=0
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)