您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页数字温度计的设计与制作实验报告

数字温度计的设计与制作实验报告

来源:爱站旅游


重庆邮电大学通信与信息工程学院

班级 GJ011201 小组成员

徐睿2012210460 李易晓2012210057 张地根 2012210114 指导老师 邓炳光

数字温度计的设计与制作实验报告

设计要求

1,数字温度计设计与制作:利用之前绘制的“C51学习板”掌握的SCH和PCB图知识,绘制一个基于STC89C51的单片机系统,增加温度采集0~120度,温度显示要求3位整数+1位小数,电路原理图和PCB图 2,SCH必须按照规范进行绘制。

3,系统还要求具备电源指示灯,外部使用MINI-USB进行5V供电,在满足要求的情况下,使用的元器件越少越好;温度采集可以用模拟或数字器件、显示可以用LCD或数码管。 4,PCB板要求使用底层走线,元器件在顶层。 5,PCB板上标识自己的学号、姓名。

6,PCB板大小,满足元器件布局的情况下,尽可能减少面积。

7,PCB审查正确后,进行单面板腐蚀的相关操作:热转印、腐蚀、钻孔、裁剪等。 元器件自行购买,然后焊接,调试,编写单片机程序,完成设计报告。

设计步骤

一 主要原器件的选择

控制模块:STC89C52 温度采集模块:DS18B20 显示模块:8位共阴数码管

二 原理图的绘制

1新建一个工程,在Altium Designer软件中的“File”选项中选择“New→Project→PCB project”,然后保存工程至文件夹中(文件名定义要规范)。

2纸张配置,在Design选项中单击左键,选择Document Options项,然后根据原理图的要求选择合适的配置。 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-Out Layer,调整格点、重新定位原点、绘制轮廓线。 3.导入元器件。 4.摆放元器件。

5.走线:底层走线:Bottom Layer,处理全部与拉线。 6.规则检查:Tools/Design Rule Check。 7.排除错误。

8.调整丝印,加板名称,调整线宽。

四 制作板子

·单面板腐蚀 ·热转印

1.准备热转印纸:A4大小

2.打印PCB图:至热转印纸的光滑面 3.裁剪单面板:根据图像大小 4.打磨单面板覆铜面:去除表面氧化膜 5.进行热转印

1)将热转印纸的光滑面与单面板覆铜面紧密贴合并用胶带固定; 2)送至热转印机反复加热。 6.检查:如有断线处用马克笔填补 ·腐蚀

1.勾兑腐蚀剂 2.进行腐蚀

1)将热转印完成的单面板置于装有腐蚀剂的容器中; 2)轻轻摇晃容器5-10分钟至腐蚀完全。 ·钻孔

1.钻孔:根据图像进行钻孔,注意钻孔力度适中、位置准确 2.清洗:砂纸打磨去除铜面黑色石墨覆盖层并冲洗。 ·焊接

1.准备元器件:自行购买 2.装载元器件

3.进行焊接:注意焊点准确 四 导入程序并进行调试 程序设计流程图

显示系统 温度测量 温度测量 N Y 开中断 系统初始化 开始 Int0=0? 温度上下限设定 五 实验总结

在画原理图的时候,我们要正确找到引脚,和摆放引脚的位置,各器件也要一一对应,切不可弄错了,画完后,我们要进行封装,封装的时候我要注意各器件的值,要确保每一步骤都正确无误,直至画pcb的图,进行pcb的图绘制的时候,我们要正确布线,确保每一布线都不会交叉或者合在一块的情况,保证电路的正确运行。

出现的问题及解决:封装时没有正确封装,导致器件不行,最后经过检查进行纠正了 布线时,线会有一些不合理走位的情况,怕会影响电路运作,所以在有个地方的走线,我们选择了飞线解决了这一问题。

第一次导入程序的时候,电源指示灯没亮,但是我们把板子上的电源指示灯拆下,重新装上,第二次就可以使用了。

六 附件图

Bom表

SCH图

PCB

程序

#include //包含单片机寄存器的头文件 #include //包含_nop_()函数定义的头文件 #define uchar unsigned char #define uint unsigned int

