本设计包含两个51单片机和一个proteus自带的红外组件IRLINK来模拟实现红外通信:1)一个单片机模拟发送密码信号;
2)一个单片机接收密码信号并通过电磁线圈控制锁的开或者关;
3)使用proteus自带的红外组件IRLINK的发射端模拟第一个单片机发射红外信号;
4)使用proteus自带的红外组件IRLINK的接收端模拟接红外信号并经过光电转换成电信号送入第二个单片机(红外电子密码锁的控制器)
以下是电路图的设计:
电路图设计
以下是仿真运行结果:
仿真
以下是附件的文件清单:包括电路图和keil程序
以下是红外通信的部分程序,感兴趣请下载附件:
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit LOCK=P2^0; //开锁控制接口
sbit IRIN=P3^2; //红外通讯与单片机的接口,采用外部中断0控制
u8 IrValue[4]; //实际只用4位
u8 code1=0x00; //存放原始关锁密码:00000000;
u8 code2=0xff; //存放原始开锁密码:11111111;
u8 Time; //存放中间变量
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函数名 : IrInit()
* 函数功能 : 初始化红外线接收
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void IrInit()
{
IT0=1;//下降沿触发
EX0=1;//打开中断0允许
EA=1; //打开总中断
IRIN=1;//初始化端口
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
IrInit();
while(1)
{
if(IrValue[2] == code1) LOCK=1; //关门
if(IrValue[2] == code2) LOCK=0; //开门
}
}
/*******************************************************************************
* 函数名 : ReadIr()
* 函数功能 : 读取红外数值的中断函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void ReadIr() interrupt 0
{
u8 j,k;
u16 err;
Time=0;
. . . . . .
全部资料51hei下载地址:
Infra-code Lock.rar
(60.62 KB, 下载次数: 54)
|