//此程序在硬件上测试通过,要弄懂的话就要去看看HT6221的时序图。
//此程序可以将读到的键值,地址码通过串口发送到计算机,上位机可用串口调试助手查看。
///C51的红外解码程序,可以根据需要自己修改:
////////////////////////////
//11.0592Mhz
#include //根据自己的接线来改 sbit IRIN = P3^2; //红外接收器数据线 sbit led = P3^7; //指示灯 //////////////////////////////////////////// //定义数组IRCOM,分别装解码后得到的数据 //IRCOM[0] 低8位地址码 //IRCOM[1] 高8位地址码 //IRCOM[2] 8位数据码 //IRCOM[3] 8位数据码的反码 ///////////////////////////////////////////// #define uchar unsigned char #define uint unsigned int uchar IRCOM[4]=0; bit flag=0; bit flagcom=0; //串口发送标志 /********************/ void delay014ms(unsigned char x); //x*0.14MS void IR_init(void); void delay014ms(unsigned char x) //x*0.14MS STC10F04延时约0.15MS { unsigned char i; while(x--) { for (i = 0; i<125; i++) //13 {;} } } /////////////// //初始化 //////////// void IR_init(void) { EA=1; EX0=1; //允许总中断中断,使能 INT0 外部中断 IT0=1; //触发方式为脉冲负边沿触发 IRIN=1; //I/O口初始化 } ////////// //解码过程 ////////////// void IR_CODE(void) interrupt 0 //在外部中断子程序中解码 { unsigned char j,k,N=0; EX0 = 0; delay014ms(15); if (IRIN==1) { EX0 =1; return; } //确认IR信号出现 while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 {delay014ms(1);} for (j=0;j<4;j++) //收集四组数据 { for (k=0;k<8;k++) //每组数据有8位 { while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 {delay014ms(1);} while (!IRIN) //等 IR 变为高电平 {delay014ms(1);} while (IRIN) //计算IR高电平时长 { delay014ms(1); N++; if (N>=30) { EX0=1; return;} //0.14ms计数过长自动离开。 } //高电平计数完毕 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补"0" if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补"1" N=0; } } if (IRCOM[2]!=~IRCOM[3]) //不等的话表示解码失败 { IRCOM[4]=0; EX0=1; return; } flagcom = 1; //正确解码后,置串口发送标志 flag = !flag;//pro();//解码成功后运行的程序 EX0=1; return; } //主程序 void main(void) { unsigned char k; IR_init( ); //初始化外部中断0 SCON=0x50; //串口 方式 1 TMOD=0x20; //T1 方式 1 TL1=0xfd; //波特率 9600 的常数 TH1=0xfd; TR1=1; //开定时器1 flag = 0; while(1) { led=flag; if(flagcom) { flagcom = 0; for(k=0;k<4;k++) { SBUF=IRCOM[k]; //串口输出键盘输入的值 while(TI==0); //是否发送完毕 TI=0; } } } }
上一篇:时钟芯片ds12c887的C51驱动程序
下一篇:I2C总线万能程序C语言
推荐阅读最新更新时间:2024-11-09 17:00
推荐帖子
- 高分在线等:用ARM汇编指令如何访问I/O口数据寄存器
- 如题?我这样,总是编不过......LDRR0GPGDAT......该如何写呢?高分在线等:用ARM汇编指令如何访问I/O口数据寄存器upldrr0,=GPGDATldrr1,;GPGDAT的内容=r0ldrr2,=0x12345str,r0;0x12345=GPGDAT上面写错了,应为ldrr0,=GPGDATldrr1,;GPGDAT的内容=r0ldrr2,=0x12345strr2,
- 湖北王浩 ARM技术
- msp430F149通用I/O端口是否能承受5V电压接口
- 如题所问,打算用MSP430F149做个液晶显示装置,MSP430F149电源电压是3.3V,液晶接口电平是5V电压,想尽量简化硬件电路,能否直接和149端口相连,还是必须用3.3V转5V的芯片做缓冲,请实际用过的朋友告知一下,谢谢!msp430F149通用I/O端口是否能承受5V电压接口要进行电平转换 http://www.ti.com.cn/cn/lit/an/slaa148/slaa148.pdf个人觉得3.3v的也可以驱动液晶,只是背光比较暗。谢谢收到,我也用3.3V驱
- 阿力 微控制器 MCU
- 基于SDI-12总线(通信协议)的数据采集技术
- 概述:目前SDI-12产品越来越丰富,应用也越来越广泛,关键在于其智能化,数字化。众多仪器厂商,系统集成商,开始关注该项技术,几乎所有的数据采集器生产商都在自己的产品中增加了SDI-12总线接口,在大趋势的推动下,传感器厂家也开始加入这个协议。通过SDI-12组建的数据采集系统结构简洁,由于使用了总线技术,所有的传感器连接在一条SDI-12总线上,所以放弃了以往的复杂接线,让用户一目了然,即使供应商不提供服务,用户自己也能很好的来改变观测方案甚至是对系统升级。关
- viewtool 嵌入式系统
- cygwin安装mips编译器后不识别库函数,请高手指教,谢谢!
- cygwin下安装了mips的编译器,但不能识别函数,即使写一个“HelloWorld”,使用mips-elf-gcc编译时也会提示“undefinedreferenceto`printf\'”,直接用gcc编译就没问题。不知是何原因,望高手指教,谢谢!cygwin安装mips编译器后不识别库函数,请高手指教,谢谢!没人回答,自己顶一下吧另外也提示:“warning:cannotfindentrysymbol_start”当然cygwin下是能编译的,cygwin包含有
- mjdhj_520 嵌入式系统
- 为什么OCL电路三极管损耗随频率升高而增大?
- 电路如图所示,OCL电路前级三极管为:NPN——PBSS8110Y,PNP——PBSS9110Y。后级三极管型号为:NPN——NSS1C301ET4G,PNP——NSS1C300ET4G。在Signal_in端钮输入正弦波信号,幅值2V,频率可调。随着频率的升高,供电电源显示电路电路逐渐增大,当输入信号频率小于10MHz,供电电源的电流能够稳定下来,当频率大于10MHz以后,由于电流增大,三极管发热,反过来使电流进一步增大,最终电流迅速升高直至达到供电电源的限流值。请问为什么频率升高会导致
- 咖啡不加冰 模拟电子
- 【 ST NUCLEO-G071RB测评】——by donatello1996
- @donatello1996【NucleoG071评测】开箱&介绍&上电&工程环境搭建&点灯&串口【NucleoG071评测】串口1空闲中断+DMA实现不定长接收【NucleoG071评测】SYSTICK&两种常用的低功耗模式对比【NucleoG071评测】I2COLED&AD采集【NucleoG071评测】PWM呼吸灯【NucleoG071评测】检测HTS221温湿度传感器数据【NucleoG071评测】接上串口LORA模块进行实验&远程控制
- okhxyyo stm32/stm8
设计资源 培训 开发板 精华推荐
- STEVAL-IHM038V1,基于 STM32 和 SLLIMM-Nano 的 BLDC 吊扇控制器评估板
- LTC2945CMS-1 具有高达 200V 浪涌保护的坚固型 4V 至 70V 高压侧功率监视器的典型应用
- DER-55 - 10.5W多输出隔离电源
- MC78M24CTG 24V 电流调节器的典型应用
- LT1171IT、5V/2.5A 升压转换器的典型应用
- LTC4310-1 演示板,热插拔 I2C 隔离器
- 具有输出排序功能的 LT1940L 3.3V 和 5V 双路输出降压转换器的典型应用电路
- 使用 ROHM Semiconductor 的 BM2P034 的参考设计
- 【复刻项目】5V转±12V、±15V电源
- 1811571122吴瑛龙3