📄 untitled1
字号:
#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 + -