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

📄 display.c

📁 A MP3 Player Source Code, Enjoy it!
💻 C
📖 第 1 页 / 共 2 页
字号:
	      if (current_control == CONTROL5)		 font = 33;  // bold	      	      else		 font = 32;  // normal	      display_line = '$';	      break;	   case PARAM_BASS:	      lcd_navigation(0, 5, "Ba:", CONTROL6);	      if (current_control == CONTROL6)		 font = 33;  // bold	      	      else		 font = 32;  // normal	      display_line = '%';	      break;	   default:	      return;	}	bar_position = (param_value[param] + STA013_MAX_TONE - STA013_PARAM_CENTRE);	// adjust to within the 21 chars available (range is -12 <-> +12 ie 25 units)	if (bar_position < 2)	{	   bar_position = 0;	}	else if (bar_position > 21)	{	   bar_position = 20;	}	else	{	   bar_position -= 2;	}		printf("\\[\\C%c\\B#%c----------%c----------\\B%c%c\\C!\\w\\C \\]\r\n",	       (char) font,	       (char) display_line,	       (char) 247,	       (char) (' ' + 3 + bar_position),	       (char) display_line);}//--------------------------------------------------------------------////	lcd_volume_set_db////	Displays a volume db at the specified coordinates.//void lcd_volume_set_db(){   xdata unsigned char attn;   attn = param_value[PARAM_ATTN] - STA013_PARAM_CENTRE + tone_attn;	if(attn==0)	{		print("\\L'\\[\\B%'  0 dB\\]\r\n");	}	else	{		printf("\\L'\\[\\B%%'-%2d dB\\]\r\n",attn);	}	lcd_navigation(0, 7,"Vol: ",CONTROL0);}//--------------------------------------------------------------------////	lcd_change_menu////	Clears display and displays the initial data//	for the current screen.  Increments current screen//	if action==1;//void lcd_change_menu(unsigned char action){	// Some sanity checks	if(action==1)	{		if((++current_screen) > SCREEN_MAX)		{		   current_screen=MAINSCREEN;		   current_control = CONTROL0;		}	}	if (lcd_version != LCD_VERSION_BETA)	{	   // display updates off	   print("\\I:");	}	// Clear display	print("\\@ 0");	switch(current_screen)	{	  case MAINSCREEN:		lcd_update_top_line();		lcd_display_filename();		lcd_display_playlistname();		lcd_screen_dynamic(1);		break;	  case AUDIOSCREEN:		lcd_update_top_line();		lcd_update_2nd_line(1);		lcd_update_3rd_line(1);		lcd_screen_dynamic(1);		break;	  case TREEDIRSCREEN:		lcd_screen_dynamic(1); 		break;	  case EPARAMSCREEN:		lcd_screen_dynamic(1); 		break;	  default:		break;	}	if (lcd_version != LCD_VERSION_BETA)	{	   // redraw whole display & display updates on	   print("\\I8\\I9");	}}//--------------------------------------------------------------------// update and restart the backlight timer back upon the parameter// settingvoid lcd_update_backlight_timer(){   switch(param_value[PARAM_BACKLIGHT_TIMEOUT])   {      case 0:	 // Never	 print("\\J20\\J00");	 break;      case 1:	 // Always on	 print("\\J21\\J01");	 break;      default:	 // TODO : need to implement timer	 break;   }}//--------------------------------------------------------------------void lcd_setup(void){	print("lcd:");	lcd_set_scroll_speed();	parse_event_setup();	lcd_update_backlight_timer();	// setup navigation	current_screen = MAINSCREEN;	current_control = CONTROL0;	// ask display for version	lcd_version = LCD_VERSION_BETA;	print("\\E\r\n");	string_init(filebuf, ' ', FILEBUF_MAX);	string_init(fdisplaybuf, ' ', DISPLAY_WIDTH + 1);	string_init(playbuf, ' ', FILEBUF_MAX);	string_init(pdisplaybuf, ' ', DISPLAY_WIDTH + 1);	pxscroll = 0;	playbuf_len = 0;	pxwrap = 0;	fxscroll = 0;	filebuf_len = 0;	fxwrap = 0;	current_filename = 0;	current_playlistname = 0;}//--------------------------------------------------------------------void lcd_screen_dynamic(const unsigned char refresh)////	lcd_screen_dynamic////	Update dynamic data.//{   static xdata unsigned int last_bitrate = 0;   static xdata unsigned char last_freq = 0;   static xdata unsigned char last_mode = 0;	switch(current_screen)	{	  case MAINSCREEN:		// Now this bit should only update the screen if it "has to."  IE if an item has changed or if		// we're doing a screen refresh. -ZSB 18-Aug-2001 2:29 PM		playback.mode_known = 0; // force update_playback_params to reget the info for the new bitrate (if applicable)		update_playback_parms(); // This should get any new bitrate for VBR's		// Is there any way to tell if an MP3 is VBR or not?  If so, we could skip calling this for CBR files.		if (playback.mode_known) {		        // On a refresh or change, we send out the whole thing			if(refresh			   || last_bitrate != playback.bitrate			   || last_freq != playback.freq			   || last_mode != playback.mode[0]) {				last_bitrate = playback.bitrate;				last_mode = playback.mode[0];				last_freq = playback.freq;				printf("\\[\\B &%3d kbps  %2d kHz  %s\\]", last_bitrate, playback.freq, playback.mode);			}		} else { 		        // We'll always display blanks, regardless of the		        // bitrate settings if things are undefined.			// Just to make sure we clear the screen quickly....			print("\\[\\B &    kbps     kHz        \\]");			last_bitrate = 0;			last_freq = 0;			last_mode = 0;		}		if (refresh) {		   lcd_display_id3_struct();		   lcd_volume_set_db();		}		lcd_update_time();		break;	  case AUDIOSCREEN:	        if (refresh)	        {		   lcd_bar_set(PARAM_TREBLE);		   lcd_bar_set(PARAM_BASS);		   lcd_volume_set_db();		}		lcd_update_time();		break;	  case TREEDIRSCREEN:                if (refresh)                {		  if (lcd_version == LCD_VERSION_1)		   {		      print("\\B  \\[  MP3 Player Tree List  \\]");		      treedir_display();		   }		   else		   {		      print("\\B $\\[   Tree List Screen is  \\]"		            "\\B %\\[    not supported on    \\]"		            "\\B &\\[     beta displays.     \\]");		   }                }		break;		  case EPARAMSCREEN:                if (refresh)                {		   if (lcd_version == LCD_VERSION_1)		   {		      print("\\B  \\[MP3 Player Configuration\\]");		      eparam_display();		   }		   else		   {		      print("\\B $\\[  Configuration Screen  \\]"		            "\\B %\\[is not supported on beta\\]"		            "\\B &\\[        displays        \\]");		   }                }		break;	  default:		break;	}}//--------------------------------------------------------------------void lcd_change(param_t parm){   switch (parm) {      case PARAM_ATTN:	 lcd_volume_set_db();	 break;	       case PARAM_TREBLE:	 // changes to the treble setting can change the volume	 lcd_bar_set(PARAM_TREBLE);	 lcd_volume_set_db();	 break;      case PARAM_BASS:	 // changes to the bass setting can change the volume	 lcd_bar_set(PARAM_BASS);	 lcd_volume_set_db();	 break;	       case PARAM_PLAY_MODE:	 lcd_update_top_line();	 break;	       default:	 printf("Unknown LCD change event: %d\n", parm);   }}//--------------------------------------------------------------------// Main Screen navigation event handler//void user_action_screen1(event_t event){   static code up_control[CONTROL_MAX+1] = {      CONTROL4, CONTROL0, CONTROL0, CONTROL1,      CONTROL3, CONTROL5, CONTROL6, CONTROL7,      CONTROL8, CONTROL9};   static code down_control[CONTROL_MAX+1] = {      CONTROL1, CONTROL3, CONTROL3, CONTROL4,      CONTROL0, CONTROL5, CONTROL6, CONTROL7,      CONTROL8, CONTROL9};   switch(event) {      case E_RIGHT:	 if (current_control == CONTROL4) {	    current_control = CONTROL0;	 } else {	    current_control++;	 }	 lcd_change_menu(0);	 break;      case E_LEFT:	 if (current_control == CONTROL0) {	    current_control = CONTROL4;	 } else {	    current_control--;	 }	 lcd_change_menu(0);	 break;      case E_UP:	 current_control = up_control[current_control];	 lcd_change_menu(0);	 break;      case E_DOWN:	 current_control = down_control[current_control];	 lcd_change_menu(0);	 break;      case E_INC:	 switch(current_control) {	    case CONTROL0:		// Volume	       action_vol_up();	       break;	    case CONTROL1:		// Play/Pause	       put_back_event(E_PLAY_PAUSE);	       break;	    case CONTROL2:		// Normal/Random	       random_mode_next();	       lcd_update_top_line();	       break;	    case CONTROL3:		// Filename	       put_back_event(E_NEXT);	       break;	    case CONTROL4:		// Directory/Playlist	       put_back_event(E_NEXT_LIST);	       break;	    default:	       break;	 }	 break;      case E_DEC:	 switch(current_control) {	    case CONTROL0:		// Volume	       action_vol_down();	       break;	    case CONTROL1:		// Play/Pause	       put_back_event(E_PLAY_PAUSE);	       break;	    case CONTROL2:		// Normal/Random	       random_mode_prev();	       lcd_update_top_line();	       break;	    case CONTROL3:		// Filename	       put_back_event(E_PREV);	       break;	    case CONTROL4:		// Directory/Playlist	       put_back_event(E_PREV_LIST);	       break;	    default:	       break;	 }	 break;      default:	 printf("Unsupported event %d\r\n", event);	 break;   }}//--------------------------------------------------------------------// Audio screen navigation event handler//void user_action_screen2(event_t event){   static code up_control[CONTROL_MAX+1] = {      CONTROL6, CONTROL0, CONTROL0, CONTROL1,      CONTROL3, CONTROL4, CONTROL5, CONTROL6,      CONTROL7, CONTROL9};   static code down_control[CONTROL_MAX+1] = {      CONTROL1, CONTROL3, CONTROL3, CONTROL4,      CONTROL5, CONTROL6, CONTROL0, CONTROL8,      CONTROL9, CONTROL0};   switch(event) {      case E_RIGHT:	 if (current_control == CONTROL6) {	    current_control = CONTROL0;	 } else {	    current_control++;	 }	 lcd_change_menu(0);	 break;      case E_LEFT:	 if (current_control == CONTROL0) {	    current_control = CONTROL8;	 } else {	    current_control--;	 }	 lcd_change_menu(0);	 break;      case E_UP:	 current_control = up_control[current_control];	 lcd_change_menu(0);	 break;      case E_DOWN:	 current_control = down_control[current_control];	 lcd_change_menu(0);	 break;      case E_INC:	 switch(current_control) {	    case CONTROL0:		// Volume	       action_vol_up();	       break;	    case CONTROL1:		// Play/Pause	       put_back_event(E_PLAY_PAUSE);	       break;	    case CONTROL2:		// Random Mode	       random_mode_next();	       lcd_update_top_line();	       break;	    case CONTROL3:		// Filename	       put_back_event(E_NEXT);	       break;	    case CONTROL4:		// Directory/Playlist	       put_back_event(E_NEXT_LIST);	       break;	    case CONTROL5:		// Treble	       sta013_tone_up(PARAM_TREBLE);	       break;	    case CONTROL6:		// Bass	       sta013_tone_up(PARAM_BASS);	       break;	    default:	       break;	 }	 break;      case E_DEC:	 switch(current_control) {	    case CONTROL0:		// Volume	       action_vol_down();	       break;	    case CONTROL1:		// Play/Pause	       put_back_event(E_PLAY_PAUSE);	       break;	    case CONTROL2:		// Normal/Random	       random_mode_prev();	       lcd_update_top_line();	       break;	    case CONTROL3:		// Filename	       put_back_event(E_PREV);	       break;	    case CONTROL4:		// Directory/Playlist	       put_back_event(E_PREV_LIST);	       break;	    case CONTROL5:		// Treble	       sta013_tone_down(PARAM_TREBLE);	       break;	    case CONTROL6:		// Bass	       sta013_tone_down(PARAM_BASS);	       break;	    default:	       current_screen=MAINSCREEN;	       break;	 }	 break;      default:	 printf("Unsupported event %d\r\n", event);	 break;   }}//--------------------------------------------------------------------void lcd_set_scroll_speed(){   // do with updates off to reduce flicker   printf("\\I:\\K0%d\\I8\\I9", (int) param_value[PARAM_SCROLL_SPEED]);}   //--------------------------------------------------------------------void lcd_user_action(event_t event){   switch(event) {      case E_DISPLAY1:	 lcd_version = LCD_VERSION_1;	 printf("\r\nDisplay protocol version=%d.\r\n", lcd_version);	 break;      case E_ENTER:	 set_timer(TIMER_LCD_TIMEOUT, param_screen_timeout());	 lcd_change_menu(1);            // Enter always changes pages	 break;      case E_LCD_TIMEOUT_TIMER:	 if(current_screen!=MAINSCREEN || 	    current_control!=CONTROL0) {	    current_screen=MAINSCREEN;	    current_control=CONTROL0;	    lcd_change_menu(0);	 }	 break;      default:	 set_timer(TIMER_LCD_TIMEOUT, param_screen_timeout());	 // all other events are screen specific and sent to a particular screen	 switch(current_screen) {	    case MAINSCREEN:	       user_action_screen1(event);	       break;	    case AUDIOSCREEN:	       user_action_screen2(event);	       break;	    case TREEDIRSCREEN:	       if (treedir_user_action(event))		 lcd_change_menu(0);	       break;	    case EPARAMSCREEN:	       if (eparam_user_action(event))	       {		  lcd_change_menu(0);	       }	       break;	    default:	       current_screen=MAINSCREEN;	       break;	 }	 break;   }}

⌨️ 快捷键说明

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