传感器和时钟模块设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• • • • • • • • • • • • • • •
/********************************ds18b20读一个字节 ***************************/ unsigned char ReadOneChar(void) { uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); } return(dat); }
2.单片机光强检测系统设计
Proteus仿真原理图如图7-2所示,用光敏电阻检测周围环境的光强,通过 TCL1543 A/D芯片将检测数据信息送给单片机处理,用两位数码管进行显 示,以实现光电检测系统。本系统如配以报警或光强调节外围电路,则对 光强检测和控制,可用于保护仪器、物品以及需要保鲜东西等等系统设计 中。
程序清单如下:
• • • • • • • • #include "reg52.h" #define uchar unsigned char #define uint unsigned int sbit DQ=P3^5; //定义ds18b20通信端口 sbit P0_7=P0^7; //位定义 uchar temp1,temp2; //温度变量 uchar code dispbit[]={0xfe,0xfd,0xfb}; //数码管位定义数组 uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0 xff,0xbf}; • //数码管段定义数组 • uchar dispbuf[3]={/*0,0,0,0,0,*/0,10,10}; //定义变量 • uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x 06,0x07,0x08,
4.DS18B20单总线协议
主机控制 DS18B20 完成读取一次温度数据的过 程按照通信协议分为初始化 DS18B20(发复位 脉冲)、传送ROM 命令、传送RAM操作命令和 处理数据。初始化时序是由主机发出一个复位 脉冲和一个或多个从器件发出的应答脉冲组成。 主机通过应答脉冲检测从器件DS1820 在总线上 后,就可发出ROM 操作命令,如表 7-3所示。
7.1光强检测
1.光强传感器 通常采用光敏电阻检测其光强度,光敏电阻是利用半导体的 光电效应制成的一种电阻值随入射光的强弱而改变的电阻器。 用于制造光敏电阻的材料主要是金属的硫化物、硒化物和碲化 物等半导体。光敏电阻的结构是在一块光电导体两端加上电极, 贴在硬质玻璃、云母、高频瓷或其他绝缘材料基板L,两端接 有电极引线,封装在带有窗口的金属或塑料外壳内,以免受潮 影响其灵敏度。 光敏电阻在无光照的时候,其暗电阻的阻值一般很大,阻值 (暗阻)可达1~10M欧姆,而在强光(100LX)的时候,其亮 阻的阻值变得很小,阻值(亮阻)仅有几百至数千欧姆,两者 的差距较大。在光敏电阻两端的金属电极加上电压,其中便有 电流通过,受到波长的光线照射时,电流就会随光强的而变大, 从而实现光电转换。光敏面做成蛇形,电极做成梳状是因为这 样既可以保证有较大的受光表面,也可以减小电极之间距离, 从而既可减小极间电子渡越时间,也有利于提高灵敏度。光敏 电阻的外形和电路中的符号如图7-1所示。
delay(5); for(k=0;k<10;k++) { dout=1; clock = 1; date_out<<=1; if(dout) date_out += 1; clock = 0; } DPTR=date_out; return(date_out); } /************************ 主函数 ************************/ void main() {TLC_1543_addr(0x02); //调用通道2模数转换子程序 display(); //调用显示子程序 }
7.2温度检测
1.温度传感器
美国DALLAS公司生产的DS18B20数字式温度传感器改变了传统 温度测试方法,直接将温度物理量变换为数字信号并以单总线方 式传送到计算机进行数据处理。 1).DS18B20的引脚 DS18B20的外形见图7-3所示,其中图a采用TO-9封装形式,外 表看起来像三极管。图b采用8脚SOIL封装形式,只用3、4和5脚, 其余为空脚或不需要连接引脚。
• • • • • • • • • • • • • • • • • • •
0x08,0x09,0x09}; //小数部分对应十进制"0""1""2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F" /*******************ds18b20延迟子函数(晶振12MHz )*******************/ void delay_18B20(unsigned int i) { while(i--); } /*****************************ds18b20初始化函数****************************/ void Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay_18B20(80); //精确延时大于480us DQ = 1; //拉高总线 delay_18B20(14); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始 化失败 delay_18B20(20); }
– – – – – – – – – – – – – – – – – – – – – –
/*******************ds18b20写一个字节**********************/ void WriteOneChar(uchar dat) {unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat>>=1; 来自百度文库 } /******************读取ds18b20当前温度********************/ void ReadTemperature(void) { unsigned char a=0; unsigned char b=0; unsigned char t=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 delay_18B20(100); Init_DS18B20();
• • • • • • • • • • • • • • • • • • • •
sbit eoc=P1^7; //检测端 sfr16 DPTR=0x82; //定义16位特殊功能寄存器 便于调用数//据来数码管显示 unsigned char i; //定义变量 unsigned int a,b,r,s,n,m; /******************************** 延时子程序 *******************************/ void delay(uint x) { while(--x); } /********************************* 延时子程序 ******************************/ void delay_2() //较短的延时程序 { unsigned int y=200,x; while(y) { for(x=2;x>0;x--); y--; } } //void _nop_();
• 3.DS18B20的存储器
• DS18B20存储器由高速暂存器和EERAM组成,EERAM主要存储上限(TH) 和下限(TL)超标报警值,如表 7-1 所示。前两个字节为测得的温度数值; 字节2和字节3为用户设定温度报警的值;字节 4 是配置寄存器,用于确定 9~12 位输出分辨率。第 5、6、7 字节是预留寄存器,用于内部使用,不能 被改写;字节 8 是冗余检验字节,对前面8 个字节的 CRC码校验,可用来保 证通信正确。
delay_2(); } /****************************** 模数转换子程序 *****************************/ uint TLC_1543_addr(uchar addr) { uint date_out=0; uchar k,i,j; clock=0; cs=0; for (i=0;i<4;i++) //读取四位地址 4. 中断优先级控制 { adin=(bit)(addr&0x08); clock=1; clock=0; addr<<=1; } for (j=0;j<6;j++) //填充6 个CLOCK { clock=1;clock=0; } cs=1; delay(5); cs=0; //等待AD 转换
2).DS18B20的内部结构 DSl8B20的内部结构如图7-4所示,主要由64 位光刻 ROM、 温度灵敏元件、非易失性的温度报警触发器 TH 和 TL、配置 寄存器4 部分组成。 DS18B20供电方式可利用单总线信号实现寄生供电。当总线 信号为高电平时,DS18B20从单总线上汲取能量并储存在内 部电容里;当总线为低电平时,消耗电容的电能向DS18B20 供电。也可利用外部3V~5V电源供电,工作稳定可靠,抗干 扰性强,适合开发多温度点测试系统
程序清单如下:
• • • • • • • • • • • • • #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xa7,0xa1,0x82,0x8e}; //数码管的字符数组 sbit P2_0=P2^0; //数码管的位 选 sbit P2_1=P2^1; //数码管的位 选 sbit P0_7=P0^7; //小数点显示 位 sbit cs=P1^3; //片选 sbit dout=P1^4; //数据输出端 sbit adin=P1^5; //数据输入端 sbit clock=P1^6; //时钟端
第7章 传感器和时钟模块设计
数据采集是信息的采集和信息的转换的重要 部件,测量和控制系统的首要环节,是单 片机控制系统的重要分支。数据采集的最 前端是传感器,用于获取被测信号,完成 信号的检测和转换。传感器是一种检测装 置,能将检测感受到的信息(力、热、声、 光、磁、气体、湿度等等),并按一定规 律变换成为电信号或其他所需形式的信息 输出,便于传输、转换、处理、显示和控 制等要求。
• /********************************** 显示子程序 ******************************/ • void display() //以下为数码管显示程序 • { • r=DPTR*50; //显示电压范围0.0~5.0V • r=r/1023; //转换10位数据 • P2_0=1; • r=r/10; • P2_1=0; //数码管高位显示 • P0=led[r]; • P0_7=0; • delay_2(); • s=DPTR*50; //数码管低位显示 • s=s/1023; • s=s%10; • P2_1=1; • P2_0=0; • P0=led[s];
•
DS18B20 的通信协议定义了初始化时序、 写时序和读时序。所有时序都是将主机作 为主设备,单总线器件作为从器件。初始 化、读/写时序如图7-5所示。
C/ T
2.室温测量系统设计
• 开发板电路图如图7-6所示,电路主要包括 单片机、温度传感器DS18B20和数码管。 DS18B20采用外部电源供电方式进行供电, 单片机通过 P3.5引脚与 DS18B20 的 DQ 相连,作为单总线数据线,R13 为单总线 DQ 的上拉电阻,阻值为 4.7kΩ。用温度 传感器DS18B20设计室温测量系统,通过 三位数码管显示,测量范围99.9~0.01º C。