这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» DIY与开源设计» 电子DIY» 温度数字温度计!

共6条 1/1 1 跳转至

温度数字温度计!

菜鸟
2011-12-28 13:13:42 打赏

数字温度计!现先将视频贴上。



#include
#include
#define DQ P1_3 //定义DS18B20数据端口DQ
#define dis_data P0 //定义数码管段码输入管脚
#define dis_E P3_7 //定义74HC573使能管脚LE
#define dis_bit P2 //定义74HC138输入管脚A0 A1 A2
/****P3.2和P3.3为调整温度报警增加键和减少键******/
signed char shangxian=38; //上限报警温度,默认值为38
uchar code LEDData[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x63,0x40,0x00};
//0 1 2 3 4 5 6 7 8 9 C 口 - 关
/*****延时子程序*****/
void Delay(uint i)
{
while( i-- );
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
unsigned char x=0;

DQ=1;
Delay(8); //稍做延时
DQ=0; //单片机将DQ拉低
Delay(80); //精确延时,大于480us
DQ=1; //拉高总线
Delay(14);
x=DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
Delay(20);
}

/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat=0;
for (i=8;i>0;i--)
{
DQ=0; // 给脉冲信号
dat>>=1;
DQ=1; // 给脉冲信号
if(DQ)
dat|=0x80;
Delay(4);
}
return(dat);
}

/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ=0;
DQ=dat&0x01;
Delay(5);
DQ=1;
dat>>=1;
}
}
void Tmpchange(void) //发送温度转换命令
{
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
}
/*****读取温度*****/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Tmpchange();
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位






************************************
/*****显示开机初始化等待画面*****/
Disp_init()
{
。。

。。
。。。
}

/*****显示温度子程序*****/
Disp_Temperature() //显示温度
{
。。
。。





。。
。。。。

。。。;(注:再这里可精确到小数点后四位。)
}

/*****外部中断0服务程序*****/
void int0(void) interrupt 0
{

EX0=0; //关外部中断0
sign=1;
if(SET==1) shangxian++;
else xiaxian++;
Delay(500);
EX0=1;
}

/*****外部中断1服务程序*****/
void int1(void) interrupt 2
{

EX1=0; //关外部中断0
sign=1;
if(SET==1) shangxian--;
else xiaxian--;
Delay(500);
EX1=1;
}

/*****主函数*****/
void main(void)
{
uint z;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
ReadTemperature();
LING=0;
for(z=0;z<100;z++)
{
Disp_init();
}
while(1)
{
Disp_Temperature();
if(sign==1)
{
for(z=0;z<300;z++)
disptiaozheng();
sign=0;
}
}
}

现在期末考到了,这个视频作为今年最后一个视频,其中省略若干步,有兴趣的可以自己改编!。DIY制作学习到此告一段落!这个寒假我还会继续做下去,希望大家能够多多支持!




关键词: 温度 数字 温度计 unsigned

菜鸟
2011-12-28 13:47:26 打赏
2楼

助工
2011-12-28 13:53:38 打赏
3楼
这代码还挺眼熟!
弄一个帖子就够了吧,然后再慢慢更新上去!

专家
2011-12-28 19:14:59 打赏
4楼
就一个么?

菜鸟
2011-12-28 22:32:19 打赏
5楼
一个视频就对应一个程序!前面的帖子里也有!

菜鸟
2011-12-28 22:36:43 打赏
6楼

楼主见过的。只是刚刚调试出来而已,现在先告一段落,放寒假再学习!


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]