历史上的今天
返回首页

历史上的今天

今天是:2025年01月12日(星期日)

2018年01月12日 | 51单片机+18B20显示程序+74HC164扩展显示数码管

2018-01-12 来源:eefocus

51 单片机 +18B20显示程序+74HC164扩展显示数码管

#include
#include "intrins.h"             //_nop_();延时函数用
#define  uchar unsigned char

#define  uint  unsigned int


//================18b20数据口定义===============
uint  temp;                     // 定义一个16位变量用于COPY数据 
sbit  DQ = P2^6; 
char flash,presence;
uint temp1,temp2;               //读出温度暂放
uchar s1,s2,s3,s4;              //显示单元数据,共6个数据和一个运算暂用
//=======164端口定义==========
sbit ge=P2^5;    //个位
sbit shi=P2^4;   //十位
sbit bai=P2^3;   //百位
sbit qian=P2^2;  //千位
sbit clk=P2^1;   //164时钟线
sbit data1=P2^0; //164数据线
sbit a0=ACC^0;   //累加器

uchar code LED[10]={        //不带小数点的代码表
0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,};
uchar code led1[10]={       //带小数点的代码表
0x40,0x79,0x24,0x30,0x19,
0x12,0x2,0x78,0x0,0x10,};
//======164数据转换程序=======
void chuanshu164(uchar data_buf)
{
  uchar i;
  ACC=data_buf;      //数据送累加器
  for(i=8;i>0;i--)
  {
  clk=0;
      data1=a0;
      clk=1;
      ACC=ACC>>1;
  }
      clk=0;
}

/*****************延时函数*************************/
void delay(uint t)
{
  for (;t>0;t--);
  _nop_();
}
//========显示4位数码管函数===========
void xianshi(uint shu)
{
    uchar ss;
    for(ss=10;ss>0;ss--)
     {
     uint wei1,wei2,wei3,wei4;
     wei1=shu/1000;            //将千位分离
     wei2=shu%1000/100;        //将百位分离
     wei3=shu%100/10;          //将十位分离
     wei4=shu%10;              //将个位分离
 
     chuanshu164(led[wei1]);   //显示第一位数码管
     qian=0;
     delay(200);
     qian=1;
   chuanshu164(led[wei2]);   //显示第二位数码管
     bai=0;
     delay(200);
     bai=1;
 
     chuanshu164(led1[wei3]);   //显示第三位数码管
     shi=0;
     delay(200);
     shi=1;
     chuanshu164(led[wei4]);   //显示第四位数码管
     ge=0;
     delay(200);
     ge=1;
     //}
     }
    
    
}
//=================18b20相关函数开始==============
/****************DS18B20复位函数************************/
ow_reset(void)
{
char presence=1;
 while(presence)
 {
   while(presence)
    {
  DQ=1;_nop_();_nop_();      //从高拉倒低
  DQ=0;                                       
  delay(550);                //550 us
  DQ=1;                                        
  delay(66);                 //66 us
  presence=DQ;               //presence=0 复位成功,继续下一步
    } 
 delay(500);                   //延时500 us
 presence=~DQ;         
 }
DQ=1;                            //拉高电平
}

/****************DS18B20写命令函数************************/
void write_byte(uchar val)               //向1-WIRE 总线上写1个字节

  uchar i;
  for(i=8;i>0;i--)
  {
   DQ=1;_nop_();_nop_();                  //从高拉倒低
   DQ=0;_nop_();_nop_();_nop_();_nop_();  //5 us
   DQ=val&0x01;                           //最低位移出
   delay(66);                              //66 us
   val=val/2;                             //右移1位
   }
   DQ=1;
   delay(10);
}
//
/****************DS18B20读1字节函数************************/
uchar read_byte(void)  //从总线上取1个字节
{
uchar i;
uchar value=0;
for(i=8;i>0;i--)
{
  DQ=1;_nop_();_nop_();
  value>>=1;
  DQ=0;_nop_();_nop_();_nop_();_nop_();         //4 us
  DQ=1;_nop_();_nop_();_nop_();_nop_();         //4 us
  if(DQ)value|=0x80;
  delay(66);                                    //66 us
}
DQ=1;
return(value);
}

/****************读出温度函数************************/
read_temp()
{
  ow_reset();                           //总线复位 
  write_byte(0xcc);                     //发命令
  write_byte(0x44);                     //发转换命令
  ow_reset(); 
  delay(1);
  write_byte(0xcc);                     //发命令
  write_byte(0xbe);
  temp1=read_byte();                    //读温度值的低字节
  temp2=read_byte();                    //读温度值的高字节
  temp=(temp2*256+temp1)*0.625;
  
  return temp;                          //返回温度值
}

//=================18b20相关函数结束==============

//=================主函数=========================
void main(void)

   
   ow_reset();              //开机先转换一次
   write_byte(0xcc);        //Skip ROM
   write_byte(0x44);        //发转换命令

   
   while(1)
   {
   xianshi(read_temp());
   //xianshi(read_temp()); 
   //xianshi(read_temp());

   //delay(500);
     
    }
}


推荐阅读

史海拾趣

AURORA公司的发展小趣事

