找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2503|回复: 3
收起左侧

求助!!!利用18b20和四位共阳数码管制作温度计

[复制链接]
ID:136808 发表于 2016-8-15 15:31 | 显示全部楼层 |阅读模式
急需 大神帮忙 利用18b20和四位共阳数码管 做出一个温度计  求好心人帮忙发程序和原理图
回复

使用道具 举报

ID:98767 发表于 2016-8-16 02:00 来自手机 | 显示全部楼层
网上应该有吧!1602的我就有例子
回复

使用道具 举报

ID:121867 发表于 2016-8-16 12:00 | 显示全部楼层

回帖奖励 +5

是用四位数码管显示模块还是直接四位数码管?
回复

使用道具 举报

ID:136575 发表于 2016-8-20 08:11 | 显示全部楼层
#include<reg52.h>  unsigned char m,n,p;  sbit DQ=P2^3;//定义DS18b20的管脚    sbit L1=P2^7;//定义控制数码管的管脚  sbit L2=P2^6;  sbit L3=P2^5;  sbit L4=P2^4;    unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,  0x82,0xF8,0x80,0x90,0x7f,0xbf,0xa7};//0-9数字,后面为". - C"    /*****延时子程序*****/  void Delay_DS18B20(int num)  {    while(num--) ;  }    /*****初始化DS18B20*****/  void Init_DS18B20(void)  {    unsigned char x=0;    DQ = 1;         //DQ复位    Delay_DS18B20(8);    //稍做延时    DQ = 0;         //单片机将DQ拉低    Delay_DS18B20(80);   //精确延时,大于480us    DQ = 1;         //拉高总线    Delay_DS18B20(14);    x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败    Delay_DS18B20(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_DS18B20(4);    }    return(dat);  }    /*****写一个字节*****/  void WriteOneChar(unsigned char dat)  {    unsigned char i=0;    for (i=8; i>0; i--)    {      DQ = 0;      DQ = dat&0x01;      Delay_DS18B20(5);      DQ = 1;      dat>>=1;    }  }    /*****读取温度*****/  unsigned int ReadTemperature(void)  {    unsigned char a=0;    unsigned char b=0;    unsigned int t=0;    float tt=0;    Init_DS18B20();    WriteOneChar(0xCC);  //跳过读序号列号的操作    WriteOneChar(0x44);  //启动温度转换    Init_DS18B20();    WriteOneChar(0xCC);  //跳过读序号列号的操作    WriteOneChar(0xBE);  //读取温度寄存器    a=ReadOneChar();     //读低8位    b=ReadOneChar();    //读高8位    t=b;    t<<=8;    t=t|a;    tt=t*0.0625;    t= tt*10+0.5;     //放大10倍输出并四舍五入    return(t);  }    void display()//数码管扫描函数  {          P0=table[m];          L1=0;//暂未1,如用三极管驱动要改为0          Delay_DS18B20(250);          L1=1;//后关闭显示            P0=table[n];          //P1=table[10];//第二位后显示中间点          L2=0;          Delay_DS18B20(250);          L2=1;          P0=table[10];          L2=0;          Delay_DS18B20(250);          L2=1;            P0=table[p];//小数部分          L3=0;          Delay_DS18B20(250);          L3=1;            P0=table[12];          L4=0;          Delay_DS18B20(250);          L4=1;  }  /*主函数部分程序*/  void main()//主函数  {          unsigned int j;          while(1)          {                   j=ReadTemperature();//读取温度                  m=j/100;//分离出十位                  n=(j%100)/10;//分离出个位                  p=j%10;//分离出小数位                  display();//扫描数码管          }  }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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