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

📄 main.c

📁 自己编写的凌阳SPCA61A与SPCA563A图象识别模块连接驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
void chushi(void)
{unsigned x=0;
	
	rest();

	whdizhi(0x70);
	x=rdata(0xe1);
//	wdata(0x81,0x00);//cpu call
	
	wdata(0xe1,x|8);//初始化光源频率为50HZ
	
	x=rdata(0xe2);
		wdata(0xe2,x|8);//初始化自动色彩调整功能

	whdizhi(0x74);
	x=rdata(0x80);
	//wdata(0x80,x|3);//初始化分类模式
	
	//wdata(5,0xff);//准许颜色分离 
	
	whdizhi(0x75);//初始化方式为手动
	wdata(0,0);

	
	
	whdizhi(0x70);
//	wdata(0xe3,00);//初始化自动暴光模式
	
	wdata(0xe0,9);
	wdata(0xe8,0x00);//初始化为图形颜色识别方式
	
	
	
	
}
main()
{
	
	asm("int off");
	yejingzhan[0]=0;
	
	*P_IOB_Dir=0x00ff;
	*P_IOB_Attrib=0x00ff;
	*P_IOB_Data=0x00;		//初始化B口低8为为同相输出
	
	
	
	
	*P_IOA_Dir=0x9; //0 4 
	*P_IOA_Data=0;
	*P_IOA_Attrib=9;
	*P_INT_Ctrl=16+8+0x4000;//1KHZ 2HZ /1024
	
	*P_SystemClock=0xe0;
	asm("irq on");
	
	
	*P_Watchdog_Clear=0x01;
		xianshizhuangtai(12);//设置显示打开和状态
		xianshizhuangtai(12);//设置显示打开和状态

	chushi();
		xianshizhuangtai(12);//设置显示打开和状态
		xianshizhuangtai(12);//设置显示打开和状态

	
	for(;;)
	{
		
		*P_Watchdog_Clear=0x01;
	
	
		
		
		
		
	}
		
	
	
}



//*******************************************************************//
//Interrupt Service Routine For C language
//*******************************************************************//
#include"SPCE061A.h"
void BREAK(void) __attribute__ ((ISR));
void BREAK(void)
{
}
void FIQ(void) __attribute__ ((ISR));
void FIQ(void)
{

}

void IRQ0(void) __attribute__ ((ISR));
void IRQ0(void)  //fost/1024
{
	
		
	





//==========================================================================液晶显示的数据发送部分程序

dsf8+=1;
	if((kaishi==0)&&(yejingzhan[0]>0)&&(wancheng==1)&&(dsf8>2))					//数据栈操作
	{	//asm("int off");//缓冲栈操作的时候禁止中断
	
		data3=yejingzhan[1]; //数据出栈
		wancheng=0;
		
		yejingzhan[0]-=1; //栈地址减一
	
		for(dsf8=1;dsf8<69;dsf8++)					//栈下落一个单位
			yejingzhan[dsf8]=yejingzhan[dsf8+1];
				dsf8=0;
		//asm("irq on");
			
	}	
		
		
if (wancheng==0)
{		
	switch(kaishi)												//数据发送操作
	{
		case 0: {cs(1); sclk(0); std(1); }  break; //1
		case 1: {cs(1); sclk(1); }break;
		
		case 2: {cs(1); sclk(0); std(1); } break;//2
		case 3: {cs(1); sclk(1);  } break;
		
		case 4: {cs(1); sclk(0); std(1); } break;//3
		case 5:{cs(1); sclk(1);  } break;
		
		case 6: {cs(1); sclk(0); std(1); } break;//4
		case 7: {cs(1); sclk(1); } break;
		
		case 8: {cs(1); sclk(0); std(1); }break;//5
		case 9: {cs(1); sclk(1);  }break;
		
		case 10:{cs(1); sclk(0); std(data3>>9);}break;//6 rw
		case 11:{cs(1); sclk(1); }break;
		
		case 12:{cs(1); sclk(0); std(data3>>8&1);}break;//7 rs
		case 13:{cs(1); sclk(1); }break;
		
		case 14:{cs(1); sclk(0); std(0);}break;//8 0
		case 15:{cs(1); sclk(1);}break;
		
		case 16:{cs(1); sclk(0); std(data3>>7&1);}break;//9 bit7
		case 17:{cs(1); sclk(1); }break;
		
		case 18:{cs(1); sclk(0); std(data3>>6&1);}break;//10 bit6
		case 19:{cs(1); sclk(1); }break;
		
		case 20:{cs(1); sclk(0); std(data3>>5&1);}break;//11 bit5
		case 21:{cs(1); sclk(1); }break;
		
		case 22:{cs(1); sclk(0); std(data3>>4&1);}break;//12 bit4
		case 23:{cs(1); sclk(1); }break;
		
		case 24:{cs(1); sclk(0); std(0);}break;//13
		case 25:{cs(1); sclk(1);}break;
		
		case 26:{cs(1); sclk(0); std(0);}break;//14
		case 27:{cs(1); sclk(1); }break;
		
		case 28:{cs(1); sclk(0); std(0);}break;//15
		case 29:{cs(1); sclk(1);}break;
		
		case 30:{cs(1); sclk(0); std(0);}break;//16
		case 31:{cs(1); sclk(1); }break;
		
		case 32:{cs(1); sclk(0); std(data3>>3&1);}break;//17
		case 33:{cs(1); sclk(1);}break;
		
		case 34:{cs(1); sclk(0); std(data3>>2&1);}break;//18
		case 35:{cs(1); sclk(1); }break;
		
		case 36:{cs(1); sclk(0); std(data3>>1&1);}break;//19
		case 37:{cs(1); sclk(1); }break;
		
		case 38:{cs(1); sclk(0); std(data3&1);}break;//20
		case 39:{cs(1); sclk(1); }break;
		
		case 40:{cs(1); sclk(0); std(0);}break;//21
		case 41:{cs(1); sclk(1);}break;
		
		case 42:{cs(1); sclk(0); std(0);}break;	//22	
		case 43:{cs(1); sclk(1);}break;
		
		case 44:{cs(1); sclk(0); std(0);}break;//23
		case 45:{cs(1); sclk(1); }break;
		
		case 46:{cs(1); sclk(0); std(0);}break;//24
		case 47:{cs(1); sclk(1);}break;
		
		case 48:{cs(0); sclk(0); std(0);}break;
		case 49:;break;
		case 50:;break;
		
		default : kaishi=-1,wancheng=1;
	}
	kaishi+=1;
	
}
//==========================================================================液晶显示的数据发送部分程序
	

	
	
	
	
	*P_INT_Clear|=0x4000;
	
	
	
	
}
void IRQ1(void) __attribute__ ((ISR));
void IRQ1(void)
{
}
void IRQ2(void) __attribute__ ((ISR));
void IRQ2(void)
{
}
void IRQ3(void) __attribute__ ((ISR));
void IRQ3(void)
{
}
void IRQ4(void) __attribute__ ((ISR));
void IRQ4(void)
{
	
	//1KHZ

	if(resttem<100)resttem+=1;//传感器超时信号
	
	*P_INT_Clear|=16;//1KHZ rest

	
	

	
}


void bcd(void)
{
	x[0]=zz/100;
	zz=zz-x[0]*100;
	x[1]=zz/10;
	zz=zz-x[1]*10;
	x[2]=zz;
}

