单片机模拟红外遥控器发射的C语言程序

//********************************************单片机红外发射*******************************************

#include "reg52.h"

sbit ir=P1^0;//红外发射管控制脚,使用24M晶振

sbit ka=P2^0;

sbit kb=P2^1;

unsigned int count, set_count; //中断计数,设定中断次数

bit irflag,keyflag;   //红外发送标志位,按键标志位

unsigned char irsys[]={0x00,0xff};//16位用户码

unsigned char irdata,ircode; //发送的红外数据

//---------------------------------------------------------------------------

void delay(unsigned int a)//延时约1ms,晶振24M ,此处延时不需很精确

{

unsigned char i;

while(--a!=0)

for(i=300;i>0;i--); //若是12M晶振i=125

}

//---------------------------------------------------------------------------

void keyscan() // 按键扫描

{

if(ka==0){keyflag=1;irdata=0x0a;} //a键按下,则发射数据0x0a

if(kb==0){keyflag=1;irdata=0x0b;} //b键按下,则发射数据0x0b

}

//---------------------------------------------------------------------------

void ir_sendbyte()    //红外发送一个字节数据

{

unsigned char i;

for(i=0;i<8;i++)    //发送8位数据

{

set_count=43;//35; //发送编码中的0.56ms高电平 (//后为12M晶振下的数值)

irflag=1;      //启动红外发射二极管发射

count=0;     //中断计数先清0

TR0=1;      //开启定时器0

while(count

TR0=0; //关闭定时器0

if(ircode&0x01) set_count=130;//130; //判断红外编码最低位,若为1则1.69ms的低电平 (//后为12M晶振下的数值)

else set_count=43;//35;    //为0则0.565ms的低电平 (//后为12M晶振下的数值)

irflag=0; //低电平则不发射

count=0; //中断计数清0

TR0=1; //开启定时器0

while(count

TR0=0; //关闭定时器0

ircode=ircode>>1; //将数据右移,即从低位到高位发送

}

}

//---------------------------------------------------------------------------

void ir_send() //发送红外数据

{

set_count=692;//672; //发送编码中的引导码(9ms高电平+4.5ms低电平) (//后为12M晶振下的数值)

irflag=1;    //启动红外发射二极管发射

count=0;    //中断计数清0

TR0=1;

while(count

TR0=0;

set_count=346;//336; //发送编码中的4.5ms低电平(//后为12M晶振下的数值)

irflag=0; //低电平则不发射

count=0;

TR0=1;

while(count

TR0=0;

ircode=irsys[0]; //发送16位用户码的前1-8位

ir_sendbyte();

ircode=irsys[1]; //发送16位用户码的前9-16位

ir_sendbyte();

ircode=irdata;   //发送8位数据码

ir_sendbyte();

ircode=~irdata; //发送8位数据反码

ir_sendbyte();

set_count=43;//35; //发送编码中的0.56ms高电平 (//后为12M晶振下的数值)

irflag=1;

count=0;

TR0=1;

while(count

TR0=0;

ir=1;

delay(23);    //延时23ms(编码中的23ms低电平)

set_count=692;//670; //发送编码中的引导码(9ms高电平+4.5ms低电平) (//后为12M晶振下的数值)

irflag=1;

count=0;

TR0=1;

while(count

TR0=0;

set_count=346;//336; //发送编码中的4.5ms低电平(//后为12M晶振下的数值)

irflag=0;

count=0;

TR0=1;

while(count

TR0=0;

set_count=43;//35;   //发送编码中的0.56ms高电平 (//后为12M晶振下的数值)

irflag=1;

count=0;

TR0=1;

while(count

TR0=0;

ir=1;    //发射完了关闭红外发射二极管

}

//---------------------------------------------------------------------------

void timer0_init()    //定时器初始化

{

EA=1;

TMOD=0x02;     //定时0 8位自动重装模式

ET0=1;

TH0=0xe6;//0xf3;   //定时13us,38K红外矩形波,晶振24M (//后为12M晶振下的数值)

TL0=0xe6;

}

//---------------------------------------------------------------------------

void main()

{

timer0_init(); //定时0初始化

count=0;     //中断计数先清0

irflag=0;     //红外发射标志先置0

while(1)

{

keyscan();   //键值扫描

if(keyflag)   //若有按键按下

{

delay(10);

ir_send();   //发送红外编码

delay(500);

keyflag=0;   //按键标志清零

delay(100);

}

}

}

//---------------------------------------------------------------------------

void timer0() interrupt 1 //定时器0中断

{

count++;

if(irflag==1) ir=~ir; //有发射标志,则发射38khz的矩形波

else ir=1;     //否则不发射,即相当于发射编码中的低电平

}

/*说明:本人经多次调试发现若在24M晶振下使用,发射很正常,而在12M晶振下发射的数据则稳定性要差很多,正在完善中*/

/*程序编写:落叶*/

单片机发射红外c语言程序,单片机模拟红外发射源程序IR-send相关推荐

  1. 单片机模数转换实验c语言程序,单片机实验AD转换实验

    <单片机实验AD转换实验>由会员分享,可在线阅读,更多相关<单片机实验AD转换实验(5页珍藏版)>请在人人文库网上搜索. 1.实验报告课程名称: 单片机原理及应用 实验项目: ...

  2. 单片机节日彩灯c语言程序,单片机课程设计简易节日彩灯

    <单片机课程设计简易节日彩灯>由会员分享,可在线阅读,更多相关<单片机课程设计简易节日彩灯(7页珍藏版)>请在人人文库网上搜索. 1.单片机课程设计节日彩灯一. 需求分析:1. ...

  3. 单片机三角波c语言程序,单片机产生方波、锯齿波、三角波程序

    单片机产生方波.锯齿波.三角波程序 #include #define uchar unsigned char #define uint unsigned int unsigned char x=0,m ...

  4. 单片机电子密码锁C语言程序,单片机电子密码锁的设计(汇编语言).doc

    word格式整理版 文档可编辑 一.设计总说明 ? 随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别.IC卡辨认)已在国内外相继面世.但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保 ...

  5. c51单片机音乐门铃C语言程序,单片机六首歌曲的音乐门铃程序

    单片机六首歌曲的音乐门铃程序 来源:-- 作者:-- 浏览:1346 时间:2016-08-10 14:18 标签: 摘要: buzzer        equ        p2.4 KEY     ...

  6. C语言 int 转单精度浮点,单精度浮点数与十六进制转换 C语言程序 单片机也可用...

    单精度浮点数与十六进制转换 C语言程序 单片机也可用 #include float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数 { // ...

  7. 简易电子钟c语言程序,(最新整理)基于51单片机的电子钟C语言程序

    <(最新整理)基于51单片机的电子钟C语言程序>由会员分享,可在线阅读,更多相关<(最新整理)基于51单片机的电子钟C语言程序(9页珍藏版)>请在人人文库网上搜索. 1.完整) ...

  8. DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc

    单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...

  9. AT89C51单片机流水灯c语言程序及详解(扫盲教程)

    AT89C51单片机是我们学习单片机必学的一个单片机,也是单片机入门的教材,下面给大家展示一下流水灯的编写方法适合初学者 首先先在proteus画出仿真图,方便仿真程序 下面来编写程序,先来写入头函数 ...

最新文章

  1. James Fee’s 5 Predictions Geo for 2010 and 5 Things That Won’t Happen
  2. 苹果雪豹操作系统正式版_苹果文件泄密?3 款新 iPhone 正式命名曝光
  3. CF1303F - Number of Components(并查集)
  4. [机器学习]TF-IDF是什么
  5. 【英语学习】【Level 07】U04 Rest and Relaxation L4 A room fit for a king
  6. scala几种循环判断语句_Scala循环控制语句– while,while和for循环
  7. DC888 : worklist slovers
  8. 最简洁的秒杀 阿里月饼 js脚本
  9. MTK Android LCD模块驱动
  10. android wifi 手机投影电视,手机投屏到电视的5种方法 看完才知道原来这么简单!...
  11. 香港站群多段服务器VPS大带宽服务器日本站群多段服务器
  12. docker中安装mongo3.2
  13. Androbench使用
  14. ChromeOptions--禁止加载图片
  15. PacBio hdf5 格式 向 FASTA格式转换
  16. 迭代法计算平方根(难度系数:2颗星)
  17. 8岁上海小学生B站教编程惊动苹果公司CEO
  18. Flask开发微电影网站(八)
  19. 【ACP】复合材料铺层受压案例(附源文件)
  20. Mac 教程:OS X「剪切」移动文件的三种方法

热门文章

  1. V神:BSV被高估,BCH被低估
  2. 006永磁电机永磁体的类型:何为凸极性、隐极性,表贴式、内置式,傻瓜式讲解,专为零基础编写。
  3. devDependencies与dependencies如何理解
  4. Win10系统自动更新失败(错误代码0x800f0922)
  5. 【听】说谎心理学,说谎错了吗?
  6. Linux: command: traceroute traceroute6
  7. 上市公司对ERP的要求
  8. PS中如何查看图像的RGB值
  9. JavaScript day9
  10. 易优cms修复后台编辑器下拉滚动条时跳动的BUG