📄 手创科技摄像头信号采集程序(可行).txt
字号:
#include <hidef.h>
#include <MC9S12XS128.h>
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
unsigned short int chesudu;
/*手创科技摄像头信号采集程序*/
//-淘宝店:http://sochange.taobao.com/-----------
//客服联系人:刘生:15812442294 技术联系人:廖生:15920998230
//欢迎联系技术qq:974205767(因工作繁忙,一般晚上在线)
//采集到的数据在二维数组ta[lie][hang_end]里;
//接口定义: 行同步接PT2 场同步接PT1 信号线是接A0
//------------------------------------------------
#define lie_end 260
#define hang_end 100
#define lie 32//51
#define delay(num) \
{ \
unsigned int i,j; \
for(i=0;i<num;i++) \
for(j=0;j<48;j++); \
}
unsigned char c_lie=0,g_lie=0;
unsigned int lie_count=0,hang_count=0;
unsigned char ta[lie][hang_end];
unsigned int get_n[]={ 16,29,41,52,62,71,79,86,92,98,
103,108,112,116,120,124,128,132,135,138,
141,144,147,150,153,156,159,162,165,168,
170,172,174,176,178,180,182,184,186,188,
190,192,194,196,198,200,202,204,206,208,
210,211,212,242,243,245,246,247,248,249,250};
#define uchar unsigned char
#define uint unsigned int;
void chaopin(void);
void TIM_init(void);
void shijian(void);
void atd_init(void);
void pwm_init(void);
void main(void)
{
DDRA=0X00;
DDRJ=0X02;
DDRK=0X30;
PTJ_PTJ1=1;//RS 0输入指令 1输入数据
PORTK_PK5=1; //R/W 0向lcd输入指令或数据、1从lcd读取数据
PORTK_PK4=1; //E 使能信号 1读取信息 1到0的下降沿执行指令
DisableInterrupts;
{
chaopin();
atd_init();
TIM_init();//计数器函数初始化
shijian();
pwm_init();
delay(900) ;
EnableInterrupts;
{
unsigned int e,w;
for(e=1;e<6;e++)
for(w=0;w<10;w++);
}
}
for(;;)
{
DDRE=0XFF;
DDRM=0XFF;
PORTE_PE4=0;
PTM_PTM3=0;
PTM_PTM4=1;
PTM_PTM5=0;
{
unsigned int e,w;
for(e=1;e<60000;e++)
for(w=0;w<100;w++);
}
PORTE_PE4=1;
PTM_PTM3=1;
PTM_PTM4=0;
PTM_PTM5=1;
{
unsigned int e,w;
for(e=1;e<60000;e++)
for(w=0;w<100;w++);
}
}
}
void chaopin(void)
{
CLKSEL=0X00;
PLLCTL_PLLON=1;
SYNR =0xc0 | 0x07;
REFDV=0xc0 | 0x01;
POSTDIV=0x00;
_asm(nop);
_asm(nop);
_asm(nop);
_asm(nop);
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL =1;
}
void atd_init(void)
{
ATD0CTL1=0x00;
ATD0CTL2=0X40; //禁止中断 转换后自动清除寄存器
ATD0CTL3=0X88; //没有断点 没有FIFO 通道0开始 单通道 继续转换右对齐 转换序列1
ATD0CTL4=0X00; //4周期,64/2,最快
ATD0CTL5=0X30; // 连续转换 多通道转换 通道AN0开始
ATD0DIEN=0x00; //相应的数字信号输入禁止
}
void TIM_init(void)
{
PACTL=0X50;
PACNT=0X0000;
TIOS =0x00;//定时器通道0,1 为输入捕捉
TSCR1=0x80;//定时器使能
TCTL4=0x18;//通道 1 捕捉下降沿通道 2 捕捉上升沿
TIE=0x06; //通道 1,2 中断使能
TFLG1=0xFF;//清中断标志位
}
void shijian(void) {
PITCFLMT_PITE=0;
PITCE_PCE0=1;
PITLD0=9999;
PITMTLD0=5;
PITMUX=0X00;
PITINTE_PINTE0=1;
PITCFLMT_PITE=1;
}
void pwm_init(void)
{
PWMPRCLK=0X33;
PWMSCLA=0x04;
PWMSCLB=0x04;
PWMCLK=0x28;
PWMPOL=0xFF;
PWMCAE=0xC3;
PWMCTL=0xF0;
PWMDTY67=5200;//you5200 // 6410zuo 660 5860
PWMPER67=40000;
PWMPER45=1000;
PWMDTY45=0;
PWMPER23=1000;
PWMDTY23=0;
PWMDTY01=5800;//you5200 // 6410zuo 660 5860
PWMPER01=40000;
PWME_PWME7=1;
PWME_PWME5=1;
PWME_PWME3=1;
PWME_PWME1=1;
}
//---------------------------------
//=======图像采集中断函数,已经完全可以采集图像的=========
#pragma CODE_SEG NON_BANKED
void interrupt 10 IC2ISR(void) { //场中断
TFLG1_C2F=1;
if(lie_count==get_n[c_lie]) { //定距采集图像的判断条件
delay(1); //黑线中心矫正,确保不采集到消隐信号
for(hang_count=0;hang_count<=hang_end;hang_count++){ //读取一行的数据
ta[c_lie][hang_count]=PORTA_PA0; //采集数据的接口
}
c_lie++; //二维数组行自加
}
lie_count++; //摄像头行自加
}
void interrupt 9 IC1ISR(void){ //场中断,各数据清零
TFLG1_C1F=1;
hang_count=0;
lie_count=0;
c_lie=0;
}
void interrupt 66 PIT0Interrupt(void) //测速的中断程序
{
chesudu=PACNT; //车速度值
PITTF_PTF0=1;
PACNT=0X0000;
}
#pragma CODE_SEG DEFAULT
//接脚是行同步接pt2 场同步接pt1
//如果数组ta[c_lie][hang_count]没有图像,请检查接线的问题,以及接口是否按我们所说的接口。
//感谢你对手创科技的支持和信任,我们将不断的努力争取做得更好。
//如果有什么问题,欢迎咨询我们的技术人员。在程序首段有我们的联系方式。
//衷心祝愿我们的客户取得好的成绩!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -