日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

无线防丢器设计

發(fā)布時間:2024/3/24 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 无线防丢器设计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

一、方案流程及技術(shù)規(guī)格書設(shè)計

二、系統(tǒng)硬件電路設(shè)計

三、軟件編寫及調(diào)試

四、系統(tǒng)調(diào)試測試與分析

?

前言

為了解決重要物品丟失或遺忘的問題,達(dá)到找到丟失或遺忘的重要物品和報警提示,防止重要物品丟失或遺忘的目的,提出一種基于無線技術(shù)和51單片機的智能防丟失報警器設(shè)計與實現(xiàn)方案。

目前市場上的電子防丟器,大多是采用GPS技術(shù)、藍(lán)牙技術(shù),系統(tǒng)復(fù)雜、價格昂貴。本設(shè)計方案采用廉價的51單片機和2.4G無線通信模塊,具有價格低廉、系統(tǒng)簡單、使用方便等特點。

該智能防丟失報警器采用主機和子機方案,在一定較短距離內(nèi),主機和子機正常通信,當(dāng)主機和子機距離較遠(yuǎn)時,通信失敗,主機和子機會聲光報警,從而達(dá)到物品查找、預(yù)防報警的功能,可有效找到重要物品,防止物品被盜,具有重要的市場價值。

?

軟件工具準(zhǔn)備

軟件:

電路設(shè)計:protel99 se(up主使用版本) 或者其他版本,或者其他電路設(shè)計軟件;

單片機開發(fā):Keil5;

調(diào)試測試:串口調(diào)試助手,邏輯分析儀等;

工具:

電路焊接:電烙鐵,SMT(有條件的);

調(diào)試:

萬用表、示波器(基礎(chǔ)入門即可,可以白嫖學(xué)校或者公司)USB轉(zhuǎn)串口工具、仿真器;

一、方案流程及技術(shù)規(guī)格書設(shè)計

方案流程設(shè)計

技術(shù)規(guī)格書設(shè)計

主機

1.主機采用SI24L01無線通信模塊收發(fā)約定的數(shù)據(jù),正常收到子機數(shù)據(jù),說明子機在范圍內(nèi),沒有收到數(shù)據(jù)說明子機不在范圍內(nèi),聲光報警。

2.采用DS1302時鐘芯片計時,實現(xiàn)記錄丟失時間

3.LCD顯示狀態(tài),如果有丟失報警,顯示報警時間。

4、正常狀態(tài)LED常亮,報警狀態(tài)LED閃爍顯示。

5、蜂鳴器實現(xiàn)聲音報警。

6、4個按鍵設(shè)置時鐘和取消報警狀態(tài)。

子機

1.子機采用SI24L01無線通信模塊收發(fā)約定的數(shù)據(jù),正常收到主機數(shù)據(jù),說明主機在范圍內(nèi),沒有收到數(shù)據(jù)說明主機不在范圍內(nèi),聲光報警。

2、正常狀態(tài)LED滅,報警狀態(tài)LED閃爍顯示。

3、蜂鳴器實現(xiàn)聲音報警。

系統(tǒng)硬件電路設(shè)計

2.1微處理控制電路

設(shè)計采用宏晶公司IAP15F2K61S2單片機芯片。LQFP32封裝,電路圖如圖所示:

圖中VCC為5V供電電壓。C12瓷片電容,起濾波作用,J8是仿真燒錄口。

單片機IO口連接介紹:

P00-P03(29-32腳):按鍵檢測引腳。

P10-P17(1-8腳):LCD數(shù)據(jù)口。

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電壓,不能和無線模塊直接連接,所以采用電平轉(zhuǎn)換電路。

?

2.3 主機LCD顯示電路

LCD1602A顯示電路如圖:

R38是電位器,作用是調(diào)節(jié)顯示對比度。C11是濾波電容。R66是背光限流電阻。

IO口連接介紹:

RS、RW、E(4、5、6腳):LCD讀寫控制腳。

D0-D7(7-14腳):數(shù)據(jù)線。

2.4主機按鍵電路

? ? ? ?產(chǎn)品設(shè)計4個按鍵,沒有按下按鍵,對應(yīng)IO口是高電平,按鍵按下,對應(yīng)IO口接地,是低電平。單片機檢測各個按鍵IO口電平,判斷按鍵狀態(tài)。電路如圖:

