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

📄 dispfinal.lst

📁 视频字符叠加系统、采用89系列单片机开发
💻 LST
📖 第 1 页 / 共 5 页
字号:
 305   1      			osd2_cs=0;
 306   1      			left_shift(0x0e);
 307   1      			while(osd_busy);
 308   1      				left_shift(selectable_tv);		//normal_tv);		//display position control
 309   1      			while(osd_busy);
 310   1      				left_shift(disp_position_high);		//display position control
 311   1      			while(osd_busy);
 312   1      				left_shift(disp_position_low);
 313   1      			while(osd_busy);
 314   1      				left_shift(charsize);		//charater size,smooth and mask pulse control command
 315   1      		   	while(osd_busy);
 316   1      				left_shift(smooth);
 317   1      			while(osd_busy);
 318   1      				left_shift(no_background);
 319   1      			while(osd_busy);
 320   1      				left_shift(back_color_fring);
 321   1      			delay(1);
 322   1      			while(osd_busy);
 323   1      				left_shift(clear_vram);
 324   1      			delay(10);
 325   1       			while(osd_busy);
 326   1      				left_shift(disp_control);	//display on osc on blinking 1:1 1hz
 327   1      			write_osd_date();
 328   1      			osd1_cs=1;
 329   1      			osd2_cs=1;
 330   1      			osd1_cs=0;
 331   1      			osd2_cs=0;
 332   1      			write_osd_time();
 333   1      			while(osd_busy);
 334   1      			osd1_cs=1;
 335   1      			osd2_cs=1;
 336   1      			osd1_cs=0;
 337   1      			osd2_cs=0;
 338   1      			left_shift(0x0e);
 339   1      			while(osd_busy);
 340   1      				left_shift(disp_position_high);		//display position control
 341   1      			while(osd_busy);
 342   1      				left_shift(disp_position_low);
 343   1      			while(osd_busy);
 344   1      				left_shift(charsize);		//charater size,smooth and mask pulse control command
 345   1      		   	while(osd_busy);
 346   1      				left_shift(smooth);
 347   1      			while(osd_busy);
 348   1      				left_shift(no_background);
 349   1      			while(osd_busy);
 350   1      				left_shift(back_color_fring);
 351   1      			delay(1);
 352   1      			while(osd_busy);
 353   1      				left_shift(clear_vram);
 354   1      			delay(10);
 355   1       			while(osd_busy);
 356   1      				left_shift(disp_control);	//display on osc on blinking 1:1 1hz
 357   1      			write_osd_date();
 358   1      			osd1_cs=1;
 359   1      			osd2_cs=1;
 360   1      			osd1_cs=0;
 361   1      			osd2_cs=0;
 362   1      			write_osd_time();
 363   1      			while(osd_busy);
 364   1      			osd1_cs=1;
 365   1      			osd2_cs=1;
