isd1420语音芯片的温度报警器程序

发布者:平安宁静最新更新时间:2018-01-08 来源: eefocus关键字:isd1420  语音芯片  温度报警器 手机看文章 扫描二维码
随时随地手机看文章

/****************************************************************** 
基于isd1420语音芯片的温度报警 

功能:利用ds18b20检测当前温度,通过和设定参数的比较,给ISD1420发出 


      报警脉冲,通过功率放大器LM386 驱动喇叭报警。 
       
注:  isd1420的报警采用延时方式(isd1420的延时报警取决于录音时间的长短) 

问题:1.isd1420会偶然的触发非正常的报警? 
      2.系统在上电时偶尔会进入非正常的状态?  

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

#include 
#include 
#include  

#define uchar unsigned char 
#define uint   unsigned int 
#define PLAYE_ADDR XBYTE[0XBFFF] //语音报警地址 

#define BUSY  0x80              //LCD忙检测标志 
#define DATAPORT P0              

sbit P1_0=P1^4;                 //时钟调整 
sbit P1_1=P1^5;                 //时钟加 
sbit P1_2=P1^6;                 //时钟减 

sbit RED_ALARM=P1^0;            //红色指示灯 
sbit WRITE_ALARM=P1^1;          //白色指示灯 
sbit GREEN_ALARM=P1^2;          //绿色指示灯 

sbit DQ = P3^7;                 //定义ds18b20通信端口  
sbit LCM_RS=P2^0;                //数据/命令端 
sbit LCM_RW=P2^1;                //读/写选择端 
sbit LCM_EN=P2^2;               //LCD使能信号 
sbit RECLED_EOC=P3^5;           //ISD1420放音结束查询标志 

                         
unsigned char seconde=0;                 //定义并初始化时钟变量 
unsigned char minite=0; 
unsigned char hour=12; 
unsigned char mstcnt=0; 
unsigned char temp1,temp2,teMP3
unsigned char runtime;                   //系统运行总时间 
unsigned char t; 
unsigned int temp; 

uchar code str0[]={"---  :  :  ---of"}; 
uchar code str1[]={"temp:  . C------"}; 

void delay_LCM(uint);                                                         //LCD延时子程序 
void initLCM( void);                                                           //LCD初始化子程序 
void lcd_wait(void);                                                          //LCD检测忙子程序 
void WriteCommandLCM(uchar WCLCM,uchar BusyC);                              //写指令到ICM子函数 
void WritEDAtaLCM(uchar WDLCM);                                             //写数据到LCM子函数 
void DisplayOneChar(uchar X,uchar Y,uchar DData);                           //显示指定坐标的一个字符子函数 
void DisplayListChar(uchar X,uchar Y,uchar code *DData);                    //显示指定坐标的一串字符子函数 

void init_timer0(void);                                                       //定时器初始化 
void displayfun1(void); 

void delay_18B20(unsigned int i); 
void Init_DS18B20(void) ; 
uchar ReadOneChar(void); 
void WriteOneChar(unsigned char dat); 
void ReadTemperature(void); 
void playalarm(void); 

/*********延时K*1ms,12.000mHz**********/ 

void delay_LCM(uint k) 

    uint i,j; 
    for(i=0;i    { 
        for(j=0;j<60;j++) 
            {;} 
    } 
}    
/**********写指令到ICM子函数************/ 

void WriteCommandLCM(uchar WCLCM,uchar BusyC) 

    if(BusyC)lcd_wait(); 
    DATAPORT=WCLCM; 
    LCM_RS=0;                   // 选中指令寄存器 
    LCM_RW=0;                   // 写模式     
    LCM_EN=1;     
    _nop_();    
    _nop_(); 
    _nop_();  
    LCM_EN=0;   


/**********写数据到LCM子函数************/ 

