51单片机数字钟温度计的编程案例

发布者:skyshoucang最新更新时间:2018-03-06 来源: eefocus关键字:51单片机  数字钟  温度计 手机看文章 扫描二维码
随时随地手机看文章

    

    #include "reg51.h"

    char disp[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
char disp_dot[11]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};

 

    sbit DQ = P1^3;  //定义通信端口

    //晶振12MHz  
void delay_18B20(unsigned int i)
{
 while(i--);
}

    //初始化函数
Init_DS18B20(void) 
{
  unsigned char x=0;
  DQ = 1;          //DQ复位
  delay_18B20(8);  //稍做延时
  DQ = 0;          //单片机将DQ拉低
  delay_18B20(80); //精确延时 大于 480us
  DQ = 1;          //拉高总线
  delay_18B20(14);
  x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  delay_18B20(20);
}

    
//读一个字节  
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_18B20(4);
  }
  return(dat);
}

    //写一个字节  
WriteOneChar(unsigned char dat)
{
 unsigned char i=0;
 for (i=8; i>0; i--)
 {
  DQ = 0;
  DQ = dat&0x01;
  delay_18B20(5);
  DQ = 1;
  dat>>=1;
 }
}

    //读取温度
ReadTemperature(void)
{
 unsigned char a=0;
 unsigned char b=0;
 unsigned int  t=0;
 
 Init_DS18B20();
 WriteOneChar(0xCC); // 跳过读序号列号的操作
 WriteOneChar(0x44); // 启动温度转换
 delay_18B20(100);
 Init_DS18B20();
 WriteOneChar(0xCC); //跳过读序号列号的操作
 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 a=ReadOneChar();
 b=ReadOneChar();
  
 //传感器返回值除16得实际温度值
 //为了得到2位小数位,先乘100,再除16,考虑整型数据长度,
 //技巧处理后先乘25,再除4,除4用右移实现

     t = (b*256+a)*25; 
 return( t >> 2  );
}

    main()
{
 unsigned int tmp;
 unsigned char counter;
 while(1)
 {
  //温度测量频率没有必要太高,太高反而影响数码显示
  //所以用计数器加以控制
  if(counter-- == 0)
  {
  tmp = ReadTemperature();    
  counter = 20;
  }

      P2 = 0xff;
  P0 = disp[tmp%10];
  P2 = 0xfb;
  delay_18B20(1000);
  P2 = 0xff;
  P0 = disp[tmp/10%10];
  P2 = 0xf7;
  delay_18B20(1000);
  P2 = 0xff;
  P0 = disp_dot[tmp/100%10];
  P2 = 0xef;
  delay_18B20(1000);
  P2 = 0xff;
  P0 = disp[tmp/1000%10];
  P2 = 0xdf;
  delay_18B20(1000);
 }
}


关键字:51单片机  数字钟  温度计 引用地址:51单片机数字钟温度计的编程案例

上一篇:用单片机的串口驱动74LS165
下一篇:89C51单片机编程程序

推荐阅读最新更新时间:2024-03-16 15:56

