俊洋同学
用于寻找狗狗的遥控无线报警器设计-报警遥控器
功能描述
报警遥控器采用433Mhz通信发射模块,向接收端发送应答信号,接收端也就是狗狗佩戴的接收器,接收到信号后做出相应的动作,如控制蜂鸣器鸣叫,本遥控器设置有两组功能按键,按下对应按键遥控器将发送对应的控制信号,由接收端解析。遥控器信号范围在200m半径以内。
硬件介绍
- STC8G1K08单片机;
- 蜂鸟无线,远-T1,433/315M发送模块;
- HX4004A无感升压IC;
原理图PCB
3D仿真
C51源码
- main.c
#include <STC8G.H>
#include "function.h"
unsigned char flag=0;
unsigned char timer1_num=0;
void Delay20ms() //@11.0592MHz
{
unsigned char data i, j, k;
i = 2;
j = 32;
k = 60;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Init() //初始化函数
{
P1M0=0;
P1M1=0;
P3M0=0;
P3M1=0;
P5M0=0;
P5M1=0;//GPIO配置
EA=1;
ES=1;
ET0=1;
EX0=1;
EX1=1;
dat = 0;
}
void main()
{
Init();
while(1)
{
while(flag)
{
P54 = ~P54;
send_data(flag);
flag=0;
}
}
}
void ex0()interrupt 0
{
Delay20ms();
if(P32==0)
{
flag = 1;
}
}
void ex1()interrupt 2
{
Delay20ms();
if(P33==0)
{
flag = 2;
}
}
- function.h
#ifndef __FUNCTION_H__
#define __FUNCTION_H__
#include <STC8G.H>
#include <intrins.h>
sbit dat = P1^0;//数据发送端口
void Delay4ms(); //@11.0592MHz
void Delay302us(); //@11.0592MHz
void start();//同步码
void data_low();//发送数据0
void data_high();//发送数据1
void send_data(unsigned char flag); //发送数据函数;
#endif
- 列表项目
#include "function.h"
unsigned char addr_code[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char data_code1[4]={1,0,0,1};
unsigned char data_code2[4]={1,0,1,0};
void Delay302us() //@11.0592MHz
{
unsigned char data i, j;
_nop_();
_nop_();
i = 5;
j = 83;
do
{
while (--j);
}while (--i);
}
void Delay4ms() //@11.0592MHz
{
unsigned char data i, j;
_nop_();
_nop_();
i = 58;
j = 112;
do
{
while (--j);
} while (--i);
}
void start()//同步码
{
dat = 1;
Delay4ms();
dat = 0;
Delay4ms();
}
void data_low()//发送数据0
{
dat = 1;
Delay302us();
dat = 0;
Delay302us();
Delay302us();
Delay302us();
}
void data_high()//发送数据1
{
dat = 1;
Delay302us();
Delay302us();
Delay302us();
dat = 0;
Delay302us();
}
void send_data(unsigned char flag) //发送数据函数;
{
unsigned char num;
start();//发送同步码
for(num=0;num<20;num++)
{
if(addr_code[num]==1)
data_high();
else
data_low();
}
switch(flag)
{
case 1:
for(num=0;num<4;num++)
{
if(data_code1[num]==1)
data_high();
else
data_low();
}
break;
case 2:
for(num=0;num<4;num++)
{
if(data_code2[num]==1)
data_high();
else
data_low();
}
break;
}
}
碉堡了