历史上的今天
返回首页

历史上的今天

今天是:2024年11月25日(星期一)

正在发生

2020年11月25日 | 51单片机gy906测温,语音播报,eepromc存储

2020-11-25 来源:51hei

这是去年我做的一个小设计,主要是用来测量体温。今年由于疫情影响情况特殊,就想分享一下这个设计,但是某宝找材料才发现一个问题,都涨价了,有点难受。之前也在51黑下过资料,这次把资料发上来大家一起分享学习。实物图:

没有涉及PCB,用的洞洞板。第一次发帖。东西做出来有点丑,大家莫见怪。


主要功能:

通过按键控制测温,按一次检测一次。自动存储三次数据,可t通过按键切换显示。并可通过OLED显示和语音播报温度。

系统供电采用,USB供电,也可以通过干电池,或者锂电池。

主要使用元器件。

主控用的是51单片机,温度传感器用的是GY906,显示用的是0.96寸0LED,通讯方式采用IIC,语音播报用的现成的模块。



语音播报采用串口通讯,比较简单。直接

printf("你好");



就可以直接播报你好。

主要原理图:


主要来说说GY906和eeprom

直接上代码吧。

先来测温的

#include "reg52.h"

#include "GY906.h"


#define  Nack_counter  10


//************ 数据定义****************

bdata uchar flag;//可位寻址数据

sbit bit_out=flag^7;

sbit bit_in=flag^0;

unsigned char DataH,DataL,Pecreg;




void delay(uint a)

{                        

        uint b;

        for(;a>0;a--)

                for(b=125;b>0;b--);

}



void i2c_Init(void)

{

        SCL=1;

        SDA=1;

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        SCL=0;

        delay(1);

        SCL=1;

}


//************************************

void   start_bit(void)

{

   SDA=1;

   _nop_();_nop_();_nop_();_nop_();_nop_();

   SCL=1;

   _nop_();_nop_();_nop_();_nop_();_nop_();

   SDA=0;

   _nop_();_nop_();_nop_();_nop_();_nop_();

   SCL=0;

   _nop_();_nop_();_nop_();_nop_();_nop_();


}

//------------------------------

void   stop_bit(void)

{


   SCL=0;

   _nop_();_nop_();_nop_();_nop_();_nop_();

   SDA=0;

   _nop_();_nop_();_nop_();_nop_();_nop_();

   SCL=1;

   _nop_();_nop_();_nop_();_nop_();_nop_();

   SDA=1;

}

//--------- 发送一个字节---------

void  tx_byte(uchar dat_byte)

{

   char i,n,dat;

   n=Nack_counter;

TX_again:

   dat=dat_byte;

   for(i=0;i<8;i++)

   {

     if(dat&0x80)

      bit_out=1;

     else

      bit_out=0;

     send_bit();

     dat=dat<<1;

   }

   

      receive_bit();

   if(bit_in==1)

   {

    stop_bit();

    if(n!=0)

    {n--;goto Repeat;}

    else

     goto exit;

   }

   else

    goto exit;

Repeat:

    start_bit();

    goto TX_again;

exit: ;

}

//-----------发送一个位---------

void  send_bit(void)

{

  if(bit_out==0)

  

       SDA=0;

  else

     SDA=1;

  _nop_();

  SCL=1;

  _nop_();_nop_();_nop_();_nop_();

  _nop_();_nop_();_nop_();_nop_();

  SCL=0;

  _nop_();_nop_();_nop_();_nop_();

  _nop_();_nop_();_nop_();_nop_();

}

//---------- 接收一个字节--------

uchar rx_byte(void)

{

  uchar i,dat;

  dat=0;

  for(i=0;i<8;i++)

  {

    dat=dat<<1;

    receive_bit();

    if(bit_in==1)

     dat=dat+1;

  }

  send_bit();

  return dat;

}


//---------- 接收一个位----------

void receive_bit(void)

{

  SDA=1;bit_in=1;

  SCL=1;

  _nop_();_nop_();_nop_();_nop_();

  _nop_();_nop_();_nop_();_nop_();

  bit_in=SDA;

  _nop_();

  SCL=0;

  _nop_();_nop_();_nop_();_nop_();

  _nop_();_nop_();_nop_();_nop_();

}

////------------ 延时--------------

//void   delay(uint N)

//{

//  uint i;

//  for(i=0;i//  

//     _nop_();

//}

//------------------------------

float memread(void)

