资源简介
本系统是基于STC89C51的实时自动报警装置,本系统通过人体感应模块检测人类的接近,并将其传递至STC89C51中处理,一方面在LCD1602显示模块中显示报警信息,另一方面将实时得到的信息进行监督。当无人接近时时,LED显示电路显示正常。当检测到人体接近时,LED显示显示红灯,蜂鸣器报警。以此实现了自动滴灌。
此文件中包含 : 设计报告word文档 keilC51程序 protues仿真原理图
代码片段和文件信息
#include //调用单片机头文件
#include
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
#define key_io P3
uchar key_can;
// 红外热释电平时为0 有输出为1
sbit beep = P1^0; //蜂鸣器定义
sbit red = P1^3; //红色发光二极管定义
sbit green = P1^2; //绿色发光二极管定义
sbit yellow = P1^1; //黄色发光二极管定义
sbit hw = P1^4; //红外热释传感器定义
bit flag_300ms = 0;
sbit RS = P2^5;
sbit RW = P2^6;
sbit EN = P2^7;
#define RS_H RS = 1
#define RS_L RS = 0
#define RW_H RW = 1
#define RW_L RW = 0
#define EN_H EN = 1
#define EN_L EN = 0
#define READ_DATA P0
void DelayMs(unsigned int z)
{
unsigned int x;
for(;z>0;z--)
for(x=110;x>0;x--);
}
/***************************LCD1602液晶写命令*****************************/
void LCDWriteCom(unsigned char com)
{
RS_L;
RW_L;
READ_DATA = com;
EN_H;
DelayMs(5);
EN_L;
}
/***************************LCD1602液晶写数据*****************************/
void LCDWriteData(unsigned char dat)
{
RS_H;
RW_L;
READ_DATA = dat;
EN_H;
DelayMs(5);
EN_L;
}
void LcdWriteStr(unsigned char hangunsigned char addchar*s)
{
unsigned char i;
unsigned char length = 0;
if(hang==1)
LCDWriteCom(0x80+add);
else
LCDWriteCom(0x80+0x40+add);
length = strlen(s);
for(i=0;i LCDWriteData(*s++); //指针送完数据后自加一
}
void Init_1602(void)
{
LCDWriteCom(0x38); //1602 5x7点阵
LCDWriteCom(0x0c); //液晶开显示
LCDWriteCom(0x06); //光标右移
LCDWriteCom(0x01); //清屏
DelayMs(2);
}
//独立按键处理函数
void key()
{
static uchar key_new = 0key_old = 0key_value = 0;
if(key_new == 0) //按键松开
{
if((key_io & 0x07) == 0x07)
key_value ++;
else
key_value = 0;
if(key_value >= 5) //按键松开松手检测
{
key_value = 0;
key_new = 1; //按键松开后进入等待按键状态
}
}
else
{
if((key_io & 0x07) != 0x07) //按键按下
key_value ++;
else
key_value =0;
if(key_value >= 5) //按键按下消抖
{
key_value = 0;
key_new = 0; //按键松开后进入等待松开按键状态
}
}
key_can = 20;
if((key_new == 0) && (key_old == 1))
{
switch(key_io & 0x07)
{
case 0x06: key_can = 1; break; //得到按键值
case 0x05: key_can = 2; break; //得到按键值
case 0x03: key_can = 3; break; //得到按键值
}
}
key_old = key_new;
}
void time_init()
{
EA = 1; //开总中断
TMOD = 0X01; //定时器0工作方式1
ET0 = 1; //开定时器0中断
TR0 = 1; //允许定时器0定时
}
uchar flag_alarm ; //报警标志位
uchar flag_bufang ; //布防标志位
uchar flag_bufang_en ; //布防标志位使能
uint flag_value; //用做定时器的变量
uchar shige;
uchar num;
//红外报警处理
void hongwai_dis()
{
static uchar flag_num=0flag_va=1; //
if(flag_alarm == 1) //报警
{
red = ~red; //红灯报警
beep = ~beep; //蜂鸣器报警
}
if(flag_bufang_en == 1) //准备开始布防
{
green = ~green; //绿灯闪
}
if(flag_bufang == 1) //确认布防
{
green = 0; //如果延时布防成功 绿灯长亮
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-26 15:48 上交文件\
文件 162889 2018-03-26 15:42 上交文件\Last Loaded 红外热释电.DBK
文件 709198 2018-03-26 15:43 上交文件\基于STC89C51的防盗报警器.docx
目录 0 2018-03-26 15:42 上交文件\源代码\
文件 11775 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器
文件 4796 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器.c
文件 2673 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器.hex
文件 86 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器.lnp
文件 11793 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器.LST
文件 16076 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器.M51
文件 13659 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器.OBJ
文件 194 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器.plg
文件 55319 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器.uvopt
文件 13331 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器.uvproj
文件 55319 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器_uvopt.bak
文件 0 2018-03-26 15:42 上交文件\源代码\基于51单片机 红外热释报警器_uvproj.bak
文件 162763 2018-03-26 15:42 上交文件\红外热释电.DSN
文件 742 2018-03-26 15:42 上交文件\红外热释电.PWI
- 上一篇:《有限元法》考试试卷
- 下一篇:单片机原理及应用试题库-
评论
共有 条评论