标题: 求帮助,万分感谢!EV1527解码,刚学的单片机不知那出问题,无法成功解码 [打印本页]

作者: 情迷白云    时间: 2021-5-14 22:57
标题: 求帮助,万分感谢!EV1527解码,刚学的单片机不知那出问题,无法成功解码
#include <STC15F104E.H>

typedef unsigned int u16;
typedef unsigned char u8;//无符号数据类型

u16 time ; //时间变量
sbit led=P3^5;

static
作者: 情迷白云    时间: 2021-5-14 22:57
#include <STC15F104E.H>  typedef unsigned int u16; typedef unsigned char u8;//无符号数据类型  u16 time ; //时间变量 sbit led=P3^5;  static        u8 u;  //static静态变量下次函数调用时,这个值保持不变。 u8 IRcord[3]; //用来存放用户码、用户反码、数据码、数据反码 u8 position[25]; //用来存放一帧数据+头码共25位  bit in_ok;  //接收完成标志 bit dispose_ok ; //解码完成标志  void shu_ju_chu_li()//数据处理函数 {   u8 y,j,k=1;     //局部变量   (K=1就是去掉引导位头码0位)         u8 cord,value;  //局部变量                   for(y=0;y<3;y++)//处理3个字节         {            for(j=1;j<=8;j++) //处理1个字节8位                     {                                     cord= position[k]; //把储存的数按位排列(K-第几位)                               value=value>>1; // 低位右移                                                                         if(cord>=4)      //  0.256MS*4=1M大于1Ms判断为1                                                 {                                                   value=value|0x80;  //(value|0x80按位或,首位是最低位放最高位等下个数过来再右移)                                                 }                                          u++;                // 右移一次加一位                                                         }                                         position[y]= value;  // 把按位排列好的数放在4组数里(y 是第几组)                                  value=0;  //清0以便接收下次数据         }           dispose_ok=1;  //处理完毕标志位置1 }  void InitTimer0(void) //定时器0初始化 {     TMOD = 0x02;  //设置定时器0,工作方式2,8位自动重载     TH0 = 0x0;     TL0 = 0x0;//最大溢出值256us     EA = 1;  //  打开总中断     ET0 = 1;//  定时器0允许位     TR0 = 1;// 计时 }  void Timer0Interrupt(void) interrupt 1 //定时中断函数 {    time++; } void Int0Init()//外部中断初始化 {   IT0=1; //外部中断0允许位         EX0=1; //允许外部中断0申请         EA=1; //打开总中断 } void Int0()interrupt 0  //外部中断0函数 {          u8 irin;         if(irin)  // //如果接收到信号         {                                   if(time>=46&&time<78)//                   u=0;                   position[u]=time;//把接收的数据时间保存在irdata[u]                         time=0;  //变量清0                   u++;   // 保存1位                  if(u==25)  //一帧数据+头码共33位                  {                    in_ok=1; //一帧数据接收完成                          u=0;   //变量清0                  }         }          else                         {                                                                 time=0;  //变量清0                                  irin=1;     //初始化接收脚                         } }  void main () {            Int0Init();    //调用外部中断函数         InitTimer0();  //调用定时中断函数    while(1)          {            if(in_ok)  //如果收完成标志为1                  {                     shu_ju_chu_li();  //调用红处理函数                            in_ok=0;  //标志清0                  }                  if(dispose_ok )  //遥控成功接收                                 {                                                 if (~position[2]==0x8d) //取反IRcord[2]第组数据,=?                                                                                  {                                                 position[2]=0;  //清0以便接收下次数据                                                 led=~led;                                         }                                 }          } }
作者: 13872888583    时间: 2021-5-15 07:09
楼主,你好,我也是一个新手小白,建议你把程序理顺一点,这样那些大师很清楚明白的看出问题所在,你这样写,估计你自己都看不明白
作者: 人人学会单片机    时间: 2021-5-15 09:42
看课程 先学习框架式编程吧  WQX-SQ开发板PCB文件下载 https://pan.baidu.com/s/1GNJywOm2PXB_lEb1Vy3qaQ
提取码:1234
作者: 情迷白云    时间: 2021-5-23 16:32
13872888583 发表于 2021-5-15 07:09
楼主,你好,我也是一个新手小白,建议你把程序理顺一点,这样那些大师很清楚明白的看出问题所在,你这样写 ...

发上来这不知道为什么这乱了

作者: 情迷白云    时间: 2021-5-23 16:32
人人学会单片机 发表于 2021-5-15 09:42
看课程 先学习框架式编程吧  WQX-SQ开发板PCB文件下载 https://pan.baidu.com/s/1GNJywOm2PXB_lEb1Vy3qaQ
...

感谢





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1