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

📄 udp6453gd101.c

📁 NEC6453与51系列单片机通讯子程序
💻 C
📖 第 1 页 / 共 5 页
字号:

	for(zf_i=0;zf_i<=288;zf_i++)
		{
		uPD6453_16(0xCE,0xCF);	/*显示字符命令*/		
		}
}
/*延时信号*/
void	delay(UCHAR  delay_time)
{
	count_timer1=0;
	while(1)
		{
		if(count_timer1>delay_time)	return;
		DOG=!DOG;
		}	
}
/*START 起始*/
void	eerom_star()
{
	EEROM_SCL=1;
	delay(0);
	EEROM_SDA=0;
	delay(0);
	EEROM_SCL=0;
	delay(0);
}
/*写1个字节*/
void	eerom_wr_byte(uchar eerom_data)
{
	uchar i;
	data_ls=eerom_data;
	for(i=0;i<8;i++)		/*ADDR 地址*/
		{
		EEROM_SDA=SDA7;
		delay(0);
		EEROM_SCL=1;
		delay(0);
		data_ls=data_ls<<1;
		EEROM_SCL=0;
		delay(0);
		}
}
/*ACK by 应答*/
void	eerom_ack()
{
	EEROM_SDA=1;
	delay(0);
	EEROM_SCL=1;
	delay(0);
	EEROM_SCL=0;
	delay(0);
}
/*STOP停止*/
void	eerom_stop()
{
	EEROM_SDA=0;
	delay(0);
	EEROM_SCL=1;
	delay(0);
	EEROM_SDA=1;
	delay(0);
	EEROM_SCL=0;
	delay(0);
}
/*AT24C02 EEROM读子程序*/
/*uchar eerom_rd(数据地址0-256)*/
uchar 	eerom_rd(uchar data_addr)
{
	uchar i;
	EEROM_WP=0;	/*AT24C02使能*/	
	eerom_star();			/*START 起始*/
	eerom_wr_byte(0xA0);		/*"1,0,1,0,A2,A1,A0,R/W*/
	eerom_ack();			/*ACK by 应答*/
	eerom_wr_byte(data_addr);	/*ADDR 地址*/
	eerom_ack();			/*ACK by 应答*/

	eerom_star();			/*START 起始*/
	eerom_wr_byte(0xA1);		/*"1,0,1,0,A2,A1,A0,R/W*/
	eerom_ack();			/*ACK by 应答*/

	data_ls=0;
	for(i=0;i<8;i++)		/*数据data*/
		{
		EEROM_SCL=1;
		delay(0);
		data_ls=data_ls<<1;
		SDA0=EEROM_SDA;
		EEROM_SCL=0;
		delay(0);
		}

//	eerom_ack();			/*ACK by 应答*/
	eerom_stop();			/*STOP停止*/
	EEROM_WP=1;	/*AT24C02使能*/	
	return(data_ls);
}
/*AT24C02 EEROM按字节写子程序*/
/*uchar eerom_wr(数据地址0-256,数据)*/
uchar 	eerom_byte_wr(uchar data_addr,uchar wdata)
{
	uchar i;
	EEROM_WP=0;	/*AT24C02使能*/	
	eerom_star();			/*START 起始*/
	eerom_wr_byte(0xA0);		/*"1,0,1,0,A2,A1,A0,R/W*/
	eerom_ack();			/*ACK by 应答*/
	eerom_wr_byte(data_addr);	/*ADDR 地址*/
	eerom_ack();			/*ACK by 应答*/
	eerom_wr_byte(wdata);		/*DATA 数据*/
	eerom_ack();			/*ACK by 应答*/
	eerom_stop();			/*STOP停止*/

	delay(10);				/*延时*/
	EEROM_WP=1;	/*AT24C02使能*/	
}
/*设置中文数据整理子程序*/
/*void	chinese_data_cl()*/
void	chinese_data_cl(uchar ram_addr,UCHAR hz_addr)
{
	UCHAR	i;
        uint	hz_addr_ls;
	UCHAR	hz_data_ls0,hz_data_ls1;

	if(ram_addr>7)	ram_addr=0;
	if(hz_addr>91)	hz_addr=0;
	
	hz_addr_ls=hz_addr*32;
	hz_addr_ls=HZ_ADDR+hz_addr_ls;
	
	ram_addr=ram_addr<<5;
	
	uPD6453_16(0x86,ram_addr);	/*显示位置命令*/
	uPD6453_16(0x90,0);	/*显示位置命令*/
	for(i=0;i<32;i++)
		{		
		DATA_P=hz_addr_ls+i;
		hz_data_ls0=*DATA_P;
		uPD6453_16(0x90,hz_data_ls0);	/*显示位置命令*/
		i++;
		}	
	uPD6453_16(0x90,0);	/*显示位置命令*/
	
	uPD6453_16(0x87,ram_addr);	/*显示位置命令*/
	uPD6453_16(0x90,0);	/*显示位置命令*/
	for(i=0;i<32;i++)
		{		
		i++;
		DATA_P=hz_addr_ls+i;
		hz_data_ls0=*DATA_P;
		hz_data_ls1=hz_data_ls0>>4;
		hz_data_ls1=hz_data_ls1+0x90;
		hz_data_ls0=hz_data_ls0<<4;
		uPD6453_16(hz_data_ls1,hz_data_ls0);	/*显示位置命令*/
		}	
	uPD6453_16(0x90,0);	/*显示位置命令*/
}		
/*******初始化CPU********/
void	star_cpu()
{
	UCHAR	i;
	UCHAR	data_addr_ls0;
	//ELC_ALC_CONT=0x3f;
	ELC_ALC_CONT=0x7f;
	P2=ELC_ALC_CONT & 0x7F;
	BW=1;
	MIRIS=0;
	BLCOF=1;
	MIRIS_SEL=0;	/*0:DC;1:VIDEO*/
	ALARM_OUT=1;
	P2=0xFF;
	//uPD6453_PCL=0;
	uPD6453_CS=1;
	EEROM_WP=1;	/*AT24C02使能*/
	TH2=0xFF;				/*波特率为9600*/
	TL2=0xBF;
	RCAP2H=0xFF;
	RCAP2L=0xBF;

	T2CON=0x34;				/*初始化定时器2*/
	T2MOD=0x00;

	/*TMOD=1  F5H=9600 20MHz*/
	TH0=0xBE;	                   	/*设置定时器0为10ms晶振=20MHz*/
	TL0=0xE5;
	TH1=0xF9;	                   	/*设置定时器1为1ms晶振=20MHz*/
	TL1=0x7D;

	PCON=PCON | 0x80;
	TMOD=0x11;
	SCON=0x50;	   	/*串口状态设置方式1,8位数据*/
	IP=0x01;
	TCON=0x05;		/*设外部中断0,1为下降沿触发*/

	PSW=0x00;
	DOG=!DOG;

	IE=0x8A;	/*外部中断1关闭*/
	TR0=0;
	TR1=1;

	//delay(100);	/*延时*/
	//uPD6453_PCL=1;
	SYNC_DEC=1;
	SYNC_INC=1;
	uPD6453_DATA	=1;	/*uPD6453数据*/
	uPD6453_CLK	=1;  	/*uPD6453时钟*/
	/*******AT24C02控制***********/
	EEROM_SCL=0;	/*EEROM时钟*/
	EEROM_SDA=1;   	/*EEROM数据*/
	EEROM_WP=0;	/*AT24C02使能*/		
	/*STOP停止*/
	EEROM_SDA=0;
	delay(0);
	EEROM_SCL=1;
	delay(0);
	EEROM_SDA=1;
	delay(0);
	EEROM_SCL=0;
	delay(0);
	EEROM_WP=1;	/*AT24C02使能*/	
	data_addr_ls0=eerom_rd(DC_VIDEO_ADDR);
	if(data_addr_ls0==0)	
		{
		DC_VIDEO_OE=0;
		MIRIS_SEL=1;	/*0:DC;1:VIDEO*/
		}
	else	{
		DC_VIDEO_OE=1;
		MIRIS_SEL=0;	/*0:DC;1:VIDEO*/
		}
	data_addr_ls0=eerom_rd(ELC_ALC_CONT_ADDR);
	if(data_addr_ls0>0x7f)	ELC_ALC_CONT=2;
	else				ELC_ALC_CONT=data_addr_ls0;
	P2=ELC_ALC_CONT & 0x7F;
	/*******uPD6453GT初始化************/
	uPD6453_8(0x34);         	/*复位*/
	uPD6453_8(0x05);	     	/*显示控制命令(关)*/
	uPD6453_8(0x30);  		/*放大倍数--正常*/

	uPD6453_8(0x41);  		/*无背景勾边*/
	uPD6453_8(0x1E);          /*黑背景勾黑边*/

	uPD6453_16(0x80,0xC7);	/*显示位置命令*/
	
	clr_crt();				/*清屏*/

	uPD6453_8(0x0D);		/*显示控制命令(开)*/
	menu_esc_bz=0;		/*菜单标志:1=菜单状态;0=否*/
	bitkey=0;
	vactive=0;
	dsbz=0;
	keyval_ls=0xFF;
	
	MENU_OE=0;			
	key_ud_bz=0;
	key_lr_bz=0;
	ley_lr_js=0;
	menu_time_js=0;	
}
void	systme_csh()
{
	UCHAR	i;
		
	eerom_byte_wr(COMP_55_ADDR1,0x55);
	eerom_byte_wr(COMP_55_ADDR2,0x55);
	eerom_byte_wr(COMP_AA_ADDR1,0xAA);
	eerom_byte_wr(COMP_AA_ADDR2,0xAA);
	
	eerom_byte_wr(CAM_ID_HZ_JS_ADDR,0);
	cam_id_js=0;
	
	for(i=0;i<16;i++)
		{
		eerom_byte_wr(i+BT_ADDR,'q');
		bt_cam[i]='q';
		}
	bt_cam[16]=0;
	bt_cam_x=3;
	bt_cam_y=2;
	eerom_byte_wr(BT_CAM_X_ADDR,bt_cam_x);
	eerom_byte_wr(BT_CAM_Y_ADDR,bt_cam_y);		
	//bt_cam_xy_cl();	
	
	
	ALC_ELC_OE=1;
	MIRIS=1;
	eerom_byte_wr(ALC_ELC_ADDR,ALC_ELC_OE);
	
	CAM_ID_OE=0;
	eerom_byte_wr(CAM_ID_ADDR,CAM_ID_OE);	
	
	SHUTTER_OE=8;	
	eerom_byte_wr(SHUTTER_ADDR,SHUTTER_OE);
	
	AGC_OE=1;
	eerom_byte_wr(AGC_ADDR,AGC_OE);
	AGCMAX=0;
	
	SENS_UP_OE=0;
	eerom_byte_wr(SENS_UP_ADDR,SENS_UP_OE);
	
	LL_INT_OE=1;
	eerom_byte_wr(LL_INT_ADDR,LL_INT_OE);
	LL_INT=1;	
	
	ATW_AWC_OE=0;
	eerom_byte_wr(ATW_AWC_ADDR,ATW_AWC_OE);
	AWB2=1;	
	
	DET_OE=0;
	eerom_byte_wr(DET_ADDR,DET_OE);
	
	DC_VIDEO_OE=1;
	eerom_byte_wr(DC_VIDEO_ADDR,DC_VIDEO_OE);
	MIRIS_SEL=0;	/*0:DC;1:VIDEO*/
	
	BLCOF_OE=1;
	eerom_byte_wr(BLCOF_ADDR,BLCOF_OE);
	BLCOF=0;		
	
	//ELC_ALC_CONT=0x3f;
	ELC_ALC_CONT=0x60;
	P2=ELC_ALC_CONT & 0x7F;
	eerom_byte_wr(ELC_ALC_CONT_ADDR,ELC_ALC_CONT);
	
	COARSE_OE=0;
	eerom_byte_wr(COARSE_ADDR,COARSE_OE);
	FINE_OE=0;
	eerom_byte_wr(FINE_ADDR,FINE_OE);
	
	R_OE=4;
	eerom_byte_wr(R_ADDR,R_OE);
	
	B_OE=4;
	eerom_byte_wr(B_ADDR,B_OE);
	
	LEVEL_OE=8;
	eerom_byte_wr(LEVEL_ADDR,LEVEL_OE);
	
	ALARM_OE=0;
	eerom_byte_wr(ALARM_ADDR,ALARM_OE);	
	
	BW_TIME_OE=1;
	eerom_byte_wr(BW_TINE_ADDR,BW_TIME_OE);
	
	BW_LEVEL_OE=0;
	eerom_byte_wr(BW_LEVEL_ADDR,BW_LEVEL_OE);
	
	UP_SIDE_DOWN_OE=0;
	eerom_byte_wr(UP_SIDE_DOWN_ADDR,UP_SIDE_DOWN_OE);
	
	CHROMA_GAIN_OE=4;
	eerom_byte_wr(CHROMA_GAIN_ADDR,CHROMA_GAIN_OE);
	
	AP_GAIN_OE=4;
	eerom_byte_wr(AP_GAIN_ADDR,AP_GAIN_OE);
	
	PEDESTAL_OE=1;
	eerom_byte_wr(PEDESTAL_ADDR,PEDESTAL_OE);
	
	BW_OE=0;
	eerom_byte_wr(BW_ADDR,BW_OE);
	BW=1;
	
	BURST_OE=1;
	eerom_byte_wr(BURST_ADDR,BURST_OE);
}
/*******初始化数据调出******/
void	star_lcall()
{
	UCHAR	data_addr_ls0,data_addr_ls1,data_addr_ls2,data_addr_ls3;	
	
	data_addr_ls0=eerom_rd(COMP_55_ADDR1);
	data_addr_ls1=eerom_rd(COMP_55_ADDR2);
	data_addr_ls2=eerom_rd(COMP_AA_ADDR1);
	data_addr_ls3=eerom_rd(COMP_AA_ADDR2);
	
	/*判数据是否丢失*/
	if((data_addr_ls0!=0x55)||(data_addr_ls1!=0x55)||(data_addr_ls2!=0xAA)||(data_addr_ls3!=0xAA))	
		{
		systme_csh();				
		return;
		}
	
	data_addr_ls0=eerom_rd(CAM_ID_HZ_ADDR0);
	chinese_data_cl(4,data_addr_ls0);
	data_addr_ls0=eerom_rd(CAM_ID_HZ_ADDR1);
	chinese_data_cl(5,data_addr_ls0);
	data_addr_ls0=eerom_rd(CAM_ID_HZ_ADDR2);
	chinese_data_cl(6,data_addr_ls0);
	data_addr_ls0=eerom_rd(CAM_ID_HZ_ADDR3);
	chinese_data_cl(7,data_addr_ls0);
	
	data_addr_ls0=eerom_rd(CAM_ID_HZ_JS_ADDR);
	cam_id_js=data_addr_ls0;

	for(data_addr_ls0=0;data_addr_ls0<16;data_addr_ls0++)
		{
		data_addr_ls1=data_addr_ls0+BT_ADDR;
		bt_cam[data_addr_ls0]=eerom_rd(data_addr_ls1);
		if(bt_cam[data_addr_ls0]=='^')	bt_cam[data_addr_ls0]='q';
		}			
	bt_cam[16]=0;
	bt_cam_x=eerom_rd(BT_CAM_X_ADDR);
	bt_cam_y=eerom_rd(BT_CAM_Y_ADDR);	
	bt_cam_xy_cl();
	
	data_addr_ls0=eerom_rd(CAM_ID_ADDR);
	if(data_addr_ls0==0)	CAM_ID_OE=0;
	else			CAM_ID_OE=1;	
	
	if(CAM_ID_OE==1)	crtzf_ch(2,1,bt_cam,0);
	else			crtzf_ch(2,1,"qqqqqqqqqqqqqqqqqq",0);
	
	data_addr_ls0=eerom_rd(SHUTTER_ADDR);
	SHUTTER_OE=data_addr_ls0;
	if(SHUTTER_OE>8)	SHUTTER_OE=0;
	
	data_addr_ls0=eerom_rd(ALC_ELC_ADDR);
	if(data_addr_ls0==0)	
		{
		ALC_ELC_OE=0;		
		MIRIS=0;
		}
	else	{
		ALC_ELC_OE=1;		
		SHUTTER_OE=8;
		MIRIS=1;
		}	
	
	data_addr_ls0=eerom_rd(AGC_ADDR);
	if(data_addr_ls0>2)	data_addr_ls0=0;
	if(data_addr_ls0==0)	
		{
		AGC_OE=0;
		AGCMAX=1;
		}
	else	{		
		AGC_OE=data_addr_ls0;
		AGCMAX=0;
		}
	
	data_addr_ls0=eerom_rd(SENS_UP_ADDR);
	SENS_UP_OE=data_addr_ls0;
	if(SENS_UP_OE>11)	SENS_UP_OE=0;	
	
	data_addr_ls0=eerom_rd(LL_INT_ADDR);
	if(data_addr_ls0>3)	data_addr_ls0=0;
	if(data_addr_ls0==0)	
		{
		LL_INT_OE=0;
		LL_INT=0;
		}
	else
		{
		LL_INT_OE=data_addr_ls0;
		LL_INT=1;
		}
	
	data_addr_ls0=eerom_rd(ATW_AWC_ADDR);
	ATW_AWC_OE=data_addr_ls0;
	if(ATW_AWC_OE>2)	ATW_AWC_OE=0;
	if(ATW_AWC_OE==1)	AWB2=0;
	else				AWB2=1;
	
	
	data_addr_ls0=eerom_rd(DET_ADDR);
	if(data_addr_ls0==0)	DET_OE=0;				
	else					DET_OE=1;				
	
	data_addr_ls0=eerom_rd(DC_VIDEO_ADDR);
	if(data_addr_ls0==0)	
		{
		DC_VIDEO_OE=0;
		MIRIS_SEL=1;	/*0:DC;1:VIDEO*/
		}
	else	{
		DC_VIDEO_OE=1;
		MIRIS_SEL=0;	/*0:DC;1:VIDEO*/
		}
		
	data_addr_ls0=eerom_rd(BLCOF_ADDR);
	if(data_addr_ls0==0)
		{
		BLCOF_OE=0;
		BLCOF=1;
		}
	else
		{
		BLCOF_OE=1;		
		BLCOF=0;
		}
	data_addr_ls0=eerom_rd(ELC_ALC_CONT_ADDR);
	if(data_addr_ls0>0x7f)	ELC_ALC_CONT=2;
	else				ELC_ALC_CONT=data_addr_ls0;
	P2=ELC_ALC_CONT & 0x7F;
	
	data_addr_ls0=eerom_rd(COARSE_ADDR);
	if(data_addr_ls0>15)	COARSE_OE=1;
	else					COARSE_OE=data_addr_ls0;
	
	data_addr_ls0=eerom_rd(FINE_ADDR);
	if(data_addr_ls0>8)		FINE_OE=1;
	else					FINE_OE=data_addr_ls0;
	
	data_addr_ls0=eerom_rd(R_ADDR);

⌨️ 快捷键说明

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