无线防丢器设计

目录

一、方案流程及技术规格书设计

二、系统硬件电路设计

三、软件编写及调试

四、系统调试测试与分析

 

前言

为了解决重要物品丢失或遗忘的问题,达到找到丢失或遗忘的重要物品和报警提示,防止重要物品丢失或遗忘的目的,提出一种基于无线技术和51单片机的智能防丢失报警器设计与实现方案。

目前市场上的电子防丢器,大多是采用GPS技术、蓝牙技术,系统复杂、价格昂贵。本设计方案采用廉价的51单片机和2.4G无线通信模块,具有价格低廉、系统简单、使用方便等特点。

该智能防丢失报警器采用主机和子机方案,在一定较短距离内,主机和子机正常通信,当主机和子机距离较远时,通信失败,主机和子机会声光报警,从而达到物品查找、预防报警的功能,可有效找到重要物品,防止物品被盗,具有重要的市场价值。

 

软件工具准备

软件:

电路设计:protel99 se(up主使用版本) 或者其他版本,或者其他电路设计软件;

单片机开发:Keil5;

调试测试:串口调试助手,逻辑分析仪等;

工具:

电路焊接:电烙铁,SMT(有条件的);

调试:

万用表、示波器(基础入门即可,可以白嫖学校或者公司)USB转串口工具、仿真器;

一、方案流程及技术规格书设计

方案流程设计

技术规格书设计

主机

1.主机采用SI24L01无线通信模块收发约定的数据,正常收到子机数据,说明子机在范围内,没有收到数据说明子机不在范围内,声光报警。

2.采用DS1302时钟芯片计时,实现记录丢失时间

3.LCD显示状态,如果有丢失报警,显示报警时间。

4、正常状态LED常亮,报警状态LED闪烁显示。

5、蜂鸣器实现声音报警。

6、4个按键设置时钟和取消报警状态。

子机

1.子机采用SI24L01无线通信模块收发约定的数据,正常收到主机数据,说明主机在范围内,没有收到数据说明主机不在范围内,声光报警。

2、正常状态LED灭,报警状态LED闪烁显示。

3、蜂鸣器实现声音报警。

系统硬件电路设计

2.1微处理控制电路

设计采用宏晶公司IAP15F2K61S2单片机芯片。LQFP32封装,电路图如图所示:

图中VCC为5V供电电压。C12瓷片电容,起滤波作用,J8是仿真烧录口。

单片机IO口连接介绍:

P00-P03(29-32脚):按键检测引脚。

P10-P17(1-8脚):LCD数据口。

P20(21脚): CE 无线模块片选脚。

P21-P24(22-25脚):SPI通讯口,连接无线模块。

P25-P27(26、27、28脚):RS、RW、E,LCD控制脚。

P30-P31(13、14脚):串口下载口。

P32-P34(15-17脚):DS1302控制脚。

P35(18脚): LED控制脚。

P36(19脚): 无线模块中断脚。

P37(20脚): 蜂鸣器控制脚。

2.2  主机Si24L1无线模块电路

无线通讯模块和单片机采用SPI通讯方式,W_CSN,W_SCK,W_MOSI,W_MISO是SPI通讯口,W_CE是片选信号,W_IRQ是中断引脚。电路图如图所示:

 IAP15F2K61S2单片机输出是5V电压,不能和无线模块直接连接,所以采用电平转换电路。

2.3 主机LCD显示电路

LCD1602A显示电路如图:

R38是电位器,作用是调节显示对比度。C11是滤波电容。R66是背光限流电阻。

IO口连接介绍:

RS、RW、E(4、5、6脚):LCD读写控制脚。

D0-D7(7-14脚):数据线。

2.4主机按键电路

       产品设计4个按键,没有按下按键,对应IO口是高电平,按键按下,对应IO口接地,是低电平。单片机检测各个按键IO口电平,判断按键状态。电路如图:

         

2.5  主机LED电路

LED通过单片机IO口控制,电路如图。        

 2.6蜂鸣器驱动电路

       蜂鸣器模拟报警设备。由于IO口驱动能力有限,所以使用三极管放大电路,扩大驱动电流。电路如图。

2.7 主机时钟电路

      时钟电路采用专用时钟芯片DS1302,电路如图:

Y2是32.768时钟晶振,SCLK、DIO、CE_1302是和单片机通信线。

2.8主机电源电路

     系统采用外部9V电源适配器供电,9V直流经过DCDC降压,输出5V电压给芯片和其他电路供电。电路如图。

单片机等3.3V供电采用ASM1117线性稳压电路,电路如图。

