编辑: 学冬欧巴么么哒 | 2018-11-16 |
0 7FH
8 06H
1 6FH
9 5BH
2 77H A 4FH
3 7CH B 66H
4 39H C 6DH
5 5EH D 7DH
6 79H E 07H
7 71H F *****显示小数点时sp位置为1就可以了.******
二、电路仿真: 使用PROTEUS仿真软件对设计电路进行仿真,程序部分用KEIL软件进行编写.仿真图如下: 仿真中,调整DS18B20的温度,可以看到显示器上面的温度也相应的变为调整后的温度,通过按下button2或者button1可以更换温度传感器的选择.仿真中的单片机使用的程序数据文件由KEIL软件编译生成,详细的程序参考附录中的主程序.由于实际电路中要用到DS18B20的ROM_ID码,所以专门设计了提取ID码的电路,提取ID码得程序在参考附录中的提取ROM_ID码程序.提取的ID码会在显码管上以一次显示一个字节的方式显示出来,显示八组,一共是八字节的ID码.电路图如下: 3.3电路的安装与调试 ??? 电路仿真通过后,开始实际的焊接过程,焊接过程比较繁琐,需要认真小心操作,确保焊接的线路不出现错误,由于缺乏焊接经验,焊接线路比较混乱,焊接过程花费比较长的时间,完成焊接后,就是开始检查调试了,使用万用表检查电源电路无故障后,就开始安装芯片开始调试了.初次调试时发现数码管显示非常不稳定,现实的非常不连续,过分析,确定应该是程序中的扫描时间不合适,经过几次的程序修改和实物调试观察后,最终解决了这个问题. 然后就是电路性能检测,使用普通的温度计,测量室内温度后,再用制作的电路测量室内温度,数据分别为32.5和32.8,几次测量后得出的结论,精度满足0.5的要求.响应时间直接利用感官判断,系统的响应时间在1s内.两个温度传感器掘客正常测量温度,各个控制开关功能正常.经过一段时间的运行测试,工作正常,完成调试过程.
4 心得体会及建议 4.1 心得体会 经过本次设计实验,充分认识到了自身再动手实际操作方面的不足,单片机程序的编写不够熟练,电路焊接很生疏,需要多加练习. 4.2 建议 希望在以后的学习中能过再多做类似本设计的练习,提高动手能力,夯实基础知识.
5 附录 ??? 5.1 原件明细表 DS18B20两个、AT89S52一块、74HC573一块、按钮开关3个、10K电阻三个、4.7K电阻两个、10uf电解电容一个、四位八段数码管一个. 5.2 设计原理图 参看上面的仿真图. 5.3 设计的主程序: #include #define uchar unsigned char #define uint unsigned int sbit DS=P2^0;
//定义温度传感器的数据引脚 sbit button1=P3^5;
//定义按钮开关的控制位脚 sbit button2=P3^6;
uint temp;
温度值 sbit dula=P2^6;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef};
uchar code ROM_CODE1[]={0x28,0xaa,0x4b,0x27,0x03,0x00,0x00,0x06};
uchar code ROM_CODE2[]={0x28,0x1b,0x40,0x12,0x03,0x00,0x00,0x8f};
void delay(uint count)延时函数 { uint i;
while(count) { i=200;
while(i>0) i--;
count--;
} } void dsreset(18B20复位,初始化函数 { uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=6;
while(i>0)i--;
} bit tmpreadbit(读1位数据函数 { uint i;
bit dat;
DS=0;
i++;
i+ DS=1;
i++;
i++;
dat=DS;
i=8;
短延时 while(i>0)i--;
return (dat);
} uchar tmpread(读1字节函数 { uchar i,j,dat;
dat=0;
for(i=1;
i1;
if(testb) //write
1 { DS=0;
i++;
i++;
DS=1;
i=8;