⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alarm.c

📁 基于isd1700芯片的语音报警系统代码
💻 C
字号:
#include <at892051.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#include <stdio.h>

#include <data.h>

uint8 WriteBits_1700(uint8 isdbyte,uint8 num_of_bits);
void Start_1700(void);
void InError_Alarm(void);
void OutError_Alarm(void);
void System_Alarm(void);
void init_2051(void);
void End_1700(void);
void delay(uint16 Ldelay);

void init_2051(void)
{
    IE = 0;

    TMOD = 0;
}
main()
{uint8 j;
    init_2051();
    for(j=0;j<7;j++)
    {
        miso_byte[j] = 0x00;
    }

    while(1)
    {
        delay(0xfe0);
        if((BJ_InError == 0) && (Other_ZBState2 == 0))   /*工作人员请注意,本机通信故障,已切换到备机*/
        {
            InError_Alarm();
        }
        if((BJ_OutError == 0) && (Other_ZBState2 == 0))   /*工作人员请注意,本机输出故障,已切换到备机*/
        {
            OutError_Alarm();
        }
        //if(ISD_ZBState2 == 0)
        //{
        //    Ready2_Alarm();
        //}
        if((BJ_ZBState1 == 1) && (Other_ZBState2 == 1))   /*工作人员请注意,双机系统故障,已切换到电缆工作*/
        {
            System_Alarm();
        }
    }
}
/*启动ISD1700*/
void Start_1700(void)
{
    ISD_SS = 1;
    ISD_SCLK = 1;
    ISD_MOSI = 0;
    _nop_();_nop_();_nop_();_nop_();
}
/*空闲时SPI囗设置*/
void End_1700(void)
{
    ISD_SS = 1;
    ISD_SCLK = 1;
    ISD_MOSI = 0;
}

/*写命令ISD1700*/
uint8 WriteBits_1700(uint8 isdbyte,uint8 num_of_bits)
{uint8 outbyte=0,i;
    ISD_SS = 0;
    ISD_SCLK = 0;

    for(i=0;i<num_of_bits;i++)
    {
        if ((isdbyte & 0x01) == 0x01)
        {
            ISD_MOSI = 1;
        }
        else
        {
            ISD_MOSI = 0;
        }
        isdbyte >>= 1;
        delay(20);
        ISD_SCLK = 1;
        delay(20);
        outbyte>>=1;
        if(ISD_MISO) {outbyte |= 0x80;}

        ISD_SCLK = 0;
    }
    return(outbyte);
}
/*通信错误报警
  起始地址:0x010(前十六位保留给了语音提示)
  最大地址(1730):0x0ff*/
void InError_Alarm(void)
{
    Start_1700();
    miso_byte[0] = WriteBits_1700(PU | 0X10,0x08);
    miso_byte[1] = WriteBits_1700(0x00,0x08);
    delay(0xfe0);

    if((miso_byte[0] & 0x04) == 0x04)
    {
        Start_1700();
        miso_byte[2] = WriteBits_1700(CLR_INT | 0X10,0x08);
        miso_byte[3] = WriteBits_1700(0x00,0x08);

        Start_1700();
        miso_byte[4] = WriteBits_1700(RD_STATUS | 0X10,0x08);
        miso_byte[5] = WriteBits_1700(0x00,0x08);
        miso_byte[6] = WriteBits_1700(0x00,0x08);
        delay(0xfe0);
        if((miso_byte[6] & 0x01) == 0x01)
        {
                Start_1700();
                miso_byte[0] = WriteBits_1700(SET_PLAY,0x08);
                miso_byte[1] = WriteBits_1700(0x00,0x08); /*数据字节1*/
                miso_byte[2] = WriteBits_1700(0x35,0x08); /*数据字节2或起始地址1(低地址)*/
                miso_byte[3] = WriteBits_1700(0x00,0x08); /*数据字节3或起始地址2(高地址)*/
                miso_byte[4] = WriteBits_1700(0x50,0x08); /*结束地址1(低地址)*/
                End_1700();
        }
    }
}
/*输出错误报警*/
void OutError_Alarm(void)
{
    Start_1700();
    miso_byte[0] = WriteBits_1700(PU | 0X10,0x08);
    miso_byte[1] = WriteBits_1700(0x00,0x08);
    delay(0xfe0);

    if((miso_byte[0] & 0x04) == 0x04)
    {
        Start_1700();
        miso_byte[2] = WriteBits_1700(CLR_INT | 0X10,0x08);
        miso_byte[3] = WriteBits_1700(0x00,0x08);

        Start_1700();
        miso_byte[4] = WriteBits_1700(RD_STATUS | 0X10,0x08);
        miso_byte[5] = WriteBits_1700(0x00,0x08);
        miso_byte[6] = WriteBits_1700(0x00,0x08);
        delay(0xfe0);

        if((miso_byte[6] & 0x01) == 0x01)
        {
                Start_1700();
                miso_byte[0] = WriteBits_1700(SET_PLAY,0x08);
                miso_byte[1] = WriteBits_1700(0x00,0x08); /*数据字节1*/
                miso_byte[2] = WriteBits_1700(0x90,0x08); /*数据字节2或起始地址1(低地址)*/
                miso_byte[3] = WriteBits_1700(0x00,0x08); /*数据字节3或起始地址2(高地址)*/
                miso_byte[4] = WriteBits_1700(0xa0,0x08); /*结束地址1(低地址)*/
                End_1700();
        }
    }
}

/*系统故障报警*/
void System_Alarm(void)
{
    Start_1700();
    miso_byte[0] = WriteBits_1700(PU | 0X10,0x08);
    miso_byte[1] = WriteBits_1700(0x00,0x08);
    delay(0xfe0);

    if((miso_byte[0] & 0x04) == 0x04)
    {
        Start_1700();
        miso_byte[2] = WriteBits_1700(CLR_INT | 0X10,0x08);
        miso_byte[3] = WriteBits_1700(0x00,0x08);

        Start_1700();
        miso_byte[4] = WriteBits_1700(RD_STATUS | 0X10,0x08);
        miso_byte[5] = WriteBits_1700(0x00,0x08);
        miso_byte[6] = WriteBits_1700(0x00,0x08);
        delay(0xfe0);

        if((miso_byte[6] & 0x01) == 0x01)
        {
                Start_1700();
                miso_byte[0] = WriteBits_1700(SET_PLAY,0x08);
                miso_byte[1] = WriteBits_1700(0x00,0x08); /*数据字节1*/
                miso_byte[2] = WriteBits_1700(0x82,0x08); /*数据字节2或起始地址1(低地址)*/
                miso_byte[3] = WriteBits_1700(0x00,0x08); /*数据字节3或起始地址2(高地址)*/
                miso_byte[4] = WriteBits_1700(0xa0,0x08); /*结束地址1(低地址)*/
                End_1700();
        }
    }
}
/*延时*/
void delay(uint16 Ldelay)
{
    uint16 i;
    for(i=0;i<Ldelay;i++) _nop_();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -