找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6244|回复: 3
打印 上一主题 下一主题
收起左侧

红外接收程序问题!!帮忙看看

[复制链接]
跳转到指定楼层
楼主
ID:8704 发表于 2009-6-5 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include <reg52.h>
#include <lcd.h>
#include <epprom.h>

unsigned int temp_low_pulse1;
unsigned int temp_low_pulse0;
unsigned int temp_high_pulse1;
unsigned int temp_high_pulse0;
unsigned int count;
unsigned char write_enable;

sbit led8=P0^7;
sbit key=P0^0;
sbit key1=P0^1;
sbit key2=P0^2;


/*********      延时1S     ******************************************/
void delay_1s()
{
 unsigned int i,j;
 for(i=5;i>0;i--)
  for(j=110;j>0;j--);
}


void initial()
{
 EA=1; //开启总中断
 EX1=1; //开启外部中断1
 IT1=1; //外部中断1为下降沿有效
 TMOD=0x19; //定时器1,2 方式为1,且T0 GATE位有效
 TH0=0x00;
 TL0=0x00;
 TH1=0x00;
 TL1=0x00;
 count=0;
}

void main()
{
 unsigned char temp,temp_ge,temp_shi,temp_bai,num_ge,num_shi,num_bai,num_qian;
 unsigned int  count_qian,count_bai,count_shi,count_ge,num;
 initial();
 init();
 lcd_int();


 num=0;
 while(1)
 {
  if(key==0)
  {

   num++;
   if(num==2048)
   num=0;
   while(!key);
  }
  if(key1==0)
  {
  

   if(num==0)
    num=2048;
     num--;
   while(!key1);
  }
 if(count>=2048)
  count=0;
 temp=read_add(num);
 temp_bai=temp/100;
 temp_shi=temp%100/10;
 temp_ge=temp%10;
 num_qian=num/1000; 
 num_bai=num%1000/100;
 num_shi=num%100/10;
 num_ge=num%10;
 count_qian=count/1000;
 count_bai=count%1000/100;
 count_shi=count%100/10;
 count_ge=count%10;
 
 write_com(0x80); 
 write_date(0x30+temp_bai);
 write_com(0x81); 
 write_date(0x30+temp_shi);
 write_com(0x82); 
 write_date(0x30+temp_ge);
 write_com(0x84); 
 write_date(0x30+num_qian);
 write_com(0x85); 
 write_date(0x30+num_bai);
 write_com(0x86); 
 write_date(0x30+num_shi);
 write_com(0x87); 
 write_date(0x30+num_ge);
 write_com(0x89); 
 write_date(0x30+count_qian);
 write_com(0x8a); 
 write_date(0x30+count_bai);
 write_com(0x8b); 
 write_date(0x30+count_shi);
 write_com(0x8c); 
 write_date(0x30+count_ge);
 if (write_enable==1)
 {
 write_add(count,5);   //将红外信号的低电平的值写入储存器COUNT地址内
 delay_1s();
 write_add(count+1,6);   //将红外信号的低电平的值写入储存器COUNT+1地址内 
 delay_1s();
 write_add(count+2,7);  //将红外信号的高电平的值写入储存器COUNT+2地址内
 delay_1s();
 write_add(count+3,8);  //将红外信号的高电平的值写入储存器COUNT+3地址内
 delay_1s();
 write_enable=0;
 }
 }


}

void int1() interrupt 2
{
 
  
    EX1=0;          //关外部中断1
 TR0=0;          //关闭定时器0
 TR1=0;          //关闭定时器1
 temp_low_pulse1=TH1-TH0;     //将TH1减去TL0的值(即红外信号的低电平)赋予temp_low_pulse1
 temp_low_pulse0=TL1-TL0;         //将TL1减去TL0的值(即红外信号的低电平)赋予temp_low_pulse0
 temp_high_pulse1=TH0;      //将TH0值(即红外信号的高电平值)赋予temp_high_pulse1
 temp_high_pulse0=TL0;      //将TL0值(即红外信号的高电平值)赋予temp_high_pulse0
 write_enable=1;
 TH0=0x00;         //TH0清零
 TL0=0x00;         //TL0清零
 TH1=0x00;         //TH1清零
 TL1=0x00;         //TL1清零
 TR0=1;          //启动定时器0
 TR1=1;          //启动定时器1
 led8=!led8;
 count=count+4; 
 EX1=1;          //开外部中断1
 

}

 

本人编写了一个红外接收的程序,红外接收管接收端接单片机中断1,接收的红外波形以后,开启T0,T1定时器,对红外波形的高低电平及时,其中中断下降沿开启T1计时,电平升高后开启T0计时,T1-T0的时间就是红外波形的低电平时间,我利用AT24C16芯片保存定时时间,根据写的程序,在两次中断间隙时间过短了,没有足够的时间写进存储芯片,怎么解决啊?

 

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:8704 发表于 2009-6-10 11:34 | 只看该作者

回复

使用道具 举报

板凳
ID:16415 发表于 2009-8-28 11:32 | 只看该作者
 顶一下,我也在弄红外呢呵呵
回复

使用道具 举报

地板
ID:16651 发表于 2009-8-28 20:08 | 只看该作者
不知道你的问题解决了吗  我前一段时间也谢了一个简单的红外程序  传到http://sjcxlab.5d6d.com/thread-46-1-1.html  这里了  有兴趣的可以去看一下~~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表