{

        float  wendu_change;

  start_bit();

  tx_byte(0xB4);  //Send SlaveAddress ==============================

  //tx_byte(0x00);

  tx_byte(0x07);  //Send Command

  //------------

  start_bit();

  tx_byte(0x01);

  bit_out=0;

  DataL=rx_byte();

  bit_out=0;

  DataH=rx_byte();

  bit_out=1;

  Pecreg=rx_byte();

  stop_bit();

        wendu_change = (DataH*256+DataL)*0.02-273.15;

  return(wendu_change);

}


eeprom也比较简单。

#include "reg52.h"

#include "eepom.h"


/* ================ 打开 ISP,IAP 功能 ================= */

void ISP_IAP_enable(void)

{

         EA = 0;       /* 关中断   */

         ISP_CONTR = ISP_CONTR & 0x18;       /* 0001,1000 */

         ISP_CONTR = ISP_CONTR | WaitTime; /* 写入硬件延时 */

         ISP_CONTR = ISP_CONTR | 0x80;       /* ISPEN=1  */

}

/* =============== 关闭 ISP,IAP 功能 ================== */

void ISP_IAP_disable(void)

{

         ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */

         ISP_TRIG = 0x00;

         EA   =   1;   /* 开中断 */

}

/* ================ 公用的触发代码 ==================== */

void ISPgoon(void)

{

         ISP_IAP_enable();   /* 打开 ISP,IAP 功能 */

         ISP_TRIG = 0x46;  /* 触发ISP_IAP命令字节1 */

         ISP_TRIG = 0xb9;  /* 触发ISP_IAP命令字节2 */

         _nop_();

}

/* ==================== 字节读 ======================== */

unsigned char byte_read(unsigned int byte_addr)

{

        EA = 0;

         ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址赋值 */

         ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);

         ISP_CMD   = ISP_CMD & 0xf8;   /* 清除低3位  */

         ISP_CMD   = ISP_CMD | RdCommand; /* 写入读命令 */

         ISPgoon();       /* 触发执行  */

         ISP_IAP_disable();    /* 关闭ISP,IAP功能 */

         EA  = 1;

         return (ISP_DATA);    /* 返回读到的数据 */

}

/* ================== 扇区擦除 ======================== */

void SectorErase(unsigned int sector_addr)

{

         unsigned int iSectorAddr;

         iSectorAddr = (sector_addr & 0xfe00); /* 取扇区地址 */

         ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);

         ISP_ADDRL = 0x00;

         ISP_CMD = ISP_CMD & 0xf8;   /* 清空低3位  */

         ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3  */

         ISPgoon();       /* 触发执行  */

         ISP_IAP_disable();    /* 关闭ISP,IAP功能 */

}

/* ==================== 字节写 ======================== */

void byte_write(unsigned int byte_addr, unsigned char original_data)

{

         EA  = 0;

//         SectorErase(byte_addr);

         ISP_ADDRH = (unsigned char)(byte_addr >> 8);  /* 取地址  */

         ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);

         ISP_CMD  = ISP_CMD & 0xf8;    /* 清低3位 */

         ISP_CMD  = ISP_CMD | PrgCommand;  /* 写命令2 */

         ISP_DATA = original_data;   /* 写入数据准备 */

         ISPgoon();       /* 触发执行  */

         ISP_IAP_disable();     /* 关闭IAP功能 */

         EA =1;

}

推荐阅读

史海拾趣

华润微(CRMICRO)公司的发展小趣事

华润微一直注重技术创新和研发投入。公司拥有一支高素质的研发团队,致力于宽禁带半导体(即第三代半导体)等领域的技术研发。通过不断的努力和积累,华润微在新技术研发方面取得了丰硕的成果,成为宽禁带半导体领域的佼佼者。同时,公司也加大了对封装测试技术的研发投入,不断提升其封装测试能力和技术水平。

Hirose公司的发展小趣事

尽管面临市场终端景气度低迷等挑战,华润微依然保持稳健的发展态势。公司积极应对市场变化,通过优化产品结构、加大研发投入等措施,不断提升自身竞争力。同时,华润微也看到了新能源业务等领域的巨大潜力,将其作为未来发展的重要方向。通过不断的技术创新和市场拓展,华润微有望在电子行业中实现更加辉煌的成就。

DYMO公司的发展小趣事

