数字温度计的设计与制作实验报告文档格式.docx
《数字温度计的设计与制作实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《数字温度计的设计与制作实验报告文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
3展开工程管理标签、元器件库。
4填写图纸信息。
(项目名称、图纸名称、版本、序号、作者。
)
5元器件绘制。
1)创建元件库;
2).绘制元器件;
3)完善元器件属性;
6.修改元器件名字;
7.同一个库中增加其他元器件;
8.打开原理图库管理标签。
1)元器件放置。
2)元器件摆放、连线。
(按格点对齐。
)
3)修改元器件值。
4)完成图纸。
5)生成Bom表。
三PCB图绘制
1)封装设计。
1.确定需要做的PCB封装。
2.获取PCB封装物理尺寸。
3.创建PCB封装文件。
4.创建PCB封装。
5.绘制PCB封装。
2)绘制PCB图。
1.创建PCB图。
2.绘制板型:
选择Keep-OutLayer,调整格点、重新定位原点、绘制轮廓线。
3.导入元器件。
4.摆放元器件。
5.走线:
底层走线:
BottomLayer,处理全部与拉线。
6.规则检查:
Tools/DesignRuleCheck。
7.排除错误。
8.调整丝印,加板名称,调整线宽。
四制作板子
·
单面板腐蚀
热转印
1.准备热转印纸:
A4大小
2.打印PCB图:
至热转印纸的光滑面
3.裁剪单面板:
根据图像大小
4.打磨单面板覆铜面:
去除表面氧化膜
5.进行热转印
1)将热转印纸的光滑面与单面板覆铜面紧密贴合并用胶带固定;
2)送至热转印机反复加热。
6.检查:
如有断线处用马克笔填补
腐蚀
1.勾兑腐蚀剂
2.进行腐蚀
1)将热转印完成的单面板置于装有腐蚀剂的容器中;
2)轻轻摇晃容器5-10分钟至腐蚀完全。
钻孔
1.钻孔:
根据图像进行钻孔,注意钻孔力度适中、位置准确
2.清洗:
砂纸打磨去除铜面黑色石墨覆盖层并冲洗。
焊接
1.准备元器件:
自行购买
2.装载元器件
3.进行焊接:
注意焊点准确
四导入程序并进行调试
程序设计流程图
五实验总结
在画原理图的时候,我们要正确找到引脚,和摆放引脚的位置,各器件也要一一对应,切不可弄错了,画完后,我们要进行封装,封装的时候我要注意各器件的值,要确保每一步骤都正确无误,直至画pcb的图,进行pcb的图绘制的时候,我们要正确布线,确保每一布线都不会交叉或者合在一块的情况,保证电路的正确运行。
出现的问题及解决:
封装时没有正确封装,导致器件不行,最后经过检查进行纠正了
布线时,线会有一些不合理走位的情况,怕会影响电路运作,所以在有个地方的走线,我们选择了飞线解决了这一问题。
第一次导入程序的时候,电源指示灯没亮,但是我们把板子上的电源指示灯拆下,重新装上,第二次就可以使用了。
六附件图
Bom表
SCH图
PCB图
程序
#include<
reg52.h>
//包含单片机寄存器的头文件
intrins.h>
//包含_nop_()函数定义的头文件
#defineucharunsignedchar
#defineuintunsignedint
ucharcodedispcode1[]={0xfa,0x82,0xb9,0xab,0xc3,
0x6b,0x7b,0xa2,0xfb,0xeb};
//0~9共阴显示子码
ucharcodedispcode2[]={0xfe,0x86,0xbd,0xaf,0xc7,
0x6f,0x7f,0xa6,0xfe,0xee};
//0~9的小数点共阴显示子码
/********************************************************************
以下是DS18B20的操作程序
********************************************************************/
sbitDQ=P1^0;
unsignedchartime;
//设置全局变量,专门用于严格延时
/*****************************************************
函数功能:
延时1ms
(3j+2)*i=(3×
33+2)×
10=1010(微秒),可以认为是1毫秒
***************************************************/
voiddelay1ms()
{
unsignedchari,j;
for(i=0;
i<
4;
i++)
for(j=0;
j<
33;
j++);
}
延时若干毫秒
入口参数:
n
voiddelaynms(unsignedcharn)
{
unsignedchari;
n;
delay1ms();
将DS18B20传感器初始化,读取应答信号
出口参数:
flag
bitInit_DS18B20(void)
bitflag;
//储存DS18B20是否存在的标志,flag=0,表示存在;
flag=1,表示不存在
DQ=1;
//先将数据线拉高
for(time=0;
time<
2;
time++)//略微延时约6微秒
;
DQ=0;
//再将数据线从高拉低,要求保持480~960us
200;
time++)//略微延时约600微秒
//以向DS18B20发出一持续480~960us的低电平复位脉冲
//释放数据线(将数据线拉高)
10;
time++)
//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)
flag=DQ;
//让单片机检测是否输出了存在脉冲(DQ=0表示存在)
time++);
//延时足够长时间,等待存在脉冲输出完毕
return(flag);
//返回检测成功标志
}
从DS18B20读取一个字节数据
dat
***************************************************/
unsignedcharReadOneChar(void)
unsignedchari=0;
unsignedchardat;
//储存读出的一个字节数据
for(i=0;
8;
{
DQ=1;
//先将数据线拉高
_nop_();
//等待一个机器周期
DQ=0;
//单片机从DS18B20读书据时,将数据线从高拉低即启动读时序
dat>
>
=1;
//将dat向右移一位后再赋给dat
//等待一个机器周期
DQ=1;
//将数据线"
人为"
拉高,为单片机检测DS18B20的输出电平作准备
for(time=0;
//延时约6us,使主机在15us内采样
if(DQ==1)
dat|=0x80;
//如果读到的数据是1,则将1存入dat
else
dat|=0x00;
//如果读到的数据是0,则将0存入dat
//将单片机检测到的电平信号DQ存入r[i]
;
//延时3us,两个读时序之间必须有大于1us的恢复期
}
return(dat);
//返回读出的十进制数据
}
向DS18B20写入一个字节数据
voidWriteOneChar(unsignedchardat)
unsignedchari=0;
for(i=0;
i<
i++)
DQ=0;
//将数据线从高拉低时即启动写时序
DQ=dat&
0x01;
//利用与运算取出要写的某位二进制数据,
//并将其送到数据线上等待DS18B20采样
//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样
DQ=1;
//释放数据线
1;
//延时3us,两个写时序间至少需要1us的恢复期
dat>
//将dat中的各二进制位数据右移1位
}
//稍作延时,给硬件一点反应时间
显示温度的整数部分
x
voiddisplay_temp1(unsignedcharx)
unsignedcharj,k,l;
//j,k,l分别储存温度的百位、十位和个位
j=x/100;
//取百位
k=(x%100)/10;
//取十位
l=x%10;
//取个位
P2=0xfb;
P0=dispcode2[l];
delaynms
(1);
P2=0xfd;
P0=dispcode1[k];
P2=0xfe;
P0=dispcode1[j];
//延时1ms给硬件一点反应时间
做好读温度的准备
voidReadyReadTemp(void)
Init_DS18B20();
//将DS18B20初始化
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
100;
//温度转换需要一点时间
Init_DS18B20();
//跳过读序号列号的操作
WriteOneChar(0xBE);
//读取温度寄存器,前两个分别是温度的低位和高位
主函数
voidmain(void)
{
unsignedcharTL;
//储存暂存器的温度低位
unsignedcharTH;
//储存暂存器的温度高位
unsignedcharTN;
//储存温度的整数部分
unsignedcharTD;
//储存温度的小数部分
delaynms(5);
//延时5ms给硬件一点反应时间
while
(1)//不断检测并显示温度
ReadyReadTemp();
//读温度准备
TL=ReadOneChar();
//先读的是温度值低位
TH=ReadOneChar();
//接着读的是温度值高位
TN=TH*16+TL/16;
//实际温度值=(TH*256+TL)/16,即:
TH*16+TL/16
//这样得出的是温度的整数部分,小数部分被丢弃了
TD=(TL%16)*10/16;
//计算温度的小数部分,将余数乘以10再除以16取整,
//这样得到的是温度小数部分的第一位数字(保留1位小数)
P2=0xf7;
P0=dispcode1[TD];
//显示小数部分
display_temp1(TN);
//显示温度的整数部分
delaynms
(1);
}