?????????

2.5 ?主機LED電路

LED通過單片機IO口控制,電路如圖。????????

?2.6蜂鳴器驅(qū)動電路

? ? ? ?蜂鳴器模擬報警設(shè)備。由于IO口驅(qū)動能力有限,所以使用三極管放大電路,擴大驅(qū)動電流。電路如圖。

?

2.7 主機時鐘電路

? ? ? 時鐘電路采用專用時鐘芯片DS1302,電路如圖:

Y2是32.768時鐘晶振,SCLK、DIO、CE_1302是和單片機通信線。

2.8主機電源電路

? ? ?系統(tǒng)采用外部9V電源適配器供電,9V直流經(jīng)過DCDC降壓,輸出5V電壓給芯片和其他電路供電。電路如圖。

單片機等3.3V供電采用ASM1117線性穩(wěn)壓電路,電路如圖。

無線通訊模塊供電需要3.3V,通過3.3V穩(wěn)壓芯片ASM1117輸出3.3V電壓。電路如圖。

?

2.9子機電路設(shè)計

? ? ? ?無線防丟器子機電路和主機電路基本一樣,只是少了液晶顯示模塊、時鐘電路、按鍵電路。電路如圖。

?

三、軟件編寫及調(diào)試

3.1主程序設(shè)計

主機使用單片機IAP15F2K61S2控制,控制設(shè)備有按鍵,液晶顯示1602A,通信模塊Si24L1,時鐘芯片DS1302,LED燈,蜂鳴器。上電對單片機系統(tǒng)和控制設(shè)備初始化,正常工作有以下三種模式:

工作模式1:讀取時鐘芯片時間,通過無線模塊發(fā)送“110”,接收子機信息正常,LCD顯示正常信息,接收子機信息不正常,LCD顯示報警信息,蜂鳴器鳴響,LED閃爍,顯示報警時間。

工作模式2:長按設(shè)置按鍵,通過無線模塊發(fā)送“find”,接收子機回復(fù)信息正常,停止發(fā)送,接收子機回復(fù)信息不正常,繼續(xù)發(fā)送。

工作模式3:設(shè)置時間,按設(shè)置鍵,進(jìn)入設(shè)置時間,小時閃爍,按上下鍵修改小時,按確認(rèn)鍵分鐘閃爍,按上下鍵修改,按確認(rèn)鍵退出。

圖是主程序流程圖。

?

3.2主機無線通訊程序設(shè)計

? ? ? ?圖4-2無線通信流程圖,報警模式時,發(fā)送“110”給子機,同時接收子機回復(fù),接收正確不報警,接收錯誤報警。查找模式時,發(fā)送“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 收發(fā)一個字節(jié)

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

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++ )//一個字節(jié)8byte需要循環(huán)8次

{

/** 發(fā)送 */

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

{

?spi_set_mosi_hight( ); //發(fā)送的位為 1 則置高IO引腳

}

else

{

?spi_set_mosi_low( );//發(fā)送的位為 0 則置低IO引腳

}

TxByte <<= 1; //數(shù)據(jù)左移一位,先發(fā)送的是最高位

spi_set_clk_high( ); //時鐘線置高

_nop_( );

/** 接收 */

Data <<= 1; //接收數(shù)據(jù)左移一位,先接收到的是最高位

if( 1 == spi_get_miso( ))

{

??Data |= 0x01; //如果接收時IO引腳為高則認(rèn)為接收到 1

}

spi_set_clk_low( ); //時鐘線置低

_nop_( );

}

return Data; //返回接收到的字節(jié)

}

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

????功能:SPI 收發(fā)一個字節(jié)

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

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 ); //收發(fā)數(shù)據(jù)

ReadBuffer++;

WriteBuffer++; //讀寫地址加1

}

spi_set_nss_high( ); ?//片選拉高

}

3.3 主機?LCD 顯示程序設(shè)計

? ? ? ?LCD1602A字符液晶能顯示2行,一行16個ASKII字符,共32個字符,LCD顯示有寫命令指令和寫數(shù)據(jù)指令。寫狀態(tài)指令是設(shè)置顯示狀態(tài),比如開顯示,關(guān)顯示,設(shè)置顯示位置,設(shè)置顯示模式等,寫數(shù)據(jù)指令是把字符對應(yīng)的編碼寫入數(shù)據(jù)寄存器,對應(yīng)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;

}

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

