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

📄 lyx_dianhua1029.c

📁 单片机远程电话遥控
💻 C
字号:
/*制作简易电话智能遥控器  源程序(具有在线修改密码功能)  作者:林元新 2006年10月*/
#include <REG2051.H> 
static bit OP;
unsigned char count_command,sound_flag,count_delay,endcount,count_delay0,i,j;
unsigned char command[7],passer[3],passer_flag;
void sound(unsigned char flag);

void main(void) 
{  
P3=0;
P3_0=0;
P1=0;
P1_0=1;
P1_1=1;
P1_2=1;
P1_3=1;
P3_2=1;
P3_4=1;
P1_7=1;
P1_5=1;
P1_6=1;
P1_4=1;
count_command=sound_flag=count_delay=endcount=count_delay0=0;
passer_flag=0;
passer[0]=1;
passer[1]=2;
passer[2]=3;

EA = 1; //允许CPU中断 
IT0=1;
EX0=0;

TMOD=0x15;
TH1=0x00;
TL1=0x00;
ET1 = 1;
TR1=1;

TH0=0x00;
TL0=0x00;
TR0=1;
//以上初始化

  do{

if(TL0>80 && P3_4==1){   //振铃检测,模拟摘挂机

P3_1=1;
TR0=0;
count_delay=0;
count_delay0=0;
TH0=0x00;
TL0=0x00;
for(i=0;i<200;i++){for(j=0;j<200;j++){}}
for(i=0;i<200;i++){for(j=0;j<200;j++){}}
for(i=0;i<200;i++){for(j=0;j<200;j++){}}
for(i=0;i<200;i++){for(j=0;j<200;j++){}}
//以上线路延时
sound(1);
IE0=0;
EX0=1;

}

if(count_command==5&&passer_flag==0){    //比较判断控制指令的密码位、设备位、状态位
count_command=0;

if(command[1]==passer[0]&&command[2]==passer[1]&&command[3]==passer[2])
{

if(command[4]==1){if(command[5]==10){P1_5=1;sound(1);}else if(command[5]==1) {P1_5=0;sound(1);}}
else if(command[4]==2){if(command[5]==10){P1_7=1;sound(1);}else if(command[5]==1) {P1_7=0;sound(1);}}
else if(command[4]==3){if(command[5]==10){P1_4=1;sound(1);}else if(command[5]==1) {P1_4=0;sound(1);}}
else if(command[4]==4){if(command[5]==10){P1_6=1;sound(1);}else if(command[5]==1) {P1_6=0;sound(1);}}
else if(command[4]==10&&command[5]==10){passer_flag=1;sound(1);}//启动在线修改密码
else sound(0);

}
else sound(0);

for(i=0;i<10;i++){for(j=0;j<10;j++){}}

IE0=0;
EX0=1;
}

else if(count_command==3&&passer_flag==1){  //在线修改密码
count_command=0;
passer_flag=0;
passer[0]=command[1];
passer[1]=command[2];
passer[2]=command[3];
sound(1);
for(i=0;i<10;i++){for(j=0;j<10;j++){}}
IE0=0;
EX0=1;

}



}while(1);


} 


void EX0_service(void) interrupt 0      //读取4位有效数据      
{

count_delay=0;
count_delay0=0;

count_command++;

command[count_command]=P1;
command[count_command]=command[count_command]<<4;
command[count_command]=command[count_command]>>4;

if(count_command==5&& passer_flag==0){EX0=0;}
if(count_command==3&& passer_flag==1){EX0=0;}

}

void T1_service(void) interrupt 3    //信号音提示,定时挂机       
{
TH1=0xff;
TL1=0x00;
count_delay0++;
if(count_delay0>253){count_delay++;count_delay0=0;}
if(count_delay>250){
count_delay=0;
TH0=0x00;
TL0=0x00;
P3_0 = 0;
P3_1 = 0;
EX0=0;
TR0=1;

}


if (sound_flag==1){ OP=~OP;}
else  { OP = 0; }
P3_0 = OP;

}


void sound(unsigned char flag)   //产生不同信号音提示
{ 

  endcount=200;
  sound_flag=1;
  count_delay0=0;
  do{}while(count_delay0<endcount);
  
  endcount=200;
  sound_flag=1;
  count_delay0=0;
  do{}while(count_delay0<endcount);

  endcount=200;
  sound_flag=0;
  count_delay0=0;
  do{}while(count_delay0<endcount);
    
  endcount=200;
  if(flag==0)sound_flag=0;
  else sound_flag=1;
  count_delay0=0;
  do{}while(count_delay0<endcount);
    
  endcount=200;
  if(flag==0)sound_flag=0;
  else sound_flag=1;
  count_delay0=0;
  do{}while(count_delay0<endcount);
  
  sound_flag=0;
  P3_0 = 0;
  
}







⌨️ 快捷键说明

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