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

📄 sent.c

📁 8051单片机用的315M射频发射及接收程序模块
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char	 

unsigned long datacap;  
uchar count,data_count;
uchar keyval;

sfr AUXR=0x8e;
sbit rfin=P2^7;
sbit rfout=P2^6;
sbit led=P1^0;
sbit key1=P1^7;
sbit key2=P1^6;
sbit key3=P1^5;
bit jsing;

void init();
uchar keyscan();
void getdata();
void send(uchar);
bit sync();
void delay(uint z)	 	 ;

void main()
{
	uchar m,n,t;
	init();
	while(1)
	{
	/*
		while(keyval)
		{	
			send(keyval);
			keyval=0;

		} */
		while(sync())
		{
			jsing=1;
			getdata();
			jsing=0;
			if(datacap==0x98008501)
			{
				led=0;
				for(m=255;m>0;m--)
					for(n=255;n>0;n--);
				led=1;
			}
			if(datacap==0x98008502)
			{
					for(t=2;t>0;t--)
					{	for(m=255;m>0;m--)
							for(n=255;n>0;n--);
						for(m=255;m>0;m--)
							for(n=255;n>0;n--);
						led=0;
						for(m=255;m>0;m--)
							for(n=255;n>0;n--);
						led=1;
					}
			}
			if(datacap==0x98008504)
			{
					for(t=3;t>0;t--)
					{	for(m=255;m>0;m--)
							for(n=255;n>0;n--);
						for(m=255;m>0;m--)
							for(n=255;n>0;n--);
						led=0;
						for(m=255;m>0;m--)
							for(n=255;n>0;n--);
						led=1;
					}
			}
			datacap=0x00;	 
		}	
		
	}

}

void init()
{
	jsing=0;
	datacap=0x00;
	keyval=0x00;
	count=0;
	data_count=0;
	AUXR=0x01;
	P1=0xff;
	P3=0xff;
//下面3行用于定义T0 工作于方式1(16位模式)
//	TMOD=0x01;	
//	TH0=(65536-100)/256;
//	TL0=(65536-100)%256;
//下面2行用于定义T0 工作于方式2(8位自动装入模式)
	TMOD=0x02;
	TH0=(256-100)%256;
	TL0=(256-100)%256;
//	IE=0x82;  //开总中断及时钟0中断
	IE=0x83;  //开总中断及外部0和时钟0中断
	PT0=1;
	TR0=1;	 //定时器0计时开始
	IT0=1;   //外部中断0为边沿(下降沿)触发
}


bit sync()
{
	count=0;
	while(!rfin);
	if((count<2)||(count>6))
	{
		return 0;//出错}
		
	}
	count=0;
	while(rfin);
	if((count<25)||(count>35))
	{
		return 0;//出错}
	}
	data_count=0;
	datacap=0;
	return 1;
}

void getdata()
{
	uchar Hlevel_bit,temp;
	temp=0x00;
	for(;data_count<32;data_count++)
	{
		count=0;
		while(!rfin);
		if((count<2)||(count>12))
			return ;//出错
		if(count<6)
			Hlevel_bit=0;//判断到0的高电平
		else //if(count<13)
			Hlevel_bit=1;//判断到1的高电平
		count=0;
		while(rfin);
		if((count<2)||(count>12))
			return ;//出错
		if(!Hlevel_bit)
		{
			if(count>6)
				datacap=datacap&0xfffffffe;//得到数据0		
		}
		else
		{
			if(count<7)
			 datacap=datacap|0x01;//得到数据1
		}

		if(data_count<31)
			datacap<<=1;
	}

	return;

}




 void send(uchar k)
 {
 	uchar temp;
	bit firstd,Cbit;
	count=0;
	rfout=1;
	while(count!=3);
	rfout=0;
	switch(k)
	{
		case 1:datacap=0x98008501;		 break;
		case 2:datacap=0x98008502;	  break;
		case 3:datacap=0x98008504;break;
	}

	firstd=1;
	for(temp=32;temp>0;temp--)
	{
		Cbit=0x80000000&datacap;
		datacap<<=1;
		if(firstd)	  
		{
			while(count!=0x21);
			rfout=1;
			count=0x00;
			firstd=0;
		}
		if(Cbit)
		{
			while(count!=0x09);
			rfout=0;
			while(count!=0x0c);
			rfout=1;
			count=0;
		}
		if(!Cbit)
		{
			while(count!=0x03);
			rfout=0;
			while(count!=0x0c);
			rfout=1;
			count=0;
		}
	}
	count=0;

 }

uchar keyscan()
{
	if(key1==0)
	{
		//delay(5);
		if(key1==0);
		while(!key1);
		//delay(5);
		while(!key1);
		return 1;
	}

	if(key2==0)
	{
		//delay(5);
		if(key2==0);
		while(!key2);
		//delay(5);
		while(!key2);
		return 2;
	}

	if(key3==0)
	{
		//delay(5);
		if(key3==0);
		while(!key3);
		//delay(5);
		while(!key3);
		return 3;
	}
	return 0;
}

void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

 void timer0() interrupt 1
{
//	TH0=(65536-100)/256;
//	TL0=(65536-100)%256;
	count++;	
}

void ext0() interrupt 0 using 1
{
	EX0=0;
	if(!jsing)
	{	
		while(keyval=keyscan())
	 		send(keyval)  ;
		keyval=0;
	 }
	 EX0=1;

}  

⌨️ 快捷键说明

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