进来学习,早就该了解这些,本人很懒
#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;
}
}
回复
我要赚赏金打赏帖 |
|
|---|---|
| 给28BYJ-48三自由度机械臂加一个网页控制台被打赏¥32元 | |
| 用28BYJ-48电机从零搭一台三自由度机械臂被打赏¥33元 | |
| 【英飞凌开发经验】ModusToolbox配置EdgeTalk外设被打赏¥27元 | |
| 基于BQ76952PFBR的BMS保护板热插拔损坏的原因和处理措施被打赏¥32元 | |
| 三分钟快速上手搭建nRF Connect SDK开发环境(VSCode)被打赏¥25元 | |
| 告别手动建模:我让AI用FreeCAD画了个开发板外壳被打赏¥30元 | |
| 【瑞萨RA8D1测评】总结收官——从IMU动作识别到LVGL桌宠被打赏¥33元 | |
| 【瑞萨BLE/WIFI模块测评】MPU6050双链路对比被打赏¥30元 | |
| 【瑞萨BLE/WIFI模块测评】DA14531被打赏¥28元 | |
| 【瑞萨BLE/WI-FI模块测评】DA16200被打赏¥28元 | |
我要赚赏金
