本設計包含兩個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, 下載次數: 56)
2020-9-24 02:33 上傳
點擊文件名下載附件
全套程序
|