久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
飛思卡爾B車攝像頭程序
[打印本頁]
作者:
俺家璐璐啦
時間:
2018-12-1 13:26
標(biāo)題:
飛思卡爾B車攝像頭程序
十三屆飛思卡爾B車程序開源
單片機(jī)源程序如下:
//作者:
//說明:saomiao文件下有一個lkcongzhongjiansaomiao()函數(shù)是圖像處理函數(shù),偏差處理以及舵機(jī)控制均在此文件下
//duoji_dianji文件下都是速度控制的相關(guān)程序,核心程序就是這兩個文件
#include "common.h"
#include "include.h"
#include "math.h"
#include "saomiao.h"
uint8 imgbuff[CAMERA_SIZE];
int currentzhongjian[60];
int right_heixian[60];
int left_heixian[60];
int quanjuCount;
int OutData[4],tuoluoyivar;
int star_lineflag=0;
int LK_jishi=0;
int LK_jishi_flag=0;
int LK_yanshi=0,zhidao_flag,yunsu_flag,yuzhi;
extern int podao_flag,zhangai_right,zhangai_left,qvlv_quanju,duandian,mubiao_speed,dawan_speed,qulv_jinduan;
extern void lukuangudge();
char go=0,S1,S,zhichong_flag;
extern char lcd_show_enable1;
//s16 speed_a;
extern int my_piancha;
int zhangaijishiright_flag=0,zhangaijishileft_flag=0;
//int kp=22,kd=10,right_heixian[60],lastpiancha_1,duojijiaodu,left_heixian[60],my_lastzhongjian=40,currentzhongjianzhi=40,rightheixian_flag,leftheixian_flag,xielv;
//函數(shù)聲明
void PORTA_IRQHandler();
void DMA0_IRQHandler();
void PIT0_IRQHandler();
void Priority_Set();
extern char s_wan_flag;
char pof;
//void PIT1_IRQHandler();
/*!
* @brief main函數(shù)
* @since v5.3
* @note 山外 DMA 采集攝像頭 實驗
注意,此例程 bus頻率設(shè)為100MHz(50MHz bus頻率會太慢而導(dǎo)致沒法及時采集圖像)
此例程使用的上位機(jī)為【山外多功能調(diào)試助手】
具體資料請參考:山外多功能調(diào)試助手資料專輯
*/
void hecheng()//虛擬中線函數(shù)
{
unsigned int ji;
for(ji=0;ji<=59;ji++)
{
imgyiwei[ji][currentzhongjian[ji]]=0 ;
}
}
void sendimg(uint8 *imgaddr,uint32 imgsize)
{
img_extract((u8 *)imgyiwei, imgbuff,CAMERA_SIZE); //解壓圖像
lkcongzhongjiansaomiao();
uint8 cmd[4] = {0, 255, 1, 0 }; //yy_攝像頭串口調(diào)試 使用的命令
hecheng();
uart_putbuff(VCAN_PORT, cmd, sizeof(cmd)); //先發(fā)送命令
uart_putbuff(VCAN_PORT, imgaddr, imgsize); //再發(fā)送圖像
}
void star_line_judg()//起跑線檢測
{
int kk,bai_flag=0,hei_flag=0,heibai_flag=0,baihei_flag=0;
for(kk=5;kk<=72;kk++)
{
if(imgyiwei[45][kk]>0)
bai_flag=1;
else
if(bai_flag&&imgyiwei[45][kk]==0)
{
baihei_flag++;
bai_flag=0;
}
if(imgyiwei[45][kk]==0)
hei_flag=1;
else
if(hei_flag&&imgyiwei[45][kk]>0)
{
heibai_flag++;
hei_flag=0;
}
}
if(baihei_flag>=4&&heibai_flag>=4&&baihei_flag-heibai_flag<=2)
star_lineflag=1;
}
void lkzhongjian()
{
unsigned int i;
for(i=0;i<=59;i++)
{
imgyiwei[i][currentzhongjian[i]]=0;
}
}
/*void sendimg(uint8 *imgaddr,uint32 imgsize)
{
uint8 cmd[4] = {0, 255, 1, 0 }; //yy_攝像頭串口調(diào)試 使用的命令
//hecheng();
uart_putbuff(VCAN_PORT, cmd, sizeof(cmd)); //先發(fā)送命令
uart_putbuff(VCAN_PORT, imgaddr, imgsize); //再發(fā)送圖像
// uart_putbuff(VCAN_PORT, currentzhongjian, 60); //再發(fā)送圖像
}*/
//**************************************************************************
/*
* 功能說明:SCI示波器CRC校驗
內(nèi)部調(diào)用函數(shù)
* 參數(shù)說明: 無
* 函數(shù)返回:無符號結(jié)果值
* 修改時間:2013-2-10
*/
//**************************************************************************
static unsigned short CRC_CHECK(unsigned char *Buf, unsigned char CRC_CNT)
{
unsigned short CRC_Temp;
unsigned char i,j;
CRC_Temp = 0xffff;
for (i=0;i<CRC_CNT; i++)
{
CRC_Temp ^= Buf[i];
for (j=0;j<8;j++) {
if (CRC_Temp & 0x01)
CRC_Temp = (CRC_Temp >>1 ) ^ 0xa001;
else
CRC_Temp = CRC_Temp >> 1;
}
}
return(CRC_Temp);
}
//************************************************
//
/*
* 功能說明:SCI示波器發(fā)送函數(shù)
* 參數(shù)說明:
OutData[] 需要發(fā)送的數(shù)值賦予該數(shù)組
* 函數(shù)返回:無符號結(jié)果值
* 修改時間:2013-2-10
*/
//****************************************************
void OutPut_Data(void)
{
int temp[4] = {0};
unsigned int temp1[4] = {0};
unsigned char databuf[10] = {0};
unsigned char i;
unsigned short CRC16 = 0;
for(i=0;i<4;i++)
{
temp[i] = (int)OutData[i];
temp1[i] = (unsigned int)temp[i];
}
for(i=0;i<4;i++)
{
databuf[i*2] = (unsigned char)(temp1[i]%256);
databuf[i* 2+1] = (unsigned char)(temp1[i]/256);
}
CRC16 = CRC_CHECK(databuf,8);
databuf[8] = CRC16%256;
databuf[9] = CRC16/256;
for(i=0;i<10;i++)
{
uart_putchar (UART0,(char)databuf[i]);
}
}
void SendHex(unsigned char hex) {
unsigned char temp;
temp = hex >> 4;
if(temp < 10) {
uart_putchar(UART0,temp + '0');
} else {
uart_putchar(UART0,temp - 10 + 'A');
}
temp = hex & 0x0F;
if(temp < 10) {
uart_putchar(UART0,temp + '0');
} else {
uart_putchar(UART0,temp - 10 + 'A');
}
}
void SendImageData(unsigned char ImageData[][80])
{
int lll1,lll2;
unsigned char crc = 0;
lkcongzhongjiansaomiao();
lkzhongjian();
/* Send Data */
uart_putchar(UART0,'*');
uart_putchar(UART0,'L');
uart_putchar(UART0,'D');
SendHex(0);
SendHex(0);
SendHex(0);
SendHex(0);
// imgyiwei[60][80];
for(lll2=0;lll2<80;lll2++)
{
for(lll1=0;lll1<60; lll1++)
SendHex(ImageData[lll1][lll2]);
}
/* for(ll1=0;ll1<60;ll1++)
{
for(ll0=0;ll0<80;ll0++)
{
if(imgyiwei[ll1][ll0]==0)
Draw_potL(ll0,ll1,0,1);
else
Draw_potL(ll0,ll1,1,1);
}
}*/
SendHex(crc);
uart_putchar(UART0,'#');
}
#if 1
//編碼器初始化
void FTM_QUAD_init()
{
/*開啟端口時鐘*/
SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
/*選擇管腳復(fù)用功能*/
// PORTA_PCR12 = PORT_PCR_MUX(7);
// PORTA_PCR13 = PORT_PCR_MUX(7);
PORTA_PCR10 = PORT_PCR_MUX(6);
PORTA_PCR11 = PORT_PCR_MUX(6);
/*使能FTM1、FTM2時鐘*/
// SIM_SCGC6|=SIM_SCGC6_FTM1_MASK;
SIM_SCGC3|=SIM_SCGC3_FTM2_MASK;
// FTM1_MOD = 65535; //可根據(jù)需要設(shè)置
FTM2_MOD = 65535;
// FTM1_CNTIN = 0;
FTM2_CNTIN = 0;
// FTM1_MODE |= FTM_MODE_WPDIS_MASK; //禁止寫保護(hù)
FTM2_MODE |= FTM_MODE_WPDIS_MASK; //禁止寫保護(hù)
// FTM1_MODE |= FTM_MODE_FTMEN_MASK; //FTMEN=1,關(guān)閉TPM兼容模式,開啟FTM所有功能
FTM2_MODE |= FTM_MODE_FTMEN_MASK; //FTMEN=1,關(guān)閉TPM兼容模式,開啟FTM所有功能
// FTM1_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //選定編碼模式為A相與B相編碼模式
// FTM1_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; //使能正交解碼模式
// FTM2_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //選定編碼模式為A相與B相編碼模式 0x8u 0x00001000取反即 0x11110111
FTM2_QDCTRL |= 0x08;//~0x00u;
FTM2_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; //使能正交解碼模式
//QUADMODE=1;
// FTM1_SC |= FTM_SC_CLKS(3); //選擇外部時鐘
// FTM1_CONF |=FTM_CONF_BDMMODE(3); //可根據(jù)需要選擇
FTM2_SC |= FTM_SC_CLKS(3);
// FTM2_CONF |=FTM_CONF_BDMMODE(3);
}
#endif
//**************************************************************************
void main(void)
{
DisableInterrupts;
dianji_canshu_init();
Priority_Set();
camera_init(imgbuff); //這里設(shè)定 imgbuff 為采集緩沖區(qū)。。。。!
ftm_pwm_init(FTM0,FTM_CH4,10000,0); //電機(jī)初始化
ftm_pwm_init(FTM0,FTM_CH5,10000,0);
ftm_pwm_init(FTM1,FTM_CH0,300,4495);//舵機(jī)初始化
ftm_quad_init(FTM2);//編碼器初始化
pit_init_ms(PIT0,5);//定時器中斷5ms
my_lcd_init();//液晶初始化
set_vector_handler(PIT0_VECTORn,PIT0_IRQHandler); // 設(shè)置中斷服務(wù)函數(shù)到中斷向量表里
enable_irq(PIT0_IRQn); // 使能PIT中斷
set_vector_handler(PORTA_VECTORn,PORTA_IRQHandler); //設(shè)置PORTA的中斷服務(wù)函數(shù)為 PORTA_IRQHandler
set_vector_handler(DMA0_VECTORn,DMA0_IRQHandler); //設(shè)置DMA0的中斷服務(wù)函數(shù)為 DMA0_IRQHandler
EnableInterrupts;
// adc_init (ADC1_SE4a);
//gpio_init(PTE28,GPO,0);//off
while(1)
{
// gpio_init(PTE28,GPO,0);//off
camera_get_img();
// my_lcd_show();
if(LK_jishi_flag==1)
star_line_judg();
// lptmr_delay_ms(1000);
// gpio_init(PTE28,GPO,1);//off
//sendimg((u8 *)imgyiwei, CAMERA_W * CAMERA_H);//我的上位機(jī),不注釋為向電腦發(fā)送圖像
}
}
/*!
* @brief PORTA中斷服務(wù)函數(shù)
* @since v5.0
*/
void PORTA_IRQHandler()
{
uint8 n = 0; //引腳號
uint32 flag = PORTA_ISFR;
PORTA_ISFR = ~0; //清中斷標(biāo)志位
n = 29; //場中斷
if(flag & (1 << n)) //PTA29觸發(fā)中斷
{
camera_vsync();
}
#if 0 //鷹眼直接全速采集,不需要行中斷
n = 28;
if(flag & (1 << n)) //PTA28觸發(fā)中斷
{
camera_href();
}
#endif
}
/*!
* @brief DMA0中斷服務(wù)函數(shù)
* @since v5.0
*/
//void PIT1_IRQHandler()
//{
//shizi_count++;
//}
void DMA0_IRQHandler()
{
camera_dma();
img_extract((u8 *)imgyiwei, imgbuff,CAMERA_SIZE);
}
void PIT0_IRQHandler(void)//定時器中斷服務(wù)函數(shù)
{
//lcd_show_enable1=0;//注釋掉是調(diào)用液晶
PIT_Flag_Clear(PIT0);
if(lcd_show_enable1)//為0跳出液晶
{
my_lcd_show();
}
else
{
/*****************************************************脈沖提取*************************************************************/
get_maichong();//獲取電機(jī)轉(zhuǎn)速
if(LK_jishi_flag==0)
LK_jishi++;
if(LK_jishi==300)//起步延時1.5秒
go=1;//小車前進(jìn)
if(LK_jishi>=2000)
{
LK_jishi_flag=1;
LK_jishi=2000;
}
/*****************************************************邊線提取*************************************************************/
lkcongzhongjiansaomiao();//圖像處理
if(star_lineflag==1)
LK_yanshi++;
if(!star_lineflag&&go)
{
if(yunsu_flag==1)
mubiao_speed=dawan_speed;
else
lukuangudge();//路況判斷
}
else
if(LK_yanshi>30)//檢測到起跑線
mubiao_speed=0;
//if(pof)
//mubiao_speed=0;
DSYJ_dianji_PID(mubiao_speed); //控制電機(jī)轉(zhuǎn)速
/************************************************************************S彎判定****************************************************/
if(s_wan_flag)
{
S1=1;
//s_wan_flag=0;
}
else
{
S=0;
S1=0;
}
if(S1&&S<=25)
S++;
if(S>=25)
{
zhichong_flag=1;
//gpio_set(PTE1,1);
}
else
{
zhichong_flag=0;
//gpio_set(PTE1,0);
}
/*******************************************************坡道處理*****************************************************/
// if(abs(my_piancha)<=16&&qvlv_quanju<=10&&duandian<12&&qulv_jinduan<12)
// tuoluoyivar=adc_once(ADC1_SE4a,ADC_8bit);
// else
// tuoluoyivar=104;
/* if(abs(tuoluoyivar-104)>40&&!podao_flag)
{
podao_flag=1;
// gpio_set(PTE1,1);
}
if(podao_flag&&podao_flag<800)
{
podao_flag++;
}
else
{
podao_flag=0;
//gpio_set(PTE1,0);
}
if(podao_flag>0&&podao_flag<130)
pof=1;
else
pof=0;*/
/*******************************************************障礙處理*****************************************************/
if(zhangai_right==1)
{
zhangaijishiright_flag=1;
zhangai_right=0;
}
else if(zhangai_left==1)
{
zhangaijishileft_flag=1;
zhangai_left=0;
}
if(zhangaijishileft_flag&&zhangaijishileft_flag<35)
{
zhangaijishileft_flag++;
// led(LED0, LED_ON);
}
else
if(zhangaijishiright_flag&&zhangaijishiright_flag<35)
{
zhangaijishiright_flag++;
}
else
zhangaijishiright_flag=zhangaijishileft_flag=0;
/************************************************************************直道判定*直道判定*****************************************************/
if(abs(my_piancha)<=13&&qvlv_quanju<=13&&duandian<10)
{
zhidao_flag++;
}
else
{
zhidao_flag=0;
}
//gpio_turn(PTA17);
/*****************************************************偏差處理*************************************************************/
pianchachuli();
}
}
void Priority_Set(void)
{
// NVIC_SetPriorityGrouping(4); //設(shè)置優(yōu)先級分組,4bit 搶占優(yōu)先級,沒有亞優(yōu)先級
NVIC_SetPriority(PORTA_IRQn,0); //配置優(yōu)先級
NVIC_SetPriority(DMA0_IRQn,1); //配置優(yōu)先級
NVIC_SetPriority(PIT0_IRQn,2); //配置優(yōu)先級
}
復(fù)制代碼
iar代碼下載:
program of B_CAR.7z
(680.72 KB, 下載次數(shù): 32)
2021-11-20 03:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
午夜精品久久久久久久久久久久久
|
成人av播放
|
狠狠爱视频
|
免费观看av
|
久久久黑人
|
国产一区二区三区
|
亚洲精品福利在线
|
久久免费精品
|
av免费看片
|
国产精品二区三区在线观看
|
福利视频日韩
|
精品国产一区二区三区av片
|
久久久久久免费毛片精品
|
久草在线高清
|
www.xxxx欧美
|
久久草视频
|
av天天操
|
国产精品中文字幕一区二区三区
|
91色网站
|
国产精品久久久久久久久久久久午夜片
|
美美女高清毛片视频免费观看
|
免费的色网站
|
中文字幕在线观看精品
|
在线中文字幕亚洲
|
夜夜爽夜夜操
|
国产精品久久久久久久久久
|
成人在线不卡
|
亚洲成人日韩
|
国产精品视频一二三区
|
国产欧美一区二区三区免费
|
一区二区三区视频在线免费观看
|
久久国内精品
|
成人三级视频
|
国产成人精品免费
|
免费特黄视频
|
欧美xxxx性
|
国产黄色一级电影
|
怡红院怡春院一级毛片
|
久久99精品久久久
|
色就是色欧美
|
免费视频一区二区
|