无线通讯模块供电需要3.3V,通过3.3V稳压芯片ASM1117输出3.3V电压。电路如图。

2.9子机电路设计

       无线防丢器子机电路和主机电路基本一样,只是少了液晶显示模块、时钟电路、按键电路。电路如图。

三、软件编写及调试

3.1主程序设计

主机使用单片机IAP15F2K61S2控制,控制设备有按键,液晶显示1602A,通信模块Si24L1,时钟芯片DS1302,LED灯,蜂鸣器。上电对单片机系统和控制设备初始化,正常工作有以下三种模式:

工作模式1:读取时钟芯片时间,通过无线模块发送“110”,接收子机信息正常,LCD显示正常信息,接收子机信息不正常,LCD显示报警信息,蜂鸣器鸣响,LED闪烁,显示报警时间。

工作模式2:长按设置按键,通过无线模块发送“find”,接收子机回复信息正常,停止发送,接收子机回复信息不正常,继续发送。

工作模式3:设置时间,按设置键,进入设置时间,小时闪烁,按上下键修改小时,按确认键分钟闪烁,按上下键修改,按确认键退出。

图是主程序流程图。

3.2主机无线通讯程序设计

       图4-2无线通信流程图,报警模式时,发送“110”给子机,同时接收子机回复,接收正确不报警,接收错误报警。查找模式时,发送“find”给子机。

模块和单片机SPI通信。

SPI通信代码:

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

    功能:SPI IO口初始化

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

void drv_spi_init( void )

{

//引脚配置

//SCK MOSI NSS 配置为推挽输出

SPI_SCK_PxM0 = IO_OUT_PUT_PP_M0 << SPI_SCK_PIN_BIT;

SPI_SCK_PxM1 = IO_OUT_PUT_PP_M1 << SPI_SCK_PIN_BIT;

SPI_MOSI_PxM0 = IO_OUT_PUT_PP_M0 << SPI_MOSI_PIN_BIT;

SPI_MOSI_PxM1 = IO_OUT_PUT_PP_M1 << SPI_MOSI_PIN_BIT;

SPI_NSS_PxM0 = IO_OUT_PUT_PP_M0 << SPI_NSS_PIN_BIT;

SPI_NSS_PxM1 = IO_OUT_PUT_PP_M1 << SPI_NSS_PIN_BIT;

//MISO 配置为输入

SPI_MISO_PxM0 = IO_IN_PUT_ONLY_M0 << SPI_MISO_PIN_BIT;

SPI_MISO_PxM1 = IO_IN_PUT_ONLY_M1 << SPI_MISO_PIN_BIT;

//时钟置低

SPI_SCK = 0;

//MOSI MISO NSS置高

SPI_MOSI = 1;

SPI_MISO = 1;

SPI_NSS = 1;

}

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

    功能:SPI 收发一个字节

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

uint8_t drv_spi_read_write_byte( uint8_t TxByte )

{

uint8_t i = 0, Data = 0;

spi_set_clk_low( );

for( i = 0; i < 8; i++ )//一个字节8byte需要循环8次

{

/** 发送 */

if( 0x80 == ( TxByte & 0x80 ))

{

 spi_set_mosi_hight( ); //发送的位为 1 则置高IO引脚

}

else

{

 spi_set_mosi_low( );//发送的位为 0 则置低IO引脚

}

TxByte <<= 1; //数据左移一位,先发送的是最高位

spi_set_clk_high( ); //时钟线置高

_nop_( );

/** 接收 */

Data <<= 1; //接收数据左移一位,先接收到的是最高位

if( 1 == spi_get_miso( ))

{

  Data |= 0x01; //如果接收时IO引脚为高则认为接收到 1

}

spi_set_clk_low( ); //时钟线置低

_nop_( );

}

return Data; //返回接收到的字节

}

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

    功能:SPI 收发一个字节

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

void drv_spi_read_write_string( uint8_t* ReadBuffer, uint8_t* WriteBuffer, uint16_t Length )

{

spi_set_nss_low( ); //片选拉低

while( Length-- )

{

*ReadBuffer = drv_spi_read_write_byte( *WriteBuffer ); //收发数据

ReadBuffer++;

WriteBuffer++; //读写地址加1

}

spi_set_nss_high( );  //片选拉高

}

3.3 主机 LCD 显示程序设计

       LCD1602A字符液晶能显示2行,一行16个ASKII字符,共32个字符,LCD显示有写命令指令和写数据指令。写状态指令是设置显示状态,比如开显示,关显示,设置显示位置,设置显示模式等,写数据指令是把字符对应的编码写入数据寄存器,对应ASKII码就显示出来。图是LCD显示功能流程图。

