⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7279.c

📁 7279按键程序,简单易懂
💻 C
字号:
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#include<math.h>

//7279
sbit cs=P1^0;
sbit clk=P1^1;
sbit dat=P1^2;
sbit key=P1^3;
//485发送变量
unsigned char *piont1;
unsigned char fs_count,xor;
unsigned char idata fs[20];
sbit fa_song=P1^7;                                     //按键值
bit wanbi,fawan,fs_end;
//**********
//接受变量
unsigned char idata jishou[20],js_count;
unsigned char R_Count;
bit jieshou_wan;
//7279
void long_delay(void);             //长延时
void short_delay(void);            //短延时
void delay10ms(unsigned char);     //延时10ms
void write7279(unsigned char,unsigned char);
unsigned char read7279(unsigned char);
void send_byte(unsigned char);
unsigned char receive_byte(void);
#define CMD_RESET 0xa4
#define CMD_TEST 0xbf
#define DECODE0 0x80
#define DECODE1 0xc8
#define CMD_READ 0x15
#define UNDECODE 0x90
#define BLINKCTL 0x88


//7279程序   ///////////////////////////////////////////////
void send_byte(unsigned char out_byte)
{
        unsigned char i;
        cs=0;
        long_delay();
        for(i=0;i<8;i++)
        {
           if(out_byte&0x80)
           {
              dat=1;
           }
           else
           {
               dat=0;
           }
           clk=1;
           short_delay();
           clk=0;
           short_delay();
           out_byte=out_byte*2;
        }
        dat=0;


}

void write7279(unsigned char cmd, unsigned char dta )
{
   send_byte(cmd);
   send_byte(dta);
}
unsigned char read7279(unsigned char command)
{
    send_byte(command);
    return(receive_byte());
}
   unsigned char receive_byte(void)
   {
     unsigned char i,in_byte;
     dat=1;
     long_delay();
     for(i=0;i<8;i++)
     {
        clk=1;
        short_delay();
        in_byte=in_byte*2;
        if(dat)
        {
            in_byte=in_byte|0x01;
        }
        clk=0;
        short_delay();
     }
     dat=0;
     return(in_byte);
   }

 void long_delay(void)
   {
       unsigned char i;
       for(i=0;i<0x30;i++);
   }

   void short_delay(void)
   {
        unsigned char i;
        for(i=0;i<8;i++);
   }

//***************************************************************8//


delay3(unsigned char h)
{
    unsigned char i,j,k;
    for(i=0;i<h;i++)
    {
       for(j=0;j<4;j++)
       {
          for(k=0;k<245;k++);
       }
    }
}
/***********发送************

** 函数名称:startsend
** 功能描述:初始化发送
** 输 入:无
** 输 出:无
** 全局变量:xor,*piont1
** 调用模块: 无

** 日 期: 2007年5月9日/
***************************************************************/
void startsend(void)
{
   fs[0]=0x4c;fs[1]=0x5d;
   fa_song=1;piont1=fs;
   xor=0;
   SBUF=*piont1;                     //启动串口中断
   xor=xor^*piont1;piont1++;
   fs_count=fs[2]+3;
   wanbi=1;REN=0;
}

/**********************************************************
** 函数名称:fasong
** 功能描述:中断通信发送
** 输 入:无
** 输 出:无
** 全局变量:xor,*piont1
** 调用模块: 无
** 作者;袁涛
** 日 期: 2007年5月9日/
***************************************************************/
void fasong(void)   interrupt 4
{
    if(TI==1)
    {
       ES=0;TI=0;RI=0;fs_end=1;
       if(wanbi==1)
       {
          if(fs_count>1)
          {
             fa_song=1;  fs_count--;
             SBUF=*piont1;xor=xor^*piont1;
             piont1++;
          }
          else
          {
             SBUF=xor; wanbi=0; fawan=1;
          }
       }
       else
       {
           fa_song=0; REN=1;fs_end=0;          //////////////////////////发完标志//////////////
       }
       ES=1;TI=0;RI=0;
    }
    if(RI==1)
    {
       TH0=0;TL0=0;TR0=1;
       RI=0;
       jishou[R_Count]=SBUF;R_Count++;
    }
}
void jieshou(void)
{
    unsigned char data i,xor=0;
    if(jishou[0]==0xab&&jishou[1]==0xcd)
    {
        for(i=0;i<jishou[2]+3;i++)
        {
            xor=xor^jishou[i];
        }
        if(xor==jishou[jishou[2]+3])
        {
            write7279(DECODE1,jishou[6]);
            write7279(DECODE1+1,jishou[5]|0x80);
            write7279(DECODE1+2,jishou[4]);
            write7279(DECODE1+3,jishou[3]);
        }
        else
        {
            _nop_();
        }
    }
    jieshou_wan=0;
}
void time_2(void)  interrupt 1
{
    jieshou_wan=1;
    R_Count=0;
    TR0=0;TF0=0;
}
//*********接完*****//
void main(void)
{
   unsigned char keyz;
   SP=0xd0;
   TMOD=0x20;
   SCON=0x50;
   TH1=0xfd;TL1=0xfd;                    //设置波特率
   TH0=0;TL0=0;                          //定时器0
   ES=1;EA=1;TR1=1;
   ET0=1;
   fs_end=0;
   jieshou_wan=0;
   send_byte(CMD_RESET);               //7279复位
   write7279(DECODE1,9);
   write7279(DECODE1+1,9|0x80);
   write7279(DECODE1+2,9);
   write7279(DECODE1+3,9);
   while(1)
   {
        //keyz=key2();
       keyz=read7279(CMD_READ);
       switch(keyz)                                                   按键
       {
           case 0x3b:fs[2]=1;fs[3]=1;if(fs_end==0)startsend();break;
           case 0x3e:fs[2]=1;fs[3]=2;if(fs_end==0)startsend();break;
           case 0x3d:fs[2]=1;fs[3]=3;startsend();break;
           case 0x3c:fs[2]=1;fs[3]=4;startsend();break;
       }
       delay3(7);
       if(jieshou_wan==1)
       {
           jieshou();
       }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -