使用了GSM短信收發模塊,用戶只需要在代碼中更改報警對象手機號碼,報警器超過一定閾值可發送短信至手機,播報相關參數,并且本地蜂鳴器報警。短信模塊收發指令回復判斷改成延時判斷,可適當更改延時值。上電等待初始化也為延時,可更改為接收到回復指令后初始化完成(噪聲,煙霧等模擬量或者數字量傳感器模塊可通用)
代碼、PCB、原理圖、BOM表、proteus仿真文件已上傳,請到本文尾部下載附件。
制作出來的實物圖如下:
1.png (368.58 KB)
下載附件
2021-6-20 03:01 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
煙霧傳感器仿真中沒有,其實就是傳感器檢測時相應的電阻值會變化,用滑動電位器代替就ok
2.png (41.09 KB)
下載附件
2021-6-20 03:57 上傳
Altium Designer畫的原理圖和PCB圖如下:(附件中可下載工程文件)
5.png (227.45 KB)
下載附件
2021-6-20 03:58 上傳
4.png (311.53 KB)
下載附件
2021-6-20 03:57 上傳
3.png (310.78 KB)
下載附件
2021-6-20 03:57 上傳
原理圖.png (170.53 KB)
下載附件
2021-6-20 03:58 上傳
部分單片機源碼 完整源碼在本文尾部附件里
- #include <reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
- #include "intrins.h"
- #include "uart.h"
- #define u8 unsigned char
- #define u16 unsigned int
- #define uchar unsigned char
- #define uint unsigned int
- //常量
- #define Success 1U
- #define Failure 0U
- //定義變量
- unsigned long Time_Cont = 0; //定時器計數器
- char phoneNumber[] = "158888"; //替換成jls的電話號碼
- //char phoneNumber[] = "158888"; //替換成lyg的電話號碼
- //char phoneNumber[] = "1738888"; //替換成wc的電話號碼
- char msg[] = "HELP!t: . n: "; //短信內容
- //char text_send[] = "AT+CMGS="17347070063"\r\n"; //替換成需要被撥打電話的號碼
- //函數或者變量聲明
- extern void delay_ms(unsigned int n);
- extern unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry);
- extern void errorLog();
- extern void soft_reset(void);
- extern void phone(char *number);
- extern void sendMessage(char *number,char *msg);
- void sendCommand_AT(char *Command,unsigned char times);
- uchar yushe_wendu=50; //溫度預設值
- uchar yushe_yanwu=140; //煙霧預設值
- uint wendu; //溫度值全局變量
- uchar yanwu; //用于讀取ADC數據
- u16 xianshiyanwu_flag=0;
- //運行模式
- uchar Mode=0; //=1是設置溫度閥值 =2是設置煙霧閥值 =0是正常監控模式
- //管腳聲明
- sbit Led_Reg =P2^2; //紅燈
- sbit Led_Yellow =P2^4; //黃燈
- sbit Buzzer =P2^0; //蜂鳴器
- sbit Fan =P3^3; //
- /********************************************************************
- * 名稱 : delay_1ms()
- * 功能 : 延時1ms函數
- * 輸入 : q
- * 輸出 : 無
- ***********************************************************************/
- void delay_ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<110;j++);
- }
- /***********************************************************************************************************
- LCD1602相關函數
- ***********************************************************************************************************/
- //LCD管腳聲明 (RW引腳實物直接接地,因為本設計只用到液晶的寫操作,RW引腳一直是低電平)
- sbit LCDRS = P2^7;
- sbit LCDEN = P2^6;
- sbit D0 = P0^0;
- sbit D1 = P0^1;
- sbit D2 = P0^2;
- sbit D3 = P0^3;
- sbit D4 = P0^4;
- sbit D5 = P0^5;
- sbit D6 = P0^6;
- sbit D7 = P0^7;
- //LCD延時
- void LCDdelay(uint z) //該延時大約100us(不精確,液晶操作的延時不要求很精確)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=10;y>0;y--);
- }
- void LCD_WriteData(u8 dat)
- {
- if(dat&0x01)D0=1;else D0=0;
- if(dat&0x02)D1=1;else D1=0;
- if(dat&0x04)D2=1;else D2=0;
- if(dat&0x08)D3=1;else D3=0;
- if(dat&0x10)D4=1;else D4=0;
- if(dat&0x20)D5=1;else D5=0;
- if(dat&0x40)D6=1;else D6=0;
- if(dat&0x80)D7=1;else D7=0;
- }
- //寫命令
- void write_com(uchar com)
- {
- LCDRS=0;
- LCD_WriteData(com);
- // DAT=com;
- LCDdelay(5);
- LCDEN=1;
- LCDdelay(5);
- LCDEN=0;
- }
- //寫數據
- void write_data(uchar date)
- {
- LCDRS=1;
- LCD_WriteData(date);
- // DAT=date;
- LCDdelay(5);
- LCDEN=1;
- LCDdelay(5);
- LCDEN=0;
- }
- /*------------------------------------------------
- 選擇寫入位置
- ------------------------------------------------*/
- void SelectPosition(unsigned char x,unsigned char y)
- {
- if (x == 0)
- {
- write_com(0x80 + y); //表示第一行
- }
- else
- {
- write_com(0xC0 + y); //表示第二行
- }
- }
- /*------------------------------------------------
- 寫入字符串函數
- ------------------------------------------------*/
- void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
- {
- SelectPosition(x,y) ;
- while (*s)
- {
- write_data( *s);
- s ++;
- }
- }
- //========================================================================
- // 函數: void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
- // 應用: LCD_Write_Char(0,1,366,4) ;
- // 描述: 在第0行第一個字節位置顯示366的后4位,顯示結果為 0366
- // 參數: x:行,y:列,s:要顯示的字,l:顯示的位數
- // 返回: none.
- // 版本: VER1.0
- // 日期: 2013-4-1
- // 備注: 最大顯示65535
- //========================================================================
- void LCD_Write_Char(u8 x,u8 y,u16 s,u8 l)
- {
- SelectPosition(x,y) ;
- if(l>=5)
- write_data(0x30+s/10000%10); //萬位
- if(l>=4)
- write_data(0x30+s/1000%10); //千位
- if(l>=3)
- write_data(0x30+s/100%10); //百位
- if(l>=2)
- write_data(0x30+s/10%10); //十位
- if(l>=1)
- write_data(0x30+s%10); //個位
- }
- /*1602指令簡介
- write_com(0x38);//屏幕初始化
- write_com(0x0c);//打開顯示 無光標 無光標閃爍
- write_com(0x0d);//打開顯示 陰影閃爍
- write_com(0x0d);//打開顯示 陰影閃爍
- */
- //1602初始化
- void Init1602()
- {
- uchar i=0;
- write_com(0x38);//屏幕初始化
- write_com(0x0c);//打開顯示 無光標 無光標閃爍
- write_com(0x06);//當讀或寫一個字符是指針后一一位
- write_com(0x01);//清屏
-
- }
- void Display_1602(yushe_wendu,yushe_yanwu,c,temp)
- {
- //顯示預設溫度
- LCD_Write_Char(0,6,yushe_wendu,2) ;
-
- //顯示預設煙霧
- LCD_Write_Char(0,13,yushe_yanwu,3) ;
-
- //時時溫度
- LCD_Write_Char(1,6,c/10,2) ;
- write_data('.');
- LCD_Write_Char(1,9,c%10,1) ;
-
- //實時煙霧
- LCD_Write_Char(1,13,temp,3) ;
- }
復制代碼
1 單片機c程序源碼.zip
(147.8 KB, 售價: 3 E幣)
2021-6-20 04:09 上傳
點擊文件名下載附件
售價: 3 E幣 [記錄]
[ 購買]
2 原理圖 PCB文件 BOM表.zip
(5.3 MB, 售價: 3 E幣)
2021-6-20 04:09 上傳
點擊文件名下載附件
售價: 3 E幣 [記錄]
[ 購買]
3 設計流程圖.zip
(346.88 KB)
2021-6-20 04:09 上傳
點擊文件名下載附件
4 protus仿真文件.zip
(125.29 KB, 售價: 3 E幣)
2021-6-20 04:09 上傳
點擊文件名下載附件
售價: 3 E幣 [記錄]
[ 購買]
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|
|