coole 发表于 2005-8-29 11:16:12

我的遥控PC制作成功,发一个用c写的红外遥控接收程序,供初学者参考,并附遥控芯片的一些

这个周么,我的遥控PC制作顺利完成,谢谢网站提供的范例,现发一个用C写成的遥控接收程序,供参考,望高手点评。

#include        <iom16v.h>

#include        <macros.h>



#define        uchar        unsigned        char

#define        uint        unsigned        int



uchar         remote_value=0;

uchar        remotenow=0;

uchar        remotecode=0;

uchar        remoteold=0;

uchar        remotecnt=0;

uchar        remotedelay=0;

uchar        t30mscnt=0;

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

#define set_bit(x,y)                (x|=(1<<y))        //将x中的y位置1

#define clr_bit(x,y)                   (x&=~(1<<y))        //将x中的y位清0

#define xor_bit(x,y)                (x^=(1<<y))        //将x中的y位取反

#define bit(x)                        (1<<x)                //将1左移x位

#define get_bit(x,y)                (x&(1<<y))                   //取x中的第y位

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

#define        remote        (PIND&(1<<2))        //PD2



uchar         flag1;

#define         fremint                1        //遥控中断

#define         fremreq                   2        //遥控请求

#define         fremeff                   3        //遥控有效



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

//        函数名称:void timer2_ovf_isr(void)

//        输--入:无

//        输--出:无

//        功--能:定时器2中断服务程序(遥控译码)

//        影响标志:

//        创--建:

//        修--改:

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

#pragma interrupt_handler timer2_ovf_isr:5

void timer2_ovf_isr(void)

{        //200us

        TCNT2 = 0x38;//自动重装

        //=================

        //--遥控取码

        if(get_bit(flag1,fremint))

        {

                if(++remotedelay>4)

                {

                        if(remote==0)

                                remote_value|=1<<0;

                        else

                                remote_value&=(~(1<<0));

                        clr_bit(flag1,fremint);

                        remotecnt++;

                        remote_value<<=1;

                        if(remotecnt==12)

                                remotenow=remote_value;

                        else if(remotecnt>=48)

                        {

                                set_bit(flag1,fremreq);

                                remotecnt=0;

                                    remote_value=0;

                        }

                }

        }

        //================

        if(++t30mscnt>=150)

        {

                t30mscnt=0;



                remotecode=0;                //与遥控有关

                remotecnt=0;       

        }

}

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

//        函数名称:void int0_isr(void)

//        输--入:无

//        输--出:无

//        功--能:遥控接收

//        影响标志:

//        创--建:

//        修--改:

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

#pragma interrupt_handler int0_isr:2

void int0_isr(void)

{

        set_bit(flag1,fremint);

        t30mscnt=0;

        remotedelay=0;

}

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



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

//        函数名称:void RemoteProcess(void)

//        输--入:无

//        输--出:无

//        功--能:遥控处理

//        影响标志:

//        创--建:

//        修--改:

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

void RemoteProcess(void)

{

        if(flag1&(1<<fremreq))

        {

                clr_bit(flag1,fremreq);

                if(remotenow!=remoteold)

                        remoteold=remotenow;

                       else

                               set_bit(flag1,fremeff);

           }

        if(flag1&(1<<fremeff))

        {

                clr_bit(flag1,fremeff);

                if(remoteold==remotecode)

                {

                        ;//有连键

               }

                else

                {

                        ;//单键

                       

                }

                ............       

        }

}



利用了外部中断+定时器的方法来解码的。



有什么不对的地方,请大家指正!!

附资料:点击此处打开armok0165846.doc

点击此处打开armok0165847.pdf

zy99 发表于 2005-8-29 11:24:28

小样,挺厉害的,,,,哈哈!!!!



支持一下!!!

xusp 发表于 2005-8-29 22:31:31

用什么接收器咯!

coole 发表于 2005-8-30 08:04:20

用的是HS0038接收头

andylee2003 发表于 2006-3-6 09:10:15

DING 1

ningmeng7294 发表于 2006-3-13 21:56:12

是哪种格式的呀!RC5????

chi0901 发表于 2006-4-13 11:48:31

我觉得应该将遥控处理写到int0的中断服务程序里面,如果用定时器中断去处理的话,跟查询方式有什么区别啊?你这样写起不到节电的作用啊。

yanhanyu 发表于 2006-7-3 23:55:40

同意

king228 发表于 2006-12-17 15:13:20

看不懂啊,到底如何接受到信息啊?利用什么呢?

ahui 发表于 2006-12-23 15:29:07

http://www.unsp.com.cn/app/html/2002102393038.shtml

Sidney.MARS 发表于 2006-12-27 13:34:06

高手

jizzll 发表于 2008-4-10 19:01:47

感兴趣

wokao 发表于 2008-8-4 20:02:35

不好意思,我是个绝对新手,对这个很感兴趣,请问有没有电路图???

guaiguaima 发表于 2008-8-6 10:42:44

正在对SC9148解码,方式也是INT0+T2,但误码率很高,希望楼主能传电路做参考,或直接交流指导,QQ:254653474,不胜感激!!!!!!

bbi3014 发表于 2009-2-20 18:58:26

学习

ndust 发表于 2009-2-20 21:17:13

jh

sabergg 发表于 2009-7-5 20:28:02

最近我也想做一个玩玩,楼主能不能发一份详细的电路图给我。不胜感激 sabergcl@163.com

slowhand 发表于 2009-7-7 09:08:05

MARK

yangyi 发表于 2009-7-7 20:06:30

PC端有一个软件很好用,自己做个头插在串口上就可以了。很好用。

sange 发表于 2009-7-10 11:21:03

楼主用的是Girder么?

flyerhacker 发表于 2009-7-10 12:40:02

mark

cuiyun 发表于 2009-11-18 10:54:58

有无原理图?支持按键持续的功能吗?

guochengqiang 发表于 2009-11-18 16:06:12

学习红外编码

xinjie1023 发表于 2010-5-25 16:39:21

学习,是不是红外协议自己可以随便定义?

wcm_e 发表于 2010-5-25 16:50:59

mark

yaojiayi1252 发表于 2010-6-14 14:57:55

我也正想作这个,楼主谢了,,

h292 发表于 2010-7-11 19:43:02

学习了,不错

wwlong 发表于 2010-7-14 09:32:58

楼主好,最近我也想做个玩玩,楼主可否发个电路图给我wwl6955611@163.com....xiexie

heanhua 发表于 2010-11-23 15:13:45

我也看过这个 但是这个但是真正的红外线我还真没有玩过肯定很刺激 有机会我也试试
页: [1]
查看完整版本: 我的遥控PC制作成功,发一个用c写的红外遥控接收程序,供初学者参考,并附遥控芯片的一些