这个程序不是我写的
这是发送端:#include <STC12C2052AD.H> //单片机头文件
sbit OUT = P1 ^ 0;
sbit LED = P1 ^ 7; //
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?);
参 数:1~65535(参数不可为0)
返回值:无
结 果:占用CPU方式延时与参数数值相同的毫秒时间
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/**********************************************************************************************/
void ST (void){//开始码
OUT = 1; //
DELAY_MS (6);
OUT = 0; //
DELAY_MS (4);
}
/**********************************************************************************************/
void BT (bit s){//数据位码
OUT = 1;
DELAY_MS (1);
OUT = 0;
DELAY_MS (1);
if(s){
DELAY_MS (1);
}
}
/**********************************************************************************************/
void MT (unsigned char a){//字节发送
unsigned char i,n;
for(i=0;i<8;i++){
n = a & 0x80;//1000 0000
a = a << 1;//0000 1010
if(n == 0x80){
BT(1);
}else{
BT(0);
}
}
}
/**********************************************************************************************/
void END (void){//结束码
MT(0x00); //
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:主函数
调 用:无
参 数:无
返回值:无
结 果:程序开始处,无限循环
备 注:
/**********************************************************************************************/
void main (void){
while(1){
ST(); //
MT(0x93); // 0x05 = 0000 0101
MT(0x94); // 0x05 = 0000 0101
MT(0x95); // 0x05 = 0000 0101
MT(0x96); // 0x05 = 0000 0101
END(); //
DELAY_MS (1000);
}
}
/**********************************************************************************************/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#include <STC12C2052AD.H> //单片机头文件
sbit IN =P3^7;
sbit LED=P1^7;
unsigned char Ir_Buf[4]; //用于保存解码结果
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?);
参 数:1~65535(参数不可为0)
返回值:无
结 果:占用CPU方式延时与参数数值相同的毫秒时间
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************/
unsigned int Ir_Get_Low()
{
TL1=0;
TH1=0;
TR1=1;
while(IN == 0 && (TH1&0x80)==0);
TR1=0;
return TH1*256+TL1;
}
/*********************************************************************************************/
unsigned int Ir_Get_High()
{
TL1=0;
TH1=0;
TR1=1;
while(IN ==1 && (TH1&0x80)==0);
TR1=0;
return TH1*256+TL1;
}
/*********************************************************************************************/
void main(void){
unsigned int temp;
unsigned char i,j;
TMOD=0x11;
while(1){
restart:
while(!IN);
temp=Ir_Get_High();
if(temp<5000 || temp>8000){
goto restart;
}
temp=Ir_Get_Low();
if(temp<3000 || temp>6000){
goto restart;
}
for(i=0;i<4;i++){ //4个字节
for(j=0;j<8;j++){ //每个字节8位
temp=Ir_Get_High();
if(temp<500 || temp>1500){
goto restart;
}
temp=Ir_Get_Low();
if(temp<500 || temp>2500){
goto restart;
}
Ir_Buf[i]<<=1;
if(temp>2000){
Ir_Buf[i]|=0x01;
}
}
}
if(Ir_Buf[3]==0x96){LED=~LED;}
}
}
/*********************************************************************************************/
一周热门 更多>