/************************家用红外热释电防盗报警器*************************
开发环境:KEIL4
处理器:STC89C52RC,晶振:11.0592M
操作步骤:
1、给报警器的电池盒中安上2节14500锂离子电池(注意正负方向)。
2、按下报警器的电源开关。
3、按下KEY1按键进入STARTUP工作模式(也可按下红外遥控器的按键“1”),
在该工作模式下对LED和蜂鸣器进行自检。
4、按下KEY2按键进入STARTBY工作模式(也可按下红外遥控器的按键“2”),
在该工作模式下等待一分钟左右。
5、按下KEY3按键进入WORKING工作模式(也可按下红外遥控器的按键“3”),
在该工作模式下监测到人时报警器进行报警。
*************************************************************************/
/*************************************************************************
红外遥控器键码;
CH- 键对应键码:0x45
CH 键对应键码:0x46
CH+ 键对应键码:0x47
|<< 键对应键码:0x44
>>| 键对应键码:0x40
>|| 键对应键码:0x43
- 键对应键码:0x07
+ 键对应键码:0x15
EQ 键对应键码:0x09
0 键对应键码:0x16
100+键对应键码:0x19
200+键对应键码: 0x0d
1 键对应键码: 0x0c
2 键对应键码: 0x18
3 键对应键码: 0x5e
4 键对应键码: 0x08
5 键对应键码: 0x1c
6 键对应键码: 0x5a
7 键对应键码: 0x42
8 键对应键码: 0x52
9 键对应键码: 0x4a
*************************************************************************/
#include<reg52.h> //包含头文件
#include<intrins.h>
#define LCD_Data P0 //液晶LCD1602数据线对应管脚
#define Busy 0x80 //液晶LCD1602忙
sbit IR = P3^2; //红外遥控信号接收管脚
sbit RS = P1^0; //寄存器选择位,将RS位定义为P1.0引脚
sbit RW = P1^1; //读写选择位,将RW位定义为P1.1引脚
sbit E = P2^5; //使能信号位,将E位定义为P2.5引脚
sbit BF = P0^7; //忙碌标志位,将BF位定义为P0.7引脚
sbit LED_RED = P2^2; //红色LED控制管脚
sbit LED_HUAN = P2^3; //黄色LED控制管脚
sbit LED_GREEN = P2^4; //绿色LED控制管脚
sbit BEEP = P2^6; //蜂鸣器控制管脚
sbit SIGNAL = P1^2; //热释电传感器(HC-SR501)信号管脚
sbit KEY1 = P3^5; //按键1对应管脚
sbit KEY2 = P3^6; //按键2对应管脚
sbit KEY3 = P3^7; //按键3对应管脚
unsigned char IRcord[4]; //红外遥控接收信号用数组
unsigned char IRdata[33]; //红外遥控接收信号用数组
unsigned char irtime; //用于红外遥控计数
unsigned char code welcome[] = {"WLE COME"}; //液晶显示字符定义
unsigned char code presskey1[] = {"K1: STARTUP MODE"}; //液晶显示字符定义
unsigned char code presskey2[] = {"K2: STARTBY MODE"}; //液晶显示字符定义
unsigned char code presskey3[] = {"K3: WORKING MODE"}; //液晶显示字符定义
unsigned char code startup[] = {"STARTUP MODE"}; //液晶显示字符定义
unsigned char code standby[] = {"STANDBY MODE"}; //液晶显示字符定义
unsigned char code working[] = {"WORKING MODE"}; //液晶显示字符定义
unsigned char code greenled[] = {"GREEN LED TEST"}; //液晶显示字符定义
unsigned char code huanled[] = {"HUAN LED TEST"}; //液晶显示字符定义
unsigned char code redled[] = {"RED LED TEST"}; //液晶显示字符定义
unsigned char code beept[] = {"BEEP TEST"}; //液晶显示字符定义
unsigned char code space[] = {" "}; //液晶显示字符定义
unsigned char code alarm[] = {"ALARM..."}; //液晶显示字符定义
unsigned char code wait60s[] = {"WAIT 60S..."}; //液晶显示字符定义
unsigned char code wait50s[] = {"WAIT 50S..."}; //液晶显示字符定义
unsigned char code wait40s[] = {"WAIT 40S..."}; //液晶显示字符定义
unsigned char code wait30s[] = {"WAIT 30S..."}; //液晶显示字符定义
unsigned char code wait20s[] = {"WAIT 20S..."}; //液晶显示字符定义
unsigned char code wait10s[] = {"WAIT 10S..."}; //液晶显示字符定义
unsigned char code wait9s[] = {"WAIT 9S..."}; //液晶显示字符定义
unsigned char code wait8s[] = {"WAIT 8S..."}; //液晶显示字符定义
unsigned char code wait7s[] = {"WAIT 7S..."}; //液晶显示字符定义
unsigned char code wait6s[] = {"WAIT 6S..."}; //液晶显示字符定义
unsigned char code wait5s[] = {"WAIT 5S..."}; //液晶显示字符定义
unsigned char code wait4s[] = {"WAIT 4S..."}; //液晶显示字符定义
unsigned char code wait3s[] = {"WAIT 3S..."}; //液晶显示字符定义
unsigned char code wait2s[] = {"WAIT 2S..."}; //液晶显示字符定义
unsigned char code wait1s[] = {"WAIT 1S..."}; //液晶显示字符定义
bit startup_flag = 0; //报警器启动标志
bit standby_flag = 0; //报警器待机标志
bit working_flag = 0; //报警器工作标志
bit flag1 = 0; //标志变量
bit flag2 = 0; //标志变量
bit IRpro_ok; //用于红外遥控变量
bit IR_ok; //用于红外遥控变量
void delay1ms(); //延时函数
void delay(unsigned char n); //延时函数
unsigned char BusyTest(void); //液晶LCD1602忙测试
void WriteCommandLCD(unsigned char WCLCD,BuysC); //给液晶LCD1602写命令
void LCD_Clear(void); //液晶LCD1602清屏
void WriteAddress(unsigned char x); //给液晶LCD1602写地址
void WriteData(unsigned char y); //给液晶LCD1602写数据
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); //液晶LCD1602显示一个字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); //液晶LCD1602显示一串字符
void LCDInit(void);
void sys_init(void); //报警器初始化
void Key1_Sacn(void); //按键1扫描
void Key2_Sacn(void); //按键2扫描
void Key3_Sacn(void); //按键3扫描
void process(void); //报警器报警函数
void TIM0init(void); //定时器0初始化函数
void EX0init(void); //外部中断初始化函数
void Ir_work(void); //红外遥控相关函数
void Ircordpro(void); //红外遥控相关函数
/************************************************
函数功能:延时1ms (3j+2)*i=(3×33+2)×10=1010(微秒),
可以认为是1毫秒
************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/************************************************
函数功能:延时若干毫秒
入口参数:n
************************************************/
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
/************************************************
函数功能:判断液晶模块的忙碌状态
返回值:result。result=1,忙碌;result=0,不忙
************************************************/
unsigned char BusyTest(void)
{
bit result;
RS = 0; //根据规定,RS为低电平,RW为高电平时,可以读状态
RW = 1;
E = 1; //E=1,才允许读写 _
_nop_(); //空操作
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
result = BF; //将忙碌标志电平赋给result
E = 0;
return result;
}
/******************写指令函数*******************/
void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测
{
if (BuysC) //根据需要检测忙
{
while(BusyTest()==1); //如果忙就等待
}
RS = 0; //根据规定,RS和R/W同时为低电平时,可以写入指令
RW = 0;
E = 0; //E置低电平(根据表8-6,写指令时,E为高脉冲,
//就是让E从0到1发生正跳变,所以应先置"0" _
_nop_();
_nop_(); //空操作两个
嵌入式硬件与代码
- 粉丝: 529
- 资源: 582
最新资源
- 汇编语言入门与编程实践-低层开发者的必备技能
- WatchIO二进制固件和刷机工具(无需源码编译).zip
- 提取网页核心信息:Python中的Readability与Date Extraction技术
- Swift语言教程:从基础语法到高级特性的全面讲解
- 表白代码(发射爱心).zip学习资料程序
- 常用工具合集(包括汉字转拼音工具、常用数据格式相互转换工具、尺寸相关的工具类).zip
- Delphi编程教程:从入门到精通Windows应用程序开发
- 视觉化编程入门指南:Visual Basic语言教程及其应用领域
- 纯代码实现的3d爱心.zip学习资料语言
- 儿童编程教育中Scratch语言的基础教学及实战示例
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0