C51 COMPILER V6.12  DISPFINAL                                                              09/08/2004 09:49:09 PAGE 7   

 366   1       		}
 367          				
 368          //------------------------------------------------------------
 369          void televisionmode(void)
 370          	{
 371   1      	unsigned char i;
 372   1      	i=receive_buf[0]&0x03;
 373   1      	if(i==0) 
 374   1      		{
 375   2      		osd1_cs=0;
 376   2      		osd2_cs=0;
 377   2      		}
 378   1      	if(i==1) osd1_cs=0;
 379   1      	if(i==2) osd2_cs=0;
 380   1      	i=receive_buf[1]&0x03;
 381   1      	while(osd_busy);
 382   1      	left_shift(normal_tv|i);
 383   1      	while(osd_busy);
 384   1      	osd1_cs=1;
 385   1      	osd2_cs=1;
 386   1      	}
 387          //-------------------------------------------------------------------------------
 388          unsigned long calculate_addr(unsigned char x,unsigned char y)
 389          		{
 390   1      			unsigned long data pos;
 391   1      			pos=((x-0xa1)*0x5eL+(y-0xa1))*0x20;
 392   1      			return(pos);
 393   1      		}
 394          //-------------------------------------------------------------------------
 395          void write_osd_cram(unsigned char channel)
 396          	{
 397   1      	unsigned char data i,number;
 398   1      	unsigned long data pos;
 399   1      //	delay(10);      //9.2
 400   1      //	pointer=receive_buf[0]&0x03;             //receive_buf[0] contains command and track
 401   1      	if(channel==0)	
 402   1      		{
 403   2      		osd1_cs=0;
 404   2      		i=cram_addr;
 405   2      		while(osd_busy);								//write create character addr
 406   2      		left_shift(i);
 407   2      		i=0x00;
 408   2      		while(osd_busy);
 409   2      		left_shift(i);
 410   2      		for(i=0;i<32;)
 411   2      			{	
 412   3      			if(character_code[0][i]>0x80)
 413   3      				{
 414   4      				pos=calculate_addr(character_code[0][i],character_code[0][i+1]);
 415   4      				number=(unsigned char)(pos>>16);
 416   4      				if((number&0x01)!=0) AD16=1;
 417   4      				else			     AD16=0;
 418   4      				if((number&0x02)!=0) AD17=1;
 419   4      				else			     AD17=0;
 420   4      				create_character((unsigned int)pos);
 421   4      				i++;
 422   4      				i++;
 423   4      				}
 424   3      			else	break;
 425   3      			}
 426   2      		while(osd_busy);
 427   2      		osd1_cs=1;
C51 COMPILER V6.12  DISPFINAL                                                              09/08/2004 09:49:09 PAGE 8   

 428   2      		}
 429   1      	if(channel==1)		
 430   1      		{
 431   2      		osd2_cs=0;
 432   2      		i=cram_addr;
 433   2      		while(osd_busy);								//write create character addr
 434   2      		left_shift(i);
 435   2      		i=0x00;
 436   2      		while(osd_busy);
 437   2      		left_shift(i);
 438   2      		for(i=0;i<32;)
 439   2      			{	
 440   3      			if(character_code[1][i]>0x80)
 441   3      				{
 442   4      				pos=calculate_addr(character_code[1][i],character_code[1][i+1]);
 443   4      				number=(unsigned char)(pos>>16);
 444   4      				if((number&0x01)!=0) AD16=1;
 445   4      				else			     AD16=0;
 446   4      				if((number&0x02)!=0) AD17=1;
 447   4      				else			     AD17=0;
 448   4      				create_character((unsigned int)pos);
 449   4      				i++;
 450   4      				i++;
 451   4      				}
 452   3      			else	break;
 453   3      			}
 454   2      	  	while(osd_busy)
 455   2      		osd2_cs=1;
 456   2      		}
 457   1      	}
 458          //--------------------------------------------------------------------------
 459          void write_osd_vram(unsigned char pos,unsigned char channel)
 460          	{
 461   1      	unsigned char data i,j;
 462   1      	if(channel==0) osd1_cs=0;
 463   1      	else           osd2_cs=0;
 464   1      	i=(receive_buf[1]&0x30)>>4;
 465   1      	left_shift(charsize|i);
 466   1      	while(osd_busy);	 left_shift(smooth|pos); 
 467   1      	i=char_position|((disp_lines>>3)&0x01);
 468   1      	j=disp_lines<<5&0xe0|disp_words;
 469   1      	while(osd_busy);
 470   1      	left_shift(i);					//command and lines.3
 471   1      	while(osd_busy);
 472   1      	left_shift(j);					//lines.2-0 and words
 473   1      	if(start_blink==1) 	left_shift(char_blink);
 474   1      	else 				left_shift(char_attribute);
 475   1      	for(i=0;i<24;i++)
 476   1      		{
 477   2      			if(i+disp_words>=24) 
 478   2      				{
 479   3      				address_buf[i]=0xef;
 480   3      				continue;
 481   3      				}
 482   2      		if((start_blink==(i+1))&(i!=0))
 483   2      		 		{
 484   3      				if(channel==0) 
 485   3      					{
 486   4      					osd1_cs=1;
 487   4      					_nop_();
 488   4      					osd1_cs=0;
 489   4      					}
C51 COMPILER V6.12  DISPFINAL                                                              09/08/2004 09:49:09 PAGE 9   

 490   3      			   	else
 491   3      					{
 492   4      					osd2_cs=1;
 493   4      					_nop_();
 494   4      					osd2_cs=0;
 495   4      					}
 496   3      				left_shift(char_blink);	
 497   3      				}
 498   2      			if(end_blink==(i+1))
 499   2      				{
 500   3      				if(channel==0)
 501   3      					{
 502   4      					osd1_cs=1;
 503   4      					_nop_();
 504   4      					osd1_cs=0;
 505   4      					}
 506   3      			   	else
 507   3      					{
 508   4      					osd2_cs=1;
 509   4      					_nop_();
 510   4      					osd2_cs=0;
 511   4      					}
 512   3      				left_shift(char_attribute);
 513   3      				}
 514   2      			if(address_buf[i]==0xef) break;
 515   2      			left_shift(address_buf[i]);
 516   2      			address_buf[i]=0xef;
 517   2      	  	}
 518   1         	while(osd_busy);
 519   1      		{	osd1_cs=1;
 520   2      			osd2_cs=1;	}
 521   1         	}
 522          //---------------------------------------------------------------------------
 523          void create_character(unsigned int pos)				//requista address
 524          		{
 525   1      			unsigned char data i,pow;
 526   1      			while(osd_busy);						//write a space line
 527   1      				left_shift(cram_data);
 528   1      			while(osd_busy);
 529   1      				left_shift(0x00);
 530   1      			while(osd_busy);						//write a space line
 531   1      				left_shift(cram_data);
 532   1      			while(osd_busy);
 533   1      				left_shift(0x00);
 534   1      			for(i=0;i<16;i++)						//write character dot information
 535   1      				{
 536   2      					pow=XBYTE[pos++];
 537   2      					pow=pow&0x0f|cram_data;
 538   2      					while(osd_busy);
 539   2      						left_shift(pow);
 540   2      					pow=XBYTE[pos++];
 541   2      					while(osd_busy);
 542   2      						left_shift(pow);
 543   2      				}
 544   1      	   	}
 545          
 546          //----------------------------------------------------------------------------
 547          void detemine_command(void)
 548          		{
 549   1      		unsigned char data comm;
 550   1      		receive_flag=0;
 551   1      		ES=0;					
C51 COMPILER V6.12  DISPFINAL                                                              09/08/2004 09:49:09 PAGE 10  

 552   1      		for(comm=0;comm<29;comm++)
 553   1      			{
 554   2      			receive_buf[comm]=receive_buf2[comm];
 555   2      			}
 556   1      		ES=1;
 557   1              comm=receive_buf[0]&0xf0;
 558   1              switch(comm)
 559   1                 	{
 560   2                 	case 0x10: timer_position(); break;
 561   2                 	case 0x20: timer_setup();    break;
 562   2      				case 0x30: clear_disp();	 break;
 563   2                  case 0x40: disp_character(); break;
 564   2      				case 0x50: release_alarm();  break;
 565   2      	        	case 0x60: video_change();   break;
 566   2      				case 0x70: background_set(); break;
 567   2      				case 0x80: close_time();	 break;
 568   2      				case 0x90: close_date();	 break;
 569   2      				case 0xa0: televisionmode(); break;
 570   2      				default:                     break;
 571   2                  }
 572   1      		}
 573          
 574          //--------------------------------------------------------------------------
 575          unsigned char get_strokes(unsigned char pow)
 576          		{
 577   1      		char data t,i=0,j=47;
 578   1      		while(j>=i)
 579   1      			{
 580   2      			t=(i+j)/2;
 581   2      			if(pow==disp_strokes[t].ascii)
 582   2      				{
 583   3      				return(disp_strokes[t].stroke);
 584   3      				}
 585   2      	   		else
 586   2      				{
 587   3      	 			if(pow<disp_strokes[t].ascii)
 588   3      					{
 589   4      					j=t-1;
 590   4      					}
 591   3      				else
 592   3      					{
 593   4      					if(pow>disp_strokes[t].ascii)
 594   4      					i=t+1;
 595   4      					}
 596   3      			  	}
 597   2      		   	}
 598   1      		return(0xce);
 599   1      		} 
 600          //---------------------------------------------------------------------------
 601          unsigned char get_ch_strokes(unsigned char high_data,unsigned char low_data)
 602          		{
 603   1      		char data t,i=0,j=49;
 604   1      		while(j>=i)
 605   1      			{
 606   2      			t=(i+j)/2;
 607   2      			if((high_data==disp_ch_strokes[t].code_high)&(low_data==disp_ch_strokes[t].code_low))
 608   2      				{
 609   3      				return(disp_ch_strokes[t].ch_stroke);
 610   3      				}
 611   2      	   		else
 612   2      				{
 613   3      	 			if((high_data<disp_ch_strokes[t].code_high)||\
C51 COMPILER V6.12  DISPFINAL                                                              09/08/2004 09:49:09 PAGE 11  

 614   3      				   ((high_data==disp_ch_strokes[t].code_high)&&\
 615   3      				   (low_data<disp_ch_strokes[t].code_low)))
 616   3      					{
 617   4      					j=t-1;

⌨️ 快捷键说明

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