搜索
bottom↓
回复: 4

遥控器有三个按键,用红外发射,主机采用51接收,用哪个型号的芯片好?能不能给点建议?

[复制链接]

出0入0汤圆

发表于 2006-12-15 14:51:01 | 显示全部楼层 |阅读模式
小弟这两天要做个控制马达的电路,控制部分做好了,没想到,老板要用红外线控制。也就是三个按键,由于对红外不太了解,所以求助各位,问题如下:(要求>5M)



1、发射电路采用哪种芯片?PT2221我感觉太浪费了,因为只要三个键

2、接收端用51(AVR老板说太贵),接收头怎样接?用不用放大电路等等?



能提供一点红外线的资料也好?谢谢了

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2006-12-16 16:57:10 | 显示全部楼层
一体化接受头,一端接地,一端接电源,一端就是整形后的方波输出了.内部已经整形,输出的不是0(有信号),就是vcc(没信号),放大电路就是多余.不过这种接收头一个的价格是2元.批量不清楚.

要节省成本就用普通的红外线接收管,需要放大和整形.

mega8不是很贵,深圳这边300个的价格在5(元/个) 以内.要便宜,用台湾的cpu吧,otp裸片在几毛钱,资源又多,不过量小的话估计拿不到货,并且很难开发.

发射和接收都可以采用cpu.

但也可以都采用专用ic.比如pt2267,pt2272就是一对的.

但如果系统控制部分已经有处理器了,为什么不在上面做?

其实发射器不应该自己做.定做的成本更低.

出0入0汤圆

 楼主| 发表于 2006-12-23 10:00:43 | 显示全部楼层
太谢谢janue 了,这两天很忙,所以也没有上网,很感谢你的回答!



这两天一直被一个问题困扰,就是接收的红外信号是乱码,我用红外接收,LCD1206作显示,可并不行,网上的我也看了,但我想用我自已的方法试下,理论上讲应该没有问题,我已排错了两天,就是找不到毛病,希望各位高手帮我分析一下,





在线等待!---------------------------------------------------





#include<reg52.h>



#define uchar unsigned char

#define uint  unsigned int



sbit int0=P3^2;                                                        //定义INT0为红外接收引脚

sbit led=P1^0;



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

sbit enable=P2^2;

sbit rs=P2^0;

sbit rw=P2^1;

uchar temp=0;

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



       

                               

uchar temp_shu[]={0,0,0,0};  //接收的32位存放地址







uchar data_error=5;                                                //数据接收错误或按键重复按下时data_error>3,清0所有接收的数据

uchar rev_num=0;                                                //接收的数据计数,>34表示接收完毕

uchar rev_data=0;                                                //接收到的数据



uchar num_8=0,num=0;





uchar i=0;

                                       

uchar scan_change=0;



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

void initial (void);

void cls (void);

void busy (void);

void write (void);

void writedata (void);

void delay (uchar m);



void delay_21_2us (uint k);

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



void main(void)

{

        P0=P1=P2=P3=0xff;

        initial();

        cls();

        TMOD=0x11;                                                                        //T0、T1为16为定时器

        TCON=0x01;                                                                        //INT0为低电平触发

        IP  =1001;                                                                        //设定INT0为高优先级                       

        TH1=0xc5;        //15ms

        TL1=0x68;

        EA=1;

        ET1=1;



        EX0=1;

        TR1=1;                                                                                        //启动定时器1--15MS

        while(1)

        {

                if(scan_change)                                        //显示接收的32位编码

                {

                                EA=0;

                                scan_change=0;

                                temp=0x80;

                                write();

                                temp=(temp_shu[0]/100+0x30);

                                writedata();

                                temp=0x81;

                                write();

                                temp=((temp_shu[0]%100)/10+0x30);

                                writedata();

                                temp=0x82;

                                write();

                                temp=((temp_shu[0]%100)%10+0x30);

                                writedata();

                                               

                                temp=0x83;

                                write();

                                temp=(temp_shu[1]/100+0x30);

                                writedata();

                                temp=0x84;

                                write();

                                temp=((temp_shu[1]%100)/10+0x30);

                                writedata();

                                temp=0x85;

                                write();

                                temp=((temp_shu[1]%100)%10+0x30);

                                writedata();



                                temp=0x86;

                                write();

                                temp=(temp_shu[2]/100+0x30);

                                writedata();

                                temp=0x87;

                                write();

                                temp=((temp_shu[2]%100)/10+0x30);

                                writedata();

                                temp=0x88;

                                write();

                                temp=((temp_shu[2]%100)%10+0x30);

                                writedata();



                                temp=0x89;

                                write();

                                temp=(temp_shu[3]/100+0x30);

                                writedata();

                                temp=0x8a;

                                write();

                                temp=((temp_shu[3]%100)/10+0x30);

                                writedata();

                                temp=0x8b;

                                write();

                                temp=((temp_shu[3]%100)%10+0x30);

                                writedata();

                               

                                led=~led;

                                EA=1;

                                EX0=1;

                }

        }

}



