红外遥控器遥控单片机程序

  • D3_752776
    了解作者
  • 39.3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-20 11:29
    上传日期
红外遥控调整液晶显示DS1302时间,通过大众合DR-6633万能遥控器,遥控液晶显示的DS1302时间数据
红外遥控调整液晶显示DS1302时间.rar
  • 红外遥控调整液晶显示DS1302时间
  • REMOTE.Uv2
    2.1KB
  • REMOTE.Opt
    2.5KB
  • STARTUP.OBJ
    758B
  • REMOTE.plg
    409B
  • REMOTE.hex
    5.2KB
  • Main .c
    1.1KB
  • lcd1602.c
    4.2KB
  • ds1302.c
    3.9KB
  • REMOTE
    23.9KB
  • Main .OBJ
    27.2KB
  • REMOTE_Uv2.Bak
    0B
  • STARTUP.A51
    6.2KB
  • REMOTE.M51
    29.7KB
  • REMOTE_Opt.Bak
    2.6KB
  • Main .LST
    2.9KB
  • STARTUP.LST
    13.7KB
  • remote.c
    12.3KB
  • REMOTE.lnp
    59B
内容介绍
//----------------------------------------------------------------- // 程序描述: // 红外接收子程序 // 作者:薛小铃 // 开始日期:2008-10-30 // 完成日期:2008-10-30 // 修改日期: // 版本:V1.0 // 调试工具:新作的最小板 // 说 明: // (1)调试使用的工作晶振Fosc=12MHz; // (2)LC7461使用PWM编码格式,以脉宽0.56ms、间隔0.565ms、周期1.125ms // 的组合表示二进制的"0";以脉宽0.56ms、间隔1.685ms、周期2.25ms // 的组合表示二进制的"1"; // (3)LC7461遥控器发射的红外线信号由42位数据构成:引导码由9ms的低电平和 // 4.5ms的高电平构成,系统识别码由13位原码和13位反码构成,数据码由8位 // 原码和8位反码构成 //----------------------------------------------------------------- //----------------------------------------------------------------- // 头文件包含 //----------------------------------------------------------------- #include <reg52.h> #include <intrins.h> // 数据类型宏定义 //----------------------------------------------------------------- #define uchar unsigned char #define uint unsigned int //----------------------------------------------------------------- // I/O口定义 //----------------------------------------------------------------- sbit HONGWAI = P3^2; // 红外接收数据线 //----------------------------------------------------------------- // 全局变量:内RAM存储单元定义 //----------------------------------------------------------------- int ch; // 红外原码数据存放单元 //----------------------------------------------------------------- // 全局变量:内RAM位定义 //----------------------------------------------------------------- bit intx0f; // 初始为0;为1表示响应外0中断 bit irvalidf; // 红外解码解码有效标志位,为1表示有效 //bit flag; //void write_remote(uchar add,uchar date); void WriteCommand(unsigned char c); //void ds1302_write_time(void) ; void ds1302_write_byte(unsigned char addr, unsigned char d) ; //----------------------------------------------------------------- // 功能程序区 //----------------------------------------------------------------- //----------------------------------------------------------------- // void Delay_1ms (unsigned char t) //----------------------------------------------------------------- // // 函数功能: 时基为1ms的延时 // 例子提示: 调用Delay_1ms(20),得到20ms延时 // 入口参数: 无符号8bit整数 // 返回参数: 无 // 全局变量: 无 // 调用模块: 无 // 注意事项: 基于使用外12MHz晶振的标准8051(如AT89S51)单片机 /* 令x=165,y=2,n=1,则延时时间 ={[3y+(n+2)xy+3]*t+5}T=(999t+5)T 单位: 1SYSCLK SYSCLK=12MHz 误差 Delay_1ms(1): 延时 1 004 1.004ms 4us Delay_1ms(2): 延时 2 003 2.003ms 3us Delay_1ms(3): 延时 3 002 3.002ms 2us Delay_1ms(5): 延时 5 000 5.000ms 0us Delay_1ms(10): 延时 9 995 9.995ms 5us Delay_1ms(20): 延时 19 985 19.985ms 15us Delay_1ms(40): 延时 39 965 39.965ms 35us Delay_1ms(60): 延时 59 945 59.945ms 55us Delay_1ms(100):延时 99 905 99.905ms 95us Delay_1ms(200):延时 199 805 199.805ms 195us Delay_1ms(255):延时 254 750 254.750ms 250us */ //----------------------------------------------------------------- void Delay_1ms (unsigned char t) { unsigned char i,j; do { j = 2; do { i = 165; do { _nop_(); } while (--i); } while (--j); } while (--t); } //----------------------------------------------------------------- // void Delay_882us (void) //----------------------------------------------------------------- // // 函数功能: 时基为882us的延时 // 入口参数: 无 // 返回参数: 无 // 全局变量: 无 // 调用模块: 无 // 注意事项: 延时时间为881us,误差为1us //----------------------------------------------------------------- void Delay_882us (void) { uchar i,j; for (i=20; i>0; i--) { for(j=20; j>0; j--) { ; } } for (i=5; i>0; i--) { _nop_(); } } //----------------------------------------------------------------- // void Decoder (void) //----------------------------------------------------------------- // // 函数功能: 遥控解码 // 入口参数: 无 // 返回参数: 无 // 全局变量: irvalidf:红外解码有效标志位,为1表示有效 // ch:红外原码数据存放单元 // 调用模块: Delay_882us();Delay_1ms(unsigned char) // 注意事项: //----------------------------------------------------------------- void Decoder (void) { uchar i,j; uchar tmp[2]; // tmp[0]:暂存原码数据;tmp[1]:暂存反码数据 irvalidf = 1; // 先设红外解码有效 for (i=0; i<10; i++) // 循环10次,检测在8.820ms内信号的电平状态 { Delay_882us(); // 延时882us if (HONGWAI) // 若信号为高电平,则为干扰信号 { irvalidf = 0; // 红外解码解码无效 break; } } if (irvalidf) { while (!HONGWAI); // 等待引导码中的9ms低电平结束 Delay_1ms(5); // 延时5ms,屏蔽引导码中的4.5ms高电平 for (j=0; j<26; j++) // 检测26位系统识别码 { while (!HONGWAI); // 等待系统识别码第一位数据的上升沿 Delay_882us(); // 高电平开始后,用882us的时间尺检测信号的电平状态 if (HONGWAI) // 若该信号为高电平,则延时1ms等待高电平结束 { Delay_1ms(1); // 延时1ms } } for (i=0; i<2; i++) // 接收原码和反码数据并暂存 { for (j=0; j<8; j++) // 循环8次,接收8位数据(原码或反码) { while (!HONGWAI); // 等待系统识别码第一位数据的上升沿 Delay_882us(); // 高电平开始后,用882us的时间尺读取信号的电平状态 tmp[i] >>= 1; // 先接收低位数据 if (HONGWAI) // 若该信号为高电平,则延时1ms等待高电平结束 { Delay_1ms(1); // 延时1ms tmp[i] = tmp[i] | 0x80; // 暂存信号此时的电平状态 } } } if (~tmp[0] == tmp[1]) // 将原码取反后与反码进行比较,若两者的值相同则完成解码 { ch = tmp[0]; // 保存原码数据 } else { irvalidf = 0; // 若原码和反码不等,则本次接收的数据无效 } } } /*void Display(void) { // 设置LCM显示DDRAM的起始地址 // 对高四位进行处理 if ((ch&0xF0)==0x00) // 屏蔽低四位后判断其值 { write_remote(0x0a,0x00+'0'); // 若为0,则显示字符0 } else { write_remote(0x0a,0x01+'0'); // 若为1,则显示字符1 } // 对低四位进行处理 if ((ch&0x0F)<0x0a) // 屏蔽中间四位后判断其值 { write_remote(0x0b,(ch&0x0F)+'0'); // 若小于10,则加上'0'后显示该值 } else { write_remote(0x0b,((ch&0x0F)-0x09)+0x40); // 若大于或等于10,则加上'a'后显示该值 } }*/ //----------------------------------------------------------------- // 中断服务子程序 //----------------------------------------------------------------- //----------------------------------------------------------------- // void INTX0_ISR (void) //----------------------------------------------------------------- // // 函数功能: 外0中断服务程序,接收到红外信号(下降沿)响应中断 // 入口参数: 无 // 出口参数: 无 // 全局变量: intx0f:初始为0;为1表示响应了外0中断 // 调用模块: 无 // 注意事项: //----------------------------------------------------------------- void INTX0_ISR (void) interrupt 0 { unsigned char tmp; _nop_(); // 目的:跳过尖峰干扰脉冲 // 为下一次外0中断作准备 EX0 = 0; // 接收外0中断信号后关外中断0 Decoder(); // 遥控解码 if (irvalidf) // irvalidf=1表示红外解码有效 { irvalidf = 0; // 清除红外解码有效标志位 //Display();
评论
    相关推荐
    • 单片机课件
      能够帮助同学们快速的了解单片机并对于单片机的一些设计程序有一定的认知
    • 单片机课件
      单片机的课件及例题, 单片机的课件及例题, 单片机的课件及例题, 单片机的课 件及例题,
    • 爱上单片机
      一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章。本书通过生动的语言...
    • 单片机资料
      内含30个单片机应用开发的资料,包括配套单片机入门PPT。
    • 单片机课件
      单片机课的课件,对单片机的基础进行了全面的概述,也有非常精细的指导。
    • 单片机工具
      单片机工具 供单片机学习使用 免费资源 日后还会有更多资源 请联系我
    • 单片机课件
      单片机课件 ppt文件格式 介绍了单片机的结构、程序设计、定时器、中断等
    • 单片机教程
      这是一个单片机的教程,可以用于初次学习单片机的人学习。
    • 单片机入门
      很好的单片机学习资源,入门比较好适合对单片机的学习有兴趣的人,而且是名校的精彩讲解,
    • 爱上单片机
      《爱上单片机》本书是一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章...