数码管显示STC89C54RD+DB18B20测温板

发布者:HarmonySpirit最新更新时间:2015-07-13 来源: 51hei关键字:数码管显示  STC89C54RD  DB18B20  测温板 手机看文章 扫描二维码
随时随地手机看文章
        数码管显示STC89C54RD+DB18B20测温板,资料来源于网络。
        主要元件用到了单片机STC89C54RD+,DB18B20温度传感器,4为共阳数码管,PNPS8550三极管等。
       原理图:


 


 

#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
 
sbit DQ=P3^4;        //温度数据口

sbit wx1=P2^0;       //位选1
sbit wx2=P2^1;       //位选2
sbit wx3=P2^2;       //位选3
sbit wx4=P2^3;       //位选4
 
unsigned int temp, temp1,temp2, xs;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,                //共阳数码管
      0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6};
 
 
/******延时程序*******/
void delay1(unsigned int m)
    {
      unsigned int i,j;
      for(i=m;i>0;i--)
       for(j=110;j>0;j--);
         }

void delay(unsigned int m)     //温度延时程序
    {
      while(m--);
         }
void Init_DS18B20() 
{
unsigned char x=0;
DQ = 1;          //DQ复位 ds18b20通信端口
delay(8); //稍做延时
DQ = 0;          //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DQ = 1;          //拉高总线  
delay(4);
x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(20);
}
 
[page]
/***********ds18b20读一个字节**************/
uchar ReadOneChar()
{
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(4);
}
   return(dat);
}
 
/*************ds18b20写一个字节****************/
void WriteOneChar(unsigned char dat)
{
   unsigned char i=0;
   for (i=8; i>0; i--)
   {
   DQ = 0; //从高电平拉至低电平时,写周期的开始
    DQ = dat&0x01;   //数据的最低位先写入
    delay(5); //60us到120us延时
    DQ = 1;       
    dat>>=1; //从最低位到最高位传入
}
}

/**************读取ds18b20当前温度************/
void ReadTemperature()
  {
    unsigned char a=0;
    unsigned  b=0;
    unsigned  t=0;
    Init_DS18B20();
    WriteOneChar(0xCC);    // 跳过读序号列号的操作/
    WriteOneChar(0x44); // 启动温度转换
    delay(5);       // this message is wery important
    Init_DS18B20();
    WriteOneChar(0xCC); //跳过读序号列号的操作
    WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度/
    delay(5);
    a=ReadOneChar();    //读取温度值低位  /
    b=ReadOneChar();      //读取温度值高位    /
    temp1=b<<4;            //高8位中后三位数的值
    temp1+=(a&0xf0)>>4;      //低8位中的高4位值加上高8位中后三位数的值   temp1室温整数值
    temp2=a&0x0f;             //小数的值
    temp=((b*256+a)>>4);    //当前采集温度值除16得 实际温度值    zhenshu   
    xs=temp2*0.0625*10; //小数位,若为0.5则算为5来显示   xs小数    xiaoshu
   }
 

void wenduxianshi()
 {
       
        wx1=0;
        P0=table[temp/10];             //显示百位
        delay1(5);
        wx1=1;
        wx2=0;
        P0=table[temp%10]+0x80;      //显示十位        加上0x80就显示小数点了。
        delay1(5);
        wx2=1;
      
        wx3=0;
        P0=table[xs%10];      //显示个位  
        delay1(5);
        wx3=1;
        
        wx4=0;
        P0=table[12];          //显示 C 字符
        delay1(5);
        wx4=1;
 }
 
void main()
 {
 
 
  while(1)
 {    
       ReadTemperature();
       wenduxianshi();
  
 }
 }
关键字:数码管显示  STC89C54RD  DB18B20  测温板 引用地址:数码管显示STC89C54RD+DB18B20测温板

上一篇:自己写的AT89C2051电子温度计
下一篇:51单片机中的周期

推荐阅读最新更新时间:2024-03-16 14:24

基于stc89c52rc单片机的数字钟设计(数码管显示
事情总是看着简单,做起来没那么容易。 这个程序我开始时是根据教程编的,有些地方不理解就匆匆略过……事实证明这是不可取的…… 写了百十来行以后编译,报错!就不会解决了。 这时才体会到基础是多么重要!!! 学习方法要科学,要知其然,更要知其所以然。 就像罗哥说的,从原理入手…… 感谢 刘鹏 百忙之中抽出时间指导,真是我的良师和益友。。。。。。。 ***************************************************** 把程序贴出来。大家学习学习。千万不要ctrl c,ctrl v。 全部代码下载地址:http://www.51hei.com/f/ssz.rar ******************
[单片机]
数码管动态显示1——7,循环右移
数码管动态显示1 7,循环右移 * 功 能:数码管动态显示1 7,循环右移 * * 芯片:Amega16L * * 时钟频率:内部4M * * 编译环境:ICC-AVR7 * #include iom16v.h #include macros.h #define uint unsigned int #define uchar unsigned char #define on_138 PORTC|=BIT(PC7) //on or off 138 #define off_138 PORTC&=~BIT(PC7) #pragma data:code uchar flash table ={0x3f,0x
[单片机]
<font color='red'>数码管</font>动态<font color='red'>显示</font>1——7,循环右移
STM32下SPI模式通过MAX7219驱动8位数码管显示模块
借鉴的地方: 1、正点原子的“ALIENTEK MINISTM32 实验20 SPI实验” 2、 STM32 硬件SPI max7219 8位数码管显示模块 http://www.openedv.com/posts/list/46179.htm 工具: STM32F103RCT6开发板;MAX7219 8位数码管显示模块: 数码管模块电路图:(店家https://item.taobao.com/item.htm?spm=a1z09.2.0.0.FiSjlX&id=41059249086&_u=cjnajni5a96提供) MAX7219中文说明可以借鉴: http://wenku.baidu.co
[单片机]
STM32下SPI模式通过MAX7219驱动8位<font color='red'>数码管</font><font color='red'>显示</font>模块
C51---4.1 静态数码管显示
数码管引脚定义 原理图 74HC138 通过74HC138译码器的 P2_2 P2_3 P2_4 控制LED1-LED8 输出0为选中 例如 P2_2=1//低位 P2_3=0 P2_4=1//高位 101十进制为5 则第5位为有效 并且低电平有效。数码管为共阴极连接,所以LED5被选中 通过74HC138译码器选择LED 74HC245 74HC245为双向数据缓冲器 OE为低电平有效,芯片使能 A0-A7 与 B0-B7一一相连 DIR控制方向选择,高电平方向为A0- B0,低电平方向为B0- A0 代码 思路:通过74HC138选择LED1-8中的数码管,例如选择LED6 ,则控制 P
[单片机]
C51---4.1 静态<font color='red'>数码管</font><font color='red'>显示</font>
单片机驱动数码管显示设计
数码管是非常常见的东西,他能显示数字,以及字母,应用非常的广泛,本文我来和大家谈谈如何用单片机来驱动数码管 数码管的结构 数码管由7个发光二极管组成,行成一个日字形,它门可以共阴极,也可以共阳极.通过解码电路得到的数码接通相应的发光二极而形成相应的字,这就是它的工作原理. 基本的半导体数码管是由7个条状的发光二极管(LED)按图1所示排列而成的,可实现数字"0~9"及少量字符的显示。另外为了显示小数点,增加了1个点状的发光二极管,因此数码管就由8个LED组成,我们分别把这些发光二极管命名为 "a,b,c,d,e,f,g,dp",排列顺序如下图1。 图1: 数码管引脚图及外形图 数码管的分类 数码管按各发光二极管
[单片机]
单片机驱动<font color='red'>数码管</font><font color='red'>显示</font>设计
采用51单片机的共阳数码管流动显示数据实现
本程序是采用51单片机实现共阳数码管流动显示数据,蛮好看的,所以把程序写出来和大家一起分享一下!! 电路图在下面 下面是汇编程序代码: D0 BIT P2.0 D1 BIT P2.1 D2 BIT P2.2 D3 BIT P2.3 D4 BIT P2.5 ORG 0000H SJMP START ORG 0040H START:MOV SP,#60H MOV R0,#00H MOV R1,#20 MOV DPTR,#TABLE SETB D4 MOV A,R0 MOVC A,@A+DPTR //1 MOV P0,A CLR D0 LCALL DELAY MOV R
[单片机]
采用51单片机的共阳<font color='red'>数码管</font>流动<font color='red'>显示</font>数据实现
数码管显示 0-9999计数器
;=========================================== 四位显示器,是可以显示0000~9999的,但是在设计工程实际的产品时,前三个0,是不应该显示的。 一个成熟的程序,都应该有消除无效0的程序段。 消除无效0,其实就是用“空白”的代码来代替“0”。 在程序中,大家都知道有个七段码表,一般是把0123...的七段码依次排列在里面,那么第0~15个,通常就是0~F的七段码。 如果把“空白”七段码FFH,排在第16个位置,那么“空白”的代码就是16。 消除无效0的程序,应该从高位到低位(千位、百位、十位)依次判断,个位的0,是应该显示的,则不用判断。 某一位是0,就替换为16,如果不是0,不仅不用替
[单片机]
8255数码管显示线路
本内容提供了8255数码管显示电路图      8255数码管显示效果图   
[电源管理]
8255<font color='red'>数码管</font><font color='red'>显示</font>线路
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved