标题:
求助求助求助 有关温度计的 我是新手
[打印本页]
作者:
jj思密达
时间:
2015-10-27 18:27
标题:
求助求助求助 有关温度计的 我是新手
/***************读取DS18B20温度,通共阴数码管显示**************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
code uchar seven_seg[] = {0xFA,0x22,0xB9,0xAB,0x63,0xCB,0xDB,0xA2,0xFB,0xEB};
code uchar seven_bit[] = {0xfe,0xfd,0xfb,0xf7,0xff};///{0x01,0x02,0x04,0x08,0x00};
uint timer;
uint temp;
sbit DQ = P2^0;
void delay(uint x)
{
while(x--);
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay(8); //稍做延时
DQ = 0; //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DQ = 1; //拉高总线
delay(14);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(20);
}
/******************************从18B20中读一个字节****************************/
uchar Read_OneChar(void)
{
uchar i = 0;
uchar dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat >>= 1;
DQ = 1; // 给脉冲信号
if(DQ)
dat |= 0x80;
delay(8);
}
return(dat);
}
/******************************向18B20中写一个字节****************************/
void Write_OneChar(uchar dat)
{
uchar i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(10);
DQ = 1;
dat >>= 1;
}
delay(8);
}
/***********************************读取温度**********************************/
uint Read_Temperature(void)
{
int t=0;
float tt=0;
uchar temp_L,temp_H; //温度低8位,和高8位
EA=0; //关中断,以免意外
Init_DS18B20();
Write_OneChar(0xcc); // 跳过读序号列号的操作
Write_OneChar(0xbe); // 读取温度寄存器等(共可读9个寄存器) 前两个就是温度
temp_L = Read_OneChar(); //读取温度值低位
temp_H = Read_OneChar(); //读取温度值高位
Init_DS18B20();
Write_OneChar(0xcc); //跳过读序号列号的操作
Write_OneChar(0x44); //启动温度转换
t=temp_H;
t<<=8;
t=t|temp_L;
tt=t*0.0625;
t= tt*10+0.5;
EA=1; //开中断
return(t);
}
/********延时函数************/
void delay_time(uint time)
{uint a,b;
for(a=0;a<time;a++)
for(b=0;b<2;b++);
}
/********初始化中断函数************/
void timer0_init(void) //初始化
{
TMOD = 0x01;
TH0 = 0xec;
TL0 = 0x78;
TR0 = 1;
EA = 1;
ET0 = 1;
}
/************************************************************************/
void timer0_isr(void) interrupt 1 //中断
{
TH0 = (65535-1000)/256;
TL0 = (65535-1000)%256;
timer++;
}
/**********显示函数************/
void display_num(uint num)
{
P3=seven_bit[1];
P1=seven_seg[num/100%10];
delay_time(10);
P1=0;
P3=seven_bit[2];
P1=seven_seg[num/10%10]+0x80;
delay_time(10);
P1=0;
P3=seven_bit[3];
P1=seven_seg[num%10];
delay_time(10);
P1=0;
}
/***********主函数*************/
void main(void)
{
timer0_init();
while(1)
{
display_num(temp+1); // temp2
if(timer>1000)
{timer=0;temp=Read_Temperature();}
}
}
6OL(C~}G2BZ~D5]@}AQK)}Q.png
(32 KB, 下载次数: 133)
下载附件
2015-10-27 18:26 上传
作者:
jj思密达
时间:
2015-10-27 18:28
无法正常显示温度,倒入硬件数码管都不会亮
作者:
wc86110
时间:
2015-11-22 17:19
LZ 还是先弄清楚电路图与程序的关系就不会再犯同样错误。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1