LCD显示代码:

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

    功能:IO口定义

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

sbit E=P2^7;

sbit RW=P2^6;

sbit RS=P2^5;

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

    功能:1ms延时

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

void delay(uint k)

{

  k=k*125;

  while(k--);

}

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

    功能:写命令

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

void cmd_w(uchar cmd)

{

  RW=0;

  RS=0;

  E=1;

  P1=cmd;

  delay(1);

  E=0;

}

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

    功能:写数据

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

void dat_w(uchar dat)

{

  RW=0;

  RS=1;

  E=1;

  P1=dat;

  delay(1);

  E=0;

}

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

    功能:清屏

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

void lcd_clear(void)

{

  cmd_w(0x01);   //清屏

  cmd_w(0x02);   //清屏回到左上角

}

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

    功能:初始化

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

void Lcd1602_init(void)

{

  cmd_w(0x38);

  cmd_w(0x0c);

  cmd_w(0x06);

  cmd_w(0x01);

  cmd_w(0x80);    

}

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

    功能:光标定位

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

void gotoxy(uchar x,uchar y) //x是行数,y是列数

{

 if(x==1)

 {cmd_w(0x80+y);}

 else

 {cmd_w(0xc0+y);}

}

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

    功能:显示字符

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

void dsp_ch(uchar _ch)

{

dat_w(_ch);

}

3.4 主机时钟驱动程序设计

      时钟芯片DS1302和主机是SPI串行通信,设计采用软件模拟SPI通信。

DS1302时钟芯片代码:

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

 函数功能:发送数据1byte

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

void  inputbyte(uchar dat)

{

    uchar i;

for ( i=8; i>0; i-- ) //循环8次移位

         {

              SCLKoff;

    NOP;

    NOP;

    if(dat&0x01)

                   DIOon; //每次传输低字节

    else

         DIOoff;

    NOP;

    NOP;

              dat >>= 1; //右移一位

              SCLKon;

    NOP;

    NOP;

    NOP;

    NOP;

         }

}

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

 函数功能:读数据1byte

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

uchar  outputbyte(void)

{

          uchar i;

uchar dat=0;

for ( i=8; i>0; i-- ) //循环8次移位

         {  

      dat >>= 1; //右移一位

    NOP;

    NOP;

    SCLKoff;

    NOP;

    NOP;

              if(P32)

    dat|=0X80;

    NOP;

    NOP;

                SCLKon;

    NOP;NOP;NOP;NOP;

         }

return(dat);

}

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

 函数功能:发送数据到对应地址

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

void write1302 (uchar addr,dat )

{

    CEoff; //CE引脚为低,数据传送中止

    NOP;

NOP;

    SCLKoff; //清零时钟总线

    NOP;

NOP;

    CEon; //CE引脚为高,逻辑控制有效

NOP;NOP;NOP;NOP;

    inputbyte(addr);  //发送地址

    inputbyte(dat); //发送数据

    CEoff;

}

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

 函数功能:读取时间

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

 uchar read1302 (uchar addr)

{

    uchar dat,data_buff;

    

CEoff;

    NOP;

NOP;

    SCLKoff;

    NOP;

NOP;

    CEon;

NOP;NOP;NOP;NOP;

    inputbyte(addr);  //发送地址

    dat=outputbyte();//读取数据

    SCLKon;

    NOP;

NOP;

    CEoff;

    data_buff=dat;

    data_buff/=16;

    dat=dat%16;

    dat=data_buff*10+dat;

    return (dat);

}

4.5 子机程序设计

       子机程序设计和主机类似,初始化定时器和无线模块,接收主机信息,接收正确,判断接收报警信号还是查找信号,如果报警信号,回复正常,如果查找信号,蜂鸣器和LED提示。程序流程图。

四、系统调试测试与分析

4.1电路焊接

       用电烙铁将单片机、无线模块、DS1302时钟芯片、LED灯、蜂鸣器、液晶显示及电容、蜂鸣器、按键等器件焊接在电路板上,实物如图所示。

4.2系统调试

       通过下载线连接电脑与单片机,将C程序下载到单片机内,上电后,主机子机通信正常,主机LCD显示正常,LED灯灭,蜂鸣器不响,子机LED灯灭,蜂鸣器不响。如图:

       把子机拿到一定距离后,主机和子机报警,主机显示报警和报警时间,主机LED快速闪烁,蜂鸣器鸣响。子机LED快速闪烁,蜂鸣器鸣响。如图:

猜你喜欢

转载自blog.csdn.net/ccwaff/article/details/127634777