软件摸拟EV1527编码IC 【恢复】

2020-02-06 09:51发布

点击此处下载 ourdev_449590.pdf(文件大小:332K) (原文件名:EV1527.pdf) 



点击此处下载 ourdev_449591.pdf(文件大小:340K) (原文件名:F05P.pdf) 



点击此处下载 ourdev_449592.rar(文件大小:28K) (原文件名:16F84A F05P.rar) 







(原文件名:00.jpg) 





(原文件名:01.jpg) 





(原文件名:02.jpg) 





EV1527的编码格式和PT2262的差不多...只要修改按键数据部份就可以控制PT2272...



//引入头文件*********************************************************

#include          "delay.h"

#include          "delay.c"

#include      <pic1684.h>



//时间常数***********************************************************

#define       RcOsc     910                                //脉冲总宽



//脚位定义***********************************************************

#define       Led       RA0                                //指示输出



//数据输出***********************************************************

#define       Out       RA1                                //数据输出 



//按键数据***********************************************************

     unsigned char value = 3;                              //按键的值  



//*******************************************************************

//函数名称:port_init();

//输入参数:无

//输出参数:无

//功能描述:端口设置

//建造日期:2008.10.11

//*****************************************************************

void PortInit(void)

 {

     OPTION = 0x00;                                        //允许上拉



     PORTA = 0xfc;                                         //  

     TRISA = 0xfc;                                         //A 口设置   

     

     PORTB = 0xff;                                         //

     TRISB = 0xff;                                         //B 口设置       

 }



//*******************************************************************

//函数名称:TxSycn();

//输入参数:无

//输出参数:无

//功能描述:发送同步头

//建造日期:2008.10.11

//*******************************************************************

void TxSycn(void)

 { 

       Out = 1;                                            //同步数据

       DelayUs(RcOsc / 16 * 4);

       Out = 0; 

       DelayMs(RcOsc / 16 * 124 / 1000);

 }



//*******************************************************************

//函数名称:TxByte(data);

//输入参数:待发数据

//输出参数:无

//功能描述:发送一字节数据

//建造日期:2008.10.11

//*******************************************************************

void TxByte(unsigned char data)

 {

     unsigned char i;

     

     for (i = 0; i < 8; i++)

      {

       if (data & 0x01)                                    //发送高位                          

        {

         Out = 1;                                          //高位数据

         DelayUs(RcOsc / 16 * 12);

         Out = 0; 

         DelayUs(RcOsc / 16 * 4);

        }



       else                                                //发送低位                                    

        {

         Out = 1;                                          //低位数据

         DelayUs(RcOsc / 16 * 4);

         Out = 0;

         DelayUs(RcOsc / 16 * 12);                                        

        }



       data>>= 1;                                         //右移一位

      }

 }



//*******************************************************************

//函数名称:TxData(data);

//输入参数:按键数据

//输出参数:无

//功能描述:发送数据

//建造日期:2008.10.11

//*******************************************************************

void TxData(unsigned char data)

 {   

     unsigned char buff[3] = {0xaa, 0x3c, 0x03};

     unsigned char i, j;

     

     buff[2] &= 0x0f;                                      //清除按键

     buff[2] |= data;                                      //加载按键     



     for (j = 0; j < 4; j++)                               //每帆四次

      {

       TxSycn();                                           //送同步头



       for (i = 0; i < 3; i++)                   

        {

         TxByte(buff);                                  //发送数据    

        }

      }

 }



//*******************************************************************

//函数名称:KeyRead();

//输入参数:无

//输出参数:无

//功能描述:读取按键

//建造日期:2008.10.11

//*******************************************************************

void KeyRead(void)

 {

     static unsigned char temp = 0;                        //临时记录

     static unsigned char read = 0;                        //按键记录

     static unsigned char sign = 0;                        //状态标志

     static unsigned char time = 0;                        //防误记时



     temp = PORTB & 0x03;                                  //读取按键

     

     if (sign == 0)

      {

       if (read == temp)                                   //是否稳定

        {

         if (++time> 50)                                  //防误处理

          {

           time = 0;                                       //记时清零

           sign = 1;                                       //下个状态

           value = read;                                   //有效按键

          } 

        }

       

       else time = 0;                                      //从新记时  

      }



     else if (temp == 0x03) sign = 0;                      //等待弹起

               

     read = temp;                                          //更新记录

 }



//*******************************************************************

//函数名称:KeyInt();

//输入参数:无

//输出参数:无

//功能描述:按键处理

//建造日期:2008.10.11

//*******************************************************************

void KeyInt(void)

 {

     if (value != 3)                                       //是否有效

      {

       switch (value)

        {

         case 0B00000010:                                  //1 号按键

              {

           Led = 1;

           TxData(0x80); 

           Led = 0; 

                              

           break;

                  } 

                 

         case 0B00000001:                                  //2 号按键

              {

           Led = 1; 

           TxData(0x40);

           Led = 0; 



           break;

                  } 



         case 0B00000000:                                  //复合按键

          {

           Led = 1;

           TxData(0xc0);

           Led = 0; 

             

           break;

          }

                 

         default:                                          //无效离开

              { 

           break;

              }          

        }



       value = 3;                                          //执行一次

      }

 }



//*******************************************************************

//函数名称:main();

//输入参数:无

//输出参数:无

//功能描述:主要程序

//建造日期:2008.10.11

//*******************************************************************

void main(void)                                            //

 { 

     PortInit();                                           //脚位设置

    

     while (1)

      {

       DelayMs(1);                                         // 

       KeyRead();                                          //读取按键

       KeyInt();                                           //按键处理 

      }  

 }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。