基于18B20与1302温度测量和实时时钟设计书Word下载.docx
- 文档编号:20516828
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:29
- 大小:137.52KB
基于18B20与1302温度测量和实时时钟设计书Word下载.docx
《基于18B20与1302温度测量和实时时钟设计书Word下载.docx》由会员分享,可在线阅读,更多相关《基于18B20与1302温度测量和实时时钟设计书Word下载.docx(29页珍藏版)》请在冰豆网上搜索。
RS=H,R/W=H,E=H
D0—D7=数据
写数据
RS=H,R/W=L,D0—D7=数据,E=高脉冲
4、键盘设置
为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正液晶上显示的时间。
键盘模块原理图
5、1302实时时钟芯片
DS1302与单片机的连接也仅需要3条线:
CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。
1302电路原理图如图
6、蜂鸣器电路原理图
三、系统调试
1、软件调试
软件调试的任务是利用ISIS开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现仿真结果故障。
程序的调试应一个模块一个模块地进行,我们首先单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等;
最后逐步将各子程序连接起来总调。
联调需要注意的是,各程序模块间能否正确传递参数,特别要注意各子程序的现场保护与恢复。
调试的基本步骤如下:
(1)、修改显示缓冲区内容,屏蔽拆字程序,调试动态扫描显示功能。
例如将DISP0~DISP5单元置为“012345”,应能在LCD上从左到右显示“012345”。
若显示不正确,可在中断子程序相应位置设置断点调试检查。
然后修改计时缓冲区内容,调用拆字程序,调试显示模块。
(2)、运行主程序调试模块,不按下任何键,检查是否能开始正确显示。
若不能正确显示,则应在定时器中断服务子程序中设置断点,检查HOUR、MIN、SEC单元是否随断点运行而变化。
然后屏蔽缓冲区初始化部分,用仿真器修改万年历显示缓冲区内容为2008年12月12日,运行主程序(调进位键),检验能否正确进位,以及试调时间看能否正确的进位,以及温度显示。
(3)、调试键盘扫描模块,先用延时5ms子程序代替显示子程序延时消抖,在求取键号后设置断点,中断后观察A累加器中的键号是否正确;
然后恢复用显示子程序延时消抖,检验与显示模块能否正确连接。
(4)、调试时间设置模块。
首先屏蔽COMB子程序,单独调试键盘设置模块,观察显示缓冲区DISP0~DISP5单元的内容是否随键入的键号改变,以及键号能否在LCD上显示。
然后屏蔽子程序,单独调试合字模块。
(5)、运行主程序联调,检查能否用键盘修改当前万年历,时间,以及温度能否正确显示。
2、硬件调试
(1)元器件明细表:
参数
元件名
封装
1K
R5
AXIAL0.3
CON2
J1
SIP2.
R1
CON4
J3
SIP4
R7
CON9
J4
SIP9
R6
DIODE
D2
AXIAL0.4
4.7K
R3
DS18B20
U2
SIP3
10k
R2
VR5
DS1302
U4
DIP8
11.0592MHZ
Y1
JZ
LCD1602
U3
1602
22u
C3
rb.2/.4
LED
D1
DIODE0.1
30p
C2
RAD0.3
PNP
Q1
C1
RES2
R9
C6
SPEAKER
LS1
SP
C7
SW-PB
S1
AN
32.768KHz
Y2
S2
200
R8
S3
(2)原理图的绘制和注意事项
①蜂鸣器驱动电路一般都包含以下几个部分:
一个三极管、一个蜂鸣器、一个续流二极管。
蜂鸣器本质上是一个感性元件,其电流不能瞬变,因此必须有一个续流二极管提供续流。
否则,在蜂鸣器两端会产生几十伏的尖峰电压,可能损坏驱动三极管,并干扰整个电路系统的其它部分。
②在设计原理图时注意上拉电阻,下拉电阻的使用,在必要时要加阻值合适的电阻,是电路更加完善。
(3)电路原理图:
(3)PCB的设计和注意事项
①在原理图定义元件封装的时候,要根据元器件实际大小进行定义,如果库里没有的话自己再绘制一个。
②在放置元器件时,一定要考虑元器件的实际尺寸大小(所占面积和高度)、元器件之间的相对位置,以保证电路板的电气性能和生产安装的可行性和便利性同时,应该在保证上面原则能够体现的前提下,适当修改器件的摆放,使之整齐美观,如同样的器件要摆放整齐、方向一致。
这个步骤关系到板子整体形象和下一步布线的难易程度,所以一定要花大力气去考虑。
PCB布线时要设定好焊盘的尺寸大小与实际器件相一致,信号线、电源线和地线的宽度要合适。
(4)PCB图
(5)焊接的注意事项
万年历的制作过程中焊接最容易出现问题,在焊接前,必须先对元器件的PCB图和原理图,以免防止元器件的正负极接反或者把元器件接错。
在焊接时要注意虚焊,根据焊接的经验,在焊点处焊锡是尖角的,一般都是焊实了;
如果焊点处出现圆颗状,则容易出现虚焊,元器件的管脚可能没有焊实,出现接触不良的情况。
检查是否虚焊可以在完成焊接后,接上电源,看电路是否能正常工作,如果不行,则可以用数字万用表进行检测。
用数字万用表检测,可以很方便的检测出电路的通断,判断在做板的时候是否有断路,也很容易检测是否虚焊。
四、软件程序
#include<
reg51.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P1^7;
////18b20信号端定义
sbitRW=P2^3;
////1602读写端定义
sbitRS=P2^2;
////1602数据指令端定义
sbitE=P2^4;
////1602使能端定义
sbitIO=P1^1;
////1302数据端定义
sbitCLK=P1^0;
////1302时钟端定义
sbitRST=P1^2;
////1302复位端定义
sbitSPEAKER=P2^7;
sbitACC0=ACC^0;
sbitACC7=ACC^7;
uchartime,ge=0,shiwei=0,bai=0,xiaoshu=0,l,k;
ucharcodetab[]="
0123456789.-NO18B20"
;
ucharcodetab1[]="
day-:
"
ucharnian,nian1,nian2;
ucharyue,yue1,yue2;
ucharri,ri1,ri2;
ucharshi,shi1,shi2;
ucharfen,fen1,fen2;
ucharmiao,miao1,miao2;
ucharday,key=0;
sbittiaozheng=P3^1;
//////时间调整模式及暂停按钮
sbitjia=P3^2;
////////时间调整加按钮
sbitjian=P3^3;
///////时间调整减按钮
sbitqidong=P3^4;
/////定义时间启动按钮
bitflag,flagfu;
////18b20检测标志位和负温度显示标志位
////////延时子函数///////
voiddelay(ucharz)
{
uchari,j;
for(i=z;
i>
0;
i--)
for(j=110;
j>
j--);
}
/////初始化18b20子函数////////
voidchushihua18b20()
DQ=1;
_nop_();
DQ=0;
for(time=0;
time<
200;
time++);
10;
flag=DQ;
80;
120;
//////向18b20写指令子函数///////
voidxiezhiling18b20(ucharzhiling)
uchari;
for(i=0;
i<
8;
i++)
{
DQ=1;
_nop_();
DQ=0;
DQ=zhiling&
0x1;
for(time=0;
15;
zhiling>
>
=1;
}
///////读取18b20温度子函数////////
uchardu18b20(void)
uchari,wendu;
2;
wendu>
1;
if(DQ==1)
{
wendu=wendu|0x80;
}
else
wendu=wendu|0x00;
return(wendu);
///////向1602写指令子函数/////////
voidxiezhiling1602(ucharzhiling)
RS=0;
E=0;
delay(5);
P0=zhiling;
E=1;
//////向1602写数据子函数////////
voidxieshuju1602(ucharshuju)
RS=1;
P0=shuju;
////显示查表子函数1/////////
voiddesplay(ucharweizhi,ucharshuju)
xiezhiling1602(0x80+weizhi);
xieshuju1602(tab[shuju]);
///////显示查表子函数2//////
voiddesplay2(ucharweizhi,ucharshuju)
xieshuju1602(tab1[shuju]);
/////18b20到1602转换子函数//////
voidzhuanhuan()
{
ucharDL,DH,dat;
uinty;
DL=du18b20();
DH=du18b20();
if((DH&
0xf0)!
=0xf0)
flagfu=0;
dat=(DH%8)*16+DL/16;
xiaoshu=DL%16*10/16;
else
y=DH*256+DL;
y=(~y)+1;
flagfu=1;
dat=(y%4096)/16;
xiaoshu=(y%16)*10/16;
if(flag==0)
if(dat>
=38)
SPEAKER=0;
delay(200);
SPEAKER=1;
ge=dat%10;
shiwei=dat%100/10;
bai=dat/100;
/////初始化1602子程序///////
voidchushihua1602()
RW=0;
xiezhiling1602(0x38);
xiezhiling1602(0x0c);
xiezhiling1602(0x06);
xiezhiling1602(0x01);
////////向1302写一个字节//////////////
voidxie1bit1302(ucharxie)
uchari,zancun;
zancun=xie;
CLK=0;
IO=zancun&
0x01;
CLK=1;
zancun=zancun>
/////////读取1302一个字节///////////
uchardu1bit1302(void)
ACC=ACC>
ACC7=IO;
return(ACC);
//////////////1302写指令子函数//////////
voidxie1302(ucharzhiling,ucharshuju)
RST=0;
CLK=0;
RST=1;
xie1bit1302(zhiling);
xie1bit1302(shuju);
////读取1302数据子函数/////
uchardu1302(ucharzhiling)
ucharshijian;
shijian=du1bit1302();
return(shijian);
/////////////////////1302初始化子程序////////////////////
voidchushihua1302()
xie1302(0x8e,0x00);
//写保护关闭
xie1302(0x90,0xaa);
xie1302(0x80,0x00);
//秒
xie1302(0x82,0x00);
//分
xie1302(0x84,0x00);
//时
xie1302(0x86,0x15);
//日
xie1302(0x88,0x07);
//月
xie1302(0x8a,0x05);
//星期
xie1302(0x8c,0x10);
//年
xie1302(0x8e,0x80);
//打开写保护
///////////1302到1602数据的转换/////////
voidzhuanhuan1302()
nian=du1302(0x8d);
//取年
nian1=nian&
0x0f;
nian2=(nian>
4);
yue=du1302(0x89);
//取月
yue1=yue&
yue2=(yue>
ri=du1302(0x87);
//取日
ri1=ri&
ri2=(ri>
shi=du1302(0x85);
//取时
shi1=shi&
shi2=(shi>
fen=du1302(0x83);
//取分
fen1=fen&
fen2=(fen>
miao=du1302(0x81);
//取秒
miao1=miao&
miao2=(miao>
day=du1302(0x8b);
//取星期
day=day&
voidkeycan()
//////进入调整//////
if(tiaozheng==0)
delay(3);
if(tiaozheng==0)
while(!
tiaozheng);
key++;
xie1302(0x8e,0x00);
xie1302(0x80,0x80);
/////////调整分/////
if((key%8)==1)
xiezhiling1602(0x0f);
xiezhiling1602(0x80+0x44);
if(jia==0)
delay(3);
if(jia==0);
{
while(!
jia);
fen++;
if((fen&
0x0a)==0x0a)
fen=(fen&
0xf0)+16;
if(fen==0x60)
fen=0x00;
delay(5);
xie1302(0x82,fen);
}
if(jian==0)
if(jian==0);
jian);
fen--;
0xf0)==0xf0)
fen=fen-16;
fen=fen&
0xf9;
if(fen>
0x60)
fen=0x59;
///////////调整时///////////
if((key%8)==2)
xiezhiling1602(0x80+0x41);
shi++;
if((shi&
shi=(shi&
if(shi==0x24)
shi=0x00;
xie1302(0x84,shi);
shi--;
shi=shi-16;
shi=shi&
if(shi>
0x24)
shi=0x23;
///////////调整日///////////
if((key%8)==3)
xiezhiling1602(0x80+0x07);
ri++;
if((ri&
ri=(ri&
if(ri==0x32)
ri=0x00;
xie1302(0x86,ri);
ri--;
ri=ri-16;
ri=ri&
if(ri>
0x32)
ri=0x31;
///////////调整月///////////
if((key%8)==4)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 18 B20 1302 温度 测量 实时 时钟 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)