📄 main.c
字号:
#define Variable_GLOBE
//#define test_ir_value
#include "reg52.h"
#include "intrins.h"
#include "globedef.h"
#include "keydef.h"
#include "keyproc.h"
#include "main.h"
#include "intctrl.h"
#include "delay.h"
#include "m62429.h"
#include "i2c.h"
#include "Lcd.h"
#include "pcf8563.h"
unsigned char minute;
unsigned char hour;
void MCU_Init(void);
void State_Init(void);
extern unsigned char sector_erase(unsigned int sector_addr);
extern unsigned char byte_program(unsigned int byte_addr, unsigned char original_data);
extern unsigned char byte_read(unsigned int byte_addr);
void main(void)
{
unsigned char second = 0;
unsigned char second_save = 0;
unsigned char read_count = 0;
AV_MUTE = 1; //防止通电发生砰声,必须最先
MCU_Init();
init_pcf8563();
lcd_init();
State_Init();
while(1)
{
read_count++;
if(read_count == 255)
{
read_count = 0;
second = get_pcf8563(0x02);
if(second != second_save)
{
display_counter = 0;
display_maohao();
minute = get_pcf8563(0x03) & 0x7f;//分
minute = (minute >> 4) * 10 + (minute & 0x0f);//bcd 码调整到10进制
if(minute >= 60)//防止出错
minute = 0;
display_38(minute / 10);
display_48(minute % 10);
hour = get_pcf8563(0x04) & 0x3f;//时
hour = (hour >> 4) * 10 + (hour & 0x0f);//bcd 码调整到10进制
if(hour >= 24)//防止出错
hour = 0;
if(hour >= 13) //12小时制调整
hour = hour - 12;
if(hour == 0)
hour = 12;
display_18(hour / 10);
display_28(hour % 10);
}
else
{
if(display_counter >= 200) //200*3ms
display_unmaohao();
}
second_save = second;
}
if(ReadKey_Timer == 5)
{
Panel_SearchKey();
ReadKey_Timer = 0;
if(Volume_Need_Record == 1)
{
_nop_();
//I2C_PutByte(A24C02_WRITE, 0, Current_Volume);
/* 扇区擦除 */
sector_erase(0x2000);
/* 字节编程 */
byte_program(0x2000, Current_Volume);
Volume_Need_Record = 0;
}
}
KEY_Proc();
//检测到耳机插入静音功率放大器
if(POWER_Status == off)
{
// MUTE_DETECT1 = 1;
MUTE_DETECT2 = 1;//写1准备读
if(/*(MUTE_DETECT1 == 0) ||*/(MUTE_DETECT2 == 0))
AV_MUTE = 1; //检测到耳机信号,静音
else
AV_MUTE =(bit) mute_flag;
}
#ifdef test_ir_value
//测遥控码
SBUF = Remote_value;
while(TI == 0);
TI = 0;
DelayX1ms(255);DelayX1ms(255);DelayX1ms(255);
#endif
//MUTE_DETECT1 = 1;
MUTE_DETECT2 = 1;//写1准备读
P3 |= 0xf0;
/*开机状态,并且没插耳机进入静音*/
if( (POWER_Status == off)&&(MUTE_DETECT2 != 0)/*&&(MUTE_DETECT1 != 0)*/&&(( P3 & 0xf0 ) == 0xc0) )
{
AV_MUTE = 1;
mute_flag =(unsigned char)AV_MUTE;
if(AV_MUTE == 1)
display_mute(lcd_mute);
else
display_mute(lcd_unmute);
// DelayX1ms(125);
}
}
}
void MCU_Init(void)
{
EA = 0;
ES = 0;
ET1 = 0;
EX1 = 0;
ET0 = 1;
EX0 = 1;
#ifdef OSCFREQ110592
Timer2_CntL = 0x32;
Timer2_CntH = 0xF5;
#else
Timer2_CntL = 0x47;
Timer2_CntH = 0xF4;
#endif
RCAP2L = Timer2_CntL;
RCAP2H = Timer2_CntH;
ET2 = 1;
TF2 = 0;
EXF2 = 0;
RCLK = 0;
TCLK = 0;
EXEN2 = 0;
C_T2 = 0;
CP_RL2 = 0;
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
TMOD = 0x21; //TIMER1为常数自动装入8位方式,TIMER0为16位方式
TH1 = 0xFD;
TL1 = 0xFD;
PCON = 0x00;
SCON = 0x50;
TR0 = 0;
TR1 = 1;
TR2 = 1;
IT1 = 1;
IT0 = 1; //中断0下将沿触发
EA=1;
}
void State_Init(void)
{
Power_Pin = 0;
LED_G = 1;
Current_Key = NO_KEY;
ReadKey_Timer = 0;
POWER_Status = 0;
Remote_value = NO_KEY;
Remote_Key = NO_KEY;
IR_KeyAct = 0;
Panel_Enable = 0;
Current_Remote_In = 0;
Volume_Need_Record = 0;
Panel_KeyAct = 0;
Key_Rebound = 0;
Save_Key = NO_KEY;
Key_LongTimer = 0;
Key_ShortTimer = 0;
Keypointer = NULL;
FF_FB_Active = 0;
Need_Button_up = 0;
CLEAR_M62429_CLK2;
CLEAR_M62429_DATA;
Channel_Select = 1;//开机默认主通道
Volume_Tune(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -