#include <regX52.h>
#define c(x) (x*110592/120000)
sbit Ir_Pin=P3^2;
sbit beep=P3^6;
#define INBUF_LEN 4 //数据长度
unsigned char inbuf1[INBUF_LEN]={'0','0','0','0'};//发送缓冲区
unsigned char inbuf2[50];//接收缓冲区
unsigned char count3;
void init_serialcomm( void )
{
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
T2CON=0x30;
TH2=0x00;
TL2=0x00;
RCAP2H=0xFF;
RCAP2L=0xDC;
TR2=1;
}
//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0 );
TI= 0 ;
}
//向串口发送一个字符串,strlen 为该字符串长度
void send_string_com( unsigned char *str, unsigned int strlen)
{
unsigned int k= 0 ;
do
{
send_char_com(*(str + k));
k++;
} while (k < strlen);
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if (RI) //RI==开始接收
{
unsigned char ch;
RI = 0 ; //软件RI=0
ch=SBUF;
if (ch> 1 )
{
count3= 0 ;
inbuf2[count3]=ch;
}
else
{
count3++;
inbuf2[count3]=ch;
}
}
}
unsigned char code Led_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共阳极数码显示码0-F.
unsigned char code Led_Sel[]={0xef,0xdf,0xbf,0x7f};
unsigned char dis_8[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','-'};
unsigned char Led_Buf[4]; //显示缓冲区
char Led_Index; //位选
unsigned char Ir_Buf[4]; //用于保存解码结果
void delay_50ms(unsigned int t)
{
unsigned int j;
for(;t>0;t--)
for(j=6245;j>0;j--)
{;}
}
//==============================================================
//数码管扫描
timer0() interrupt 1 using 1
{
TL0=65536-1000;
TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
//P0=0xff;
P2=Led_Sel[Led_Index]; //位选
P0=Led_Tab[Led_Buf[Led_Index]]; //段选
if(++Led_Index>3) Led_Index=0; //四个扫描完了,到第一个数码管
}
//==============================================================
unsigned int Ir_Get_Low()
{
TL1=0;
TH1=0;
TR1=1;
while(!Ir_Pin && (TH1&0x80)==0);
TR1=0;
return TH1*256+TL1;
}
//=============================================================
unsigned int Ir_Get_High()
{
TL1=0;
TH1=0;
TR1=1;
while(Ir_Pin && (TH1&0x80)==0);
TR1=0;
return TH1*256+TL1;
}
//==============================================================
main()
{
unsigned int temp;
char i,j;
Led_Index=1;
init_serialcomm(); //初始化串口
TMOD=0x11;
TL0=65536-1000;
TH0=(65536-1000)/256; //定时器0设定约1000us中断一次,用于数码管扫描
EA=1;
ET0=1;
TR0=1;
Led_Buf[0]=0;
Led_Buf[1]=0;
Led_Buf[2]=0;
Led_Buf[3]=0; //显示区设成0
do{
restart:
while(Ir_Pin);
temp=Ir_Get_Low();
if(temp<c(8500) || temp>c(9500)) continue;//引导脉冲低电平9000
temp=Ir_Get_High();
if(temp<c(4000) || temp>c(5000)) continue;//引导脉冲高电平4500
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)) goto restart;
temp=Ir_Get_High();
if(temp<c(200) || temp>c(2000)) goto restart;
Ir_Buf[i]>>=1;
if(temp>c(1120)) Ir_Buf[i]|=0x80;
}
Led_Buf[0]=(Ir_Buf[2]/16)&0xf;
Led_Buf[1]=Ir_Buf[2]&0xf;
Led_Buf[2]=(Ir_Buf[3]/16)&0xf; //显示结果
Led_Buf[3]=Ir_Buf[3]&0xf;
inbuf1[0]=dis_8[Led_Buf[0]];
inbuf1[1]=dis_8[Led_Buf[1]];
inbuf1[2]=0x0d;
inbuf1[3]=0x0a;
send_string_com(inbuf1,INBUF_LEN);
beep=0;
delay_50ms(2);
beep=1;
}
while(1);
}
weixin_42651887
- 粉丝: 106
- 资源: 1万+
最新资源
- 医院随访客服管理系统:优化医患沟通,精准了解患者状况,高效客服管理,医院随访客服管理系统,拉进医患关系,了解患者情况客服管理 ,核心关键词:医院随访客服管理系统; 医患关系; 患者情况; 客服管理;
- 信捷四轴程序手册:包含回零、定位与手自动切换等功能,清晰易懂的项目开发参照模板,助您轻松应对各类编程项目挑战 ,信捷4轴程序,包含回零,相对,绝对定位,手自动切,自动流程,电机参数计算,整个程序的模块
- C#上位机通过Modbus TCP协议与台达PLC通信:集成视觉检测功能及完整的项目框架(基于VS2019开发),C#上位机与台达PLC通信,modbus TCP协议 1.真实使用项目,该程序框架完
- 三菱FX5U PLC实现IVDR与E700变频器高级通讯功能:参数设定与实时数据读取,三菱FX5U专用指令通讯三台E700变频器程序资料 硬件:三菱FX5U PLC一台,三菱E700或D700变频器
- 埃斯顿量产方案:全C代码与VHDL语言FPGA代码,含绝对值编码器伺服控制器,AD格式硬件图纸及多通讯功能,涵盖电机参数自动识别与惯量识别技术 ,埃斯顿量产方案绝对值编码器伺服控制器全C代码和硬件图纸
- 基于VS2019的C# Modbus RS485 RTU主站源码程序,支持多种功能码通讯,C#程序源码 Modbus RS485 RTU 主站源码程序 用VS2019 C#编写 功能码支持01 0
- STM32F0系列FOC源代码解析:单电阻与三电阻采样算法的无感学习与实践,STM32F0系列FOC 源代码, 有单电阻采样和三电阻采样两种代码 都是ST很经典算法,代码学习,无感算法开源,代码不
- 基于MATLAB平台和YALMIP工具的微网优化调度模型:机组组合与调度策略实现介绍,微网 优化调度 机组组合 YALMIP cplex 编程语言:MATLAB平台 主题:基于YALMIP 的微网
- 基于分布式ADMM算法与碳排放交易的最优潮流调度研究:MATLAB与CPLEX GUROBI平台仿真实现,MATLAB代码:基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究 关键词:分布式
- ABB机器人与PLC以太网通讯的C#上位机全套程序案例:自学提升实战指南,ABB机器人、PLC、C#上位机全套程序 1.项目用的是ABB蜘蛛机器人,六轴用的程序开发都一样 2.上位机与机器人和PLC通
- 基于MATLAB的储能优化配置模型:考虑灵活性供需不确定性与大规模风电并网的系统调峰解决方案,MATLAB代码:考虑灵活性供需不确定性的储能参与电网调峰优化配置 关键词:储能优化配置 电网调峰 风电场
- 基于MATLAB+CPLEX平台的家庭能量管理模型优化:分时电价策略下的空调与电动汽车负荷调控策略,关键词:家庭能量管理模型 分时电价 空调 电动汽车 可平移负荷 参考文档:基于分时电价和蓄电池实时
- 基于状态空间平均法与开关元件模型的Boost双闭环控制升压电路PI调节器设计与仿真,boost双闭环控制仿真升压电路PI调节器设计升压斩波电路建模和数学模型建模 建模方法有状态空间平均法,开关元件平均
- 西门子多功能FB块程序集:支持多轴调用、PTO脉冲与PN网口模式,适用于西门子及第三方伺服与步进电机,成功应用案例丰富附文档说明 ,西门子1200伺服步进FB块程序 一共两个FB,一个是scl写的,一
- 升级通用伺服口罩机程序架构:模块化设计,高效拓展多轴控制,信捷XD560T10助力柔性运动控制,已经升级,市面上最多的,7,,8,9,10伺服口罩机通用程序架构,程序已经升级,程序高度模块化,可轻易拓
- Matlab下微网双层优化模型:结合电价负荷响应,实现运营商收益与用户购电成本平衡的优化策略,微网双层优化模型matlab 采用yalmip编写三个微网的分层优化模型,考虑电价的负荷响应,综合配电网运
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