void WriteDataLCM(uchar WDLCM) 
{  
    lcd_wait( );            //检测忙信号     
    DATAPORT=WDLCM; 
    LCM_RS=1;               // 选中数据寄存器 
    LCM_RW=0;               // 写模式 
    LCM_EN=1; 
    _nop_(); 
    _nop_(); 
    _nop_(); 
    LCM_EN=0; 


/***********lcm内部等待函数*************/ 

void lcd_wait(void) 

    DATAPORT=0xff;          
    LCM_EN=1; 
    LCM_RS=0;                
    LCM_RW=1;                
    _nop_(); 
    _nop_(); 
    _nop_(); 
    while(DATAPORT&BUSY) 
    { 
        LCM_EN=0; 
       _nop_(); 
       _nop_(); 
       LCM_EN=1; 
       _nop_(); 
       _nop_(); 
    } 
       LCM_EN=0; 
     


/**********LCM初始化子函数***********/ 

void initLCM( ) 
{    
    DATAPORT=0;     
    delay_LCM(15); 
    WriteCommandLCM(0x38,0);    //三次显示模式设置,不检测忙信号 
    delay_LCM(5);  
    WriteCommandLCM(0x38,0); 
    delay_LCM(5);  
    WriteCommandLCM(0x38,0); 
    delay_LCM(5);  

    WriteCommandLCM(0x38,1);    //8bit数据传送,2行显示,5*7字型,检测忙信号 
    WriteCommandLCM(0x08,1);    //关闭显示,检测忙信号 
    WriteCommandLCM(0x01,1);    //清屏,检测忙信号 
    WriteCommandLCM(0x06,1);    //显示光标右移设置,检测忙信号 
    WriteCommandLCM(0x0c,1);    //显示屏打开,光标不显示,不闪烁,检测忙信号 


/****************显示指定坐标的一个字符子函数*************/ 

void DisplayOneChar(uchar X,uchar Y,uchar DData) 

    Y&=1; 
    X&=15; 
    if(Y)X|=0x40;               //若y为1(显示第二行),地址码+0X40 
    X|=0x80;                    //指令码为地址码+0X80 
    WriteCommandLCM(X,0); 
    WriteDataLCM(DData); 


/***********显示指定坐标的一串字符子函数***********/ 

void DisplayListChar(uchar X,uchar Y,uchar code *DData) 

    uchar ListLength=0; 
    Y&=0x01; 
    X&=0x0f; 
    while(X<16) 
    { 
        DisplayOneChar(X,Y,DData[ListLength]); 
        ListLength++; 
        X++; 
    } 


/***********ds18b20延迟子函数(晶振12MHz )*******/  

void delay_18B20(unsigned int i) 

    while(i--); 


/**********ds18b20初始化函数**********************/ 

void 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); 


/***********ds18b20读一个字节**************/   

unsigned char ReadOneChar(void) 

    uchar i=0; 
    uchar dat = 0; 
    for (i=8;i>0;i--) 
     { 
          DQ = 0; // 给脉冲信号 
          dat>>=1; 
          DQ = 1; // 给脉冲信号 
          if(DQ) 
          dat|=0x80; 
          delay_18B20(4); 
     } 
     return(dat); 

/*************ds18b20写一个字节****************/   

void WriteOneChar(uchar dat) 

     unsigned char i=0; 
     for (i=8; i>0; i--) 
     { 
          DQ = 0; 
         DQ = dat&0x01; 
        delay_18B20(5); 
         DQ = 1; 
        dat>>=1; 
 } 


/**************读取ds18b20当前温度************/ 

void ReadTemperature(void) 

    unsigned char a=0; 
    unsigned char b=0; 
    unsigned int  t=0; 

    Init_DS18B20(); 
    WriteOneChar(0xCC);        // 跳过读序号列号的操作 
    WriteOneChar(0x44);     // 启动温度转换 

    delay_18B20(100);       // this message is wery important 

    Init_DS18B20(); 
    WriteOneChar(0xCC);     //跳过读序号列号的操作 
    WriteOneChar(0xBE);     //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 

    delay_18B20(100); 

    a=ReadOneChar();        //读取温度值低8位 
    b=ReadOneChar();           //读取温度值高8位 
    temp1=b<<4;             
    temp1+=(a&0xf0)>>4;     //小数点前的数据 
    temp2=a&0x0f;           //小数点后的数据 
    temp=temp1; 
     
//    temp=((b*256+a)>>4);//当前采集温度值除16得实际温度值 
     
     

//    temp1 = t/100%10;       //温度值十位 
//  temp2 = t/10%10;        //温度值个位   
//    temp3 = t%10;           //温度值十分位 


/***************液晶显示子函数1正常显示*****************/ 

void displayfun1(void) 
{     
    WriteCommandLCM(0x0c,1);                        //显示屏打开,光标不显示,不闪烁,检测忙信号     
    DisplayListChar(0,0,str0);     
    DisplayListChar(0,1,str1);     
     
    DisplayOneChar(3,0,hour/10+0x30); 
    DisplayOneChar(4,0,hour%10+0x30); 

    DisplayOneChar(6,0,minite/10+0x30); 
    DisplayOneChar(7,0,minite%10+0x30); 
     
    DisplayOneChar(9,0, seconde/10+0x30); 
    DisplayOneChar(10,0,seconde%10+0x30); 
  
    DisplayOneChar(5,1,temp1/10+0x30);                
    DisplayOneChar(6,1,temp1%10+0x30); 
    DisplayOneChar(8,1,temp2/10+0x30); 


/***************定时器t0初始化*******************/ 


void init_timer0(void) 

     TMOD=0x01;              //time0为定时器,方式1 
     TH0=0x3c;               //预置计数初值 
     TL0=0xb0; 
     EA=1;                                    
     ET0=1;                                                       
     TR0=1;                   


/***********定时器t0中断子函数**************/ 

void timer0(void) interrupt 1 using 0         //定时器0方式1,50ms中断一次 

     TH0=0x3c; 
     TL0=0xb0; 
     mstcnt++; 
     if(mstcnt>=20 )  {seconde++; mstcnt=0; } 
     if(seconde>=60)  {minite++;  seconde=0;} 
     if(minite>=60 )  {hour++;    minite=0; } 
     if(hour>=24   )  {hour=0;} 



/*****************系统报警子函数***************************/ 

void playalarm(void)                    //语音提示温度上升过快 

     
    if(temp>20&&temp<25)               
    { 
        RED_ALARM=0; 
        PLAYE_ADDR=0x11; 
        _nop_(); 
        PLAYE_ADDR=0x10; 
        delay_LCM(2000);                 //等待放音结束 
        RED_ALARM=1; 
    } 
     
     if(temp>25&&temp<30)                //语音提示温度上升过慢 
    { 
        GREEN_ALARM=0; 
        PLAYE_ADDR=0x21; 
         _nop_(); 
        PLAYE_ADDR=0x20; 
        delay_LCM(2000); 
        GREEN_ALARM=1; 
    } 
     
    if(temp>30)                         //语音提示恒温控制 
    { 
        WRITE_ALARM=0; 
        PLAYE_ADDR=0x31; 
        _nop_(); 
        PLAYE_ADDR=0x30; 
        delay_LCM(1000); 
        WRITE_ALARM=1; 
    } 


/***************the main funtion****************/ 
     
void main(void) 
{  
    P1=0xff;                                   //初始化p1口,全设为1    
    P3=0xff;     
    delay_LCM(500);      
    initLCM( );                                //LCD初始化 
    init_timer0( );                               //时钟定时器0初始化     
    DisplayListChar(0,0,str0);     
    DisplayListChar(0,1,str1); 
        Init_DS18B20( );                           //DS18B20初始化 
                                        
    while (1) 
    {                                         
        delay_LCM(10); 
        ReadTemperature( ); 
        playalarm( ); 
        displayfun1( ); 
        delay_LCM(10); 
    } 


关键字:isd1420  语音芯片  温度报警器 引用地址:isd1420语音芯片的温度报警器程序

上一篇:STC12C4052AD STC单片机ADC采样C程序
下一篇:T6963C控制器的LCD实用显示子程序

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

语音芯片在口算训练仪的应用
口算是学习数学的基础,想提高孩子的口算能力,不仅需要大量的练习,如今许多家长都给孩子买了许多数学口算练习册,既题多又枯燥,家长在检查时也是花费大量的时间与精力;如今市面上推出了一款儿童口算练习机,完全替代了传统口算练习册,如同玩游戏一般轻松练习口算,也节省了家长检查对错的时间; 口算训练仪拥有多个按键组成,每个按键对应不同的数字与功能,内有加减乘数等算法,通过语音播报的方式告诉孩子,当前需要口算的题,正确时将会语音播报:“真棒,答对了,下一题6+13=?”,磨炼孩子的耳朵,记得牢。 为此许多厂家都选择了,深圳唯创知音研发的:WT588F02KD-24SS,单芯片拥有按键扫描+内置语音存储播放功能,在开发上省去了一颗按键扫描
[嵌入式]
WT2003H语音芯片在扫地机/洗地机语音更换+LCD扩展的应用介绍
产品市场 随着家用电子设备的普及,各种智能化设备进入人们生活中,如洗地机、扫地机等,目前大多数扫地机和洗地机都加了音效提示音,以及人工提示音,但较为单一,且部分应用无法随时更换语音,针对部分客户的特殊需求,去定制化语音方案。同时一些客户端的工程师,会经常感到主控MCU IO口不够,需要驱动电机、温度检测、LCD或数码管显示、语音控制播报等。唯创知音WT2003H语音芯片,能用一个IO实现复杂功能需求,留出主控MCU更多的IO口,去实现更多交互功能。 本文以WT2003H0系列芯片+一颗外挂Flash为例,介绍WT2003H系列芯片即时更换语音功能,及唯创知音后续推出的扩展类,芯片语音播报+LCD驱动显示作一些简单介绍。 产
[嵌入式]
WT2003H<font color='red'>语音芯片</font>在扫地机/洗地机语音更换+LCD扩展的应用介绍
出门问问发布中国首款量产AI语音芯片模组“问芯”
集微网5月25日报道(记者 张轶群)近日,人工智能科技公司出门问问在2018战略新品发布会上正式推出包括智能音箱、耳机、手表等多款AI硬件新品,以及AI语音芯片模组“问芯”,这是我国目前市场上首款已实现量产的AI语音芯片模组。 据了解,该AI芯片模组研发历时两年,出门问问和杭州国芯科技合作,后者在NPU、DSP等最新技术的多核异构设计,以及软硬件结合上具有深厚积累,曾推出过首款集成NPU的AI芯片。 该款芯片模组集成了出门问问的麦克风阵列信号处理技术,语音交互SDK与可定制语义技能,其中包括了回声消除、声源定位、波束成形、语音降噪、语音唤醒、语音识别、语义理解与语音合成等自有AI语音交互核心技术;杭州国芯科技的AI芯片,
[手机便携]
语音芯片WT588D简介
WT588D不仅可以作为一般语音芯片,当从片发声,而且因为I/O口多,带控制功能和外置FLASH存储器,所以能做FLASH单片机;最重要的是还可以按照样品直接投掩膜,管脚完全不用改动,价钱便宜一半。 WT588D性能卓越,简单易用,与51单片机有着极为相似的性能,所以我们向您推荐。要认识语音芯片,从WT588D起步。 WT588D的优势: 1、 由于是FLASH,可以重复多次擦写,而且价钱便宜,特别适合初期开发者和电子爱好者。 2、 开发工具十分简便,就一个USB mini下载器。具备一个芯片,一个USB下载器,即可进行开发,自由制作个性化产品, 3、 支持ISP编程,不需要将芯片与现场环境相分离,更换语音与程序升级都容
[模拟电子]
充电桩NV400F- Flash语音芯片,支持UART更新音频 降低成本
充电桩是新能源汽车充电的基础设施,是实现新能源汽车快速发展和大众化的重要支撑。新能源汽车采用的是电能,需要经常充电才能行驶,在充电桩的支持下,新能源汽车才有了实际的用途。 充电桩语音方案设计需求 1、要帮助用户更快速地了解充电桩状态,操作流程和注意事项,并及时提醒用户注意安全问题,能够提高用户的使用体验。 2、要帮助用户快速了解充电桩的使用方法,避免因用户操作不熟悉导致充电效率低下的情况出现。 3、充电桩除了可以提示用户充电操作注意事项,还可以及时检测充电桩的故障状态,提高充电系统的安全性。 充电桩语音芯片选型 共享充电桩通常需要经常更换语音内容。随着社会的发展和技术的进步,充电桩所面临的用户、需求以及市场环境都在不断变化
[嵌入式]
出门问问发布中国首款已量产的AI语音芯片模组“问芯”
中国领先的人工智能科技公司出门问问在2018战略新品发布会上正式推出包括智能音箱、耳机、手表等多款AI硬件新品。发布会上,出门问问推出的AI语音芯片模组“问芯”成为了一大惊喜,这是中国市场首款已量产的AI语音芯片模组。     2017年4月18日,作为行业内一直坚定走To C路线的人工智能公司,出门问问第一次对外发布了面向B端市场的AI开放平台,为国内第三方开发者和硬件厂商提供语音交互SDK。在一年多的时间中,出门问问一方面看到了众多硬件厂商对语音交互赋能合作的大量需求,另一方面也逐渐发现软件SDK产品的三大痛点,即集成难度大、调试周期长、沟通成本高。为了更好地解决以上痛点,出门问问推出了一站式软硬结合语音解决方案——
[半导体设计/制造]
基于WT2003H0语音芯片在扫地机/智能桌游等产品更换语音bin应用设计方案
一:产品市场 随着家用电子设备的普及,各种智能化设备进入人们生活中,如洗地机、扫地机、共享单车、智能门锁、智能桌游、智能网关等,客户想方便快捷的更换替换产品的音频文件。针对部分客户自主更换语音内容的需求,定制化的语音方案,唯创知音WT2003H0系列语音芯片远程更换语音bin的功能无疑是一个很好的选择。 本文以WT2003H0系列语音芯片为例,与唯创知音其余的WT2003H系列串口更新语音bin(bin文件包含运行程序+语音)不同,唯创知音新推出的这款芯片功能,为直接替换语音bin文件,由MP3、WAV格式合成,不包含运行程序。 扫地机 、共享单车 、智能门锁 二: 产品框架图 语音更换 三:芯片功能特点 1:工作电压
[嵌入式]
基于WT2003H0<font color='red'>语音芯片</font>在扫地机/智能桌游等产品更换语音bin应用设计方案
基于AT89S52单片机的红外遥控温度报警器的设计与实现
温度,无论是在日常生活还是工业生产中都是人们十分关注的一个参数,而温度控制是工业自动控制的重要组成部分,在工业、电子、化工精度实验等诸多领域都有重要的应用。同时随着科学技术的发展,家用电器普遍进入到人们的家庭生活之中,因此引起的火灾现象也越来越多,造成的生命危险和财产损失也就越大。在这些情况下,一款好的温度报警器将起到十分重要的作用,给人们的生产和生活中带来很大的方便与安全,减少了不必要的损失。 文中以单片机为控制核心,利用红外遥控器、数字式温度传感器及其他控制电路组成红外遥控温度报警器,具有低成本,高稳定性,及时报警,远程遥控,功能扩展,显示时间和闹钟等功能特点,该产品能广泛的应用于中小型电锅炉、电采暖炉、电茶炉、壁挂炉、
[单片机]
基于AT89S52单片机的红外遥控<font color='red'>温度报警器</font>的设计与实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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