欢迎来到天天文库
浏览记录
ID:22812479
大小:45.00 KB
页数:7页
时间:2018-10-31
《数字温度计(6)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、数字温度计韩哲【摘要】 本数字式温度计由AT89S1为控制器,通过DS18B20传感器检测并采集信号,把连续信号离散化,然后通过AT89S1处理DS1820采集到的离散信号,最后由单片机控制四位共阳极数码管显示检测到的温度,该设计所能检测的温度是0.0-99.9摄氏度。【关键词】AT89S1DS18B20四位共阳极数码管功能要求:系统硬件电路的设计:系统软件系统的设计:#include//包含单片机寄存器的头文件#include//包含_nop_()函数定义的头文件sbitshi=P3^7;//数码管选通脚sbi
2、tge=P3^6;//数码管选通脚sbitxiaoshu=P3^5;//数码管选通脚sbitDQ=P2^0;//温度传感器输出端7unsignedcharcodeshuju[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义字符数组显示数字unsignedchartime;//设置全局变量,专门用于严格延时/*函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒**/voiddelay1ms(){unsignedchari,j;for(i=
3、0;i<10;i++)for(j=0;j<33;j++);}voiddelaynms(unsignedcharn){unsignedchari;for(i=0;i4、B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在DQ=1;//先将数据线拉高for(time=0;time<2;time++)//略微延时约6微秒;DQ=0;//再将数据线从高拉低,要求保持480~960usfor(time=0;time<200;time++)//略微延时约600微秒;//以向DS18B20发出一持续480~960us的低电平复位脉冲DQ=1;//释放数据线(将数据线拉高)for(time=0;time<10;time++)7;//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)fla5、g=DQ;//让单片机检测是否输出了存在脉冲(DQ=0表示存在)for(time=0;time<200;time++)//延时足够长时间,等待存在脉冲输出完毕;return(flag);//返回检测成功标志}/*****************************************************函数功能:从DS18B20读取一个字节数据***************************************************/unsignedcharReadOneChar(void){unsignedchari=0;un6、signedchardat;//储存读出的一个字节数据for(i=0;i<8;i++){DQ=1;//先将数据线拉高_nop_();//等待一个机器周期DQ=0;//单片机从DS18B20读书据时,将数据线从高拉低即启动读时序dat>>=1;_nop_();//等待一个机器周期DQ=1;//将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备for(time=0;time<2;time++);//延时约6us,使主机在15us内采样if(DQ==1)dat7、=0x80;//如果读到的数据是1,则将1存入datelsedat8、=0x00;//9、如果读到的数据是0,则将0存入dat//将单片机检测到的电平信号DQ存入r[i]for(time=0;time<8;time++);//延时3us,两个读时序之间必须有大于1us的恢复期}7return(dat);//返回读出的十进制数据}/*****************************************************函数功能:向DS18B20写入一个字节数据***************************************************/voidWriteOneChar(unsignedchardat10、){unsignedchari=0;for(i=0;i<8;i++){DQ=1;//先将数据线
4、B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在DQ=1;//先将数据线拉高for(time=0;time<2;time++)//略微延时约6微秒;DQ=0;//再将数据线从高拉低,要求保持480~960usfor(time=0;time<200;time++)//略微延时约600微秒;//以向DS18B20发出一持续480~960us的低电平复位脉冲DQ=1;//释放数据线(将数据线拉高)for(time=0;time<10;time++)7;//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)fla
5、g=DQ;//让单片机检测是否输出了存在脉冲(DQ=0表示存在)for(time=0;time<200;time++)//延时足够长时间,等待存在脉冲输出完毕;return(flag);//返回检测成功标志}/*****************************************************函数功能:从DS18B20读取一个字节数据***************************************************/unsignedcharReadOneChar(void){unsignedchari=0;un
6、signedchardat;//储存读出的一个字节数据for(i=0;i<8;i++){DQ=1;//先将数据线拉高_nop_();//等待一个机器周期DQ=0;//单片机从DS18B20读书据时,将数据线从高拉低即启动读时序dat>>=1;_nop_();//等待一个机器周期DQ=1;//将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备for(time=0;time<2;time++);//延时约6us,使主机在15us内采样if(DQ==1)dat
7、=0x80;//如果读到的数据是1,则将1存入datelsedat
8、=0x00;//
9、如果读到的数据是0,则将0存入dat//将单片机检测到的电平信号DQ存入r[i]for(time=0;time<8;time++);//延时3us,两个读时序之间必须有大于1us的恢复期}7return(dat);//返回读出的十进制数据}/*****************************************************函数功能:向DS18B20写入一个字节数据***************************************************/voidWriteOneChar(unsignedchardat
10、){unsignedchari=0;for(i=0;i<8;i++){DQ=1;//先将数据线
此文档下载收益归作者所有