找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于DS18B20,STC15的驱动显示00

[复制链接]
跳转到指定楼层
楼主
ID:813514 发表于 2020-8-20 08:46 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
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);
}


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

使用道具 举报

沙发
ID:813514 发表于 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);
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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