📄 main.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 + -