智能车制作
标题: 摄像头采集程序 [打印本页]
作者: 我爱你啊 时间: 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 |