欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于DS18B20,STC15的驅動顯示00
[打印本頁]
作者:
273765054qq.ocm
時間:
2020-8-20 08:46
標題:
關于DS18B20,STC15的驅動顯示00
DS18B20我只想顯示兩位的數碼管,但啟動后一直顯示00,不顯示溫度不知道哪里出錯啦,求教!還有兩位數碼管的動態顯示我是在定時器里10MS的刷新頻率,DS18B20在進行時是關閉中斷的,這就造成刷新停止會出現一閃一閃的效果,如果能讓兩位數碼管在讀取DS18B20時候不閃,程序哪里需要改進跪求~
#include "ds18b20.h"
u8 Get_DS18B20_Ack(void)
{
u8 ack=0;
EA=0;
DS18B20_Pin=0;
Delay600us();
DS18B20_Pin=1;
Delay50us();
ack=DS18B20_Pin;
while(!DS18B20_Pin);
EA=1;
return(ack);
}
void DS18B20_WriteByte(u8 DS18B20_Byte)
{
u8 mask;
EA=0;
for(mask=0x01;mask!=0;mask<<=1)
{
DS18B20_Pin=1;
DS18B20_Pin=0;
Delay2us();
DS18B20_Pin=mask&DS18B20_Byte?1:0;
Delay70us();
}
DS18B20_Pin=1;
EA=1;
}
u8 DS18B20_ReadByte(void)
{
unsigned char dat,mask;
EA=0;
for(mask=0x01;mask!=0;mask<<=1)
{
DS18B20_Pin=0;
Delay2us();
DS18B20_Pin=1;
Delay2us();
if(DS18B20_Pin)
{
dat|=mask;
}
else
{
dat&=~mask;
}
Delay70us();
}
DS18B20_Pin=1;
EA=1;
return(dat);
}
u8 DS18B20_Start(void)
{
u8 ack=0;
ack=Get_DS18B20_Ack();
if(ack==0)
{
DS18B20_WriteByte(0xcc);
DS18B20_WriteByte(0x44);
}
return(ack);
}
u16 Get_DS18B20_Temp(void)
{
u16 temp;
u8 LSB,MSB;
u8 ack;
ack=Get_DS18B20_Ack();
if(ack==0)
{
DS18B20_WriteByte(0xcc);
DS18B20_WriteByte(0xbe);
LSB=DS18B20_ReadByte();
MSB=DS18B20_ReadByte();
}
temp=MSB<<4;
temp|=(LSB&0xf0)>>4;
temp=temp*0.0625;
return(temp);
}
作者:
273765054qq.ocm
時間:
2020-8-20 08:46
#include "stc15.h"
#include "delay.h"
#include "ds18b20.h"
sbit Bit_0=P3^1;
sbit Bit_1=P3^0;
sbit DIO=P3^2;
sbit SCLK=P3^3;
sbit RCLK=P3^5;
unsigned char code numtab[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
u16 Temp;
void Timer2Init(void)
{
AUXR |= 0x04;
T2L = 0xA0;
T2H = 0x15;
AUXR |= 0x10;
IE|=0x80;
IE2|=0x04;
}
void LED_ShowNum(u8 tab);
void LED_Display(u8 num);
void main(void)
{
SCLK=0; RCLK=0;
Timer2Init();
Delay800ms();
while(1)
{
Delay800ms();
DS18B20_Start();
Temp=Get_DS18B20_Temp();
Temp>>=4;
}
}
void LED_ShowNum(u8 tab)
{
u8 i;
for(i=0x80;i!=0;i>>=1)
{
DIO=tab&i?1:0;
SCLK=0; SCLK=1;
}
RCLK=0; RCLK=1;
}
void LED_Display(u8 num)
{
static u8 i=0;
if(i==0)
{
Bit_1=0;
Bit_0=1;
LED_ShowNum(numtab[num/10]);
i=1;
}
else
{
Bit_1=1;
Bit_0=0;
LED_ShowNum(numtab[num%10]);
i=0;
}
}
void TIM2_IRQHandler(void) interrupt 12
{
LED_Display(Temp);
}
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1