找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1178|回复: 0
打印 上一主题 下一主题
收起左侧

cc2530 温度传感器

[复制链接]
跳转到指定楼层
楼主
ID:273027 发表于 2018-1-8 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit fm=P2^3;
sbit DS=P2^2; //define interface 定义连接
uint temp; // variable of temperature 温度变化
uchar flag1; // sign of the result positive or negative 表明结果的正确与否
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,};
unsigned char code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,
0x78,0x00,0x10};
void delay(uint count) //delay
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
void dsreset(void) //send reset and initialization command 重置初始数据
{
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bit tmpreadbit(void) //read a bit 读点
{
uint i;
bit dat;
DS=0;i++; //i++ for delay
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
uchar tmpread(void) //read a byte date 读一个字节数据
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
void tmpwritebyte(uchar dat) //write a byte to ds18b20
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //write 1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0; //write 0
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
void tmpchange(void) //DS18B20 begin change
{
dsreset();
delay(1);
tmpwritebyte(0xcc); // address all drivers on bus
tmpwritebyte(0x44); // initiates a single temperature conversion
}
uint tmp() //get the temperature
{
float tt;
uchar a,b;
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
temp=b;
temp<<=8; //two byte compose a int variable
temp=temp|a;
tt=temp*0.0625;
temp=tt*10+0.5;
return temp;
}
void readrom() //read the serial
{
uchar sn1,sn2;
dsreset();
delay(1);
tmpwritebyte(0x33);
sn1=tmpread();
sn2=tmpread();
}
void delay10ms() //delay
{
uchar a,b;
for(a=10;a>0;a--)
for(b=60;b>0;b--);
}
void display(uint temp) //显示程序
{
uchar A0,A1,A2,A2t,A3,ser;
ser=temp/10;
SBUF=ser;
A0=temp/1000;
A1=(temp/100)%10;
A2t=temp%100;
A2=A2t/10;
A3=A2t%10;
P1=0x01;
P0=table[A0];//显示百位
delay(1);
P1=0X02;
P0=table[A1]; //显示十位
delay(1);
P1=0X04;
P0=table1[A2]; //显示个位
delay(1);
P1=0X08;
P0=table[A3]; //显示十分位
delay(1);
}
void main()
{
uc
har a;
do
{
tmpchange();
// delay(200);
for(a=10;a>0;a--)
{
display(tmp());
if(temp>300|temp<270)
fm=0;
else
fm=1;
}
}while(1);
}
窗体顶端
窗体底端


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表