标题:
求助STC15系列单片机解码EV1527
[打印本页]
作者:
zerojhy
时间:
2019-4-3 21:13
标题:
求助STC15系列单片机解码EV1527
虚心请教大家如何改正,STC15系列单片机如何解EV1527的码
#include "reg51.h"
void Clear_HL();//清零函数
void INTERRUPT_0();//中断函数开启条件
void Adress_HL();//地址码21,15
void Synchronize_01();//同步码
void key_1();//
#define u16 unsigned int
#define u8 unsigned char
//同步码比较
#define Synchronize_MIN_H0 3 //高电平最小
#define Synchronize_MAX_H0 10 //高电平最大
#define Synchronize_MIN_H1 100//低电平最小
#define Synchronize_MAX_H1 420 //低电平最大
//地址码比例2:1,1:5
#define Adress0_MIN_15 8
#define Adress0_MAX_15 10
#define Adress1_MAX_15 45
#define Adress0_MIN_21 30
#define Adress0_MAX_21 35
#define Adress1_MAX_21 15
//引脚定义
sbit IO_HL=P3^1;//DO口检测外界高低电平
sbit realy=P3^5;//继电器引脚
//
u8 interrupt1=0;//中断控制
u8 flage=0;//定时计数标志
u8 Synchronize_0=0;//同步码标志0
u8 Synchronize_1=0;//同步码标志1
u8 AD0=0;//计数低电平
u8 AD1=0;//计数高电平
u8 DATA0=0;//
u8 DATA1=0;//
u8 temp=0;//判断标志
u8 a[25];
void INT_TIME()//定时器中断时间20us
{
TMOD=0x01;//选择定时器模式0
TH0=(65536-20)%256;//预置数高八位20us
TL0=(65536-20)/256;//预置数低八位20us
EA=interrupt1;//打开总中断
ET0=1; //中断0
TR0=1;//打开定时器
}
void Timer0() interrupt 1 //定时器中断
{
Synchronize_01();//开始判断
flage++;//累加标志
TH0=(65536-20)%256;//预置数高八位20us
TL0=(65536-20)/256;//预置数低八位20us
}
//主函数
void main()
{
INTERRUPT_0();//中断开启
INT_TIME();//中断配置函数
Clear_HL();// 清零函数
key_1();//继电器输出函数
while(temp==1)
{
flage=0;
AD1=0;
AD0=0;
while(IO_HL==1)
{
AD1=flage;
}
while(IO_HL==0)
{
AD0=flage;
}
if(AD1>=Adress0_MIN_15&&AD1<=Adress0_MAX_15&&AD0>=Adress0_MAX_15&&AD0<=Adress1_MAX_15)
{
DATA1++;
a[DATA1+DATA0]=1;
}
else if(AD1>=Adress0_MIN_21&&AD1<=Adress0_MAX_21&&AD0>=Adress0_MAX_21&&AD0<=Adress1_MAX_21)
{
DATA0++;
a[DATA1+DATA0]=0;
}
}
}
void Synchronize_01()//确定同步码
{
if(IO_HL==1)
{
Synchronize_1++;
}
else
{
Synchronize_0++;
}
if((flage==460)&&(Synchronize_1>=Synchronize_MIN_H0)&&(Synchronize_1<=Synchronize_MAX_H0)&&(Synchronize_0>=Synchronize_MIN_H1)&&(Synchronize_0<=Synchronize_MAX_H1))
{
temp=1;//若为同步码则为1
}
}
void INTERRUPT_0()//中断开启
{
if(IO_HL==1)
{
interrupt1=1;//开启中断
}
}
void Clear_HL()//清零函数
{
if((DATA1+DATA0)==24)
{
u8 i=0;
interrupt1=0;
temp=0;
for(i=0;i<=25;i++)
{
a[i]=0;
}
}
}
void key_1()//反转
{
if(a[21]==0)
{
realy=1;
}
}
复制代码
作者:
水深蓝
时间:
2019-9-29 11:51
楼主解码EV1527解决了么
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1