智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3438|回复: 10
打印 上一主题 下一主题

请摄像头组的朋友们帮忙看看!!

[复制链接]

2

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
99
威望
63
贡献
24
兑换币
23
注册时间
2012-11-29
在线时间
6 小时
毕业学校
皖西学院
跳转到指定楼层
1#
发表于 2013-4-12 18:24:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我根据别人代码改的摄像头采集程序,我用的是xs128的,但是采集出来的图像不对,还请摄像头的朋友们看看!!谢谢了!

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */


#define ROW  30
#define COLUMN 130

#define ROW_START 40
#define ROW_MAX 304

#define COLUMN_MIN 1
#define COLUMN_MAX 100
#define ROW1_MIN 2
#define ROW1_MAX (ROW-3)

#define WHITE 1
#define BLACK 0

#define THRESHOLD  0x20

unsigned char Image_Data[ROW][COLUMN];
unsigned char Image_Data1[ROW][COLUMN];


unsigned char *puc_Process = &Image_Data1[0][0];
unsigned char *puc_Process1 = &Image_Data[0][0];


unsigned int Line = 0;

unsigned char SampleFlag = 0;

unsigned char m = 0;


/****************************************************************
**      函数名称: PLL_init
**      函数功能: 锁相环初始化
*****************************************************************/

void PLL_init(void)
{
   CLKSEL = 0x00;
   PLLCTL_PLLON = 1;
   SYNR = 4;
   REFDV = 1;
   POSTDIV = 0x00;
   _asm(nop);
   _asm(nop);
   while(0 == CRGFLG_LOCK);
   CLKSEL_PLLSEL = 1;
}


/***************************************************************
**     函数名称: TIM_init
**     函数功能: 行场中断初始化
****************************************************************/

void TIM_init(void)
{
  TIOS = 0x00;
  TCTL4 = 0x09;
  TSCR1 = 0x80;
  TIE = 0x03;
  TFLG1 = 0xFF;
}

/**************************************************************
**    函数名称: SCI_init
**    函数功能: 串口初始化
***************************************************************/

void SCI_init(void)
{
  SCI0BD = 260;
  SCI0CR1 = 0;
  SCI0CR2 = 0x2C;
}

/***************************************************************
**     函数名称: IO_init
**     函数功能: IO初始化
****************************************************************/

void IO_init(void)
{
  DDRA = 0x00;
}

/**************************************************************
**    图像名称: SCI_Write
**    函数功能: 串口发送数据
***************************************************************/

void SCI_Write(unsigned char sendchar)
{
  while(!(SCI0SR1&80));
  SCI0DRH = 0;
  SCI0DRL = sendchar;
}


/*************************************************************
**    函数功能: 膨胀法去除噪声
**    函数名称: vImageCalcute
**************************************************************/

void vImageCalcute(void)
{
  unsigned char ucRow,ucColumn;
  unsigned char *pucTemp;

  for(ucColumn = COLUMN_MIN; ucColumn < COLUMN_MAX; ucColumn++)
  {
    for(ucRow = ROW1_MIN; ucRow < ROW1_MAX; ucRow++)
    {
      pucTemp = puc_Process + ucRow*COLUMN+ucColumn;

      if(*(pucTemp) == WHITE)
      {
        if(*(pucTemp - COLUMN) == BLACK && *(pucTemp + COLUMN) == BLACK)
        {
          *pucTemp = BLACK;
          ucRow++;
        }
      }
    }
  }      

  for(ucColumn = COLUMN_MIN; ucColumn < COLUMN_MAX; ucColumn++)
  {
    for(ucRow = ROW1_MIN; ucRow < ROW1_MAX; ucRow++)
    {
      pucTemp = puc_Process + ucRow*COLUMN+ucColumn;

      if(*(pucTemp) == BLACK)
      {
        if(*(pucTemp - COLUMN) == WHITE && *(pucTemp + COLUMN) == WHITE)
        {
          *pucTemp = BLACK;
          ucRow++;
        }
      }
    }
  }

}  

/*************************************************************
**    函数名称: delayms
**    函数功能: 延时函数
**************************************************************/

void delayms(long ms)
{
  while(ms--);
}

/**************************************************************
**    函数名称: Binaryzation
**    函数功能: 图像二值化
***************************************************************/