51单片机 | 实现SMC1602液晶屏显示实例
LCD1602 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1602的意思是每行显示16个字符,一共可以显示两行。如果是12232液晶(图形型液晶)则表示由122列32行组成,即共有122*32个点 p.s.注意使用温度,通常液晶的工作范围为0~+55℃,存储温度范围为-22~+60℃。 - - - - - - - - - - - - - - - - - - - - - -
[单片机]
<font color='red'>51单片机</font> | 实现SMC1602液晶屏显示实例
MCS-51单片机的基本知识
8051是MCS-51系列单片机的典型产品,其特性与我们实验的STC89C52RC完全相同,这里以8051为例简介一下单片机的基本知识。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 中央处理器: 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 图1 数据存储器(RAM): 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它
[单片机]
MCS-<font color='red'>51单片机</font>的基本知识
8051单片机(STC89C52)以轮询方式实现串口通信(51接收数据后发送回PC端)
#include STC89C5xRC.H int main() { char buf; TMOD = 0x21; //设定timer1的工作模式 SCON = 0x50; //设置串行通信格式 TH1 = 0xE6; //设定timer1的初始值 TL1 = 0xE6; TR1 = 1; //开启timer1 while(1) { if(RI == 1) { //如果收到数据 buf = SBUF; RI = 0; SBUF = buf;//将收到的数据发回去 while(TI == 0); //等待数据发送完毕 TI = 0;
[单片机]
80<font color='red'>51单片机</font>(STC89C52)以轮询方式实现串口通信(51接收数据后发送回PC端)
51单片机 4*4矩阵键盘 扫描方式
实际工程应用中,遇到按键比较多的情况,大多是使用矩阵键盘或者编码键盘。处于成本考虑,一般使用矩阵键盘。 以下是矩阵键盘部分原理图: 代码如下: #include #define uint unsigned int #define uchar unsigned char sbit duanxuan=P2^6; sbit pianxuan=P2^7; uchar code table ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //编码定义 void dela
[单片机]
Kinsa智能手机温度计已在CVS和苹果商店发售
    纽约的Kinsa健康日前发布一款获得FDA许可的智能手机温度计。这款温度计可通过CVS和苹果商店购买,用户还可以通过亚马逊、苹果和Kinsa官网在线购买。     Kinsa温度计实在一月份获得许可的,可以通过智能手机的耳机孔连接手机。      温度计也放到口腔和压下或者直肠来测量体温。来自设备的数据可发送到手机配套的app上,以记录使用者体温、测量时间和其它数据,如使用者的感受。针对儿童,app还提供温度测量的视频模拟用来分散儿童注意力,让其平静。     Kinsa针对其测试用户售价为14.99美元,温度计的零售价是29.99美元。     公司还希望通过温度的使用产生实时健康地图,追踪疾病的传播。a
[医疗电子]
51单片机红外解码过程时序图
红外解码过程: Ray_Read_bit_timer 103us自增变量 Ray_Read_bit_count 保存位置编号 Ray_bit_timer_Buffer 33字节数组 Ray_Flag 保存标志 Ray_Read_ok 允许分析长短 (1)、按下遥控器,单片机就会有下降沿中断。启动定时器TR0=1; (2)、定时器从0开始增加到255溢出,需要时间103us。 (3)、产生定时器中断。中断里面变量Ray_Read_bit_timer增加1。 (4)、在下降沿的中断服务,判断这个时候Ray_Read_bit_timer * 103us,是不是大于11.5ms 。 (5)、如果大于11.5,肯定大于9
[单片机]
<font color='red'>51单片机</font>红外解码过程时序图
51单片机入门之静态数码管
LED数码管是单片机外围接口设备中常用的显示设备,有七段管和米字管两种,实验室中常用的是七段管。其工作方式有两种:共阴极和共阳极。所谓共阴极是把LED的com端都接地,而共阳极就是把com端都接高电平。其驱动显示方式也有两种:静态显示和动态显示。 静态显示中每个数码管占用单片机的一个八位口I/O口,工作时点亮的段常亮。于该种方式而言,硬件电路简单,编程简单,但是浪费单片机的I/O口。下面简单演示一下该种驱动方式。 P2口接一个数码管,数码管显示的数字每秒钟自动加一,加到9后清0,一直循环,本实验中数码管采用共阴极接法。 实验原理图如下: 实验程序如下: view plain copy #include #def
[单片机]
<font color='red'>51单片机</font>入门之静态数码管
基于AT89C51单片机的数据采集系统设计新方法
引言 近年来,随着制造技术的发展,单片机的价格越来越低,性能却不断提升,因而其应用范围也越来越广。然而在开发基于单片机的应用系统时,传统方法一般都需要大量的硬件设备,这些设备极易损坏而且携带不方便。为此,本文基于AT89C51数据采集系统详细说明了如何利用Pro-teus和两款串口仿真软件来进行单片机程序及外围电路的仿真设计。采用该方法可以大大简化硬件电路测试和系统调试过程,对单片机系统开发具有指导意义。本文介绍的基于AT89C5l单片机的数据采集系统能实现16路信号输入,每一路都是0~10 mV的信号,每秒钟采集一遍,从而将数据传给上位PC计算机。 1 硬件设计 1.1 主控芯片 AT89C51是一种带有4 KB闪烁可编
[单片机]
基于AT89C<font color='red'>51单片机</font>的数据采集系统设计新方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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