单片机发送红外遥控码
来源:互联网 发布:曹方 知乎 编辑:程序博客网 时间:2024/04/29 22:21
前不久,要用单片机做一个发送红外遥控码的程序,以前只搞硬件,第一次作软件,不知所以然,想到网上参考一下,结果找来找去总是那么一个,还是用汇编写的,看了很久不知讲些什么,只好自己写了。在此给像我一样的新手一个参考,分享一下。
这个程序主要是用单片机来控制数码相框(或广告机),利用人体红外探头检测是否有人移动,然后根据用记所选择的模式来控制数码相框(或广告机)的工作状态。
代码如下:
以下是头文件:
- //
- //
- // this header file is programmed by hdl ,
- // maybe there are something that is not correct ,
- // please connect me when come accross problem ,
- // e_mail:de_12@163.com
- //
- //
- // the following is header file
- //
- // if you use any other [single chip computer] or [PIC] ,
- // please change this header file only , you don not hava to
- // change the [C] file
- //
- // programmed on 2008 - 08 - 29
- //
- // single chip computer [holtek ht48f06e] , web site : http://www.holtek.com.tw ; http://www.holtek.com.cn
- //
- //
- #ifndef haodl_h_file
- #define haodl_h_file
- #ifndef hdl_inlcude_ht48f06e
- #include "ht48f06e.h"
- #define hdl_inlcude_ht48f06e
- #define single_chip_is_ht48f06e 1
- #define __mod_can_change_by_key__
- #endif
- #ifdef __mod_can_change_by_key__
- #define keychange 0
- #define plugchange 1
- #endif
- typedef enum
- {
- false,
- true
- }
- BOOL;
- typedef enum
- {
- irMute,
- irTurnOffBK,
- irMutePause
- }
- CONMODE;
- typedef unsigned short BYTE;
- #define pac _pac
- #define pbc _pbc
- #define pcc _pcc
- #define pa _pa
- #define pb _pb
- #define pc _pc
- #define pa0 _pa0
- #define pa1 _pa1
- #define pa2 _pa2
- #define pa3 _pa3
- #define pa4 _pa4
- #define pa5 _pa5
- #define pa6 _pa6
- #define pa7 _pa7
- #define pb2 _pb2
- #define pb1 _pb1
- #define pb0 _pb0
- #define tmrc _tmrc
- #define intc _intc
- #define sysDelay _delay
- #define powerOffBk() {pause();/
- pa1=1;}
- #define powerOnBk() {pa1=0;/
- pause();}
- void powerOnIni();
- void IR(BYTE);
- #define mute() IR(0x04)
- #define muteOff mute
- #define muteOn mute
- #define pause() IR(0x1F)
- #define delay(t) {for (a=1;a<=t;a++)/
- sysDelay(10000);}
- #define muteAndPause pause
- void delay1s();
- #define __hdl main
- #endif
以下是C文件:
- #include "hdl_d.h"
- /********** function **********
- ------- function name : powerOnIni
- ------- function : initiate the status of ht48f06e
- ------- author : hdl
- ------- programmed date : 2008 - 08 - 29
- *******************************/
- /*
- ********* please modify any variable of this function *********
- ********* when you need ***************************************
- */
- void powerOnIni()
- {
- tmrc = 0;
- intc = 0;
- pac = 9;
- pbc = 6;
- pcc = 0;
- pa1 = 0;
- pa2 = 1;
- }
- /*
- // this file is programmed by hdl ,
- // please connect me when come accross problem ,
- // e_mail:de_12@163.com
- */
- /***************************** NOTICE : ************************
- *********** please change time your ir has to delay ************
- *********** and the ir leader code , custom code ************
- ****************************************************************/
- /********** function **********
- ------- function name : IR
- ------- function : generate ir serial code
- ------- author : hdl
- ------- programmed date : 2008 - 08 - 29
- *******************************/
- void IR(BYTE irCode)
- {
- BYTE dataCode;
- BYTE i;
- if (irCode == 0)
- return;
- /***** this variable is not required ****/
- dataCode = irCode;
- /**** the start of leader code ****/
- pa2 = 0;
- sysDelay(9000);
- pa2 = 1;
- sysDelay(4500);
- /**** the end of leader code ****/
- /**** start of custom code ****/
- for (i=0;i<8;i++)
- {
- pa2 = 1;
- sysDelay(560);
- pa2 = 0;
- sysDelay(565);
- }
- for (i=0;i<8;i++)
- {
- pa2 = 1;
- sysDelay(560);
- pa2 = 0;
- sysDelay(1690);
- }
- /**** end of custom code ****/
- /**** start of data code ****/
- for (i=0;i<8;i++)
- {
- if ((dataCode>>i)&0x01)
- {
- pa2 = 1;
- sysDelay(560);
- pa2 = 0;
- sysDelay(1690);
- }
- else
- {
- pa2 = 1;
- sysDelay(560);
- pa2 = 0;
- sysDelay(565);
- }
- }
- for (i=0;i<8;i++)
- {
- if ((dataCode>>i)&0x01)
- {
- pa2 = 1;
- sysDelay(560);
- pa2 = 0;
- sysDelay(565);
- }
- else
- {
- pa2 = 1;
- sysDelay(560);
- pa2 = 0;
- sysDelay(1690);
- }
- }
- /**** end of data code ****/
- /**** other code starts ****/
- /**** different ir may have different code ****/
- /**** this code is not required ****/
- pa2 = 1;
- for (i=0;i<2;i++)
- sysDelay(30000);
- sysDelay(7500);
- pa2 = 0;
- sysDelay(9000);
- pa2 = 1;
- sysDelay(2250);
- pa2 = 0;
- sysDelay(560);
- pa2 = 1;
- /**** other code ends ****/
- irCode = 0;
- }
- /********** function **********
- ------- function name : delay1s
- ------- function : delay one minute
- ------- author : hdl
- ------- programmed date : 2008 - 08 - 29
- *******************************/
- void delay1s()
- {
- BYTE a;
- delay(100);
- }
程序注释应是很清楚了,从中可以看到IR码的发送函数IR(BYTE);正是通过此函数发送的IR码。主函数是用来切换工作模式的,您可以试着编写一下,这里不再给出了。
如果有什么问题,与我联系。
E-mail : de_12@163.com。
- 单片机发送红外遥控码
- .单片机红外遥控
- 51单片机红外遥控
- 单片机中红外遥控
- 单片机红外遥控解码程序设计
- 51单片机的红外遥控
- PIC单片机红外遥控编码及识别.
- PIC单片机的红外遥控与解码
- 单片机红外通讯(遥控)电路图
- PIC单片机红外遥控编码及识别.
- 基于51单片机-智能红外遥控寻迹避障小车
- 51单片机模拟红外遥控发射传输温湿度数据
- 红外遥控对单片机的控制(测试成功)
- 红外遥控系统原理及单片机软件解码程序
- 红外遥控系统原理附51单片机软件解码程序
- 基于51单片机 的红外遥控解码设计
- 基于coolEdit遥控编码分析的STC51单片机红外发射器
- 51单片机万能红外遥控学习(通过波形学习)
- 去掉“分组相似任务栏按钮”
- IOCP完成端口的一个简单封装类 (转)
- 回调函数的C++ 封装
- 定时器 实现
- 大道至简-第1章
- 单片机发送红外遥控码
- CTime类型的格式化 (全)
- 小试牛刀的面经
- JAVA处理日期时间常用方法: java.util.Calendar
- 标准文件对话框的扩展使用方法
- 初次笔试---失败
- normal 、sysdba、 sysoper 、sys,sysdba,dba概念—区别
- SYSOPER身份用户的权限限制
- 第11章 Swing(2)