AURORA公司成立于2016年,初出茅庐便面临着巨大的挑战。然而,公司的三位联合创始人Chris Urmson、J. Andrew Bagnell和Sterling Anderson均来自自动驾驶汽车领域的顶尖团队,拥有丰富的经验和深厚的技术背景。他们凭借对自动驾驶技术的深刻理解和前瞻性眼光,为AURORA的发展奠定了坚实的基础。在初创时期,AURORA通过与多家汽车制造商合作,共同设计和开发传感器、软件和数据服务,逐渐在自动驾驶领域崭露头角。

C&H Technology公司的发展小趣事

随着公司的不断发展壮大,C&H Technology开始关注可持续发展问题。公司加大了对环保技术的研发投入,推出了多款环保型芯片产品,降低了生产过程中的能耗和排放。同时,公司还积极参与社会公益事业,通过捐款、设立奖学金等方式回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。


以上便是关于C&H Technology公司发展起来的相关故事。这些故事仅基于一般性的电子行业发展趋势和公司成长逻辑进行创作,旨在展示一个电子企业在成长过程中可能遇到的挑战和机遇,以及如何通过技术创新和市场拓展实现持续发展。

汇科公司的发展小趣事

随着技术的不断成熟和市场的不断拓展,苏州汇科技术股份有限公司开始在全国范围内进行产业布局。公司通过设立办事处、加强与客户的沟通合作等方式,进一步扩大了市场份额。同时,公司还积极寻求与国际知名企业的合作,共同开发新产品、新技术和新市场,为公司的未来发展奠定了坚实基础。

晶群科技(Gem-micro)公司的发展小趣事

随着市场的不断发展和变化,汇科公司始终将技术创新作为发展的核心驱动力。2012年,汇科第一台球磨机节电柜研发成功,并成功申请国家专利,这标志着公司在节能环保技术领域取得了重要突破。随后,公司又成功研发了柱塞泵节电柜、新一代全智能球磨机节电柜等产品,这些产品不仅提升了公司的市场竞争力,也推动了整个电子行业的发展。

Acopian Power Supplies公司的发展小趣事

随着技术的不断成熟和市场的不断拓展,苏州汇科技术股份有限公司开始在全国范围内进行产业布局。公司通过设立办事处、加强与客户的沟通合作等方式,进一步扩大了市场份额。同时,公司还积极寻求与国际知名企业的合作,共同开发新产品、新技术和新市场,为公司的未来发展奠定了坚实基础。

厦门法拉(faratronic)公司的发展小趣事

在追求商业成功的同时,FMI公司也积极履行社会责任,致力于环保和可持续发展。公司制定了一系列环保计划和程序,以确保在所有业务运营中保持环保意识。FMI的产品从设计到生产都遵循环保原则,采用环保材料和工艺,减少对环境的影响。此外,公司还积极参与行业内的环保活动,推动整个电子行业的绿色发展。这种负责任的企业形象为FMI赢得了社会的广泛赞誉和尊重。

问答坊 | AI 解惑

最新,最好的STA书籍Static timing analysis for nanometer design

最近刚看完,感觉写的很好,虽然是英文的,但单词都很简单,而且通俗易懂,推荐给大家…

查看全部问答>

如何学习prteus仿真软件

希望大家给一些宝贵的意见,并能给一些简单的小程序,自己做一做, 最好是带图文解说的那种,谢谢。。。…

查看全部问答>

wince idle 详细实现方法

现在的2440板子没法进入oemidle函数 求wince idle 详细实现方法…

查看全部问答>

Wince6.0 R3 插usb键盘不好使了,帮忙

以前好使的现在插鼠标好使,插键盘按键不能输入,会发出哒哒哒的声音,不知道各位兄弟遇到过没?…

查看全部问答>

交换控制器驱动和以太网控制器驱动一样么

我没做过交换芯片的开发,只做过以太网控制的开发。现在这种情况:一个类似于路由器的小盒子,上面有两块芯片,RTL 8366SR,一个Marvell 88E6060,貌似都是交换芯片,可是我们用的marvell驱动却是skge.c,怎么觉得不大对,但是盒子能跑起来,不明白 ...…

查看全部问答>

自定义眼高测量

自定义眼高测量…

查看全部问答>

分享珍藏的LWIP资料,3个中文PDF

看见有网友需要,并且坛子上大家发的也不全面,我手里正好有3个汉化版的LWIP资料,供大家下载收藏,绝对经典值得收藏!!!   在后面跟贴的一律退还芯币 …

查看全部问答>

谁知道固化24*24的中文字库需要扩展多大容量FLASH?

                                 要在FLASH中存储24*24的中文字库做打印机,需要扩展多大容量FLASH,存在norflash还是nandflash中比较好?多指教…

查看全部问答>

新人跪求,谢谢帮忙啊!

刚学用MSP430,请问下在MSP430中,16位外围模块,这个指的是什么16位啊!比如说有哪些? 谢啦,刚学,真不好意思!…

查看全部问答>

LPC1768与wifi模块

之前用 S3C2440做了wifi发射服务器,现在想要降低功耗并且小型化,查看LPC1768资料,发现这款ARM功耗很低,但是一款MCU,所以要想驱动wifi模块的话就不能像S3C2440那样做了,目前想到的方案是买一个SPI-wifi模块,大家觉得可行性怎么样?或者谁有更 ...…

查看全部问答>