假期里沒什么事,我也是剛學(xué)了32單片機(jī),便接了這個(gè)畢業(yè)設(shè)計(jì)練練手,在論壇里找到了很多有用的資料,經(jīng)過我的改裝, 能實(shí)現(xiàn)以下功能 (1)為避免煤氣中毒設(shè)置了一氧化碳及燃?xì)鈭?bào)警。 (2)煙感和水感可及時(shí)發(fā)現(xiàn)家居內(nèi)的水、火災(zāi)并報(bào)警。 (3)通過門磁和窗戶紅外線完成防盜報(bào)警。 (4)報(bào)警時(shí)通過短息告知業(yè)主。
人體紅外熱釋模塊 PA0
煙霧傳感器 PA1
雨水 雨滴模塊 PA2
SIM900A PB11 TX
PB10 RX
RC52
1-->> PB12 CS
2-->> PB13 SCK
3-->> PB15 MOSI
4-->> PB14 MISO
5-->> PB1 RST
小卡ID:5057555353535357
大卡ID:5657694969675250
單片機(jī)源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "exti.h"
- #include "in.h"
- #include "rc522.h"
- #include "usart3.h"
- #include "string.h"
- #include "usart.h"
- #include "sim.h"
- #define MSISDN "16638254196"//要發(fā)送短信的號碼
- /******************RC522*****************/
- void HexToStr(u8 *pOutPut, u8 *pInPut, u8 nLen)
- {
- char ddl, ddh;
- int i;
- for (i = 0; i < nLen; i++)
- {
- ddh = 48 + pInPut[i] / 16;
- ddl = 48 + pInPut[i] % 16;
- if (ddh > 57) ddh = ddh + 7;//+7位大寫字母
- if (ddl > 57) ddl = ddl + 39;//+39為小寫字母
- pOutPut[i * 2] = ddh;
- pOutPut[i * 2 + 1] = ddl;
- }
- pOutPut[nLen * 2] = '\0';
- }
- u8 IF_Init(u8 CardID[5])
- {
- if( (CardID[0]==41) && (CardID[1]==117) && (CardID[2]==85) && (CardID[3]==89) )
- return 1;
- else return 0;
- }
- /************************************************************/
- //函數(shù)名: u8 Scan_Card(void);
- //輸入:
- //輸入:
- //返回值: 有卡返回1,否則返回0
- //功能: 輪詢刷卡
- //注釋:
- /***********************************************************/
- u8 Scan_Card(void)
- {
- u8 status, i, snr;
- static u8 Key[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- u8 CardID[5], StrCardID[5];
- status = MI_NOTAGERR;
- for(i = 0; i < 4; i++)//將存放卡號的數(shù)組清空
- CardID[i] = 0;
- status = PcdRequest(PICC_REQALL, CardID);//尋卡,CardID存放卡類型
- if(status == MI_OK)
- {
- if(status == MI_OK)
- {
- status = PcdAnticoll(CardID);//防沖撞
- if(status == MI_OK)
- {
- status = PcdSelect(CardID);//選定卡片--參數(shù)為卡的序列號
- if(status == MI_OK)
- {
- snr = 8;
- status = PcdAuthState(PICC_AUTHENT1A, (snr * 4 - 1), Key, CardID);
- //驗(yàn)證密碼
- if(status == MI_OK)
- {
- if(IF_Init(CardID)==1)
- {
- LED = 0;//LED1亮 刷卡了就亮燈,等到處理完數(shù)據(jù)才能重新刷
- delay_ms(300);
- }
- else
- {
- LED = 0;//
- delay_ms(1000);
- }
- // LED = 1;//燈滅
- //顯示卡號
- HexToStr(StrCardID, CardID, 4);
- return status;
- }
- else
- return status;
- }
- else
- return status;
- }
- else
- return status;
- }
- else
- return status;
- }
- else
- return MI_NOTAGERR;
- }
- int main(void)
- {
- delay_init(); //延時(shí)函數(shù)初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
- uart_init(115200); //串口波特率115200
- usart3_init(115200); //串口3初始化為115200
- LED_Init(); //初始化與LED連接的硬件接口
- In_Init();
- EXTIX_Init(); //外部中斷初始化
- InitRc522(); //初始化RC522
- sim900a_check_status();
- while(1)
- {
- LED=1;
- // delay_ms(100);
- // Scan_Card();
- if(Scan_Card() == MI_ERR) delay_ms(100);
- else si900a_sms_test(MSISDN);//發(fā)送短信測試
- }
-
- }
復(fù)制代碼
所有資料51hei提供下載:
匯總程序.7z
(195.87 KB, 下載次數(shù): 57)
2019-1-29 03:06 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|