void int0_1()interrupt 0 using 1                        //外部中断、低电平触发

{

        data_error=0;                        //每次中断时清0,在定时器1中每30MS就清0一次

        rev_num++;                                //中断次数

        if(rev_num>=2)

        {

                do

                {                 

                        while(!int0);                //等低电平结束

                        delay_21_2us(100);        //101.7=0.84MS        97=0.8ms         84.3=0.7ms                  

                        num++;

                        num_8++;

                        rev_data>>=1;

                        if(num_8==8)           //8

                        {

                                num_8=0;

                                temp_shu=rev_data;

                                i++;

                        }

                }

                while(!int0);                                //高电平才退出

                if(num_8==0)                               

                {

                        temp_shu[i-1]|=0x80;

                }

                else

                {

                        rev_data|=0x80;

                }                         

                if(num>=32)                                        //是否接收完?

                {

                        num=0;

                        num_8=0;

                        rev_num=0;

                        i=0;

                        scan_change=1;

                }         

        data_error=0;          

        }

}

void inter_1()interrupt 3 using 3                                                        //定时器T1--20ms

{               

        TH1=0xc5;        //15ms

        TL1=0x68;

        data_error++;

        if(data_error>=2)                                                                                //data_error=>2,表示接收到重码或接收到干扰信号,并清0寄存器

        {

                num=0;

                rev_num=0;

                num_8=0;

                rev_data=0;

                i=0;

                data_error=0;

        }          

}       





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

void initial (void)                                                //LCD初始化

{

        temp=0x38;                        //#00111000b

        write();

        temp=0x0c;                        //#00001100b

        write();

        temp=0x06;                        //#00000110b

        write();

}

void cls (void)                                                        //清屏

{

        temp=0x01;

        enable=0;

        write();

}

void write (void)                                                        //写资料寄存器

{

        busy();

        enable=0;

        rw=0;



        rs=0;

        enable=1;

        P0=temp;

        enable=0;

}

void writedata (void)                                                //写数据

{

        busy();

        enable=0;

        rw=0;

        rs=1;

        enable=1;

        P0=temp;

        enable=0;

}

void busy (void)                                                        //忙查询

{

        uchar busy_temp;

        enable=0;

        do

        {rw=1;

        rs=0;

        enable=1;

        busy_temp=P0^7;

        enable=0;}

        while(busy_temp==1);

        delay(6);

}

void delay (uchar m)                                                //延时

{

        uchar n;

        for(;m>0;m--)

                for(n=100;n>0;n--);

}



         

//********************用于51系列单片机延时处理,12MHZ晶振下************************

void delay_21_2us (uint k)                                                //21.2us延时

{

        while(k)

        {

                k--;                                 //延时基数为21.2us,uint k的增量为8.05us

        }                                                    //延时时间为21.2+((K-1)*8.05)

}

//uchar m不能为空,如delay_ms(1)表示延时21.2us;

//                          delay_ms(2)表示延时21.2+8.05=29.25us;

//                          delay_ms(3)表示延时21.2+8.05+8.05=29.25us;

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

出0入0汤圆

发表于 2008-3-30 22:07:46 | 显示全部楼层
学习学习。。。

出0入0汤圆

发表于 2008-4-10 19:28:18 | 显示全部楼层
我也瞧瞧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 23:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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