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

📄 main.c

📁 这段程序对用5767写FM收音的人员很有用
💻 C
字号:
#include <REGX52.H>
#include "hardware.h"
#include "types.h"
#include "serial.h"
#include "stdio.h"
#include "18B20.H"
#include "HT1621.H"
#include "tea5767.h"
#include "24c01.h"

keyscan_process (void);

extern uchar gc_KeyValue;
//================================================
extern void initTimer(void);
//==========音量控制=============
extern void WriteFM62429(uchar volset);
uchar TimeCounter1=0;
uchar TimeCounter2=0;
uint TimeCounter3=0;
uchar flash2=0;
uchar flash3=0;
uchar flash4=0;
bit FmCDOnOff=0;
bit TEMPITURE_SET=0;
uchar tempSet;
uchar volSet;
//=================================================================================================================================	
//idata	
 uchar TempBuffer[40] ;
void LoadSysInformation(void)
{

uchar i;
	for(i=0;i<5;i++)
	{		
		Read24c02(&TempBuffer[i*8],i*8,8);
	}
 //---------------Fm Global Varable--------------------- 
	if(TempBuffer[0]==0x55&&TempBuffer[1]==0xaa) 
	{ 
	    GlobalFmVar.FmState = TempBuffer[2];
	    if (GlobalFmVar.FmState > 1) GlobalFmVar.FmState = 0;
	    
	    GlobalFmVar.FmSaveNum = TempBuffer[3];
	    if (GlobalFmVar.FmSaveNum >= FREQMAXNUMBLE) GlobalFmVar.FmSaveNum = 0;
	 
	    tempSet=TempBuffer[4];
	
		volSet=TempBuffer[5];   
	    //--------------------Freq------------------------
	    for (i = 0; i < FREQMAXNUMBLE; i++) 
		{                         
	        GlobalFmVar.FmFreqArray[i] = (TempBuffer[8 + i*2] << 8) + TempBuffer[8 + i*2+1];
	    }
	}
	else //load default
	{
		tempSet=40;
	    volSet=3;
		FmCDOnOff=0;
	}
}
void SaveSysInformation(void)
{
uchar i;
//---------------Fm Global Varable---------------------
	TempBuffer[0]= 0x55;
	TempBuffer[1]= 0xaa;
    TempBuffer[2] = GlobalFmVar.FmState;
    TempBuffer[3] = GlobalFmVar.FmSaveNum;
    TempBuffer[4] = tempSet;
	TempBuffer[5] = volSet;
	TempBuffer[6] = FmCDOnOff;
    for (i = 0; i < FREQMAXNUMBLE+1; i++) 
	{
        TempBuffer[8 + i*2] = GlobalFmVar.FmFreqArray[i] >> 8;
        TempBuffer[8 + i*2+1] = GlobalFmVar.FmFreqArray[i] & 0xff;
	}
	for(i=0;i<5;i++)
	{		
		Write24c02(&TempBuffer[i*8],i*8,8);
	}
}
//---------------------------------------------
void initsystem(void)
{
//===========硬件init==================
	BEEP=OFF;
	LED=OFF;
	FAN=OFF;
	STEAM=OFF;
	UPLIGHT=OFF;
	DOWNLIGHT=OFF;
	WATEROUT=OFF;
	TEL_RING=OFF;
	UPLIGHT=OFF;
	DOWNLIGHT=OFF;
	AMP=OFF;
	CD=OFF;
	FM=OFF;
	FM62429_DAT=1;
	FM62429_CLK=1;
//=======系统init=====================
	initTimer();
	TR0=1;
	ET0=1;
	EA=1;
//=========调试时用init serial========
//	initUart();
//	printf("serial init ok!!\n");
//==================================
	Init_1621();
	clear_all();
	TurnOn_1621(OFF);
//===============变量init===========
	TimeCounter1=100;
	TimeCounter2=30;
	TEMPITURE_SET=0;
	EA=0;
    LoadSysInformation();
	EA=1;
    FmVariableInit();
}
//=============================================================
//=============================================================
#if 1
void main(void)
{
initsystem();
convert();		// 启动温度转换,需要750ms	
while(1)
{
		if(!TimeCounter1&&!TEMPITURE_SET)
		{
			TimeCounter1=100;		
			if(RdTemp())
			{  
				if(TempData>=tempSet)
				{
				 	 	STEAM=OFF;
						FAN=ON;
						UPLIGHT=ON;
				}
				DigitalDisplay(); //读取温度并显示
			}
			convert();// 启动温度转换,需要750ms
		}
//==============================================
	 if(!TimeCounter2)
	 {
	 		TimeCounter2=30;
			flash2++;
			flash2%=2;
	
	   		flash3++;
			flash3%=3;
	
	   		flash4++;
			flash4%=4;
	
		   if(WATEROUT)FangShuiMov(flash4);	
		   if(FAN)FengFanMov(flash3);	
		   if(STEAM)ZhengQiMov(flash4);
		   if(UPLIGHT)UpLightMov(flash4);
		   if(DOWNLIGHT)DownDengMov(flash2);
		   if(TEL_RING)DianHuaMov(flash3); 
		//=========SET 温度================
		   if(TEMPITURE_SET)
		   {
				if(flash2)
				SetTempDisplay(tempSet);
				else
				SetTempDisplay(0);
		   }
	 }
//=====================================================
	  if(!TimeCounter3&&TEMPITURE_SET)
	  {
	  	  TEMPITURE_SET=0;
	  }

		if(gc_KeyValue)
		{
			//printf("=====================\n");
			//printf("key =%2bx\n",gc_KeyValue);
			if(gc_KeyValue==LONG_START_POWER_KEY)
			 {
			   	LED=~LED;
				TurnOn_1621(LED);
				if(LED)//开机
				{	
				//	if(FmCDOnOff)				
					DisCD(FmCDOnOff);
				}
				else
				{	EA=0;
					SaveSysInformation(); //关机
					EA=1;
						FAN=OFF;
						STEAM=OFF;
						UPLIGHT=OFF;
						DOWNLIGHT=OFF;
						WATEROUT=OFF;
						TEL_RING=OFF;
						UPLIGHT=OFF;
						DOWNLIGHT=OFF;
						AMP=OFF;
						CD=OFF;
						FM=OFF;
					   if(!UPLIGHT)UpLightMov(4);
					   if(!DOWNLIGHT)DownDengMov(3);
					   if(!FAN)FengFanMov(3);
					   if(!STEAM)ZhengQiMov(3);
					   if(!WATEROUT)FangShuiMov(3);
					   if(!TEL_RING)DianHuaMov(3);
				}
					
			}				
			
			if(!LED)	gc_KeyValue=0;

			switch(gc_KeyValue)
			{

//-----------------------------------------------------
			   case SHORT_SEACHINC_KEY:
			   		if(TEMPITURE_SET)
					{
						 TimeCounter3=800;
			   			tempSet++;
						if(tempSet>=60)tempSet=60;
					}
				   else if(FmCDOnOff)
				   {
					        if (GlobalFmVar.FmState == FM_STATE_MANUAL) 
							{					           					            FmTimerCount = 5;			            					            					            Tuner_MuteControl(1);					            Tuner_FreqChange(TUN_UP,TUNERFREQSTEP);								 FmPlayStart();					        } 					        if (GlobalFmVar.FmState == FM_STATE_PRESET) 
							{					            FmTimerCount = 20;					            					            Tuner_MuteControl(1);					            GetNextStation();
								TimeCounter1=200;
							    SetVolDisplay(GlobalFmVar.FmSaveNum);
								FmPlayStart();					        }
							FmFreqDisplay(GlobalFmVar.FmFreq);
							break;
				   }
			   break;
			   case LONG_START_SEACHINC_KEY:
			   case LONG_SEACHINC_KEY:
		         if (GlobalFmVar.FmState == FM_STATE_MANUAL) 
				 {
		            Tuner_FreqChange(TUN_UP,TUNERFREQSTEP);
		            Tuner_PLLCount(GlobalFmVar.FmFreq,1);
					 FmFreqDisplay(GlobalFmVar.FmFreq);
		        }
			   break;
			   case LONG_RELEASE_SEACHINC_KEY:
			        if (GlobalFmVar.FmState == FM_STATE_MANUAL) 
					{			            
			            UpDownFlag = TUN_UP;
			            Funtion=MSG_FUNCTION1_FM_SEND_FREQHSI;
			        }
			   break;

			   case SHORT_SEACHDEC_KEY:
			   		if(TEMPITURE_SET)
					{
						 TimeCounter3=800;
			   			tempSet--;
						if(tempSet<=35)tempSet=35;
					}
			   	   else if(FmCDOnOff)
				   {
				        if (GlobalFmVar.FmState == FM_STATE_MANUAL) 
						{				            FmTimerCount = 5;				            				            Tuner_MuteControl(1);				        				            Tuner_FreqChange(TUN_DOWN,TUNERFREQSTEP);							
							FmPlayStart();				            				        } 				        if (GlobalFmVar.FmState == FM_STATE_PRESET) 
						{				            FmTimerCount = 20;				            				            Tuner_MuteControl(1);				            GetPrevStation();
							TimeCounter1=200;
							SetVolDisplay(GlobalFmVar.FmSaveNum);
							FmPlayStart();				        }
						FmFreqDisplay(GlobalFmVar.FmFreq); 
						break;
					}
			   break;
			   case LONG_START_SEACHDEC_KEY:
			   case LONG_SEACHDEC_KEY:
			   		if(!FmCDOnOff) break;
		         	if (GlobalFmVar.FmState == FM_STATE_MANUAL) 
				 	{
			            Tuner_FreqChange(TUN_DOWN,TUNERFREQSTEP);
			            Tuner_PLLCount(GlobalFmVar.FmFreq,1);
						FmFreqDisplay(GlobalFmVar.FmFreq);
		        	}
			   		break;
			   case LONG_RELEASE_SEACHDEC_KEY:
			   		if(!FmCDOnOff) break;
			        if (GlobalFmVar.FmState == FM_STATE_MANUAL) 
					{			            
			            UpDownFlag = TUN_DOWN;
			            Funtion=MSG_FUNCTION1_FM_SEND_FREQHSI;
			        }
			   		break;
//---------------------------------------
			  case SHORT_PLAY_KEY:
			  		if(!FmCDOnOff) break;//如果收音机没打开就不能保存电台操作
	                        if (GlobalFmVar.FmState == FM_STATE_MANUAL)//自动扫描搜索到电台并保存电台
							{             
	                            GlobalFmVar.FmFreqArray[GlobalFmVar.FmSaveNum] = GlobalFmVar.FmFreq;
	                            TimeCounter1=200;
								SetVolDisplay(GlobalFmVar.FmSaveNum);
							//	printf("num=%d,freq=%d\n",(int)GlobalFmVar.FmSaveNum,(int)GlobalFmVar.FmFreqArray[GlobalFmVar.FmSaveNum]);
	                            if ((GlobalFmVar.FmFreq == FmFreqMaxVal) || (++GlobalFmVar.FmSaveNum >= FREQMAXNUMBLE)) 
								{	                                	             	
	                                GlobalFmVar.FmSaveNum = 0;
	                               // GlobalFmVar.FmFreq = GlobalFmVar.FmFreqArray[GlobalFmVar.FmSaveNum];
								//	printf("=================\n") ;
							//	printf("num=%d,freq=%d\n",(int)GlobalFmVar.FmSaveNum,(int)GlobalFmVar.FmFreqArray[GlobalFmVar.FmSaveNum]);
	                                if((GlobalFmVar.FmFreq < FmFreqMinVal) || (GlobalFmVar.FmFreq > FmFreqMaxVal))
									{
	                                    GlobalFmVar.FmFreq = FmFreqMinVal;
	                                }
	                                break;
	                            }
	                        }
					break;
//-----------------------------------------------------
			   case SHORT_VOLINC_KEY:
			   		TimeCounter1=200;
			   		if(volSet<10)volSet++;
					  WriteFM62429(volSet);
					  if(TEMPITURE_SET)break;
					  SetVolDisplay(volSet);
			   break;

			   case SHORT_VOLDEC_KEY:
			   		TimeCounter1=200;
			         if(volSet)volSet--;
					 WriteFM62429(volSet);
					 if(TEMPITURE_SET)break;
					 SetVolDisplay(volSet);
			   break;
//-----------------------------------------------------
			   case SHORT_UPLIGHT_KEY:
				   UPLIGHT=~UPLIGHT;
				   if(!UPLIGHT)UpLightMov(4);
			   break;
//-----------------------------------------------------
			   case SHORT_DOWNLIGHT_KEY:
				   DOWNLIGHT=~DOWNLIGHT;
				   if(!DOWNLIGHT)DownDengMov(3);
			   break;
//-----------------------------------------------------
			   case SHORT_FAN_KEY:
				   FAN=~FAN;
				   if(!FAN)FengFanMov(3);
			   break;
//-----------------------------------------------------
			   case SHORT_STEAM_KEY:
				   STEAM=~STEAM;
				   if(!STEAM)ZhengQiMov(3);
			   break;
//-----------------------------------------------------
			   case SHORT_WATEROUT_KEY:
				   WATEROUT=~WATEROUT;
				   if(!WATEROUT)FangShuiMov(3);
			   break;
//-----------------------------------------------------
				case SHORT_TELPHONE_KEY:
				 TEL_RING=~TEL_RING;
				 if(!TEL_RING)DianHuaMov(3);
				break;
//-----------------------------------------------------
			   case SHORT_FMORCD_KEY:
				FmCDOnOff=~FmCDOnOff;
				if(FmCDOnOff)	  //FM OPEN
				{
					AMP=ON;
					CD=OFF;
					FM=ON;
					FmPlayStart();	
					FmFreqDisplay(GlobalFmVar.FmFreq);
				}
				else		  //CD OPEN
				{
					AMP=ON;
					FM=OFF;
					CD=ON;
					DisCD(!FmCDOnOff);
					Tuner_MuteControl(1);
				//	FmFreqDisplay(0);
					WriteFM62429(volSet);
				}
			   break;
//------------------------------------------------------
				case SHORT_TEMPITURE_KEY:
				     TimeCounter3=800;
					 TEMPITURE_SET=~TEMPITURE_SET;
				break;
//------------------------------------------------------
				case LONG_START_PLAY_KEY:
					if(GlobalFmVar.FmState == FM_STATE_MANUAL)
					{
						GlobalFmVar.FmState = FM_STATE_PRESET;
						FMCDMov(1);
					}
					else
					{
						GlobalFmVar.FmState = FM_STATE_MANUAL;
						FMCDMov(0);
					}
				break;
			   default:
			   break;
			}
			gc_KeyValue=0;
			
		}
		if(FmCDOnOff)FmPlay();	 
	}


}
#endif

⌨️ 快捷键说明

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