为了扩大市场份额,DYMO公司积极寻求与各大零售商和办公用品供应商的合作。通过与这些合作伙伴建立紧密的合作关系,DYMO公司的产品得以更广泛地进入市场,并被更多的消费者所熟知。此外,DYMO公司还积极开拓国际市场,将其产品销往全球各地。

Holt Integrated Circuits公司的发展小趣事

在军事和商用航空领域,MIL-STD-1553标准是一项至关重要的通信协议。Holt的MIL-STD-1553解决方案以其小巧的体积和高性价比,在行业内脱颖而出。这些解决方案在单个芯片上集成了整个MIL-STD-1553接口,为用户提供了极大的便利。Holt的旗舰IC产品更是因其易用性和高性能而广受好评,成为业界内的标杆产品。

COMPUTAR公司的发展小趣事

随着摄影和摄像技术的不断发展,市场对镜头性能的要求也越来越高。为了满足这一需求,CBC株式会社于1985年成功研制出第一款非球面高速镜头。这款镜头采用了先进的非球面设计,有效减少了像差和畸变,提高了成像质量。非球面高速镜头的诞生,不仅为CBC赢得了更多的市场份额,也为整个光学行业树立了新的技术标杆。

Capar Components Corp公司的发展小趣事

随着国内市场的饱和,Capar Components Corp开始将目光投向国际市场。公司积极参加国际电子展会,与海外客户建立联系,拓展销售渠道。同时,公司还根据不同国家和地区的市场需求,调整产品结构和营销策略,逐步打开了国际市场的大门。如今,公司的产品已经远销欧美、东南亚等多个国家和地区,成为了国际电子市场上的一支重要力量。

问答坊 | AI 解惑

给FPGA泼点冷水

FPGA开发工程师路在何方? FPGA作为一个比较新的领域,在最近几年中有很大的发展和进步。各个厂家的FPGA不断推陈 出新,工艺越来越高、速度越来越快、功能越来越多,价格却越来越便宜了。随着FPGA成本 的进一步降低和规模的增加,在未来几年中 ...…

查看全部问答>

出口受制 电子信息产业发展后劲面临考验

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 随着十月华尔街金融风暴的加剧,我国电子信息产业的出口经受严峻考验。工业和信息化部日前在第十届高交会上发布的《2008年Q3季度中国电子信息产业经济运行公报》显示,电子信息产业今年前三季 ...…

查看全部问答>

请问:LPC2000 flash utility V2.2.3 软件是不是有BUG? 器件选择下拉表根本不能选择器件

很奇怪啊,我用LPC2138,可是下拉表根本不能用!!!!! 请问是怎么回事…

查看全部问答>

求硬件方面的开发资料!!

例如Z80汇编语言资料、硬件驱动程序开发资料、嵌入式开发资料等等!!!…

查看全部问答>

请高手不吝赐教,谢谢

  问题:如上图,此为多路电流源,为什么此多集电极三极管的第一个集电极要与基极相连?请高手们详细讲解一下。谢谢。   [ 本帖最后由 whwshiyuan1984 于 2011-1-18 09:16 编辑 ]…

查看全部问答>

为什么我的LM3S5P31的输入定时器捕获抓取不了,各位能否帮我看看?

定时器0B的初始化代码如下:             SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);   // 使能Timer模块       SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);  &n ...…

查看全部问答>

如何将连续输入的多组并行数据转换成串行输出

如何将连续输入的多组并行数据转换成串行输出?求教高手!例如,第一组并行数据为:11,12,14,5,12,现将它们串行输出,输出完后就进行一下组数据的并串转换。…

查看全部问答>

浮点运算在MSP430系列微控制器中的应用

浮点运算在MSP430系列微控制器中的应用请参考附件文档…

查看全部问答>

把旅行变成修行--15天台湾高科技环岛骑行

一个简单的理由,关乎梦想 8月的一个午夜,夏日的上海已经褪去了燥热,我的电脑显示器上反复播着一段视频:5个平均年龄81岁的老人,经过6个月的准备,环岛(台湾)骑行13天,完成了1139公里的旅程,他们只为了一个简单的理由——梦想。骑行成就了 ...…

查看全部问答>

JEDEC的DDR4技术标准的公布

微电子产业标准机构JEDEC固态技术协会终于发布了下一代同步DDR内存的技术标准:DDR4,它的数据传输速度将比DDR3快一倍,且功耗更低。“JEDEC的DDR4技术标准的公布是数年来世界各地的内存、系统、部件和模块制造商共同努力的结果,”JEDEC下属组织JC ...…

查看全部问答>