假期里没什么事,我也是刚学了32单片机,便接了这个毕业设计练练手,在论坛里找到了很多有用的资料,经过我的改装, 能实现以下功能 (1)为避免煤气中毒设置了一氧化碳及燃气报警。 (2)烟感和水感可及时发现家居内的水、火灾并报警。 (3)通过门磁和窗户红外线完成防盗报警。 (4)报警时通过短息告知业主。
人体红外热释模块 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
单片机源程序如下:
- #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"//要发送短信的号码
- /******************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;
- }
- /************************************************************/
- //函数名: 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++)//将存放卡号的数组清空
- 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);//选定卡片--参数为卡的序列号
- if(status == MI_OK)
- {
- snr = 8;
- status = PcdAuthState(PICC_AUTHENT1A, (snr * 4 - 1), Key, CardID);
- //验证密码
- if(status == MI_OK)
- {
- if(IF_Init(CardID)==1)
- {
- LED = 0;//LED1亮 刷卡了就亮灯,等到处理完数据才能重新刷
- 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(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- 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);//发送短信测试
- }
-
- }
复制代码
所有资料51hei提供下载:
汇总程序.7z
(195.87 KB, 下载次数: 57)
|