图像采集程序.docx
- 文档编号:20312341
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:20
- 大小:18.17KB
图像采集程序.docx
《图像采集程序.docx》由会员分享,可在线阅读,更多相关《图像采集程序.docx(20页珍藏版)》请在冰豆网上搜索。
图像采集程序
图像采集程序
#include
#include"derivative.h"/*derivative-specificdefinitions*/
#include
#include
//#include"image_get.h"
#defineROW80
#defineROWS80//采集到的行数
#defineLINE71//每行采集的点数,即列数
#definedt0.35//预值系数
//#defineROW_START11
//#defineROW_MAX280
#defineTHRESHOLD112
ucharrow1=0;//当前图像数组的当前行数
introwjd=0;
unsignedcharAdata[ROW][LINE];//存放
intthreshold[ROWS];//每行阈值存放数组54个
//unsignedcharBuffer_Temp[ROW][COLUMN];
unsignedcharSampleFlag=0;
unsignedcharInterval=1;
unsignedintm=0;
unsignedintn=0;
unsignedintLine=0;
intflag=1;
floata;
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD_dataP0//数据口
#defineDelayNOP();{_nop_();_nop_();_nop_();_nop_();};
/***************************************************
**函数名称:
PLL_Init
**功能描述:
时钟初始化函数
**说明:
****************************************************/
voidPLL_Init(void)
{
CLKSEL=0x00;//48mhz
PLLCTL_PLLON=1;
SYNR=0XC0|0X05;
REFDV=0X80|0X01;
POSTDIV=0X00;
_asm(nop);
_asm(nop);
while(0==CRGFLG_LOCK);//锁相环锁定
CLKSEL_PLLSEL=1;//选定外部时钟
}
/***************************************************
**函数名称:
TIM_Init
**功能描述:
行场中断初始化函数
**说明:
****************************************************/
voidTIM_Init(void)
{
TIOS=0x00;//外部输入捕捉0,1通道
TCTL4=0x09;//通道0上升沿触发,通道1下降沿触发
TSCR1=0x80;//使能
TIE=0x03;//通道0,1中断使能
TFLG1=0xFF;//清中断标志位
}
/***************************************************
**函数名称:
IO_Init
**功能描述:
IO口初始化函数
**说明:
****************************************************/
voidIO_Init(void)
{
DDRA=0X00;
DDRB=0x00;
}
/***************************************************
**函数名称:
SCI_Init
**功能描述:
串口初始化函数
**说明:
****************************************************/
voidSCI_Init()
{
SCI0BD=312;//9600bpsBaudRate=BusClock/(16*SCIBD)
SCI0CR1=0;//正常8位模式,无奇偶校验
SCI0CR2=0X2C;//发送允许接受中断允许
}
//********************************************************/
//函数Dynamic_Threshold(void)
//功能:
动态阈值获得函数
//******************************************************
voidyuzhi(void)
{
intmax;
intmin;
intnr;//行
intnc;//列
for(nr=0;nr { max=10;//黑点的值 min=200;//白点的值 for(nc=0;nc { if(Adata[nr][nc]<=min) { min=Adata[nr][nc];//此点最小的灰度电压(黑点) } if(Adata[nr][nc]>=max) { max=Adata[nr][nc];//此点是最大的灰度电压(白点) } } threshold[nr]=(int)(dt*(max+min));//计算出此行的阈值并存入新的数组 } } /************************************************** **函数名称: SCI_Write **功能描述: 给串行口写一个字符数据 **输入: SendChar为写入字符 **输出: 无 **说明: ***************************************************/ voidSCI_Write(unsignedcharSendChar) { while(! (SCI0SR1&0x80));//判断是否已经把发送保持器的数据已被传送到发送移位器 SCI0DRH=0; SCI0DRL=SendChar; } /*调节图像中心延时*/ voidLittle_DELAY(uinttimer)//11 { inti; for(i=0;i _asm(nop); } /************************************************** **函数名称: Image_Binaryzation **功能描述: 图像数据二值化 **输入: row **输出: 无 **说明: ***************************************************/ /*voidImage_Binaryzation(unsignedintrow)//二值化程序 { unsignedchar*p_Image; unsignedchar*q_Image; q_Image=&Buffer_Temp[row][0]; for(p_Image=&Buffer[row][0];p_Image<=&Buffer[row][COLUMN-1];p_Image++) {*(q_Image++)=*p_Image;} } */ /************************************************** **函数名称: Process **功能描述: 图像数据处理 **输入: 无 **输出: 无 **说明: ***************************************************/ voidProcess() { unsignedchari,j; for(i=0;i { for(j=0;j { if(Adata[i][j]>THRESHOLD){ //基准打压是32 SCI_Write('1'); } else{ SCI_Write('0'); flag=1; } } SCI_Write(0x0D); SCI_Write(0X0A); } TIE_C1I=1; } /*************************************************** **函数名称: main **功能描述: 主函数 **说明: ****************************************************/ voidmain(void) { /*putyourowncodehere*/ intflag=0; PLL_Init(); TIM_Init(); IO_Init(); SCI_Init(); EnableInterrupts; while (1) { //yuzhi(); if(SampleFlag==1) { SampleFlag=0;//清楚场中断标志位 //yuzhi(); Process(); if(flag==0){ if(row1>0){ a=245; } } } //_FEED_COP();/*feedsthedog*/ } /*loopforever*/ /*pleasemakesurethatyouneverleavemain*/ } /************************************************** **函数名称: 中断处理函数 **功能描述: 行中断处理函数 **输入: 无 **输出: 无 **说明: ***************************************************/ #pragmaCODE_SEG__NEAR_SEGNON_BANKED voidinterrupt8Port1_interrupt(void) { TFLG1_C0F=1;//清除行中断标志 TIE_C1I=0; rowjd++; if((rowjd>10&&rowjd<=60&&rowjd%2==0)||(rowjd>=60&&rowjd<120&&rowjd%2==0)||(rowjd>=120&&rowjd<170&&rowjd%2==0))//20,25,25 { Little_DELAY(39);//调解中心位置 Adata[row1][0]=PORTA;asmnop; Adata[row1][1]=PORTA;asmnop; Adata[row1][2]=PORTA;asmnop; Adata[row1][3]=PORTA;asmnop; Adata[row1][4]=PORTA;asmnop; Adata[row1][5]=PORTA;asmnop; Adata[row1][6]=PORTA;asmnop; Adata[row1][7]=PORTA;asmnop; Adata[row1][8]=PORTA;asmnop; Adata[row1][9]=PORTA;asmnop; Adata[row1][10]=PORTA;asmnop; Adata[row1][11]=PORTA;asmnop; Adata[row1][12]=PORTA;asmnop; Adata[row1][13]=PORTA;asmnop; Adata[row1][14]=PORTA;asmnop; Adata[row1][15]=PORTA;asmnop; Adata[row1][16]=PORTA;asmnop; Adata[row1][17]=PORTA;asmnop; Adata[row1][18]=PORTA;asmnop; Adata[row1][19]=PORTA;asmnop; Adata[row1][20]=PORTA;asmnop; Adata[row1][21]=PORTA;asmnop; Adata[row1][22]=PORTA;asmnop; Adata[row1][23]=PORTA;asmnop; Adata[row1][24]=PORTA;asmnop; Adata[row1][25]=PORTA;asmnop; Adata[row1][26]=PORTA;asmnop; Adata[row1][27]=PORTA;asmnop; Adata[row1][28]=PORTA;asmnop; Adata[row1][29]=PORTA;asmnop; Adata[row1][30]=PORTA;asmnop; Adata[row1][31]=PORTA;asmnop; Adata[row1][32]=PORTA;asmnop; Adata[row1][33]=PORTA;asmnop; Adata[row1][34]=PORTA;asmnop; Adata[row1][35]=PORTA;asmnop; Adata[row1][36]=PORTA;asmnop; Adata[row1][37]=PORTA;asmnop; Adata[row1][38]=PORTA;asmnop; Adata[row1][39]=PORTA;asmnop; Adata[row1][40]=PORTA;asmnop; Adata[row1][41]=PORTA;asmnop; Adata[row1][42]=PORTA;asmnop; Adata[row1][43]=PORTA;asmnop; Adata[row1][44]=PORTA;asmnop; Adata[row1][45]=PORTA;asmnop; Adata[row1][46]=PORTA;asmnop; Adata[row1][47]=PORTA;asmnop; Adata[row1][48]=PORTA;asmnop; Adata[row1][49]=PORTA;asmnop; Adata[row1][50]=PORTA;asmnop; Adata[row1][51]=PORTA;asmnop; Adata[row1][52]=PORTA;asmnop; Adata[row1][53]=PORTA;asmnop; Adata[row1][54]=PORTA;asmnop; Adata[row1][55]=PORTA;asmnop; Adata[row1][56]=PORTA;asmnop; Adata[row1][57]=PORTA;asmnop; Adata[row1][58]=PORTA;asmnop; Adata[row1][59]=PORTA;asmnop; Adata[row1][60]=PORTA;asmnop; Adata[row1][61]=PORTA;asmnop; Adata[row1][62]=PORTA;asmnop; Adata[row1][63]=PORTA;asmnop; Adata[row1][64]=PORTA;asmnop; Adata[row1][65]=PORTA;asmnop; Adata[row1][66]=PORTA;asmnop; Adata[row1][67]=PORTA;asmnop; Adata[row1][68]=PORTA;asmnop; Adata[row1][69]=PORTA;asmnop; Adata[row1][70]=PORTA;asmnop; /*Adata[row1][71]=PORTA;asmnop; Adata[row1][72]=PORTA;asmnop; Adata[row1][73]=PORTA;asmnop; Adata[row1][74]=PORTA;asmnop; /*Adata[row1][75]=PORTA;asmnop; Adata[row1][76]=PORTA;asmnop; Adata[row1][77]=PORTA;asmnop; Adata[row1][78]=PORTA;asmnop; Adata[row1][79]=PORTA;asmnop; Adata[row1][80]=PORTA;asmnop; Adata[row1][81]=PORTA;asmnop; Adata[row1][82]=PORTA;asmnop; Adata[row1][83]=PORTA;asmnop; Adata[row1][84]=PORTA;asmnop; Adata[row1][85]=PORTA;asmnop; Adata[row1][86]=PORTA;asmnop; Adata[row1][87]=PORTA;asmnop; Adata[row1][88]=PORTA;asmnop; Adata[row1][89]=PORTA;asmnop;*/ row1++;//采样行计数器加1 } if(rowjd==200)//该场采样完成 { TIE_C0I=0;//行中断禁止 TIE_C1I=1;//场图像中断标志,表示一场图像采集完毕 SampleFlag=1; //yuzhi(); } } /************************************************** **函数名称: 中断处理函数 **功能描述: 场中断处理函数 **输入: 无 **输出: 无 **说明: ***************************************************/ #pragmaCODE_SEG__NEAR_SEGNON_BANKED voidinterrupt9Port0_interrupt(void) { TFLG1_C1F=1; TIE_C1I=0;//关场 row1=0;//采样行 rowjd=0;//当前采样行 TIE_C0I=1;//开行 } #pragmaCODE_SEGDEFAUL #include"LCD.h" //====================================================================// //语法格式: voiddelay(uintz) //实现功能: 毫秒级延时函数 //参数: z--ms //返回值: 无 //====================================================================// voiddelay(uintz) { uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //====================================================================// //语法格式: staticbitLcd_Busy(void) //实现功能: 检查LCD忙状态。 为1时,忙,等待。 为0时,闲,可写指令与数据。 //参数: 无 //返回值: 忙状态 //====================================================================// staticbitLcd_Busy(void) { bitresult; LCD_RS=0; LCD_RW=1; LCD_EN=1; DelayNOP(); result=(bit)(P0&0x80); LCD_EN=0; return(result); } //====================================================================// //语法格式: voidLcd_WriteCmd(ucharcmd) //实现功能: 写指令数据到LCD //参数: 要写入的指令 //返回值: 无 //====================================================================// voidLcd_WriteCmd(ucharcmd) { while(Lcd_Busy()); LCD_RS=0; LCD_RW=0; LCD_EN=0; _nop_(); _nop_(); P0=cmd; DelayNOP(); LCD_EN=1; DelayNOP(); LCD_EN=0; } //====================================================================// //语法格式: voidLcd_WriteDat(uchardat) //实现功能: 写显示数据到LCD //参数: 要显示的数据 //返回值: 无 //====================================================================// voidLcd_WriteDat(uchardat) { while(Lcd_Busy()); LCD_RS=1; LCD_RW=0; LCD_EN=0; P0=dat; DelayNOP(); LCD_EN=1; DelayNOP();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 采集 程序