⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcd1252ap_drive.c

📁 这是东芝的一款CCD驱动芯片
💻 C
字号:
#include <c8051f310.h>
#include <TCD1252AP_Drive.h>	
#include<math.h>
#define SH_H  0x10
#define SH_L  0xEF
#define Fi1_H 0x08
#define Fi1_L 0xF7
#define Fi2_H 0x40
#define Fi2_L 0xBF
#define RS_H  0x20
#define RS_L  0xDF
extern void Init_Device();

xdata  unsigned char Image_Buffer[900];
unsigned int evr_pixel=0;  //
unsigned char pixel=0;   //定义像素变量
char byte ,flag,fg1=0;//flag为采集是否完成标志 
  
/***********************************************/
//起始时序
void 	Start_Stop()    
{
	char DLY;
	
	byte&=SH_L;
	byte&=Fi1_L;
	byte|=Fi2_H;
	byte&=RS_L;
	P1=	byte;        //

	byte&=SH_L;
	byte&=Fi1_L;
	byte|=Fi2_H;
	byte|=RS_H; 
	P1=	byte;        //  1

	byte&=SH_L;
	byte|=Fi1_H;
	byte&=Fi2_L;
	byte&=RS_L;
	P1=	byte;         //
	DLY=1;
	while(DLY--)PCA0CPH4 =0x00;
 	byte|=RS_H;
	P1=	byte;        // 2       

	byte|=SH_H;
	byte|=Fi1_H;
	byte&=Fi2_L;
	byte&=RS_L;
	P1=	byte;         // 
	DLY=1;
	while(DLY--)PCA0CPH4 =0x00;
	byte|=RS_H;
	P1=	byte;          //3
	byte|=SH_H;
	byte|=Fi1_H;
	byte&=Fi2_L;
	byte&=RS_L;
	P1=	byte;         
	DLY=1;
	while(DLY--)PCA0CPH4 =0x00;
	byte|=RS_H;       // 4
	byte&=SH_L;	
	byte|=Fi1_H;
	byte&=Fi2_L;
	byte&=RS_L;
	P1=	byte;
	byte&=RS_L; 
	P1=	byte;         //
	DLY=1;
	while(DLY--)PCA0CPH4 =0x00;// 5
	PCA0CPH4 =0x00;
}
/**************************************
			从线性CCD上读一个像素
**************************************
unsigned char read_One_Picture()					
{
  	AD0BUSY=1;           //启动转换
	while(AD0BUSY==1);   //等待结束
	pixel=ADC0H;         //读取像素值

}*/
/**************************************
			虚拟输出时序函数
***************************************/

/*void Dummy_Outputs()
{ 
	char dly;
	byte&=RS_L;         //RS=0
	P1=	byte;
	dly=2;
	while(dly--);
	AD0BUSY=1;           //启动转换
	while(AD0BUSY==1)PCA0CPH4 =0x00;   //等待结束
	pixel=ADC0H;         //读取像素值
	byte|=RS_H;          //RS=1
	P1=	byte;
	dly=1;
	while(dly--);        // t9 
	byte&=RS_L;      //RS=0
	P1=	byte;
       
	dly=2;			// t11 
	while(dly--);
	byte=(byte&0xB7)     //保留除Fi1和Fi2外的几位,
		+~byte&0x48;     //对Fi1和Fi2进行取反再和其他位相加
	P1=	byte;
	dly=1;
	while(dly--);
}*/
void Dummy_Outputs()
{
	char dly;
	byte&=RS_L;         //RS=0
	P1=	byte;
	dly=1;            
	while(dly--);     
	AD0BUSY=1;           //启动转换
	while(AD0BUSY==1)PCA0CPH4 =0x00;   //等待结束
	AD0BUSY=1;           //启动转换
	while(AD0BUSY==1)PCA0CPH4 =0x00;   //等待结束
	byte|=RS_H;          //RS=1
	P1=	byte;
	dly=1;	  
	while(dly--);
	byte&=RS_L;         //RS=0
	P1=	byte;
	dly=2;
	while(dly--);
	byte=(byte&0xB7)     //保留除Fi1和Fi2外的几位,
		+~byte&0x48;     //对Fi1和Fi2进行取反再和其他位相加
	P1=	byte;         //先FI1和FI2跳变
	dly=1;
	while(dly--);	 //t6
	pixel=ADC0H;         //读取像素值
}


void Read_Image(int nnn)
{
	Image_Buffer[nnn-40]=pixel;
	PCA0CPH4 =0x00;
}

void Timer0_Over_Interrupt() interrupt 1
{	   		
	static unsigned int nn=0;
		static char cir=0;
		Dummy_Outputs();
		if(nn<40)                   //虚拟输出40(Dummy_Outputs)
		{
			nn++;PCA0CPH4 =0x00;
		}
		else if(nn>=40&&nn<940)
		{
 			if(cir<2)                //一次采三个像素取平均
			{
        		evr_pixel+=pixel;    //读取像素值
				cir++;
			}
			else
			{
				cir=0;
				evr_pixel/=3;
				pixel=evr_pixel;
				Read_Image(nn);      //将像素值放入缓存
				nn++; 
				if(nn==300)
				fg1=1;
				PCA0CPH4 =0x00;
			} 
		}
		else if(nn>=940&&nn<951)  //虚拟输出12(Dummy_Outputs)
		{
			nn++;
		}
		else
		{
			TR0=0;
			nn=0;
			flag=1;
			byte|=SH_H;
			P1=	byte;
			byte&=SH_L;
			P1=	byte;
			 
			PCA0CPH4 =0x00;
		}
}
void main()
{	
	flag=0;
	Init_Device();
	AMX0P = 0x07;       //P1^7为正输入
	IE |=0x82;          //允许所有中断,允许定时器0溢出中断
	Start_Stop();
	TR0=1;             //定时器0启动
	while(1)
	{
		PCA0CPH4 =0x00;			//喂狗
		if(flag==1)
//  	PCA0CPH4 =0x00;			//喂狗
		{
			flag=0;
		//	evr_pixel=0;    //像素变量值清0
			Start_Stop();     //重新开始
			TR0=1;
		}
	
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -