进来学习,早就该了解这些,本人很懒
#include <reg52.h> #define c(x) (x*110592/120000) sbit Ir_Pin = P3^5; unsigned char Ir_Buf[4]; //用于保存解码结果 // UART初始化 // 波特率:9600 void uart_init(void) { unsigned char u; ET1=0; TMOD = 0x21; // 定时器1工作在方式2(自动重装) SCON = 0x50; // 10位uart TH1 = 0xFD; TL1 = 0xFD; u = SBUF; TR1 = 1; } // 获取低电平时间 unsigned int Ir_Get_Low() { TL0 = 0; TH0 = 0; TR0 = 1; while (!Ir_Pin && (TH0&0x80)==0); TR0 = 0; return (TH0 * 256 + TL0); } // 获取高电平时间 unsigned int Ir_Get_High() { TL0 = 0; TH0 = 0; TR0 = 1; while (Ir_Pin && (TH0&0x80)==0); TR0 = 0; return (TH0 * 256 + TL0); } main() { unsigned int temp; char i,j; uart_init(); while (1) { while (Ir_Pin); temp = Ir_Get_Low(); if (temp < c(8500) || temp > c(9500)) //引导脉冲低电平9000 continue; temp = Ir_Get_High(); if (temp < c(4000) || temp > c(5000)) //引导脉冲高电平4500 continue; for (i=0; i<4; i++) //4个字节 { for (j=0; j<8; j++) //每个字节8位 { temp = Ir_Get_Low(); if(temp < c(200) || temp > c(800)) continue; temp = Ir_Get_High(); if(temp < c(200) || temp > c(2000)) continue; Ir_Buf[i] >>= 1; if(temp > c(1120)) Ir_Buf[i]|=0x80; } } SBUF = Ir_Buf[2]; // 返回键码 while (TI == 0); TI = 0; } }
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 | |
【换取逻辑分析仪】rtthread添加RRH62000传感器驱动-基于野火启明6M5被打赏48分 | |
换逻辑分析仪+Verilog多输入门被打赏27分 | |
【换取逻辑分析仪】基于ESP32和LVGL的音频数据动态显示系统被打赏48分 | |
与电子爱好者谈读图四被打赏50分 | |
Let‘s do 第三季 [电子测光表] 基础任务和进阶任务成果展示被打赏50分 |