温度传感器DS18B20如何编程??

[复制链接]
查看11 | 回复0 | 2013-6-22 18:02:48 | 显示全部楼层 |阅读模式
#include #include #define uchar unsigned char#define uint unsigned intsbit DQ=P2^2;sbit wela=P2^7;sbit dula=P2^6;sbit lcdrs=P1^0;sbit lcdrw=P1^1;sbit lcden=P2^5;uchar code table[]={"Current temp:"};uchar date[2]={0};uchar table1[4]={0};uint temp;uchar end; void delay(uint x) {uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--) ;}void nops(uint x){ for(;x>0;x--)_nop_(); }void write_byte(uchar num){uchar i;bit m;for(i=0;i>=1;DQ=1;DQ=0;nops(11);DQ=m;
nops(40);DQ=1; _nop_();}}/********************************************************************* * 函数名称:read_byte() * 功
能:向18B20读数据 * 入口参数:无 * 出口参数:无 * 返 回 值:读出的一个字节数据 ********************************************************************/uchar read_byte() {uchar i,num;bit m;for(i=0;i>=1;if(m){ num|=0x80;}nops(25); DQ=1;}return(num);}/********************************************************************* * 函数名称:DS18b20_init() * 功
能:18B20复位 * 入口参数:无 * 出口参数:无 * 返 回 值:无 ********************************************************************/void DS18b20_init(){DQ=1; nops(1); DQ=0; nops(750); DQ=1; while(DQ==1) ;
nops(420);
DQ=1;}/********************************************************************* * 函数名称:get_temp() * 功
能:获取温度值 * 入口参数:无 * 出口参数:无 * 返 回 值:18B20的双字节温度 ********************************************************************/void get_temp(){uchar a,b;
DS18b20_init();write_byte(0xCC); // 发Skip ROM命令write_byte(0x44); // 发转换命令delay(20);DS18b20_init();write_byte(0xCC); //发Skip ROM命令write_byte(0xBE); //发read命令a=read_byte(); //低8位b=read_byte(); //高8位temp=b<<8;temp|=a;}void chuli()//将温度离散,17度保存为1,7{uchar wendu,tt;wendu=temp*0.0625; tt=wendu; table1[0]=tt/100; tt=tt%100 ; table1[1]=tt/10; tt=tt%10;table1[2]=tt;}/**************************************************************/// 1602显示程序// void write_com(uchar com) {lcdrs=0; P0=com; delay(5); lcden=1;delay(5); lcden=0; } void write_data(uchar date) {lcdrs=1; P0=date;delay(5); lcden=1;delay(5);lcden=0; }void init1602(){wela=1;P0=0;wela=0;lcdrw=0;
}/**************************************************************/void main(){uchar i;init1602();write_com(0x38);//显示模式write_com(0x0f);// 开显示、光标、闪烁write_com(0x06);//指针地址和光标自动加1write_com(0x80);//指针起始地址while(table!='\0') {write_data(table[i++]); delay(10);}
while(1) {write_com(0x80+0x40);//指针起始地址
get_temp(); chuli();
for(i=0;i<4;i++)
{write_data(table1[i++]+0x30);
delay(10);}}
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行