C语言遥控器程序,学习型遥控器C语言.doc

/*********************************************************************/

// remote.c

// 学习型遥控器

// 使用keil c51 2004.10.12

/*********************************************************************/

//使用AT89C52单片机,12MHZ晶振,

//

//#pragma src(E:\remote.asm)

#include "reg51.h"

#include "intrins.h" //_nop_();延时函数用

//

#define uchar unsigned char

#define uint unsigned int

//

sbit studylamp=P1^6; //学习状态指示灯

sbit lamp=P1^7; //发射指示灯

sbit studykey=P3^2; //学习键(中断口)

sbit remotein=P3^4; //遥控信号输入口

sbit remoteout=P3^5; // 遥控输出口

sbit txkey=P1^0 ; //发射键

//

//

uint i,j,m=255,n,k,s;

uchar idata remotedata[206];//存肪冲宽度数据用

uint head; //存起始位用

uint remdata;

//

//

/*********1毫秒延时程序**********/

delay1ms(uint t)

{

for(i=0;i0;i--){;}

remoteout=0;ET1=0;TR1=0;

n=0;

while(1)

{

if(remotedata[n]==0x00){delay1ms(10);break;}//数据为0结束

for(i=remotedata[n];i>0;i--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}

lamp=~lamp;n++;//偶地址不发脉冲

//

ET1=1;TR1=1; //奇地址发调制脉冲

for(i=remotedata[n];i>0;i--){;}

remoteout=0;ET1=0;TR1=0;n++;

}

}

}

//

//

/***********主函数***************/

main()

{

clearmen(); //初始化

while(1)

{

keywork(); //按键扫描

}

}

//

//

/*********40KHZ发生器***********/

//定时中断T1

void time_intt1(void) interrupt 3

{

remoteout=~remoteout;

}

//

//

/***********学习函数 ***********/

//外中断0

void intt0(void) interrupt 0

{

ET1=0;TR1=0;EX0=0;EA=0;

head=0;studylamp=1;lamp=0;

while(studykey==0); //等待键释放

while(remotein==1); //等待遥控码输入

head=0; //读入起始位

while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();head++;}

n=0;remdata=0x0000;

while(1)

{

while(remotein==1){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;}

if(remdata>m) //高电平>5毫秒退出

{remotedata[n]=0x00;EX0=1;EA=1;goto end;}

remotedata[n]=remdata;n++; //存高电平脉宽数据

remdata=0x0000; //脉宽计数器清零

while(remotein==0){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;} //低电平计数

remotedata[n]=remdata;n++;remdata=0x00;//存低电平脉宽数据

}

end: lamp=1;studylamp=0;

}

//

//*********************结束**************************//

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值