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

📄 main.c

📁 8051单片机的LCDTV用户界面程序
💻 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 + -