void Binaryzation(unsigned char row)
{
   unsigned char *q_Image,*p_Image;

   q_Image = &Image_Data1[row][0];

   for(p_Image = &Image_Data[row][0]; p_Image <= &Image_Data[row][COLUMN-1]; p_Image++)
   {
      if(*(p_Image) < THRESHOLD && *(p_Image+1) < THRESHOLD)
        *(q_Image++) = BLACK;
      else
        *(q_Image++) = WHITE;

   }
}

/************************************************************
**    函数名称:   Process
**    函数功能:   将数据传送到上位机
*************************************************************/

void Process(void)
{
  unsigned char i,j;
  unsigned char *Temp;


  SCI_Write(0x01);

  for(i = 0; i < ROW; i++)
  {
    Temp = &Image_Data[i][0];

    for(j = 3; j < COLUMN; j++)
    {
      if(*Temp > THRESHOLD) SCI_Write('1');
      else SCI_Write('0');
    }
  }

  SCI_Write(0x0D);
  SCI_Write(0X0A);
  }



void main(void) {
  /* put your own code here */

  PLL_init();
  TIM_init();
  SCI_init();
  IO_init();


        EnableInterrupts;


  for(;;) {
  vImageCalcute();
  Process();

    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}

/****************************************************************
**      Interrupt functions start HERE!!!
****************************************************************/

#pragma CODE_SEG __NEAR_SEG NON_BANKED

void interrupt 8 PT0_Interrupt()
{
   unsigned char Interval;
   unsigned char *pucTemp;

   TFLG1_C0F=1;
   delayms(3);
   Line++;
   if ( SampleFlag == 0 || Line<ROW_START || Line>ROW_MAX )

   {
      return;
    }

   if(Line<=132)           Interval= 16;
   if(Line>132&&Line<=200) Interval= 12;
   if(Line>200&&Line<=248) Interval= 8;
   if(Line > 248)          Interval=4;   

   if(Line % Interval == 0 && m < ROW)   
  {
    pucTemp = &Image_Data[m][0];

  *(pucTemp + 0) = PORTA;_asm();*(pucTemp + 1) = PORTA;_asm();*(pucTemp + 2) = PORTA;_asm();*(pucTemp + 3) = PORTA;_asm();
  *(pucTemp + 4) = PORTA;_asm();*(pucTemp + 5) = PORTA;_asm();*(pucTemp + 6) = PORTA;_asm();*(pucTemp + 7) = PORTA;_asm();
  *(pucTemp + 8) = PORTA;_asm();*(pucTemp + 9) = PORTA;_asm();*(pucTemp + 10) = PORTA;_asm();*(pucTemp + 11) = PORTA;_asm();
  *(pucTemp + 12) = PORTA;_asm();*(pucTemp + 13) = PORTA;_asm();*(pucTemp + 14) = PORTA;_asm();*(pucTemp + 15) = PORTA;_asm();
  *(pucTemp + 16) = PORTA;_asm();*(pucTemp + 17) = PORTA;_asm();*(pucTemp + 18) = PORTA;_asm();*(pucTemp + 19) = PORTA;_asm();
  *(pucTemp + 20) = PORTA;_asm();*(pucTemp + 21) = PORTA;_asm();*(pucTemp + 22) = PORTA;_asm();*(pucTemp + 23) = PORTA;_asm();
  *(pucTemp + 24) = PORTA;_asm();*(pucTemp + 25) = PORTA;_asm();*(pucTemp + 26) = PORTA;_asm();*(pucTemp + 27) = PORTA;_asm();
  *(pucTemp + 28) = PORTA;_asm();*(pucTemp + 29) = PORTA;_asm();*(pucTemp + 30) = PORTA;_asm();*(pucTemp + 31) = PORTA;_asm();
  *(pucTemp + 32) = PORTA;_asm();*(pucTemp + 33) = PORTA;_asm();*(pucTemp + 34) = PORTA;_asm();*(pucTemp + 35) = PORTA;_asm();
  *(pucTemp + 36) = PORTA;_asm();*(pucTemp + 37) = PORTA;_asm();*(pucTemp + 38) = PORTA;_asm();*(pucTemp + 39) = PORTA;_asm();
  *(pucTemp + 40) = PORTA;_asm();*(pucTemp + 41) = PORTA;_asm();*(pucTemp + 42) = PORTA;_asm();*(pucTemp + 43) = PORTA;_asm();
  *(pucTemp + 44) = PORTA;_asm();*(pucTemp + 45) = PORTA;_asm();*(pucTemp + 46) = PORTA;_asm();*(pucTemp + 47) = PORTA;_asm();
  *(pucTemp + 48) = PORTA;_asm();*(pucTemp + 49) = PORTA;_asm();*(pucTemp + 50) = PORTA;_asm();*(pucTemp + 51) = PORTA;_asm();
  *(pucTemp + 52) = PORTA;_asm();*(pucTemp + 53) = PORTA;_asm();*(pucTemp + 54) = PORTA;_asm();*(pucTemp + 55) = PORTA;_asm();
  *(pucTemp + 56) = PORTA;_asm();*(pucTemp + 57) = PORTA;_asm();*(pucTemp + 58) = PORTA;_asm();*(pucTemp + 59) = PORTA;_asm();
  *(pucTemp + 60) = PORTA;_asm();*(pucTemp + 61) = PORTA;_asm();*(pucTemp + 62) = PORTA;_asm();*(pucTemp + 63) = PORTA;_asm();
  *(pucTemp + 64) = PORTA;_asm();*(pucTemp + 65) = PORTA;_asm();*(pucTemp + 66) = PORTA;_asm();*(pucTemp + 67) = PORTA;_asm();
  *(pucTemp + 68) = PORTA;_asm();*(pucTemp + 69) = PORTA;_asm();*(pucTemp + 70) = PORTA;_asm();*(pucTemp + 71) = PORTA;_asm();
  *(pucTemp + 72) = PORTA;_asm();*(pucTemp + 73) = PORTA;_asm();*(pucTemp + 74) = PORTA;_asm();*(pucTemp + 75) = PORTA;_asm();
  *(pucTemp + 76) = PORTA;_asm();*(pucTemp + 77) = PORTA;_asm();*(pucTemp + 78) = PORTA;_asm();*(pucTemp + 79) = PORTA;_asm();
  *(pucTemp + 80) = PORTA;_asm();*(pucTemp + 81) = PORTA;_asm();*(pucTemp + 82) = PORTA;_asm();*(pucTemp + 83) = PORTA;_asm();
  *(pucTemp + 84) = PORTA;_asm();*(pucTemp + 85) = PORTA;_asm();*(pucTemp + 86) = PORTA;_asm();*(pucTemp + 87) = PORTA;_asm();
  *(pucTemp + 88) = PORTA;_asm();*(pucTemp + 89) = PORTA;_asm();*(pucTemp + 90) = PORTA;_asm();*(pucTemp + 91) = PORTA;_asm();
  *(pucTemp + 92) = PORTA;_asm();*(pucTemp + 93) = PORTA;_asm();*(pucTemp + 94) = PORTA;_asm();*(pucTemp + 95) = PORTA;_asm();
  *(pucTemp + 96) = PORTA;_asm();*(pucTemp + 97) = PORTA;_asm();*(pucTemp + 98) = PORTA;_asm();*(pucTemp + 99) = PORTA;_asm();
  *(pucTemp + 100) = PORTA;_asm();*(pucTemp + 101) = PORTA;_asm();*(pucTemp + 102) = PORTA;_asm();*(pucTemp + 103) = PORTA;_asm();
  *(pucTemp + 104) = PORTA;_asm();*(pucTemp + 105) = PORTA;_asm();*(pucTemp + 106) = PORTA;_asm();*(pucTemp + 107) = PORTA;_asm();
  *(pucTemp + 108) = PORTA;_asm();*(pucTemp + 109) = PORTA;_asm();*(pucTemp + 110) = PORTA;_asm();*(pucTemp + 111) = PORTA;_asm();
  *(pucTemp + 112) = PORTA;_asm();*(pucTemp + 113) = PORTA;_asm();*(pucTemp + 114) = PORTA;_asm();*(pucTemp + 115) = PORTA;_asm();
  *(pucTemp + 116) = PORTA;_asm();*(pucTemp + 117) = PORTA;_asm();*(pucTemp + 118) = PORTA;_asm();*(pucTemp + 119) = PORTA;_asm();
  *(pucTemp + 120) = PORTA;_asm();*(pucTemp + 121) = PORTA;_asm();*(pucTemp + 122) = PORTA;_asm();*(pucTemp + 123) = PORTA;_asm();
  *(pucTemp + 124) = PORTA;_asm();*(pucTemp + 125) = PORTA;_asm();*(pucTemp + 126) = PORTA;_asm();*(pucTemp + 127) = PORTA;_asm();
  *(pucTemp + 128) = PORTA;_asm();*(pucTemp + 129) = PORTA;_asm();

  //Process(m);

  m++;
   }
   else return;

   Binaryzation(m);
}


#pragma CODE_SEG __NEAR_SEG NON_BANKED//场中断处理函数
void interrupt 9 PT1_Interrupt()

{
  TFLG1_C1F=1;
  TFLG1_C0F=1;
  m=0;         
  Line=0;      
  SampleFlag=1;
}

36

主题

1837

帖子

3

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6375
威望
3368
贡献
1847
兑换币
2326
注册时间
2013-2-3
在线时间
580 小时
2#
发表于 2013-4-12 19:25:13 | 只看该作者
你这么又臭又长的代码贴出来,谁有耐心给你一点点看啊。看完都天黑了。
回复 支持 反对

使用道具 举报

2

主题

479

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
16171

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章资源大师奖章

威望
9831
贡献
3996
兑换币
2051
注册时间
2012-1-17
在线时间
1172 小时
3#
发表于 2013-4-12 19:46:17 | 只看该作者
灰原姐姐 发表于 2013-4-12 19:25
你这么又臭又长的代码贴出来,谁有耐心给你一点点看啊。看完都天黑了。

正解!
回复 支持 反对

使用道具 举报

31

主题

619

帖子

0

精华

跨届大侠

大神经常病

Rank: 10Rank: 10Rank: 10

积分
8900

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
4214
贡献
2736
兑换币
2252
注册时间
2012-2-15
在线时间
975 小时
4#
发表于 2013-4-12 19:50:13 | 只看该作者
楼上正解。。。
回复 支持 反对

使用道具 举报

25

主题

1217

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
27530

论坛元老奖章活跃会员奖章优秀会员奖章在线王奖章资源大师奖章

QQ
威望
18731
贡献
5857
兑换币
3255
注册时间
2012-6-6
在线时间
1471 小时
5#
发表于 2013-4-12 21:44:30 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

104

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1016
威望
512
贡献
306
兑换币
356
注册时间
2013-3-10
在线时间
99 小时
6#
发表于 2013-4-13 14:16:13 | 只看该作者
不会
回复 支持 反对

使用道具 举报

3

主题

48

帖子

0

精华

高级会员

Rank: 4

积分
642
威望
328
贡献
198
兑换币
217
注册时间
2013-2-22
在线时间
58 小时
毕业学校
哈工大
7#
发表于 2013-5-26 01:18:26 | 只看该作者
:L
回复 支持 反对

使用道具 举报

17

主题

778

帖子

0

精华

跨届大侠

教育部高等学校自动化专业教学指导委员会特派员

Rank: 10Rank: 10Rank: 10

积分
9090

活跃会员奖章优秀会员奖章论坛元老奖章在线王奖章资源大师奖章

威望
6912
贡献
262
兑换币
1202
注册时间
2012-3-14
在线时间
958 小时
8#
发表于 2013-6-30 03:44:47 | 只看该作者
回复 支持 反对

使用道具 举报

39

主题

363

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3395
威望
2261
贡献
24
兑换币
1453
注册时间
2012-11-24
在线时间
556 小时
毕业学校
江苏科技大学
9#
发表于 2013-6-30 03:48:37 | 只看该作者
一楼正解,楼主还是贴俩张图,然后描述下具体情况吧,逛论坛这么久,从来没看过别人贴的程序,,,
回复 支持 反对

使用道具 举报

39

主题

363

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3395
威望
2261
贡献
24
兑换币
1453
注册时间
2012-11-24
在线时间
556 小时
毕业学校
江苏科技大学
10#
发表于 2013-6-30 03:53:55 | 只看该作者
灰原姐姐 发表于 2013-4-12 19:25
你这么又臭又长的代码贴出来,谁有耐心给你一点点看啊。看完都天黑了。

灰原姐姐,你在我心中的形象毁了,,,,“又臭又长,又臭又长,又臭又长,又臭又长,又臭又长,又臭又长、、、”

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-30 03:19 , Processed in 0.361983 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表