uchar code dispcode1[]={0xfa,0x82,0xb9,0xab,0xc3,

/******************************************************************** 以下是DS18B20的操作程序

********************************************************************/ sbit DQ=P1^0;

unsigned char time; //设置全局变量,专门用于严格延时 /***************************************************** 函数功能:延时1ms

(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒 ***************************************************/ void delay1ms()

0x6b,0x7b,0xa2,0xfb,0xeb}; //0~9共阴显示子码 0x6f,0x7f,0xa6,0xfe,0xee}; //0~9的小数点共阴显示子码

uchar code dispcode2[]={0xfe,0x86,0xbd,0xaf,0xc7,

{

unsigned char i,j; }

/***************************************************** 函数功能:延时若干毫秒 入口参数:n

***************************************************/ void delaynms(unsigned char n) {

unsigned char i; }

/***************************************************** 函数功能:将DS18B20传感器初始化,读取应答信号 出口参数:flag

***************************************************/ bit Init_DS18B20(void) {

bit flag; //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在 DQ = 1; //先将数据线拉高

for(time=0;time<2;time++) //略微延时约6微秒 ;

DQ = 0; //再将数据线从高拉低,要求保持480~960us for(time=0;time<200;time++) //略微延时约600微秒

; //以向DS18B20发出一持续480~960us的低电平复位脉冲 DQ = 1; //释放数据线(将数据线拉高) for(time=0;time<10;time++)

; //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲) flag=DQ; //让单片机检测是否输出了存在脉冲(DQ=0表示存在) for(time=0;time<200;time++) ; //延时足够长时间,等待存在脉冲输出完毕 return (flag); //返回检测成功标志 }

/***************************************************** 函数功能:从DS18B20读取一个字节数据

for(i=0;i出口参数:dat

***************************************************/ unsigned char ReadOneChar(void) { 序 备 }

for(time=0;time<2;time++) if(DQ==1)

dat|=0x80; //如果读到的数据是1,则将1存入dat

else

dat|=0x00;//如果读到的数据是0,则将0存入dat

; //延时约6us,使主机在15us内采样

dat>>=1;

//将dat向右移一位后再赋给dat

_nop_(); //等待一个机器周期

unsigned char i=0;

unsigned char dat; //储存读出的一个字节数据 for (i=0;i<8;i++) {

DQ =1; // 先将数据线拉高 _nop_(); //等待一个机器周期

DQ = 0; //单片机从DS18B20读书据时,将数据线从高拉低即启动读时

DQ = 1; //将数据线\"人为\"拉高,为单片机检测DS18B20的输出电平作准

//将单片机检测到的电平信号DQ存入r[i] for(time=0;time<8;time++)

; //延时3us,两个读时序之间必须有大于1us的恢复期

}

return (dat); //返回读出的十进制数据

/***************************************************** 函数功能:向DS18B20写入一个字节数据 入口参数:dat

***************************************************/ void WriteOneChar(unsigned char dat) {

unsigned char i=0; for (i=0; i<8; i++)

{

}

DQ =1; // 先将数据线拉高 _nop_();

//等待一个机器周期

DQ=0; //将数据线从高拉低时即启动写时序 DQ=dat&0x01; //利用与运算取出要写的某位二进制数据,

for(time=0;time<10;time++)

;//延时约30us,DS18B20在拉低后的约

//并将其送到数据线上等待DS18B20采样 15~60us期间从数据线上采样

DQ=1; //释放数据线 for(time=0;time<1;time++) }

;//延时3us,两个写时序间至少需要1us的恢复期 dat>>=1; //将dat中的各二进制位数据右移1位

for(time=0;time<4;time++)

; //稍作延时,给硬件一点反应时间

/***************************************************** 函数功能:显示温度的整数部分 入口参数:x

***************************************************/ void display_temp1(unsigned char x) {

unsigned char j,k,l; //j,k,l分别储存温度的百位、十位和个位 j=x/100; //取百位 k=(x%100)/10; //取十位 l=x%10; //取个位

P2=0xfb; P0=dispcode2[l];

delaynms(1); P0=dispcode1[k]; delaynms(1); P2=0xfe; P2=0xfd;

P0=dispcode1[j];

delaynms(1); //延时1ms给硬件一点反应时间 }

/***************************************************** 函数功能:做好读温度的准备

***************************************************/ void ReadyReadTemp(void) {

Init_DS18B20(); //将DS18B20初始化 }

/***************************************************** 函数功能:主函数

***************************************************/

void main(void) {

while(1) //不断检测并显示温度 {

ReadyReadTemp(); //读温度准备

unsigned char TL; //储存暂存器的温度低位 unsigned char TH; //储存暂存器的温度高位 unsigned char TN; //储存温度的整数部分 unsigned char TD; //储存温度的小数部分 delaynms(5); //延时5ms给硬件一点反应时间

WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换

//温度转换需要一点时间

for(time=0;time<100;time++) ;

Init_DS18B20(); //将DS18B20初始化 WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位

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]; delaynms(1); } }

display_temp1(TN); //显示温度的整数部分

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务