📄 main.c
字号:
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#include <stdlib.h>
#include "RS232.h"
#include "systeminitial.h"
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
void main(void) {
int main_i=0,main_j=0;
int row_limit=30; //标记最近行取40个黑点,随着行数递增,它的值递减
int line_limit=32; //标记共取40场,每场一行
//int main_tj_j=0,main_tj_k=0;
//int main_i_error=0; //记录不符合条件的行数
//int line_error_num=0; //记录不符合条件的行号
//int sum_xy=0,main_xy=0;
uchar flag_speed_30=0;
//uint stop=0;
//uint flag=0;
//char threshold_difference=0;
//static char index_ccd_init_temp[40]={0}; //初始化的index_ccd值
//uchar distant_select=0; ///近中远选择标志
DisableInterrupts;
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
/* */
SYSTEM_Init();
//while(1)PWMDTY01=3000;/**/
PORTB=0xFF;
/* while(PORTA_BIT2==1)
{
PORTB=0X00;
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
//PWMDTY23=2000;
PWMDTY01=2750-shift_angle;
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
PWMDTY01=3000-shift_angle;
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<50;main_j++);
PWMDTY01=3250-shift_angle;
}*/
speed_v_min=(PTT&0x07)*10; //取T口的低3位的值*10(开关值) 70
speed_v_min+=110; //min=180
speed_v_unvisible=95; //unvisible=95
speed_v_max=speed_v_min; //max=180
while(PORTA_BIT2==1)
{
PORTB=0x55;
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<30;main_j++);
speed_v_max+=10; //max=190
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<30;main_j++);
PORTB=0xFF;
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<100;main_j++);
}/**/
PORTB=~(speed_v_max/5); //11011001
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<400;main_j++);
PORTB=0xFF;
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<100;main_j++);
while(PORTA_BIT2==1)
{
PORTB=0x55;
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<30;main_j++);
speed_v_unvisible+=10; //unvisible=105
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<30;main_j++);
PORTB=0xFF;
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<150;main_j++);
}
EnableInterrupts;
PIEH_PIEH0=1; //开启H口中断,即开始进入实时处理阶段
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<100;main_j++);
for(main_i=0;main_i<20000;main_i++) //摄像头预热
for(main_j=0;main_j<100;main_j++);
for(;;)
{
if(m>20)
{
m=0;
#ifndef sci_cmos_select
if(PORTA_BIT2==0)
{
PID();
//PWMDTY45=2500;
}
else
{
PWMDTY45=0;
PWMDTY23=0;
}
#endif
}
#ifdef sci_cmos_select
if(once1==1)
{
once1=0;
print_ad_video();
print_string("\r\n");
print_string("line_begin:");print_uchar(begin_line);print_string(" ");
print_string("line_end:");print_uint(last_line);
print_string("\r\n");
for(line_i=0;line_i<=LINE_num/10;line_i++)
{
print_uchar(index_cmos[line_i]);print_string(" ");
}
print_string("\r\n");
for(line_i=0;line_i<=LINE_num/10;line_i++)
{
print_uchar(index_cmos_flag[line_i]);print_string(" ");
}
print_string("\r\n");
for(line_i=0;line_i<=LINE_num/10;line_i++)
{
print_uchar(black_num_cmos[line_i]);print_string(" "); /**/
}
print_string("\r\n index_cmos_last:");
print_uchar(index_cmos_last);print_string("\r\n");
print_uchar(index_cmos[begin_line]);
print_uchar((index_cmos[begin_line]-index_cmos[last_line]));
print_string("\r\n k=");
print_uint(k);
print_string("\r\nbegin_line_flag:");print_uchar(begin_line_flag);
print_string("\r\nflag_cmos_visible");print_uchar(flag_cmos_visible);
print_string("\r\nright_line_cmos:");print_uchar(right_line_cmos);
print_string("\r\nxxx:");print_uchar(xxx);
PIEH_PIEH0=1;
}
#endif
//PWMDTY23=0;
//PWMDTY45=2000;
/* if(abs(index_cmos_last_50-index_center)<=2 && abs(index_cmos_last-index_center)<=2)
cmos_k=0;
else if((index_cmos_last_50>index_center && index_cmos_last>index_cmos_last_50) || (index_cmos_last_50<index_center && index_cmos_last<index_cmos_last_50))
cmos_k=0.1;
else
cmos_k=-0.1;
if(c>70*22/infrared_value7)
{
index_cmos_last_50=index_cmos_last;
c=0;
}
*/
//if(abs(index_cmos_last-index_center)<7 && last_line<5)
// index_cmos_last=(index_cmos_last-index_center)*0.9f+index_center;
// if(speed_v<70 && infrared_value7<55)
// speed_v=69;
// else
//speed_v=speed_v_max-(1.2f*(float)abs(3*index_cmos_last/*+index_cmos_begin_line_last*/-3*index_center));
//speed_v=speed_v_max-10.0f/16.0f*(2.0f*(float)abs(3*index_cmos_last/*+index_cmos_begin_line_last*/-3*index_center));
//if(infrared_value7<35)
// {
//speed_v=120;
// }
//speed_v=speed_v_max-(float)(speed_v_max-120)/14.0f*(float)(abs(index_cmos_last-index_center));
// /14.0f/3.0f+abs(PWMDTY01_temp-3000)/240.0f/3.0f+last_line/21.0f/3.0f
//speed_v=speed_v_max-(float)(speed_v_max-75)/48.0f*(float)(abs(3*index_cmos_last/*+index_cmos_begin_line_last*/-3*index_center));
// speed_v=speed_v_max-(float)(speed_v_max-speed_v_min)*0.5f*(abs(PWMDTY01_temp-3000)/220.0f+(float)abs(index_cmos_last-index_center)/14.0f);
/* */
speed_v=speed_v_max-(float)(speed_v_max-10)*0.5f*(abs(PWMDTY01_temp-3000)/240.0f+(float)abs(index_cmos[last_line]-index_center)/14.0f);
if(speed_v<speed_v_min)speed_v=speed_v_min;
if(flag_cmos_visible==0)speed_v=speed_v_unvisible;
/* if(infrared_value7<50)
{
speed_v=100;
}
if(infrared_value7>50)
{
//speed_v=20;
flag_speed_30=0;
}
else if(infrared_value7<=30)flag_speed_30=1;
if(flag_speed_30==1)speed_v=70; */
/*if(abs(index_cmos_last-index_center)<4 && abs(index_cmos_begin_line_last-index_center)<6)
{
//index_angle=(float)(index_cmos_last-index_center)*1.4f*(1.0f+cmos_k);//2.5f;//40.0f/16.0f; //30
//cmos_k=0;
speed_v=85.0f;///(1.0f+cmos_k);
//if(abs(index_cmos[begin_line]-index_center)<4)
//PID_P=22.1;
// speed_v=(index_cmos_last-index_center);
}
else if(abs(index_cmos_last-index_center)<7)
{
//index_angle=(float)((index_cmos_last-index_center)-2)*3.3f*(1.0f+cmos_k);//(float)(index_cmos_last-index_center)*(float)(index_cmos_last-index_center)*40.0f/16.0f/16.0f/16.0f;
//cmos_k=0;
//speed_v=55.0f/(1.0f+cmos_k)*(1.0f-abs(index_cmos_last-index_center)/10.0f);
//PID_P=12.1;
speed_v=75.0f;
}
else
{
//PID_P=28.1;
speed_v=38;//stop++;
} */
//else index_angle=(float)(index_cmos_last-index_center)*2.5f;
/*if(index_cmos_last>index_center)
index_cmos_last=index_cmos_last+1;
else if(index_cmos_last<index_center)
index_cmos_last=index_cmos_last-1;
*/
//print_string("01temp:");print_uint(PWMDTY01_temp);print_string("\r\n");
//print_string("01:");print_uint(PWMDTY01);print_string("\r\n");
//index_cmos_last=(index_cmos_last-index_center)*1.0+index_center;
//#ifdef sci_cmos_select
//print_uchar(index_cmos_last);print_string(" ");/*print_uchar(index_center);print_string(" ");*/
//print_uchar(abs(index_to_angle[index_cmos_last]));print_string("\r\n");
//#endif
//if(stop>=60000)while(1)
//{
//PWMDTY23=0;
//}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -