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

📄 untitled1

📁 微处理器在arm的编程
💻
字号:
#include"71x_type.h"
#include "uart.h"

/////////////////////////////////////////////////////////////////////////
u8 CAM_SendBuf[6];
u8 CAM_Statu;
u8 CAM_ReceiveBuf[300];
u8 CAM_StartSend;
u8 CAM_ReceiveLen;
//////////////////////////////////////////////////////////////////////////////
#define CAM_IDLE   0
#define CAM_INIT   1
#define CAM_SAVE   2
////////////////////////////////////////////////////////////////////////////
void CAM_ReceiveInterrupt(void)   //接收中断
{
  u8 bRByte; 
  UART_ByteReceive(UART1,(u8*)&bRByte, 0xFF);
  if((bRByte!=0xAA)&&(CAM_ReceiveLen ==0))
   {
     CAM_ReceiveLen =0;
     return;
   }
  CAM_ReceiveBuf[CAM_ReceiveLen]= bRByte;
  CAM_ReceiveLen++;
  if(CAM_ReceiveLen>5)
  {
    CAM_ReceiveLen=0;
    if((CAM_ReceiveBuf[1]==0x0D)&&(CAM_ReceiveBuf[5]==0x00)) CAM_Sendanswer(); //返回应答 
    if((CAM_ReceiveBuf[1]==0x0A)&&(CAM_ReceiveBuf[5]==0x01)) CAM_StartSend='A';
   } 
}
///////////////////////////////////////////////////////////////////////////////////
void Clear_ReceiveBuf(void)    //      清接收缓冲区
{
  u8 i;
  for(i=0;i<300;i++)CAM_ReceiveBuf[i]=0;
}

void Clear_ReceiveBufA(void)
{
  u8 i;
  for(i=0;i<7;i++)CAM_ReceiveBuf[i]=0;
}
/////////////////////////////////////////////////////////////////////////////
void  CAM_Sendsys(void) //同步
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x0D;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}
///////////////////////////////////////////////////////////////////////////////
void  CAM_Sendinit(void) //初始化
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x01;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x07;
  CAM_SendBuf[4]=0x05;
  CAM_SendBuf[5]=0x05;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}
//////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendbag(void) //包大小
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x06;
  CAM_SendBuf[2]=0x08;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x02;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}
//////////////////////////////////////////////////////////////////////////////
void  CAM_Sendcap(void) //快照
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x05;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}
//////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendget(void) //获取图像命令
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x04;
  CAM_SendBuf[2]=0x01;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}
///////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendsleep(void) //休眠
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x09;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}
//////////////////////////////////////////////////////////////////////////////////////
void  CAM_Sendend(void)  //结束图像传送
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x0E;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=0xF0;
  CAM_SendBuf[5]=0xF0;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
}
//////////////////////////////////////////////////////////////////////////////////////
void CAM_Sendanswer(void)  //同步应答
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x0E;
  CAM_SendBuf[2]=0x0D;
  CAM_SendBuf[3]=0x01;
  CAM_SendBuf[4]=0x00;
  CAM_SendBuf[5]=0x00;
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20);
  CAM_ReceiveOK='V';
}
//////////////////////////////////////////////////////////////////////////////////////
void CAM_SendNext(u16 count) //按包号获取图像数据包
{
  CAM_SendBuf[0]=0xAA;
  CAM_SendBuf[1]=0x0E;
  CAM_SendBuf[2]=0x00;
  CAM_SendBuf[3]=0x00;
  CAM_SendBuf[4]=(u8)(count&0xff);
  CAM_SendBuf[5]=(u8)((count>>8)&0xff);
  UART_DataSend(UART0,CAM_SendBuf,6);
  Delay_NS(20); 
}
//////////////////////////////////////////////////////////////////////////////////
u8 CAM_GetPhoto(void)//获取缓冲区图像
{
  u8 i;
  Clear_ReceiveBufA();//清除缓冲
  for(i=0;i<50;i++)
  {
    CAM_Sendsys();    ////同步
    Delay_NS(200);
    if(CAM_ReceiveBuf[2]==0x0D)
      {
        CAM_Statu=CAM_INIT;  //2
        break;
      }
  }
  if(i==50) return 1;
  CAM_Sendinit();//初始化
  Delay_NS(200);
  if(CAM_ReceiveBuf[2]!=0x01) return 1;
  CAM_Sendbag();//包大小
  Delay_NS(200);
  if(CAM_ReceiveBuf[2]!=0x06) return 1;
  CAM_Sendcap();//快照
  Delay_NS(200);
  if(CAM_ReceiveBuf[2]!=0x05) return 1;
  CAM_Sendget();//获取图像
  Delay_NS(200);
  if(CAM_ReceiveBuf[2]!=0x04) return 1;
  return 0;
}
//////////////////////////////////////////////////////////////////////////
u16 DataBuff[100]={0};    //数据缓存
u8 TempBuff[100]={0};    //临时缓存
////////////////////////////////////////////////////////////////////////////
u8 SendCmd()                  //发送命令对摄像头及摄像头写串口
{
  u8 bRet,aRet;
  aRet=CAM_GetPhoto(void);//对摄像头设置
   if(aRet==1)            //写成功
    { UART_DataSend(UART0,TempBuff,6);
        Delay_NS(50);
        bRet=1;
        return bRet;
    }
    elsee                    //写失败
    {
      bRet=0;
      return  bRet; 
    }
}
////////////////////////////////////////////////////////////////////////////////
u8 ReceiveCmd()           // 读串口程序
{  
   u8 bRet;
   DataBuff=UART_DataReceive(UART0,TempBuff,6, 2);//Receive uart data
   Delay_NS(50);
   CAM_Sendend(void)
   if(DataBuff!=0)         //读成功                   
    {
      bRet=1;
      CAM_Sendend(void);
      CAM_Sendsleep(void);
      return bRet;
    }
    else                     //读失败
    {
       bRet=0;
       return bRet;
    }
}
/////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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