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

📄 main.c

📁 一个通过8051来控制8019上网的程序 该程序已经通过并成功用于键盘
💻 C
字号:
#include <string.h>
#include <stdlib.h>
#include <reg89C58.h>
#include <stdio.h>
#include <intrins.h>
#include "net.h"
#include "eth.h"
#include "analog.h"
#include "arp.h"
#include "tcp.h"
#include "ip.h"
#include "udp.h"
#include "24c04.h"
#define uchar unsigned char
#define uint  unsigned int
sbit lamp=P1^7;

UCHAR bdata bit_dat;
sbit bt7=bit_dat^7;
sbit bt0=bit_dat^0;
sbit lapck=P1^0;
sbit ck=P1^1;
sbit kdat=P1^2;
sbit as1=P1^3;
sbit as2=P1^4;
sbit as3=P1^5;
sbit as4=P1^6;
sbit warry=P3^3;                 ///THE FOOT IS WARRY 
UCHAR warrypost;
bit udpst;
bit QUT;
bit KT;
bit DG;
bit OL;
bit STP;
bit KFF;
bit KBB;
bit LR;
bit OC;
bit NEX;
bit LAS;
bit PLY;
bit PWR;
bit RSS;
bit DVD;
bit VCER;
bit CAMER;
bit CAPE;
bit PIN;
bit ZANTAI;
bit LIAN;
bit SYTECH;
bit COMPUTER;
bit BOOK;
bit MUTE;
bit FCOUS;
bit BLAMP;
bit SYSON;
bit FREES;
bit SYSOFF;
bit YY;
bit sendkey;
UCHAR LED;
UCHAR sound1;
UCHAR pc;
UCHAR warrymode;
// Global variables

UINT volatile event_word;
char xdata text[20];  
UCHAR idata debug;

UCHAR idata rcve_buf_allocated;

UCHAR data timeflg=0x3F;
// This sets my hardware address to 00:01:02:03:04:05
//UCHAR data my_hwaddr[6] = {0x08, 0x07, 0x06, 0x05, 0x05, 0x04}; 
UCHAR data my_hwaddr[6]; 
//UCHAR code sucee[10]="compiling";
// Hardware addr to send a broadcast
UCHAR code broadcast_hwaddr[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
UCHAR code sysbak1[16]={0x08,0x07,0x06,0x05,0x04,0x01,0xc0,0xa8,0x00,0x07,0x40,0x00,0xc0,0xa8,0x00,0x04};
UCHAR code sysbak2[12]={0x04,0xd2,0xff,0xff,0xff,0x00,0xc0,0xa8,0x00,0x01,0x02,0xff};

// This sets my IP address to 192.168.0.10
//ULONG data  my_ipaddr = 0xc0a8000aL;
ULONG data  my_ipaddr;
ULONG data  my_temote_ipaddr;
UINT data my_remote_port;
// This sets my subnet mask to 255.255.255.0
//ULONG code  my_subnet = 0xFFFFFF00L;
ULONG idata  my_subnet;
// Set to 0 if no gateway is present on network
//ULONG code gateway_ipaddr = 0xc0a80001L;
ULONG idata gateway_ipaddr;

UCHAR data netsdbuf[10]={0XFF,0X31,0X32,0X33,0X34,0X35,0X31,0X00,0X0D,0X2D};
uchar data sdbuf[8]={0XFF,0X00,0X32,0X32,0X00,0X00,0X00,0X00};
UCHAR idata pmtime;
uchar ALLOFF;
uchar BER;
uchar PM;
uint bbbb;
uint timer;
uchar SYSST;
uchar POWST;
UCHAR stopqhy;
UINT idata PMDLY;
//--------------------------------------------------------------------------
// Initialize the memory management routines
// Initialize variables declared in main
//--------------------------------------------------------------------------


void delay(uint i)
{	while(i--);
	}	

void init_main(void)
{
		init_mempool((void xdata *)1000, 1500);
	memset(text, 0, sizeof(text));
	event_word = 0;
	rcve_buf_allocated = FALSE;
	debug = 1;
}



void Timer_Init (void)
{
	TH0 = 0;   		// set Timer0 to overflow in 1ms
   	TL0 = 0;
   	TH1=0XEE;
	TL1=0XEE;
	PCON=0X80;
	SCON=0X50;
	TMOD = 0X21;
	TR1=1;
	TR0 = 0;   	// STOP Timer0
	ET1=0;
	ET0=1;
	ES=1;
	EA=1;
}

void wdog(void)
{
SWDT=0;
WDTD=timeflg;
WDTC=0X0F;
}
/*
void SD_RS(UCHAR x)
{	UCHAR i;
	
TH1=0xEE;TL1=0xEE;PCON=0x80;
		  for(i=0;i<1;i++){SBUF=x;while(TI!=1);TI=0;}
TH1=0XEE;TL1=0XEE;PCON=0X80;
}
*/
void display(UCHAR x)
{	UCHAR idata i;
	bit_dat=x;
	for(i=0;i<8;i++){
		kdat=bt7;lapck=0;bit_dat=_crol_(bit_dat,1);
		_nop_();
		_nop_();
		lapck=1;
		}
}

////////////////////////////////////////key-164//////////////////
bit k164_hit(void)			//8bit-send
{	uchar i;
	bit_dat=0;
	for(i=0;i<8;i++){
		kdat=bt7;ck=0;bit_dat=_crol_(bit_dat,1);
		_nop_();_nop_();ck=1;
		}
	if((as1&as2&as3&as4)==0)return(1);
	else return(0);	
}
uchar k164(void)			//8bit-send
{	uchar i,j,key_num;
	uchar kk;
  if(k164_hit())delay(40000);
  	else return(0xff);
  if(k164_hit()){		
	
	lamp=1;
	kk=0x7f;
	for(j=0;j<8;j++){bit_dat=kk;
	  for(i=0;i<8;i++){
		kdat=bt7;ck=0;bit_dat=_crol_(bit_dat,1);
		_nop_();_nop_();ck=1;
				}
		if((as1&as2&as3&as4)==0)goto find;		
		kk=_cror_(kk,1);
			   }
find:	if(as1==0)key_num=j;
		if(as2==0)key_num=j+8;
		if(as3==0)key_num=j+16;
		if(as4==0)key_num=j+24;
		//WR=0;
	if(key_num<10)key_num=key_num+'0';
	else if(key_num<32)key_num=key_num+'A'-10;
	else key_num=key_num+'A'-14;
	//	while(k164_hit());lamp=0;
		return(key_num);
		}
  else return(0xff);
}
void send_ch()
{	uchar i;
	netsdbuf[7]=0;
	for(i=1;i<7;i++)netsdbuf[7]=netsdbuf[7]+netsdbuf[i];
	udp_qhysend(netsdbuf, 1024,my_remote_port,my_temote_ipaddr, 10);
}
void sendcom_ch()
{	uchar i;
	sdbuf[7]=0;
	for(i=1;i<7;i++)sdbuf[7]=sdbuf[7]+sdbuf[i];
	EA=0;
	for(i=0;i<8;i++){SBUF=sdbuf[i];while(TI!=1);TI=0;}
	SBUF=0X0D;while(TI!=1);TI=0;
	SBUF=0X2D;while(TI!=1);TI=0;
	EA=1;
}
void fu_key(uchar kk)
{	switch(kk){
	case 0:break;
	case 'J':if(ALLOFF){ LED=(LED&0X80)|0X80;display(LED);                                      //THIS KEY IS DVD KEY
		DVD=~DVD;if(DVD)sdbuf[5]='e';else sdbuf[5]='f';netsdbuf[2]='4';
		delay(30000);}
		lamp=0;
		break;
	case 'K':if(ALLOFF){  LED=(LED&0X40)|0X40;display(LED);                                      //THIS KEY IS VCR
		VCER=~VCER;if(VCER)sdbuf[5]='g';else sdbuf[5]='h';netsdbuf[2]='5';
		delay(30000);}
		lamp=0;
		break;
	case 'L':if(ALLOFF){   LED=(LED&0X20)|0X20;display(LED);                                     //THIS KEY IS CARM 
		CAMER=~CAMER;if(CAMER)sdbuf[5]='i';else sdbuf[5]='j';netsdbuf[2]='7';
			delay(30000);}
		lamp=0;
		break;
	case 'M':if(ALLOFF){  LED=(LED&0X10)|0X10;display(LED);                                     //THIS IS KEY IS CAPE
		CAPE=~CAPE;if(CAPE)sdbuf[5]='k';else sdbuf[5]='l';netsdbuf[2]='8';
		delay(30000);}
		lamp=0;	
		break;
	case '7':if(ALLOFF){                                                                       //THIS IS SCRESS DOWN AND UP 
		PIN=~PIN;PM=1;
		if(PIN)sdbuf[5]='u';else sdbuf[5]='v';
		timer=0;TR0=1;
		delay(30000);}
		lamp=0;
			
		break;
	case '1':if(ALLOFF){PM=1;delay(30000);}lamp=0;break;    //THIS IS SCRESS STOP 
	case 'V':if(POWST==0){
		ALLOFF=~ALLOFF;if(ALLOFF)                                    //POWER KEY
		{		
		sdbuf[5]='z';
	
		TR0=0;BER=0;bbbb=0;  netsdbuf[2]='1';netsdbuf[3]='2';netsdbuf[6]='3';
		LED=(LED&0X08)|0X08;
		display(LED);
		}
		else 
		{
		
		sdbuf[5]='y';
		TR0=1;BER=1;bbbb=0;  netsdbuf[2]='9';netsdbuf[3]='1';
			    
		}
			    }
		delay(35000);lamp=0;	
		break;
	case 'U':if(ALLOFF){ LED=(LED&0X01)|0X01;display(LED);                                    //ZANTAI
		KT=~KT;if(KT){sdbuf[5]='m';}else {sdbuf[5]='n';};netsdbuf[2]='6';
		delay(30000);}
		lamp=0;	break;///zoom up
//	case '8':if(ALLOFF){                                        //SYSCYNL STUDIO 
//		SYTECH=~SYTECH;if(SYTECH)sdbuf[5]='m';else sdbuf[5]='n';
//		delay(30000);lamp=0;}
//		RD=0;	break;
	case 'R':if(ALLOFF){ LED=(LED&0X08)|0X08;display(LED);                                    //COMPUTER
		COMPUTER=~COMPUTER;if(COMPUTER)sdbuf[5]='o';else sdbuf[5]='p';netsdbuf[2]='1';
		delay(30000);}
		lamp=0;	break;
	
	case 'S':if(ALLOFF){LED=(LED&0X04)|0X04;display(LED);                                     //NOTBOOK
		BOOK=~BOOK;if(BOOK)sdbuf[5]='q';else sdbuf[5]='r';netsdbuf[2]='2';
			delay(30000);}
		lamp=0;	break; 
	case 'T':if(ALLOFF){  LED=(LED&0X02)|0X02;display(LED);                                  //DIGIATL ZANTAI
		QUT=~QUT;if(QUT)sdbuf[5]='3';else sdbuf[5]='4';netsdbuf[2]='3';
		delay(30000);}
		lamp=0;	break;
	case 'F':if(ALLOFF) {                                            //窗帘开合                                       
		LIAN=~LIAN;PM=1;if(LIAN)sdbuf[5]='w';else sdbuf[5]='x';
		timer=0;TR0=1;
		delay(30000);}
		lamp=0;break;
	case '2':if(ALLOFF){                                             //窗帘停
		PM=1;delay(30000);}lamp=0;	break;
//	case 'E':if(ALLOFF){if(MUTE){sdbuf[5]='Y';}
//		else {sdbuf[5]='X';}
//		delay(30000);RD=0;}RD=0;break;
//	case 'F':if(ALLOFF){
//		DG=~DG;if(DG){sdbuf[5]='5';}else {sdbuf[5]='6';};
//		delay(30000);RD=0;}RD=0;	break;////zoom down
	case 'B':if(ALLOFF){                                             //上一曲
		LAS=~LAS;if(LAS)sdbuf[5]='7';else sdbuf[5]='8';
		delay(30000);}lamp=0;break;
	case '8':if(ALLOFF){	                                  //快回
		KBB=~KBB;if(KBB)sdbuf[5]='9';else sdbuf[5]='A';
		delay(30000);}lamp=0;break;
	case 'O':if(ALLOFF){                                          //PLAY
		PLY=~PLY;if(PLY)sdbuf[5]='B';else sdbuf[5]='C';
		delay(30000);}lamp=0;break;
	case 'D':if(ALLOFF){                                           //快进
		KFF=~KFF;if(KFF)sdbuf[5]='D';else sdbuf[5]='E';
		delay(30000);}lamp=0;break;
	case 'E':if(ALLOFF){                                             //下一曲
		NEX=~NEX;if(NEX)sdbuf[5]='F';else sdbuf[5]='G';
		delay(30000);}lamp=0;break;

	case 'A':if(ALLOFF){                                       //主音量+
		if(sdbuf[2]<8+'0'){
				if(sdbuf[2]<8+'0')sdbuf[2]++;delay(30000);	
			              }
			        	}lamp=0;   
				break;
	case '9':if(ALLOFF){                                        //话筒音量+
		if(sdbuf[3]<8+'0'){if(sdbuf[3]<8+'0')sdbuf[3]++;
		                  delay(30000);
		                  }
		                }lamp=0;
				break;

//	case 'N':if(ALLOFF){
//		FCOUS=~FCOUS;if(FCOUS)sdbuf[5]='V';else sdbuf[5]='W';
//		delay(30000);RD=0;}RD=0;break;

//	case 'O':if(ALLOFF){
//		PWR=~PWR;if(PWR)sdbuf[5]='H';else sdbuf[5]='I';
//		delay(30000);RD=0;}RD=0;break;
	case 'H':STP=~STP;if(STP)sdbuf[5]='J';else sdbuf[5]='K';    //暂停
		delay(30000);while(k164_hit());
		lamp=0;	break;
	case 'P':if(ALLOFF){                                        //出他
		OL=~OL;if(OL)sdbuf[5]='L';else sdbuf[5]='M';
		delay(30000);}lamp=0;	break;
//	case 'Q':if(ALLOFF){delay(30000);RD=0;}RD=0;	break;
	case 'G':if(ALLOFF){                                        //声道
		LR=~LR;if(LR)sdbuf[5]='N';else sdbuf[5]='O';
		delay(30000);}lamp=0;	break;
	case '0':if(ALLOFF){if(sdbuf[2]>1+'0'){if(sdbuf[2]>1+'0')sdbuf[2]--;//主音量_-
		delay(30000);}
		}lamp=0;	break;
	case '3':if(ALLOFF){if(sdbuf[3]>1+'0'){if(sdbuf[3]>1+'0')sdbuf[3]--;//话筒音量-
		delay(30000);}
		}lamp=0;	break;

//	case 'V':if(ALLOFF){BLAMP=~BLAMP;if(BLAMP)sdbuf[5]='T';else sdbuf[5]='U';
//		delay(30000);RD=0;}RD=0;	break;

	case '6':if(ALLOFF){SYSOFF=~SYSOFF;netsdbuf[6]='2';if(SYSOFF)sdbuf[5]='a';else sdbuf[5]='b';
		POWST=0;PM=1;BER=1;bbbb=0;timer=0;TR0=1;
		delay(30000);}lamp=0;break;

//	case 'X':if(ALLOFF){FREES=~FREES;if(FREES)sdbuf[5]='R';else sdbuf[5]='S';
//	
	
//		delay(30000);RD=0;}RD=0;	
//		break;// this is zheng fu pian
	case '5':if(ALLOFF){SYSON=~SYSON;netsdbuf[6]='1';if(SYSON)sdbuf[5]='c';else sdbuf[5]='d';
		POWST=1;PM=1;timer=0;TR0=1;BER=0;
		delay(30000);}lamp=0;	break;
//	case 'Z':if(ALLOFF){OC=~OC;if(OC)sdbuf[5]='P';else sdbuf[5]='Q';
//		delay(30000);RD=0;}RD=0;	break;	

	case 'X':warrymode=0;netsdbuf[6]=warrypost;break;       //the recive warry
	default:break;
	}
}

void timer0() interrupt 1		//timer0 init for DELAY
{
	
	TH0=0;TL0=0x0;
	
	if(PM){
	timer++;
	
	if(timer>PMDLY){
			if(ALLOFF){PM=1;}
			//fu_key('1');
			sdbuf[1]='1';sendcom_ch();
	
	    	//	fu_key('2');
			sdbuf[1]='2';sendcom_ch();timer=0;
			 PM=0;
		     if(!BER){TR0=0;}
		     }
	      }
	
	
	  if(BER){stopqhy++;bbbb++; 
		if(stopqhy>40){lamp=1;delay(200);stopqhy=0;}
		else lamp=0;
		if(bbbb==5760){sdbuf[2]='3';sdbuf[3]='3';//FOR SOUND START
		sendcom_ch();sdbuf[1]='R';

       if(ALLOFF){                                     //COMPUTER
		COMPUTER=~COMPUTER;if(COMPUTER)sdbuf[5]='o';else sdbuf[5]='p';
	             }

		//fu_key('R');
	    sendcom_ch();	
		TR0=0;bbbb=0;BER=0;ALLOFF=0;
		SYSST=0;netsdbuf[6]='3';netsdbuf[2]='A'; netsdbuf[3]='1';}
					
		}
	
}
void ssio(void) interrupt 4 using 1
{	
	RI=0;ES=0;
	if(SBUF!=0XFF){ES=1;goto reti;}
	while(RI!=1);RI=0;pc=SBUF;
	if(pc==0x7f)
	{
	YY=1;

	}
	else {sendkey=1;}
	ES=1;
reti:   ;
}
void SYSOFF_DLY()
{	switch(pmtime)
	{
	case 0X01:PMDLY=1440;break;                      //45 SECEDND
	case 0X02:PMDLY=1920;break;                      //60
	case 0X03:PMDLY=2400;break;                       //75
	case 0X04:PMDLY=2880;break;                        //90
	case 0X05:PMDLY=3840;break;                        //120 

	default:break;
	}
}
void systemdat_init()
{
	//UCHAR i;
	STORECODE data * istore;
	UCHAR data net_dcode[28];
	read_temp(0x00,28,net_dcode);
	istore=(STORECODE data *) net_dcode;
	memcpy(my_hwaddr,istore, 6);     //the code is mac phy netcard

	delay(3000);
	my_ipaddr=istore->local_ipaddr;            //THE CODE IS LOAD LOCALIPADDR
	delay(1000);
	my_temote_ipaddr=istore->remote_ipaddr;    //the code is load temote_ipaddr
	delay(1000);
	my_remote_port=istore->remote_port;        //the code is load temote_port
	delay(1000);
	my_subnet=istore->subnet;                  //the code is load subnet
	delay(1000);
	gateway_ipaddr=istore->gatewayip;          //the code is load gatewayip
	delay(1000);
	pmtime=istore->pmdelay;                     //the code is load pmdlay 
	SYSOFF_DLY();
}

void main (void)
{
	UINT j, event_word_copy;
	UCHAR xdata * inbuf;
    UCHAR  hkey;
	udpst=0;
	ALLOFF=0;
	POWST=0;
	BER=0;
	bbbb=0;
	timer=0;
	stopqhy=0;
	YY=0;
	sendkey=0;
	Timer_Init();
	systemdat_init();
 	init_main();
    lamp=0;
	j=0;
  	init_tcp();
	EA=1;
	init_arp();
	init_8019();
	if(WDTS){wdog();}
	WDTD=timeflg;
	WDTC=0X0F;
  	SYSST=0;
	LED=0X00;
	display(LED);
	netsdbuf[6]='3';                                 ///设备无电
	netsdbuf[3]='1';                                  //设备未上电

⌨️ 快捷键说明

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