void IRQ5(void) __attribute__ ((ISR));
void IRQ5(void)
{
	//	xianshizhuangtai(14);//设置显示打开和状态

		whdizhi(0x74);
		
		zz=rdata(0x21);
		wddramdz(0x80);
		
		 whanzi("物");
	 	whanzi("体"); 
	 		wzifu('1');
	 		wzifu(0);
	 
		 whanzi("颜");
		 whanzi("色"); 
		whanzi("是"); 

		switch(zz&7)//颜色是分离识别
		{
		case 1: whanzi("蓝"); break;
		case 2: whanzi("绿"); break;
		case 4: whanzi("红"); break;
		case 6: whanzi("黄"); break;
		default: whanzi("无");
			
		}
		whanzi("色"); 
		
		
		
		wddramdz(0x90);
		
		 whanzi("物");
	 	whanzi("体"); 
	 wzifu('1');
	 	wzifu(0);
	 	
		 whanzi("形");
		 whanzi("状"); 
		whanzi("是"); 

		switch(zz&112)//物体形状的分离和识别
		{
		case 0: {whanzi("没");whanzi("有");} break;
		case 16: {whanzi("三");whanzi("角");} break;
		case 32: {whanzi("圆"); whanzi("形");}break;
		case 48: {whanzi("正");whanzi("方");}break;
		case 64: {whanzi("长");whanzi("方");} break;
		case 80: {whanzi("五");whanzi("角");} break;
		
		default: whanzi("无");
			
		}
		wddramdz(0x8e);
		zz=rdata(0x10);
		bcd();
		wzifu(x[0]+48);
		wzifu(x[1]+48);
		wzifu(x[2]+48);
		wzifu(0);
		
/*
		
		zz=rdata(0x47);
		wddramdz(0x88);
		
		 whanzi("物");
	 	whanzi("体"); 
	 	wzifu('2');
	 	wzifu(0);
	 	
		 whanzi("颜");
		 whanzi("色"); 
		whanzi("是"); 

		switch(zz&7)//颜色是分离识别
		{
		case 1: whanzi("蓝"); break;
		case 2: whanzi("绿"); break;
		case 4: whanzi("红"); break;
		case 6: whanzi("黄"); break;
		default: whanzi("无");
			
		}
		whanzi("色"); 
		
		
		
		wddramdz(0x98);
		
		 whanzi("物");
	 	whanzi("体"); 
	 	wzifu('2');
	 	wzifu(0);
		 whanzi("形");
		 whanzi("状"); 
		whanzi("是"); 

		switch(zz&112)//物体形状的分离和识别
		{
		case 0: {whanzi("没");whanzi("有");} break;
		case 16: {whanzi("三");whanzi("角");} break;
		case 32: {whanzi("圆"); whanzi("形");}break;
		case 48: {whanzi("正");whanzi("方");;}break;
		case 64: {whanzi("长");whanzi("方");} break;
		case 80: {whanzi("五");whanzi("角");} break;
		
		default: whanzi("无");
			
		}
		
*/
	
		
		
		wddramdz(0x88);
		
		zz=rdata(0x22);
		bcd();
		wzifu(x[0]+48);
		wzifu(x[1]+48);
		wzifu(x[2]+48);
		wzifu(0);
		
		zz=rdata(0x23);
		bcd();
		wzifu(x[0]+48);
		wzifu(x[1]+48);
		wzifu(x[2]+48);
		wzifu(0);
	
		zz=rdata(0x24);
		bcd();
		
		wzifu(x[0]+48);
		wzifu(x[1]+48);
		wzifu(x[2]+48);
		wzifu(0);
		

		wddramdz(0x98);		
		zz=rdata(0x25);
		bcd();
		wzifu(x[0]+48);
		wzifu(x[1]+48);
		wzifu(x[2]+48);
		wzifu(0);


		zz=rdata(0x26);
		bcd();
		wzifu(x[0]+48);
		wzifu(x[1]+48);
		wzifu(x[2]+48);
		wzifu(0);
	
		zz=rdata(0x27);
		bcd();	
		wzifu(x[0]+48);
		wzifu(x[1]+48);
		wzifu(x[2]+48);
		wzifu(0);

	
		*P_INT_Clear|=8;//4HZ rest

}
void IRQ6(void) __attribute__ ((ISR));
void IRQ6(void)
{
}
void IRQ7(void) __attribute__ ((ISR));
void IRQ7(void)
{
}

⌨️ 快捷键说明

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