📄 main.c
字号:
/*
//*************************************************************************
//
// M X I C(ShenZhen) P R O P R I E T A R Y
//
// COPYRIGHT (c) 2005 BY MXIC SHENZHEN.
// -- ALL RIGHTS RESERVED --
//
// File Name: Ti's 8050I Case.C
// Created: 19 Oct.05 by AndyHu
// Modified:
// Revision: 1.0
//
//*************************************************************************
//
//
//*************************************************************************
*/
#include <stdio.h>
#include "mxREG52.h"
#include "i2cm.h"
#include "Mxic_IR.h"
/////
#define SLA_R 0xD8
#define SLA_W 0xD9
#define POWER 0x7E
#define VOLUMN_LEFT 0x7D
#define VOLUMN_RIGHT 0x7B
#define PROGRAM_LEFT 0x77
#define PROGRAM_RIGHT 0x6F
#define MENU 0x5F
#define SOURCE_IN 0x3F
#define ISP 0x79
#define ENABLE_I2C 0xC6
sbit data_ready = P0^7;
sbit Power_on_system = P1^5;
sbit Reset_TVP9000 = P1^4;
sbit LED = P1^3;
bit ISP_flag_1;
bit ISP_flag_2;
bit ISP_flag_3;
bit ISP_flag_4;
extern bit PWM_flag;
extern void Backlight_Control(void);
extern void start_ISP(void);
void EnableISP(void);
extern unsigned char power_down_status = 0x00;
extern unsigned char volumn_left_status = 0x00;
extern unsigned char volumn_right_status = 0x00;
extern unsigned char program_left_status = 0x00;
extern unsigned char program_right_status= 0x00;
extern unsigned char menu_status = 0x00;
extern unsigned char source_in_status = 0x00;
extern unsigned char PWM_status;
BYTE key;
unsigned char action_ready_to_handle;
unsigned char menu_key_press_speet_flag;
unsigned char Power_off;
unsigned char IR_receive_flag;
unsigned char MxicIrBitsb1IrOn;
unsigned char MxicIrBitsb1GetIrFlame;
unsigned char MxicIrBitsb1GetIrRepeatCode;
unsigned char MxicIrBitsb1GetIrCommand;
unsigned char Power_status;
extern unsigned char idata FReceive_Done;
void test_power_action(void);
void Initi_MCU_slaver(void);
//extern void InitialTimer1(void); //for IR sampling
void InitialTimer0(void);
extern bit EnableIr(void);
extern bit CheckIrFlame(void);
extern BYTE GetIrCodeData(void);
extern BYTE GetIrIDData(void);
BYTE WaitKey(void);
BYTE key;
void Ir_power_operation(void);
void key_function_operation(void);
void delay(int i);
void key_function_operation(void)
{
switch(key)
{
case POWER:
if(Power_status == 0x00)
{
ISP_flag_1 = 0;
ISP_flag_2 = 0;
ISP_flag_3 = 0;
ISP_flag_4 = 0;
LED = 0;
Power_on_system = 1;//power on the whole system
delay(150);
Reset_TVP9000 = 0;
delay(100);
Reset_TVP9000 = 1;//reset TVP9000
key = 0x00;
Power_status = 0x01;
}
else
{
ISP_flag_1 = 0;
ISP_flag_2 = 0;
ISP_flag_3 = 0;
ISP_flag_4 = 0;
power_down_status = 0x01;//POWER KEY's status flage
data_ready = 0;//tell TVP9000 to powerdown system,
delay(5);
data_ready = 1;
key = 0x00;
Power_status = 0x00;
}
break;
case VOLUMN_LEFT:
if(Power_status == 0x01)
{
ISP_flag_1 = 0;
ISP_flag_2 = 0;
ISP_flag_3 = 0;
ISP_flag_4 = 0;
if(menu_key_press_speet_flag == 0x01)
{
delay(120);
volumn_left_status = 0x01;
data_ready = 0;
delay(5);
data_ready = 1;
key = 0x00;
menu_key_press_speet_flag = 0x00;
}
else
{
delay(90);
volumn_left_status = 0x01;
data_ready = 0;
delay(5);
data_ready = 1;
key = 0x00;
}
}
break;
case VOLUMN_RIGHT:
if(Power_status == 0x01)
{
if(ISP_flag_1 == 1)
{
if(ISP_flag_2 == 1)
{
ISP_flag_3 = 1;
ISP_flag_4 = 0;
}
else
{
ISP_flag_1 = 0;
}
}
else
{
ISP_flag_1 = 0;
ISP_flag_2 = 0;
ISP_flag_3 = 0;
ISP_flag_4 = 0;
}
if(menu_key_press_speet_flag == 0x01)
{
delay(120);
volumn_right_status = 0x01;
data_ready = 0;
delay(5);
data_ready = 1;
key = 0x00;
menu_key_press_speet_flag = 0x00;
}
else
{
delay(90);
volumn_right_status = 0x01;
data_ready = 0;
delay(5);
data_ready = 1;
key = 0x00;
}
}
break;
case PROGRAM_LEFT:
if(Power_status == 0x01)
{
ISP_flag_1 = 0;
ISP_flag_2 = 0;
ISP_flag_3 = 0;
ISP_flag_4 = 0;
program_left_status = 0x01;
data_ready = 0;
delay(40);
data_ready = 1;
key = 0x00;
}
break;
case PROGRAM_RIGHT:
if(Power_status == 0x01)
{
if(ISP_flag_1 == 1)
{
ISP_flag_2 = 1;
}
else
{
ISP_flag_1 = 0;
ISP_flag_2 = 0;
ISP_flag_3 = 0;
ISP_flag_4 = 0;
}
program_right_status = 0x01;
data_ready = 0;
delay(40);
data_ready = 1;
key = 0x00;
}
break;
case MENU:
if(Power_status == 0x01)
{
ISP_flag_1 = 1;
if(ISP_flag_1 == 1)
{
if(ISP_flag_2 == 1)
{
if(ISP_flag_3 == 1)
{
if(ISP_flag_4 == 1)
{
ISP_flag_4 = 0;
EnableISP();
}
else
{
ISP_flag_1 = 0;
ISP_flag_2 = 0;
ISP_flag_3 = 0;
}
}
}
}
delay(100);
menu_key_press_speet_flag = 0x01;
menu_status = 0x01;
data_ready = 0;
delay(5);
data_ready = 1;
key = 0x00;
}
break;
case SOURCE_IN:
if(Power_status == 0x01)
{
if(ISP_flag_1 == 1)
{
if(ISP_flag_2 == 1)
{
if(ISP_flag_3 == 1)
{
ISP_flag_4 = 1;
}
else
{
ISP_flag_1 = 0;
ISP_flag_2 = 0;
}
}
else
{
ISP_flag_1 = 0;
ISP_flag_2 = 0;
ISP_flag_3 = 0;
}
}
source_in_status = 0x01;
data_ready = 0;
delay(5);
data_ready = 1;
key = 0x00;
}
break;
}
}
void test_power_action(void)
{
if(action_ready_to_handle == 0x01)
{
action_ready_to_handle = 0x00;
}
else
if(Power_off == 0x01)
{
Power_on_system = 0;//after 9000 ready power down,MCU'll power down system
Power_off = 0x00;
LED = 1;
}
}
void Ir_power_operation(void)
{
BYTE GetIr;
BYTE GetID;
GetID = GetIrIDData();
if(GetID == 0x10)
{
GetIr=GetIrCodeData();
if(GetIr == 0x5F)
{
if(Power_status == 0x00)
{
LED = 0;
Power_on_system = 1;//power on the whole system
delay(150);
Reset_TVP9000 = 0;
delay(100);
Reset_TVP9000 = 1;//reset TVP9000
Power_status = 0x01;
GetIr = 0x00;
}
else
{
power_down_status = 0x01;
data_ready = 0;//tell TVP9000 to powerdown system,
delay(5);
data_ready = 1;
Power_status = 0x00;
delay(200);
GetIr = 0x00;
}
}
}
}
//
void main(void)
{
PWM_flag = 0;
Power_on_system = 0;
Power_status = 0x00;
action_ready_to_handle = 0x01;
Power_off = 0x00;
menu_key_press_speet_flag = 0x00;
ISP_flag_1 = 0;
ISP_flag_2 = 0;
ISP_flag_3 = 0;
ISP_flag_4 = 0;
InitialTimer0();
Initi_MCU_slaver();
Init_uart();
EnableIr();
while(1)
{
Ir_power_operation();
key_function_operation();
test_power_action();
if(PWM_flag == 1)
{
Backlight_Control();
PWM_flag = 0;
}
}
}
void EnableISP(void)
{
start_ISP();
while(1);
}
BYTE WaitKey(void)
{
BYTE press_key;
press_key = P0 & 0x7F; // get press key from Port#0
if ((press_key == 0x7E) || (press_key == 0x3F) || (press_key == 0x77) || (press_key == 0x6F))
{
for (;;) //wait all key release
if ((P0&0x7F)==0x7F)
break;
}
else
if((press_key == 0x7D)||(press_key == 0x7B))
{
for (;;) //wait all key release
if ((P0&0x7F)!=0x7F)
break;
}
else
if(press_key == 0x5F)
{
for(;;)
if((P0&0x7F) ==0x7F)
break;
}
else
{
press_key = 0;
}
return (press_key); //if not press key will return 0x00
}
void timer0_int( void ) interrupt 1 //about 1ms run into this interrup subrutine,about 100ms to scan the key,
{
unsigned char i = 0,j = 0;
TR0 = 0;
key = WaitKey();
TH0=0x00;
TL0=0x00;
TR0 = 1;
}
void InitialTimer0(void) //1ms timer
{
//set Timer0 for key scan
TMOD=0x01;
TH0=0x00;
TL0=0x00;
EA=1;
TR0=1;
ET0=1;
}
void Initi_MCU_slaver(void)
{
//initial MCU's in slave mode
EA=1;
ES1=1;
S1CON=0xC6;//ENABLE_I2C;enable MCU in slave mode.
S1ADR=0xD8;//SLA_R;
}
//-------------------------------------------
/* transmit a string */
void transs(char *s)
{
while (*s!='\0')
{
SBUF=*s;
while(!TI);
TI = 0 ;
s++;
}
}
//=======================================
//* transmit a char*/
void transc (char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
//---------------------------------------
//---------------------------------------
void transreg(char c)
{
int tmp;
int tmpc;
tmp=c;
tmp=(tmp>>4)&0x0F;
ACC=tmp;
tmpc=hextoascii(tmp);
transc(tmpc);
tmp=c&0x0F;
tmpc=hextoascii(tmp);
transc(tmpc);
transs("\n\r");
}
//-----------------------------------------
int hextoascii(int hex2)
{
int tmp1;
tmp1=hex2;
if (tmp1 >= 0x0A )
{
tmp1 += 0x37;
}
else
{
tmp1+=0x30;
}
return tmp1;
}
void Init_uart()
{
// SCON = 0x50;
TI = 0x00;
TMOD = 0x20;
RCAP2H = 0XFF; //11.0592MHz
RCAP2L = 0XB8; //the baud rate is the 4800bps
T2CON = 0x34;
SCON = 0x52;
TR2 = 1;
ET2 = 1;
EA = 1;
// TL1 = 0x00;
// TH1 = 0xF3; //12M 2400
// TR1 = 0x01;
}
void delay(int i)
{
int j1,j2;
for(j1=0;j1<i;j1++)
for(j2=0;j2<i;j2++);
{
;
}
}
/**************************************************************************
* 函数原型: void timer0(void);
* 功 能: 定时器T0中断服务数函按键扫描
/**************************************************************************/
/*void Timer0(void) interrupt 1 using 1
{
TR0=0;
// 重装定时器T0时间常数
TMOD=0x01;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
if(++click==4)
{
click=0;
scan_key();
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -