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

📄 remote.c

📁 简易GPS定位信息显示系统的设计程序
💻 C
字号:
/*********************************************************************/
//                         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;i<t;i++)
   for(j=0;j<120;j++)
   ;
}
//
//
/***********初始化函数**********/
clearmen()
{
studylamp=0;           //关学习灯
lamp=0;                //关发射指示
remoteout=0;           //关遥控输出
remotein=1;            //
for(i=0;i<206;i++)     //清内存
{remotedata[i]=0x00;}
IE=0x00;
IP=0x01;
TMOD=0x22;             //8位自动重装模式
PCON=0X00;
TH1=0xf3;              //40KHZ初值
TL1=0xf3;
IT0=1;
EX0=1;                //外中断允许
EA=1;                 //开总中断
}
//
//
/**********键功能函数************/
keywork()
{
 if(txkey==0)
 {
    while(txkey==0);     //等待键释放
    ET1=1;TR1=1;         //发起始位 
    for(i=head;i>0;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;
}
//
//*********************结束**************************//

⌨️ 快捷键说明

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