|
|
楼主 |
发表于 2017-4-5 23:17:43
|
显示全部楼层
更新代码,具体还是看萝莉的注释,我只是在萝莉的基础上改进了一下,高三时间紧,就不做过多的说明了,重要的说明已经加在程序中
发射程序:
#include<reg51.h>
sbit Key1=P3^0; //按键与发射定义
sbit Key2=P3^1;
sbit Key3=P3^2;
sbit Key4=P3^3;
sbit Key5=P3^4;
sbit TX=P3^5;
#define uchar unsigned char
#define uint unsigned int
uchar Key1_old; //定义变量
uchar Key2_old;
uchar Key3_old;
uchar Key4_old;
uchar Key5_old;
uchar action1;
uchar action2;
uchar action3;
uchar action4;
uchar action5;
void Delay10ms() //@12.000MHz
{
unsigned char i, j;
i = 117;
j = 184;
do
{
while (--j);
} while (--i);
}
void Delay13us() //@12.000MHz
{
unsigned char i;
i = 36;
while (--i);
}
void TX_time(uint n) //发射程序,这个具体看萝莉的注释
{
while(n)
{
TX=0;
Delay13us();
TX=1;
Delay13us();
n=n-1;
}
}
void Key_select() //进行按键选择,判断是哪个按键按下
{
if(Key1==1)
{
if(Key1_old==0)
{action1=1;}
}
Key1_old=Key1;
if(Key2==1)
{
if(Key2_old==0)
{action2=1;}
}
Key2_old=Key2;
if(Key3==1)
{
if(Key3_old==0)
{action3=1;}
}
Key3_old=Key3;
if(Key4==1)
{
if(Key4_old==0)
{action4=1;}
}
Key4_old=Key4;
if(Key5==1)
{
if(Key5_old==0)
{action5=1;}
}
Key5_old=Key5;
}
main()
{
Key1_old=1; //初始化
Key2_old=1;
Key3_old=1;
Key4_old=1;
Key5_old=1;
while(1)
{
Delay10ms(); //系统周期10ms
Key_select(); // 按键选择
if(action1==1) //不同的按键按下对应的发射时间不同
{
action1=0;
TX_time(384); //通过改变括号里的数来改变发射时间
}
if(action2==1)
{
action2=0;
TX_time(577);
}
if(action3==1)
{
action3=0;
TX_time(731);
}
if(action4==1)
{
action4=0;
TX_time(900);
}
if(action5==1)
{
action5=0;
TX_time(1076);
}
}
}
接收程序:
#include <reg51.h>
sbit RX=P3^4; //定义接收与LED引脚
sbit L1=P3^0;
sbit L2=P3^1;
sbit L3=P3^2;
sbit L4=P3^3;
sbit L5=P3^5;
#define uchar unsigned char
#define uint unsigned int
uint time;
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
void Key_select() //进行按键选择,不同的时间对应不同的按键按下
{ //,对不同的按键做出不同的处理
if(time>8&&time<12)
{L1=~L1;}
if(time>13&&time<17)
{L2=~L2;}
if(time>18&&time<22)
{L3=~L3;}
if(time>23&&time<27)
{L4=~L4;}
if(time>28&&time<32)
{L5=~L5;}
}
main()
{
while(1)
{
if(RX==0) //如果收到信号,time清零,重新计时
{
time=0;
while(RX==0) //收到信号时循环计时
{
Delay1ms();
time=time+1;
}
Key_select(); //按键选择程序
}
}
}
|
| |