????功能:寫數(shù)據(jù)

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

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

}

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

????功能:光標(biāo)定位

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

void gotoxy(uchar x,uchar y) //x是行數(shù),y是列數(shù)

{

?if(x==1)

?{cmd_w(0x80+y);}

?else

?{cmd_w(0xc0+y);}

}

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

????功能:顯示字符

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

void dsp_ch(uchar _ch)

{

dat_w(_ch);

}

3.4?主機時鐘驅(qū)動程序設(shè)計

? ? ? 時鐘芯片DS1302和主機是SPI串行通信,設(shè)計采用軟件模擬SPI通信。

DS1302時鐘芯片代碼:

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

?函數(shù)功能:發(fā)送數(shù)據(jù)1byte

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

void ?inputbyte(uchar dat)

{

????uchar i;

for ( i=8; i>0; i-- ) //循環(huán)8次移位

?????????{

??????????????SCLKoff;

????NOP;

????NOP;

????if(dat&0x01)

?????????????? ????DIOon; //每次傳輸?shù)妥止?jié)

????else

???? ????DIOoff;

????NOP;

????NOP;

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

??????????????SCLKon;

????NOP;

????NOP;

????NOP;

????NOP;

?????????}

}

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

?函數(shù)功能:讀數(shù)據(jù)1byte

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

uchar ?outputbyte(void)

{

??????????uchar i;

uchar dat=0;

for ( i=8; i>0; i-- ) //循環(huán)8次移位

?????????{ ?

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

????NOP;

????NOP;

????SCLKoff;

????NOP;

????NOP;

??????????????if(P32)

????dat|=0X80;

????NOP;

????NOP;

????????????????SCLKon;

????NOP;NOP;NOP;NOP;

?????????}

return(dat);

}

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

?函數(shù)功能:發(fā)送數(shù)據(jù)到對應(yīng)地址

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

void write1302 (uchar addr,dat )

{

????CEoff; //CE引腳為低,數(shù)據(jù)傳送中止

????NOP;

NOP;

????SCLKoff; //清零時鐘總線

????NOP;

NOP;

????CEon; //CE引腳為高,邏輯控制有效

NOP;NOP;NOP;NOP;

????inputbyte(addr); ?//發(fā)送地址

????inputbyte(dat);?//發(fā)送數(shù)據(jù)

????CEoff;

}

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

?函數(shù)功能:讀取時間

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

?uchar read1302 (uchar addr)

{

????uchar dat,data_buff;

????

CEoff;

????NOP;

NOP;

????SCLKoff;

????NOP;

NOP;

????CEon;

NOP;NOP;NOP;NOP;

????inputbyte(addr); ?//發(fā)送地址

????dat=outputbyte();//讀取數(shù)據(jù)

????SCLKon;

????NOP;

NOP;

????CEoff;

????data_buff=dat;

????data_buff/=16;

????dat=dat%16;

????dat=data_buff*10+dat;

????return (dat);

}

4.5?子機程序設(shè)計

? ? ? ?子機程序設(shè)計和主機類似,初始化定時器和無線模塊,接收主機信息,接收正確,判斷接收報警信號還是查找信號,如果報警信號,回復(fù)正常,如果查找信號,蜂鳴器和LED提示。程序流程圖。

?

四、系統(tǒng)調(diào)試測試與分析

4.1電路焊接

???? ? 用電烙鐵將單片機、無線模塊、DS1302時鐘芯片、LED燈、蜂鳴器、液晶顯示及電容、蜂鳴器、按鍵等器件焊接在電路板上,實物如圖所示。

?

4.2系統(tǒng)調(diào)試

? ? ? ?通過下載線連接電腦與單片機,將C程序下載到單片機內(nèi),上電后,主機子機通信正常,主機LCD顯示正常,LED燈滅,蜂鳴器不響,子機LED燈滅,蜂鳴器不響。如圖:

?

? ? ? ?把子機拿到一定距離后,主機和子機報警,主機顯示報警和報警時間,主機LED快速閃爍,蜂鳴器鳴響。子機LED快速閃爍,蜂鳴器鳴響。如圖:

總結(jié)

以上是生活随笔為你收集整理的无线防丢器设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。