目录
一、学习目的
1. 了解火焰传感器工作原理
2. 了解震动传感器工作原理
3. 了解人体红外传感器工作原理
4. 学会使用火焰传感器检测是否存在火焰
5. 学会使用震动传感器检测是否存在震动
6. 学会使用人体红外传感器检测人体活动
7. 会使用单片机通过串口与PC机通信
8. 会使用Java编程上位机串口通信程序
二、实验项目要求
请设计一个简易家庭安防系统,要求如下:
①将震动传感器安装在门上,检测是否有人敲门
②使用火焰传感器检测火焰
③使用人体红外传感器检测是否有人非法进入
④并将检测结果通过串口发送给上位机
⑤自己动手设计上位机串口通信程序,以图形化的方式展示上述检测参数。
请按要求设计一个可行方案,包括设备选型、系统连接图等,并编写程序实
二、系统连接图要求
代码实现;
//Main函数部分实现
#include <config.h>
#include <uart.h>
#include <1602.h>
sbit vibrate=P2^0; //震动传感器引脚
sbit vibrate1=P2^1; //震动传感器引脚
sbit vibrate2=P2^2; //震动传感器引脚
sbit beep=P2^3; //蜂鸣器引脚
sbit flag=P3^3;
u8 print[20];
int num=0;
void delay_ms(u16 x)//毫秒延时函数
{u16 i;
u8 j;
for(i=0;i<x;i++)
for(j=0;j<115;j++);
}
void delay_us(u8 t) //10倍微秒延时函数,延时10*t微秒
{u8 i;
for(i=0;i<=t;i++);
}
void Alarm(float t) //蜂鸣器报警,持续t秒
{
u8 i,j,k;
for(j=0;j<t;j++)
{ for(i=0;i<200;i++)
{beep=0;delay_us(50);beep=1;delay_us(50);}
for(k=0;k<100;k++)
{beep=0;delay_us(110);beep=1;delay_us(110);}
}
}
void main()
{
Init_COM(); //初始化
EA=1;
ET1=1;
IT1=1;
while(1)
{
if(vibrate==1)
{
delay_ms(4000); //消抖动
if(vibrate==1) //确认触发
{
delay_ms(2000); //消抖动
if(vibrate==1) //确认触发
{
num++;
sprintf(print,"hongwai: %d",num);Print_str_COM(print);delay_ms(800);//输出到串口
Alarm(5);//启动报警响5秒
}
}
}
if(vibrate1==0)
{
delay_ms(5); //消抖动
if(vibrate1==0) //确认触发
{
delay_ms(2); //消抖动
if(vibrate1==0) //确认触发
{
num++;
sprintf(print,"houyan: %d",num);Print_str_COM(print);delay_ms(800);//输出到串口
Alarm(5);//启动报警响5秒
}
}
}
if(vibrate2==1)
{
delay_ms(15); //消抖动
if(vibrate2==1) //确认触发
{
delay_ms(20); //消抖动
if(vibrate2==1) //确认触发
{
num++;
sprintf(print,"zhengdong: %d",num);Print_str_COM(print);delay_ms(800);//输出到串口
Alarm(5);//启动报警响5秒
}
}
}
}
}
void inter1() interrupt 2
{
num++;
sprintf(print,"hongwai: %d",num);Print_str_COM(print);delay_ms(800);//输出到串口
Alarm(5);//启动报警响5秒
}
//串口实现代码模块:
#include <uart.h>
void Init_COM(void) //串口初始化 9600
{
TMOD = TMOD|0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
void Print_str_COM(u8 *str)//输出字符串到串口
{
TI=1;
printf("%s\n",str);
while(!TI);
TI=0;
}