📄 send43176.c
字号:
#include <W79E825.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP() _nop_()
sbit FSK=P0^0;
sbit S_SCK=P1^7;
sbit S_SDI=P0^3;
sbit S_nSEL=P1^6;
sbit S_nIRQ=P0^2;
sbit LED1=P0^1;
sbit LED0=P0^6;
sbit KEY=P1^2;
sbit GUN=P1^1;
uchar data txbuf[2];
uchar data guncount;
uchar data keydelaycnt;
uint data time;
//=========================
void delayus( uint us )
{
uint i;
while( us-- )
{
i=2;
while( i-- )
{
NOP();
}
}
}
//=============================
void rfm02_init( void )
{
S_nSEL=1;
S_SDI=1;
S_SCK=0;
FSK=0;
LED0=1;
LED1=1;
}
//============================
//=========================
void write0( void ) //==私有函数==
{
S_SDI=0;
S_SCK=0;
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
delayus(20);//
S_SCK=1;
NOP();
}
//========================
void write1( void ) //==私有函数==
{
S_SDI=1;
S_SCK=0;
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
delayus(20);//
S_SCK=1;
NOP();
}
//=============================
void writefskbyte(uchar dat)
{
uchar i=8;
S_nSEL=1;
while(i--)
{
while(!S_nIRQ);
while(S_nIRQ);
if(dat&0x80)
FSK=1;
else
FSK=0;
dat=dat<<1;
}
}
//=========================
void writecmd( uint cmd )
{
uchar i=16;
S_SCK=0;
S_nSEL=0;
delayus(20);//
while(i--)
{
if(cmd&0x8000)
write1();
else
write0();
cmd=cmd<<1;
// delayus(20);//
}
S_SCK=0;
S_nSEL=1;
}
//=========================
//========================
void delayms(uint ms)
{
uchar i;
while(ms--)
{
i=35;
while(i--)
{
delayus(1);
}
}
}
//=======================
void int1(void) interrupt 2 using 1
{
NOP();
time=0;
}
//=======================
void time0(void) interrupt 1 using 1
{
time++;
}
//=======================
void main(void)
{
uint chksum=0;
uchar j;
guncount=0;
keydelaycnt=0;
P0M1 = 0x04; //#00000100B
P0M2 = 0xfb; //#11111011B
P1M1 = 0x34; //#00110100B
P1M2 = 0xcb; //#11001011B
GUN=0;
for(j=0;j<2;j++)
{
txbuf[j]=0x10;
}
TMOD=0x01;
TH0=0x00;
TL0=0x00;
time=0;
rfm02_init();
delayus(20);
writecmd(0xcc00);
delayus(20);
writecmd(0x8a61);
// writecmd(0x9a61);
delayus(20);
// writecmd(0xa060); //430.24
// writecmd(0xa100); //430.64
// writecmd(0xa180); //430.96
writecmd(0xa2c0); //431.76
delayus(20);
writecmd(0xd040);
delayus(20);
writecmd(0xc823);
delayus(20);
writecmd(0xc220);
delayus(20);
writecmd(0xc000);
delayus(20);
//============================
writecmd(0xcc00);
delayus(20);
writecmd(0x8a61);
// writecmd(0x9a61);
delayus(20);
// writecmd(0xa060); //430.24
// writecmd(0xa100); //430.64
// writecmd(0xa180); //430.96
writecmd(0xa2c0); //431.76
delayus(20);
writecmd(0xd040);
delayus(20);
writecmd(0xc823);
delayus(20);
writecmd(0xc220);
delayus(20);
writecmd(0xc000);
//===========================
KEY=1;
TR0=1;
EA=1;
ET0=1;
IT1=1;
EX1=1;
while(1)
{
if(time==900)
{
LED1=0; //掉电指示
TR0=0;
ET0=0;
PCON=PCON|0x02; //掉电状态
LED1=1;
TR0=1;
ET0=1;
time=0;
}
if(!KEY)
{
LED0=0;
delayms(5);
if(!KEY)
{
GUN=1; //激光头亮
writecmd(0xC038); //启动发射
writefskbyte(0xAA); //前导码
writefskbyte(0xAA); //前导码
writefskbyte(0xAA); //前导码
writefskbyte(0x2D); //同步码高字节
writefskbyte(0xD4); //同步码低字节
chksum=0;
for(j=0;j<2;j++)
{
writefskbyte(txbuf[j]);
}
writefskbyte(0xAA); //多发一个无效字节,确保接收正确
writecmd(0xC000);
delayms(5);
guncount++;
if(guncount<16)
{
for(j=0;j<2;j++)
{
txbuf[j]+=1;
}
}
else
{
txbuf[0]=txbuf[1]=0x10;
guncount=0;
}
delayms(130);
GUN=0; //激光头灭
LED0=1;
while(!KEY);
}
}
delayms(10);
}
}
//===============================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -