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

📄 test_osd.c

📁 这是一个对OSD芯片upd6464A操作的接口测试程序,使用KC51编译
💻 C
字号:
//==============================
//FileName=test_osd.c
//Date=20060518
//==============================
#include<SST89x5x4.H>
#include<string.h>
#include"public.h"
#include"test_osd.h"
#include"delay_s.h"
#include"upd6464a.h"
#include"menu.h"
uchar data disp_buff[25];
uchar data len;
uchar data tmp;
uchar data i;
uchar data j;

uchar doom_id;
uchar protocol;
uchar baud;
uint  s_id;


void	main(void)
{
	EA =0;
	for(i=0; i<5; i++)
	{
		LED_OFF;
		delay_x250ms(3);
		LED_ON;
		delay_x250ms(3);
	}
	
	init_upd6464a();
/*	
	tmp =upd6464a_get_disp_code('A');
	upd6464A_write_addr_control(0,0);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, &tmp, 1);
	delay_x250ms(4);


	tmp =upd6464a_get_disp_code('B');
	upd6464A_write_addr_control(0,1);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, &tmp, 1);
	delay_x250ms(4);

	tmp =upd6464a_get_disp_code('Z');
	upd6464A_write_addr_control(0,23);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, &tmp, 1);
	delay_x250ms(4);
*/	
	memset(disp_buff,0,sizeof(disp_buff));
	memcpy(disp_buff,"123456789012345678901234",CONST_COLUMN_NUMBER_MAX);
	for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
	{
		disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
	}
	upd6464A_write_addr_control(0,0);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);

	memset(disp_buff,0,sizeof(disp_buff));
	memcpy(disp_buff,"abcdefghijklmnopqrstuvwx",CONST_COLUMN_NUMBER_MAX);
	for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
	{
		disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
	}
	upd6464A_write_addr_control(1,0);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);


	memset(disp_buff,0,sizeof(disp_buff));
	memcpy(disp_buff,"yzABCDEFGHIJKLMNOPQRSTUV",CONST_COLUMN_NUMBER_MAX);
	for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
	{
		disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
	}
	upd6464A_write_addr_control(2,0);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);
	

	memset(disp_buff,0,sizeof(disp_buff));
	memcpy(disp_buff,"WXYZ><-,. ;/\x80\x81\x82\x83\x84XYYYYYZ",CONST_COLUMN_NUMBER_MAX);
	for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
	{
		disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
	}
	upd6464A_write_addr_control(3,0);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);


for(j=0; j<7; j++)
{
	memset(disp_buff,0,sizeof(disp_buff));
	memcpy(disp_buff,"123456789012345678901234",CONST_COLUMN_NUMBER_MAX);
	for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
	{
		disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
	}
	upd6464A_write_addr_control(4+j,0);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);
}


	memset(disp_buff,0,sizeof(disp_buff));
	memcpy(disp_buff,"abcdefghijklmnopqrstuvwx",CONST_COLUMN_NUMBER_MAX);
	for(i=0; i<CONST_COLUMN_NUMBER_MAX; i++)
	{
		disp_buff[i] =upd6464a_get_disp_code(disp_buff[i]);
	}
	upd6464A_write_addr_control(11,0);
	upd6464A_character_display_control(UPD6464A_CMD_BLINK_ON, disp_buff, CONST_COLUMN_NUMBER_MAX);
//======================================================================================================
	delay_x250ms(8);
	upd6464a_video_clr_ram();
	upd6464A_display_control(UPD6464A_CMD_DISPLAY_DISP_ON, UPD6464A_CMD_DISPLAY_LC_ON, UPD6464A_CMD_DISPLAY_NO_BLINK);

	doom_id =1;
	protocol=0;
	baud	=1;
	s_id	=12345;	
	disp_init_menu();

	delay_x250ms(12);

	while(1);
}


//字符芯片的初始化
void init_upd6464a(void)
{
uchar i;
	P1 =0xff;
	
	//内部清除,设置显示模式
	upd6464a_video_clr_ram();
	upd6464A_display_control(UPD6464A_CMD_DISPLAY_DISP_ON, UPD6464A_CMD_DISPLAY_LC_ON, UPD6464A_CMD_DISPLAY_NO_BLINK);

	//设置PAL制
	upd6464A_format_mode_control(UPD6464A_CMD_VSM_PAL);
	//设置NTSC制:如果选择内同步则输出图象不稳定(无法同步)
	//	      如果选择外同步则输出图象稳定,但是字符显示缺少!
	//说明芯片外部17.734MHz晶振和LC振荡决定了芯片只能使用PAL制!	
	//upd6464A_format_mode_control(UPD6464A_CMD_VSM_NTSC);

	//设置显示字符块的原点
	//这里的原点需要根据upd6464a外部的晶振以及显示的实际情况进行调试
	//以所有字符都显示在屏幕的中央为合适!
	//测试后: x差2大约1个字符的宽度
	//	  y差1大约半个字符的高度 
	upd6464A_disp_position_control(8,5);		

	//设置视频模式和前景、后景
	//现在是蓝色背景白色字符显示,芯片产生视频信号
	//upd6464A_osc_mode_control(UPD6464A_CMD_OSC_ON,UPD6464A_CMD_VS_MODE_INTERNAL);
	//upd6464A_internal_color_control(UPD6464A_CMD_COLOR_BLUE);
	//现在是相机图象为背景,黑色字符显示,芯片 不 产生视频信号
	//本模式下:如果要禁止字符的叠加输出,则通过upd6464A_display_control()将显示关闭即可!
	//	    如果不加外部视频,则没有图象输出!
	upd6464A_osc_mode_control(UPD6464A_CMD_OSC_ON,UPD6464A_CMD_VS_MODE_EXTERNAL);
	//upd6464A_internal_color_control(UPD6464A_CMD_COLOR_BLUE);
	upd6464A_internal_color_control(UPD6464A_CMD_COLOR_WHITE);
	
	//后景蓝色,显示字体是白色(内部视频输出的时候)
	//后景蓝色,显示字体是黑色(外部视频输出的时候)
	//upd6464A_background_control(UPD6464A_CMD_BACKGROUND_NO);
	//字体具有黑色勾边(内部视频输出的时候)
	//后景外部图象,显示字体是白色的(外部视频输出的时候)
	upd6464A_background_control(UPD6464A_CMD_BACKGROUND_BLACK_FRAMING);
	//字体具有黑色背景(内部视频输出的时候)
	////后景蓝色,显示字体是黑底白字(外部视频输出的时候)
	//upd6464A_background_control(UPD6464A_CMD_BACKGROUND_BLACK_FILLING);
	//除了字符显示区的前景是蓝色外,显示字符是黑底白字(内部视频输出的时候)
	//显示底色是黑色,导致黑屏(外部视频输出的时候)
	//upd6464A_background_control(UPD6464A_CMD_BACKGROUND_BLACK_ON_WHITE);
	
	//外部振荡
	//upd6464A_osc_method_control(UPD6464A_CMD_OSC_METHOD_Q);
	//由于硬件和晶振都接上,两者没有明显差异
	upd6464A_osc_method_control(UPD6464A_CMD_OSC_METHOD_4);
		
	//视频输出幅度
	//输出强度太大时,如果使用外部视频信号叠加则可能造成显示字符别扭,同步不稳定!
	//upd6464A_output_level_control(UPD6464A_CMD_90_IRE,UPD6464A_CMD_2V_PP);
	//字符颜色的浓度比上面浅一些
	//1/2Vpp的幅度设置要求和信号输出以及接收者的输入相匹配!	
	upd6464A_output_level_control(UPD6464A_CMD_75_IRE,UPD6464A_CMD_1V_PP);
	
	//字符尺寸
	//测试后可知: 设置为UPD6464A_CMD_1_DOT,正好可以全屏显示12行*24列
	//	说明全屏高度大致可以分为8*12=96(line unit),可以根据实际要显示的行数来设置字体的大小!
	//字体的大小为UPD6464A_CMD_2_DOT时可以显示6行×14列
	//芯片设置为PAL制,并且使用外同步后,pal制相机显示正常字符,NTSC制的相机显示的字符略高一些,
	//所以造成最后一行显示一小半而已,所以做菜单如果兼容两种制式则应将行数限制在10行以下!
	//补充的方法可以通过调节前面 upd6464A_disp_position_control()的参数完成,所有行的显示!
	for(i=0; i<CONST_UPD6464A_CMD_WRITE_LINE_MAX+1; i++)
	{
		upd6464A_character_size_control(i, UPD6464A_CMD_1_DOT);
	}
}

//End Of File

⌨️ 快捷键说明

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