12T 单片机 发送红外电平示例程序

单片机的GND接红外接收头的GND

单片机的IO接红外接收头的TTL输出引脚

/*

89C52 @12M
 
*/

#include <REG51.h> 
sfr AUXR  = 0x8E; 
static bit RealOutput;                    //红外发射管的亮灭
static unsigned int count;        //延时计数器
static unsigned int endcount;     //终止延时计数
static unsigned char flag;        //红外发送标志
sbit Send_ISR=P2^0;
sbit Runled  =P2^1;

char iraddr1;  //十六位地址的第一个字节
char iraddr2;  //十六位地址的第二个字节

unsigned char code key_0=0x10;
unsigned char code key_1=0x11;
unsigned char code key_2=0x12;
unsigned char code key_3=0x13;
unsigned char code key_4=0x14;
unsigned char code key_5=0x15;
unsigned char code key_6=0x16;
unsigned char code key_7=0x17;
unsigned char code key_8=0x18;
unsigned char code key_9=0x19;

unsigned char code key_up=0x19;
unsigned char code key_down=0x19;
unsigned char code key_left=0x19;
unsigned char code key_right=0x19;

unsigned char code key_menu=0x19;
unsigned char code key_ok=0x19;
unsigned char code key_back=0x1C;

 
void delay(unsigned int a){  //[email protected]  1ms
    unsigned int i;
    while ( --a != 0 )    
    for (i=0;i<=20;i++);
}
 
void SendCode(unsigned char Code){
 unsigned char irdata,i;
 irdata=Code;            
  for(i=0;i<8;i++)  {
     endcount=10;
     flag=1;
     count=0;
     do{}while(count<endcount);
     if(irdata%2) {endcount=41;}
     else{endcount=15;}
     flag=0;
     count=0;
     do{}while(count<endcount);
     irdata=irdata>>1;
  }
}

void SendIRdata(char keycode){
  char usercode1=0x11;
  char usercode2=0x11;
  
  char irdata=usercode1;
  endcount=223;                //发送9ms的起始码,.
  flag=1;
  count=0;
  do{}while(count<endcount);

	endcount=117;                //发送4.5ms的结果码
  flag=0;
  count=0;
  do{}while(count<endcount);
  
	SendCode(usercode1);
	SendCode(usercode2);
	SendCode(keycode);
	SendCode(~keycode);

  endcount=100;
  flag=1;
  count=0;
  do{}while(count<endcount);
  flag=0;
}
 
 
 
 
 
 
 
void main(void) 
{
  count = 0;
  flag = 0;
  RealOutput = 0;
  Send_ISR = 0;
  EA = 1;         //允许CPU中断 
  TMOD = 0x11;    //设定时器0和1为16位模式1 
  ET0 = 1;        //定时器0中断允许 
 
  TH0 = 0xFF; 
  TL0 = 0xE6;       //设定时值0为38K 也就是每隔26us中断一次  
  TR0 = 1;          //开始计数 

	while(1){
      SendIRdata(key_0);
      delay(1000);
      SendIRdata(key_1);
      delay(1000);
//		Runled=!Runled;
//      delay(1000);

  }
} 
 
void timeint(void) interrupt 1 { 
  TH0=0xFF; 
  TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次
  count++;
//  if (flag) {RealOutput=~RealOutput;}
  if (flag) {RealOutput=0;}
  else{RealOutput = 1;}
  Send_ISR = RealOutput;
}

编译

Rebuild target ‘Target 1‘
assembling STARTUP.A51...
compiling send_ISR.C...
linking...
Program Size: data=17.1 xdata=0 code=337
creating hex file from "Send_ISR"...
"Send_ISR" - 0 Error(s), 0 Warning(s).
时间: 2024-10-10 00:20:03

12T 单片机 发送红外电平示例程序的相关文章

[原创]基于51单片机的红外遥控课程设计

[注]: 一眨眼,大学接近尾声,具有找工作需要,所以把大学做的电子设计“劣作”放上来.希望考研失意,还能赶上“好工作”的春招班车.如果大伙有什么工作推荐也可以联系我哦,因为一年考研少接触了这方面,所以难免有些生疏.但请相信我!给我机会我会很认真学的! 邮箱:[email protected] 转载请注明出处呀! 基于51单片机的红外遥控课程设计 目录 第一章 设计简介... 3 第二章 系统方案... 3 一.设计方案对比... 3 二.方案设计... 4 第三章 硬件设计... 5 一.红外遥

非标准武术擂台1V1机器人示例程序

/******************************************************************* ** 文件名:擂台赛非标准平台1V1程序_检测原理AVR单片机示例程序,详细资料请购买产品后索要 ** Copyright (c) KXCT雷電科技 技术部 ** 创建人:KXCT ** 日 期:2015年11月 ** 修改人: ** 日 期: ** 描 述:仅供参考,擂台机器人调试能用的程序,包含了上台.边缘检测.推棋子.检测对手等功能 ** 版 本:V1.

Windows Socket编程示例-TCP示例程序

前面一部分是介绍,后面有示例 1.网络中进程之间如何通信? 首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问题,网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用程序(进程).这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互. 使用TCP

python入门示例程序

该实例是raspi和dsp电机运动控制板的串口uart通信: import serial class SerialHandler(): ''' raspi serial for communication ''' def __init__(self)://初始化一些默认参数,其它非初始化参数在方法中作为参数传入 self.serialdev = None//给参数赋初始值 def serial_open(self,serialdev,timeout)://用户可传入的参数,其它参数(如baudr

[51单片机] SPI nRF24L01 无线简单程序 1

main.c 1 #include <reg51.h> 2 #include <api.h> 3 4 #define uchar unsigned char 5 6 /***************************************************/ 7 #define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址 8 #define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度 9 #define LED P2 10 11

RocketMQ生产者示例程序

转载请注明出处:http://www.cnblogs.com/xiaodf/ 本示例展示了一个RocketMQ producer的简单实现,通过解析文本文件获取输入数据,将数据经过Avro序列化后发送到RocketMQ. 程序通过stdin.xml配置文件获取主要参数值,stdin.xml文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <operator> <parameters> &

ZigBee HA示例程序分析

ZigBee协议栈中自带的HomeAutomation例程,虽然也是操作灯泡,但是,是通过ZCL来统一处理的,符合HA profile规范,互连互操作性较好.下面就简要分析以下ZCL的使用. 在任务数组中,多定义了zcl层. Technorati 标签: ZigBee HA 示例程序 //OSAL_SampleSw.c const pTaskEventHandlerFn tasksArr[] = { macEventLoop, nwk_event_loop, Hal_ProcessEvent,

Python Socket 编程——聊天室示例程序

原文:Python Socket 编程--聊天室示例程序 上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的例子,就是允许多个人同时一起聊天,每个人发送的消息所有人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.如下图: 图来自:http://www.ibm.com/de

AT&amp;T x86_32 汇编_001_一个示例程序.md

这一节先写一个简单的汇编程序. 输出cpu的出产厂商. 不对语法, 寄存器等内容进行深入讨论, 只是整体上先有个认知印象. 1. 一些基础知识 简单来说, Linux下的可执行程序文件中, 最重要的三个部分是: 数据段, 代码段, bss段. 关于可执行文件, 以及目标文件的内容构成, 其实这是一个十分复杂的话题, 这里不进行深入讨论, 你可以简单的理解为: 可执行文件由段(section)组成. 每个可执行文件中存在多个段. 段是一种划分可执行二进制程序内容的手段 其中最重要的三个段: 数据段