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

📄 main.c

📁 tea5767_102模块,i2c总线控制方式
💻 C
字号:
// Keil C
// AT89S52     
// clock: external 11.0592Mhz

#include <reg52.h>
#include <string.h>
#include "tea5767.h"
#include "key.h"
#include "led.h"
#include "global.h"
#include "main.h"
#include "i2c.h"




//////////////////////////////////////////////////////////
//-----------------------------------------------------
void Init_special_interrupts(void)
{
	EA = 1;
    ES = 0;
    ET1 = 0;
    ET0 = 1;
    EX1 = 0;
    EX0 = 0;
}

//-------------------------------------------------
void Init_timer()
{
	TMOD = 0x31;         //T1为禁止,T0为8位自动重装计数器
    TH0 = 0xFA;			//T0定时扫描键盘,4ms×5
    TL0 = 0x5F;

	TR0 = 1;


}

//----------------------------------------------------
void Timer_0(void) interrupt 1 //中断方式0 
{
   unsigned char 		new_key;		// 新键值

		
//	TL0  = 256 - (T0INTERVAL*FOSC)/1024000L;
	//--------------------------------------------
	// 用户在下面添加周期性处理程序,如定时等
	if (Dis_Flag)
	{
	    Display_LED(DisBuffer);
	}
	//--------------------------------------------


	// 读键盘示范---------------------------------
	new_key = Read_Key();
	if ((new_key & 0xF0) == 0x00)
	{
		if (new_key != old_key)			// 有新的按键被按下
		{
			key_counter = 0;		// 计时开始
			Key_Process = FALSE;
		}
		else
		{
			if ((key_counter >= 30) && !Key_Process)		// 按下键超过50ms且未处理 
			{
				Key_Push_Flag = TRUE;
				Key_Code = new_key;
			}
			else key_counter++;		// 连续计数
		}
	}
	old_key = new_key;				// 保存键值

    TH0 = 0xFA;			//T0定时扫描键盘,4ms×5
    TL0 = 0x5F;

}

//-------------------------------

void init(void)
{


	P0 = 0xFF;
	P1 = 0xFF;
	P2 = 0xFF;
	P3 = 0xFF;

  
   delay_ms(100);

   Init_special_interrupts();
   Init_timer();

}

//////////////////////////////////////////////////////////////////
void main(void)
{
	init();
/////////////////////////////////
    temp = EEPROM_read( 2 );
	   
    if ((temp == Seltct_TURNING)||(temp == Seltct_FREQ))
    {
          Work_STAT = temp;
    }
    else Work_STAT = Seltct_TURNING;
	Freq = Load_Freq();
		    
	Key_Push_Flag = FALSE;
	Key_Process = FALSE;
	Search_Flag = FALSE;
	Dis_Flag = TRUE;
	

	DisBuffer[4] = 0x0; //LED点亮,Seltct_TURNING
    if ((Freq<87500)||(Freq>108000))
	{
	  Freq = 87500;
	  Work_STAT = Seltct_TURNING;
 	}
 	else if (Work_STAT == Seltct_FREQ)
 	{
 	    DisBuffer[4] = 0x0F;   //LED关闭,Seltct_FREQ
 	}

	Freq_2_Buffer(Freq,DisBuffer);  //初始化显示频率值	

	Display_LED( DisBuffer );	
	
	Init_Tea5767( Freq );

	Save_Freq( Freq );

	
	delay_ms(10);

	
	while(1)
	{
		if ( Key_Push_Flag )
		{
			
			if(Key_Code == 3)
            {
                   if ( Work_STAT == Seltct_FREQ )
                   {
                          Work_STAT = Seltct_TURNING;
                          DisBuffer[4] = 0x0;    //"P"
                   }
                   else    
                   {
                          Work_STAT = Seltct_FREQ;
                          DisBuffer[4] = 0x0F;
                   }
		           EEPROM_write( 2 , Work_STAT );
		    }
            if(Key_Code == 2)   //+++
            {
                   if ( Work_STAT == Seltct_FREQ )
                   {
                          Freq += 50;
                          if (Freq >108000)
                              Freq = 87500;
		                  Set_Freq(Freq);
		                          
                          Save_Freq(Freq);

//						  Read_5767(ReadData);


//						  if (!(ReadData[0]&0x80))
						  {
//						      Set_Mute(Freq);
						  }
                                  
                          Freq_2_Buffer(Freq,DisBuffer);
                                  
                    }
                    else
                    {
 						 Search_up(Freq);
		                 Search_Flag = TRUE;
                         while (Search_Flag)
                         {
        						Read_5767(ReadData);
		
                                PLL = (ReadData[0] & 0x3f)*256+ReadData[1];
                               
							    Freq = PLL_2_Freq(PLL);
                               
							    if ( ReadData[0] & 0x80)   //has been found a station
                                {
                                              
        							  Set_Freq(Freq);
									  	
                               	      Save_Freq(Freq);
                                              
                                      Search_Flag = FALSE;
                                 
	                                  if ( ReadData[0] & 0x40 )  //reach band end
				             		  {
						     			 Freq = 87500;
						     			 Set_Freq(Freq);
						       	         Save_Freq(Freq);
                          
	                                              
	                                  }
                                      
                                  } 

    							  Freq_2_Buffer(Freq,DisBuffer);
   
                          }
					 }
                }
                if(Key_Code == 1)   //----
                {
                        if ( Work_STAT == Seltct_FREQ )
                        {
                               Freq -= 50;
                               if (Freq<87500)
                                    Freq = 108000;
                        
							   Set_Freq(Freq);
                          
						       Save_Freq(Freq);
                                  
                               Freq_2_Buffer(Freq,DisBuffer);

//							   Read_5767(ReadData);

	
//							  if (!(ReadData[0]&0x80))
							  {
//							      Set_Mute(Freq);
							  }
                         }
                         else
                         {
        					   Search_down(Freq);
		
                               Search_Flag = TRUE;

                               while (Search_Flag)
                               {
        							  Read_5767(ReadData);
		                              
                                      PLL = (ReadData[0] & 0x3f)*256+ReadData[1];
                                    
									  Freq = PLL_2_Freq(PLL);
                                  
                                      if ( ReadData[0] & 0x80)   //has been found a station
                                      {
        									  Set_Freq(Freq);
		                          
                                              Save_Freq(Freq);
                                  		  
											  Search_Flag = FALSE;
                                     
		                                      if ( ReadData[0] & 0x40 )  //reach band end
					             			  {
											    	  Freq = 108000;
													  Set_Freq(Freq);
													  Save_Freq(Freq);
										  
		                                      }
									  }
								
								      Freq_2_Buffer(Freq,DisBuffer);
                                
								
                                  }
		                      }
                        }

                        Key_Push_Flag = FALSE;
                        Key_Process = TRUE;
		}
	}
}

⌨️ 快捷键说明

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