📄 lyx_dianhua1029.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 + -