资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
实验一实验一 18B20 温度采集实验温度采集实验一、实验目的一、实验目的1. 掌握单片机与 1-wire(一线器)的通信原理与编程方法; 2. 掌握 LED 动态显示方法; 3了解温度传感器原理;二、实验原理及实验内容二、实验原理及实验内容1.1. 实验原理实验原理关于 18B20 工作原理请读者参考 DALLAS 公司资料。89S52 控制 DS18B20 完成 温度转换必须经过三个步骤:初始化、ROM 操作指令、存储器操作指令。必须先启动 DS18B20 开始转换,再读出温度转换值。本实验系统挂接一个 18B20 芯片,可使用默认的 12 位转换精度,外接供电电源,单片机与 18B20 接口是用单片机的 P2.4。2 2实验内容实验内容 a程序要求,参考给出的流程图,在 Keil 编译环境下变成程序,要求采集温度, 如果超出报警温度范围则报警,报警通过实验箱上的蜂鸣器实现,报警温度可以通过键盘 设置,最后,生成*.HEX 文件。 b通过 ISP 将生成的*.HEX 文件下载到单片机中,允许程序。 c观测 LCD 上的显示温度数据,通过键盘操作控制报警温度。开始返回初始化读取温值读取温值数码显示是否为正温温值转换是否大于报警温 值BEEP ONBEEP OFF数码管显示初始化键盘扫描取键值温值增1+键按下-键按下退出中断数码管显示返回温值减1YNYYYYNNNN中断流程图主流程图图 8-1 DS18B20 温度采集系统流程图三、参考程序三、参考程序/DS18B20 温度传感器程序 #include #define Alarm 10 sbit Beep=P34; sbit DQ=P24; /数据传输线接单片机的相应的引脚 unsigned char tempL=0,tempH=0; /设全局变量 unsigned char flag=0; unsigned int temperature,negtemper; /温度值保存在 temperature 里 unsigned char idata addrdat2=0x0,0x0; unsigned char tab=0xc0,0xf9,0xa4,0xb0, /* 0 1 2 3 4 */ 0x99,0x92,0x82,0xf8,0x80,0x90; /* 5 6 7 8 9 */ unsigned char tab1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; unsigned char dispbuf3=0,0,0; unsigned char warning=20; bit on=0,off=1;/*/延时子程序 /* void delay(unsigned int i) while(i-); void beep( bit i) Beep=i; /* /初始化程序 Init_DS18B20(void) unsigned char x=0;DQ=1; /DQ 先置高delay(8); /稍延时DQ=0; /发送复位脉冲delay(85); /延时(480us)DQ=1; /拉高数据线delay(14); /等待(1560us)x=DQ; /用 X 的值来判断初始化有没有成功,18B20 存在的话 X=0,否则 X=1delay(20); /*/读一个字节 ReadOneChar(void) /主机数据线先从高拉至低电平 1ms 以上,再 /使数据线升为高电平,从而产生读信号unsigned char i=0; /每个读周期最短的持续时间为 60us,各个读周期 /之间必须有 1ms 以上的高电平恢复期unsigned char dat=0;for (i=8;i0;i-) /一个字节有 8 位DQ=1;delay(1);DQ=0; dat=1;DQ=1;if(DQ)dat|=0x80;delay(4);return(dat); /*/写一个字节 WriteOneChar(unsigned char dat) unsigned char i=0; /数据线从高电平拉至低电平,产生写起始信号。 /15ms 之内将所需写的位送到数据线上,for(i=8;i0;i-)/在 1560ms 之间对数据线进行采样,如果是高电平就写 1,低写 0 发生。DQ=0; /在开始另一个写周期前必须有 1ms 以上的高电平恢复期。DQ=datdelay(5);DQ=1;dat=1;delay(4); /* ReadTemperature(void) Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的*作WriteOneChar(0x44); /启动温度转换delay(125); /转换需要一点时间,延时Init_DS18B20(); /初始化WriteOneChar(0xcc); /跳过读序列号的*作WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar(); /读出温度的低位 LSBtempH=ReadOneChar(); /读出温度的高位 MSB temperature=(tempH*256)+tempL; /温度转换,把高低位做相应的运算转化为实际温度return(temperature); /* void Dispbuf(unsigned int temper) dispbuf2=(temper4)/10;/取十位dispbuf1=(temper4)%10;/取个位if(temperelse dispbuf0=0; unsigned char getkey() /键盘扫描程序 P2=0xff;P2=0xfe;if (P2if(P2 else P2=0xfd; else P2=0xfd;if (P2if (P2 else P2=0xfb; else P2=0xfb; if (P2if (P2else P2=0xf7; else P2=0xf7; if (P2if (P2else return P2=0xfe; Inter0_process() interrupt 2 /外部中断 1unsigned char key;int i;unsigned char dis=0x01;unsigned int j; for(j=5000;j0;j-)key = getkey();/取键值if (key = 0xee)/如 1 键按下温值递增 warning+;delay(8000);if (key=0xed) /5 按下递减warning-;delay(8000);if(key=0x77)/16 键退出中断j=1;for(i=0;i4)/蜂鸣器响 else beep(off);/不响P1=npos;npos=1;/循环显示if(i=1)P0=tab1dispbufi;elseP0=tabdispbufi;delay(100); npos=0x01; 四、实验仪器和设备四、实验仪器和设备Keil 软件;AT89S52 实验平台;ATMEL ISP 在线编程软件;18B20 温度传感器实验模 块五、实验结果和数据分析五、实验结果和数据分析问题: 1说明 1-wire 器工作原理。 2说明 18B20 控制原理。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号