⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cjcx.txt

📁 红外遥控电子密码锁主机程序
💻 TXT
字号:
#include <regx52.h>
#include <stdlib.h>
#include "encrypt.h"
#include "cmd.h"
#include "comm.h"
#include "24cxx.h"
#include "password.h"
/*------------------------------------------------
AT89S5X SFR定义(REGX52.h中未定义)
--------------------------------------------------*/
sfr AUXR = 0x8e;
sfr WDTRST = 0xa6;
sfr WDTPRG =0xA7;
sfr16 TIMEER2 = 0xcc;
sfr16 RCAP2 = 0xca;
#define WDIDLE (1<<4)

sbit KEY_START=P3^3;
sbit LIGHT_REG_OK=P3^7;
sbit OUT_38K =P2^7;

const DWORD id=15600;
extern uchar RecBuf[7];
extern uchar WrIdx;
extern bit DataOK;

#define FRAME_HEAD_SLAVE          0x23
uchar SndBuf[7]={'\0'};
uchar  *RecCmd=(uchar *)&RecBuf[1];
uchar  *SndCmd=(uchar *)&SndBuf[1];
DWORD rand_num;
DWORD  *RecData=(DWORD *)&RecBuf[2];
DWORD  *SndData=(DWORD *)&SndBuf[2];
bit   isConnected;

uchar code  my_num=0;

sbit S1=P1^7;
sbit S2=P1^6;
sbit S3=P1^5;
sbit S4=P1^4;
sbit S5=P1^3;
sbit S6=P1^2;
sbit S7=P1^1;
sbit S8=P1^0;
uchar time=0;
void ClrWdt(void)//喂狗
{
WDTRST = 0x1e;//89s52内狗
WDTRST = 0xe1;//89s52内狗
}
void delay(void)
{
 uchar i,j;
 for(i=100;i>0;i--)
   for(j=100;j>0;j--);
}
void send_data(void)
{
REN = 0; //关接受
send_string(SndBuf,6);
REN = 1; //允许接受
}
void init(void)
{
 LIGHT_REG_OK=0;
 isConnected =0;

 T2CON = 0x00; // 16 Bit Auto-Reload Mode
 RCAP2H = (65535-32767)/256; // 重装值
 RCAP2L = (65535-32767)%256;
 TH2 = (65535-32767)/256; 
 TL2 = (65535-32767)%256;
 ET2 = 1;
 TR2 = 1;
 SndBuf[0]=FRAME_HEAD_SLAVE;
 TMOD |=0x02;
 TH0= 0xF4;
 ET0 =1;
 TR0 =1;
 init_comm();
 EA =1;
 P1=0;
}
void main(void)
{
 init();
 send_string("Hello",5);
 AUXR |= WDIDLE;
PCON |= GF0_ | IDL_;//喂疯狗(GF0_=1)并进入空闲状态(IDL_=1)
 WDTPRG |=0x06;
 ClrWdt();
while(1)
 {
  if(!isConnected)
    {
	bit Key=0;
	if(KEY_START==0)
	   {
	   delay();
	   if(KEY_START==0)
	     {
		 Key=1; 		 
		 }
	   while(KEY_START==0);/*ClrWdt();;*/
	   }
	if(Key)
	  {
	  *SndCmd=CMD_COME;
	  send_data();	
	  S1=1;
	  }
	}
   ClrWdt();
if(time>=150) //150*32767*1.08 us	=5.3s
     {
	 time =0;
	 send_string("idle",4);
	 ET0 = 0;
	 ET2 = 0;
	 EX0 = 1;
	 EX1 = 1;
	 WrIdx = 0;
	 ClrWdt();
	 PCON |= IDL_;
	 }
  if(DataOK)
    { 
	 time=0;
	 switch(*RecCmd)
	 {
	 case CMD_WHO:
	      *SndData=id;
		  Encrypt(&SndBuf[2],4,*RecData,RecBuf[5]&0x07);
		  *SndCmd=CMD_ID;
		  send_data();
		  S2=1;
		  break;
	 case CMD_PASSWORD:
	      *SndData=ReadPass();
		  Encrypt(&SndBuf[2],4,*RecData,RecBuf[5]&0x07);
	      *SndCmd=CMD_CRYPT_PASSWORD;
		  send_data(); 
		  S3=1;     
		  break;
	 case CMD_NEW_PASSWORD:
	      {
	      *SndCmd=CMD_REPLY_PASSWORD;
		  *SndData=*RecData;
		  SndBuf[2]	|= (my_num<<4);
		  send_data();
		  S4=1;
		  break;
		  }
	 case CMD_OVER:
	      WritePass(*SndData);
		  P1=0;
		  break;
	 default:
	      break;
	  }
	DataOK=0;	
	}
 }
}
void t0(void) interrupt 1 using 0
{
 OUT_38K=! OUT_38K;
}
void t2(void) interrupt 5 using 0
{
  TF2 =0;
  time++;
}
void int0(void) interrupt 0 using 0
{
 		ET0 = 1;
	    ET2 = 1;
		EX0 = 0;
	    EX1 = 0;
}
void int1(void) interrupt 2 using 0
{
 		ET0 = 1;
	    ET2 = 1;
		EX0 = 0;
	    EX1 = 0;
}





















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -