DS18B20测温与数码管显示

       原本要写一篇DS18B20测温LCD1602显示的实验,应关注者的要求先写了一篇DS18B20测温与数码管显示的实验。DS18B20测温与数码管显示是通过51单片机读取DS18B20的温度值,然后实时的通过数码管显示当前温度值。

1.系统原理图(回复关键字DS18B20,自动获取原理图代码下载连接)

       数码管采用的共阳极数码管,数据口段码接单片机的P0口,位选信号接的单片机的P2.0、P2.1、P2.2、P2.3。其中P2.0控制百位显示,P2.1控制十位显示,P2.2控制各位及小数点显示,P2.3为小数位显示控制端。共阳数码管与单片相连时单片机的灌电流极小,不能用来驱动数码管,需要接三极管放大电流来点亮数码管,三极管采用NPN型的接法如图所示。

  1. 图片

2.系统主程序

void main()
{
 
  float tmp=0.0;
  int count = 0;    
    unsigned int temp=0;
    P2=0X00;
  dsInit();
    while(1)
    {
        if(count >= 100)
        {
            sendChangeCmd();
          tmp=getTmpValue();
            temp=(unsigned int)(tmp*10.0);
            count = 0;
        }
        LEDdisplay(temp);
        count++;
    }
}   
 

3.数码管显示代码

/*******************************************************************************
* 函 数 名 :LEDdisplay
* 函数功能 :循环显示各个位上的数据
* 输    入 :num要显示的数据
* 输    出 :无
*******************************************************************************/
void LEDdisplay(unsigned int num)
{
    unsigned char qian,bai,shi,ge;
    qian=num/1000;
    bai=num%1000/100;
    shi=num%100/10;
    ge=num%10;
    
    wela_1 = 0;      //关闭所有数码管
    wela_2 = 0;
    wela_3 = 0;
    wela_4 = 0;    
    
    wela_3=1;  //显示百位
    LED_PORT=table[bai];
    Delay_ms(1);
    LED_PORT = 0xff;
    wela_3=0;
    
    wela_2=1;  //显示十位
    LED_PORT=table[shi];
    xiaoshudian=0;
    Delay_ms(1);
    LED_PORT = 0xff;
    wela_2=0;
    
    wela_1=1;  //显示个位
    LED_PORT=table[ge];
    Delay_ms(1);
    LED_PORT = 0xff;
}

4.仿真运行视频见链接:DS18B20测温与数码管显示(回复关键字DS18B20,自动获取原理图代码下载连接)。

 

评论 176
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值