智能车制作

标题: 摄像头采集程序 [打印本页]

作者: 我爱你啊    时间: 2012-3-4 21:17
标题: 摄像头采集程序
#include <hidef.h>      
#include <MC9S12XS128.h>
/*************宏定义****************************/
#define   uint          unsigned int
#define   uchar         unsigned char
#define   LINE_MAX      100              // 每行采集的点数,即列数
#define   ROW_MAX       55          // 采集到的行数
/*************变量定义**************************/
uchar a,b,c,temp;
uchar Image[ROW_MAX][LINE_MAX];//图像数据。
uchar row;                            //图像数组行数
uint  row_count;
uchar i;
uchar j;
uchar counter;
/***************变量及数组初始化****************/
void InitVariable(void)
{
   row=0;
   row_count=0;
   counter=0;
}
/*************主频设置**************************/
void Busclock(void)   //72MHz
{   
   CLKSEL=0x00;
   PLLCTL_PLLON=1;
   SYNR=0xC0 | 0x08;  
   REFDV=0xC0 | 0x01;
   POSTDIV=0x00;     
   _asm(nop);         
   _asm(nop);
   while(!(CRGFLG_LOCK==1));   
   CLKSEL_PLLSEL =1;      
}
/*************定时器初始化**********************/
void InitEct(void)
{
  TCTL4=0x09;   //通道上升沿触发,通道下降沿触发
  TSCR1=0x80;
  TIE_C1I = 1;  //场中断使能  开
  TIE_C0I = 0;  //行中断使能  关
}
/*************串口初始化*************************/
void InitSci(void)
{
   SCI0CR1 =0x00;
   SCI0CR2 =0x2c;    //enable Receive Full Interrupt,RX enable,Tx enable      
   SCI0BD  =0x1D5;   //SCI0BDL=busclk/(16*SCI0BDL)
                     //busclk  8MHz, 9600bps,SCI0BD=0x34
                     //busclk 16MHz, 9600bps,SCI0BD=0x68
                     //busclk 24MHz, 9600bps,SCI0BD=0x9C
                     //busclk 32MHz, 9600bps,SCI0BD=0xD0  
                     //busclk 40MHz, 9600bps,SCI0BD=0x106
                     //busclk 48MHz, 9600bps,SCI0BD=0x138
                     //busclk 56MHz, 9600bps,SCI0BD=0x16D
                     //busclk 64MHz, 9600bps,SCI0BD=0x1A0  
                     //busclk 72MHz, 9600bps,SCI0BD=0x1D5
                    
                     
}
/**************发射端程序************************/
void SciTx(uchar text)
{
   while (!(SCI0SR1&0x80));  
   SCI0DRH=0;
   SCI0DRL=text;
}
/*************I/O初始化*************************/
void InitIoport(void)
{
  DDRA=0x00;//A口为输入口
  DDRB=0xFF;//B口为输出口在指示中心位置
  DDRM_DDRM0 = 1;
  DDRM_DDRM1 = 0;
  PTM_PTM0=0;     
   asm(nop);
   asm(nop);
}
/**************延时******************************/
void Delay(int delay)
{ int i,j;
for(i=0;i<delay;i++)
{for(j=0;j<500;j++)
asm nop;
}
}
/**************求绝对值差************************/
uchar  PlusAbsolute(uchar m,uchar n)
{
  if(m>n)
  n=m-n;
  else
  n=n-m;
  return n;
}
/**************主函数*****************************/
void main()
{
   DisableInterrupts;
   Busclock();
   InitEct();
   InitSci();
   InitVariable();
   InitIoport();
   EnableInterrupts;
for(;;){}
   Delay(4000);  
  /*  for(i=0;i<ROW_MAX;i++)
    {
       for(j=0;j<LINE_MAX;j++)                                                                     
       {
          if(Image[j]<0x70)
         Image[j]=0xFF;
          else Image[j]=0x0;
       }
     } */  
      
    for(i=ROW_MAX-1;i>0;i--)
       for(j=LINE_MAX-20-1;j>19;j--)                                                                     
         SciTx(Image[j]);  
   
}
/**************行中断采集*************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 Port0_interrupt(void)
{
  TFLG1=0x01; //清除行中断标志
  row_count++;
  if(row_count%3==0)
  {
    for(i=0;i<41;i++)
    asm nop;
    for(i=0;i<LINE_MAX;i++)
      Image[row]=PORTA;   
   row++;
   if(row==ROW_MAX)
     TIE_C0I = 0;
  }
}
/**********场中断处理******************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 9 Port1_interrupt(void)
{
  TFLG1=0x02;
  TIE_C0I = 1; //开行中断
  row = 0;
row_count=0;
// if(counter==1)
//   TIE=0;  
// counter++;
}


作者: HRain    时间: 2012-3-6 21:25
楼主 你为什么在 开始扫描前加个延时啊,有什么妙处没?
作者: dianzicluo    时间: 2012-3-7 21:20
顶!谢……先
作者: wbx2050    时间: 2012-3-7 23:09
采集的速度吗啊
作者: 滴滴水上飘    时间: 2012-3-9 12:04
路过
作者: 夏天C的微笑    时间: 2012-3-15 21:20
这个程序能运行吗???
作者: 木未    时间: 2012-3-15 23:44
表示怀疑~
作者: 醉酒眠花    时间: 2012-4-2 21:24
HRain 发表于 2012-3-6 21:25
楼主 你为什么在 开始扫描前加个延时啊,有什么妙处没?

跑之前不得静止几秒么?
作者: happy_fun    时间: 2012-4-26 21:04
这个程序有问题呀,楼主的这句Image[row]=PORTA; 没有什么意义吧???请楼主指教!!!
作者: ljzzhinengche    时间: 2012-5-7 20:02
for(i=0;i<LINE_MAX;i++)

      Image[row]=PORTA;   
这样行吗,,不是二维数组吗
作者: 封号式寂寞    时间: 2012-5-13 15:31

作者: 1434636181    时间: 2012-11-11 18:13
跑之前不得静止几秒么?
,好像是刚开始采集的不是视频信号,需要延时一会儿,不知道我说得到对不对楼主??
作者: 1434636181    时间: 2012-11-11 18:18
还是用来调节摄像头采集到的所有点的中心点所在的点数????请赐教!!
作者: 可欣    时间: 2013-3-28 20:32
看看
作者: 453893145    时间: 2013-4-28 04:01





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2