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

📄 iic_slave.c

📁 8051单片机的LCDTV用户界面程序
💻 C
字号:
#include "mxREG52.H"
#include "i2cm.h"

sbit	data_ready = P2^7;
extern unsigned char power_down_status;
extern unsigned char volumn_left_status ;
extern unsigned char volumn_right_status;
extern unsigned char program_left_status;
extern unsigned char program_right_status;
extern unsigned char menu_status;
extern unsigned char source_in_status;
extern unsigned char Power_status;

unsigned char Power_off_1;
unsigned char PWM_status;
bit	PWM_flag;
unsigned char num = 0x00;
unsigned char idata DATA[2]={0x32};
unsigned char command;
extern unsigned char data keydata;
unsigned char keypad_received;
unsigned char	RTC_receied;
unsigned char data RTCDATA[4];
unsigned char trans_done;
unsigned char idata Slave_Adr;
unsigned char idata FReceive_Done;
unsigned char idata FTransmitted_Done;
extern unsigned char action_ready_to_handle;
extern unsigned char Power_off;

//------------------------------------------------------
//i2c interrupt service routine
//------------------------------------------------------

void i2c_isr(void) interrupt 5
{
    switch(S1STA)
	{
		case Bus_error:
        	transreg(Bus_error);
	    	break;

		//=====SLAVE RECEIVE mode===================
		case SR_SLAW_ACK:			//0x60
//		transreg(SR_SLAW_ACK);	
		num = 0;
		S1CON=RELEASE_BUS_ACK;
		break;

		case SR_DATA_ACK:			//0x80
//		transreg(SR_DATA_ACK);
		if(Power_off_1 == 0x01)
			{
			if(S1DAT == 0xF1)
				{
				Power_off = 0x01;
				}
				Power_off_1 = 0x00;
			}
		else
		{
		if(PWM_flag == 0)
			{
			if(S1DAT == 0x32)
				{
				keypad_received = 1;
				}
			else
				if(S1DAT == 0xF0)
					{
					Power_off_1 = 0x01;
					}
				else
					if(S1DAT == 0x37)
						{
						P2 = 0x55;
						PWM_flag = 1;
						}
			}
		else
			{
			PWM_status = S1DAT;
			P2 = 0x57;
			}
		}
		num++;
		S1CON=RELEASE_BUS_ACK;
		break;

		case SR_STOP_ACK:			//0xA0	receive has done
//		transreg(SR_STOP_ACK);
		S1CON=RELEASE_BUS_ACK;
		FReceive_Done = 1;
		break;
		//==========================================
		//=====SLAVE TRANSMITTER mode===============
		case ST_SLAR_ACK:			//0xA8
//		transreg(ST_SLAR_ACK);
		if(keypad_received)
			{S1DAT = 0x32;
//			transreg(S1DAT);
			}
		S1CON=RELEASE_BUS_ACK;
		break;

		case ST_DATA_ACK:			//0xB8
//		transreg(ST_DATA_ACK);
		if(power_down_status==0x01)
			{
			S1DAT = 0x51;
//			transreg(S1DAT);
			power_down_status = 0x00;
			}
		if(menu_status == 0x01)
			{
			S1DAT = 0X55;
//			transreg(S1DAT);
			menu_status = 0x00;
			}
		if(source_in_status == 0x01)
			{
			S1DAT = 0X56;
//			transreg(S1DAT);
			source_in_status = 0x00;
			}
		if(volumn_left_status == 0x01)
			{
			S1DAT = 0x57;
//			transreg(S1DAT);
			volumn_left_status = 0x00;
			}
		if(volumn_right_status == 0x01)
			{
			S1DAT = 0x58;
//			transreg(S1DAT);
			volumn_right_status = 0x00;
			}
		if(program_left_status == 0x01)
			{
			S1DAT = 0X59;
//			transreg(S1DAT);
			program_left_status = 0x00;
			}
		if(program_right_status == 0x01)
			{
			S1DAT = 0X54;
//			transreg(S1DAT);
			program_right_status = 0x00;
			}
		S1CON = RELEASE_BUS_ACK;
		break;

		case ST_STOP_NONACK	:		//0xC0
//		transreg(ST_STOP_NONACK);
		S1CON=RELEASE_BUS_ACK;
		FTransmitted_Done =1;
		data_ready = 0x01;
		break;
	

		//==========================================
	}
}

⌨️ 快捷键说明

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