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

📄 main.c

📁 在S3C2440上运行的"电子日历“(支持平年,闰年,星期自动调整). 开发环境是RVDS2.2
💻 C
字号:
/**---------------------版权 (c)----------------------------------------------------------***
***                     作者:颜章健                                                      ***
***                     邮件:jenkinyan@163.com                                           ***
***                                                                                       ***
***---------------------File Info---------------------------------------------------------***
*** 创 建 人:          颜章健	                                                          ***
*** 创建日期:                                                                            ***
*** 创建版本:                                                                            ***
*** 文件描述:          颜章健毕业设计演示程序: 访问学校主页以及新浪网				***
***---------------------------------------------------------------------------------------***
*** 修 订 人:                                                                            ***
*** 修订日期:                                                                            ***
*** 修订版本:                                                                            ***
*** 修订描述:                                                                            ***
***---------------------------------------------------------------------------------------**/
#include 	"config.h"
//#include	<stdlib.h>

#define				URL_BUF_LEN				256
static	char		URL[URL_BUF_LEN];
static	uint32		UrlLen = 0;
static	TCP_SOCKET	HttpSocket;


const	char	Welcome[]=
{
	"\r\n"
	"\r\n"
	"\r\n"
	"         *****  ***       ***          ***   *****       ***                                    \r\n"
	"       *** ***  ***     ***          ***   *** ***     ***            指导:李政林              \r\n"
	"     ***   ***  ***   ***          ***   ***   ***   ***              设计:颜章健              \r\n"
	"   ***     ***  *** *** ***      ***   ***     *** ***                                          \r\n"
	" ***       ***  *****     ***  ***   ***       *****                                            \r\n"
	"-----------------------------------------------------------------------------------------------\r\n"
	"\r\n"
	"\r\n"
};

const	char	Thanks[]=
{
	"\r\n"
	"\r\n"
	"\r\n"
	"************    **         **         **         ***         **    **         **     ********** \r\n"
	"     **         **         **       **  **       ****        **    **       **      **          \r\n"
	"     **         **         **      **    **      ** **       **    **     **        **          \r\n"
	"     **         **         **     **      **     **  **      **    **  **           **          \r\n"
	"     **         *************    ************    **    **    **    ****              ********** \r\n"
	"     **         **         **    **        **    **      **  **    **  **                     **\r\n"
	"     **         **         **    **        **    **       ** **    **     **                  **\r\n"
	"     **         **         **    **        **    **        ****    **       **                **\r\n"
	"     **         **         **    **        **    **         ***    **         **     ********** \r\n"
	"\r\n"
	"\r\n"
	"\r\n"
};



// 函数声明
static	void	Delay(uint32 t);
static	void	SysInit(void);
static	void	TcpCSockHook(TCP_SOCKET *This);
static	void	HttpTask(TCP_SOCKET *Socket);

// 系统主函数
int		main(void)
{	
	uint8	key;
	SysInit();	
	while(1)
	{
		PppReceiveTask();
		if(LinkLayer.State == PPPS_OPENED)		LedOn();
		else									LedOff();
		
		
		TcpFsmTask();		
		HttpTask(&HttpSocket);		
		
		//if(GetKey(500000) == KEY_UP)			Uart0PutStr((char *)Thanks);
		key = 	GetKey(500000);
		switch(key)
		{
			case	KEY_UP:
				Uart0PutStr((char *)Thanks);
				break;
			case	KEY_LEFT:
				IcmpEchoRequest(LinkLayer.Config.DNS1);
				break;
			case	KEY_RIGHT:
				IcmpEchoRequest(LinkLayer.Config.DNS2);
				break;
			default:break;
		}
	}	
}













////////////////////////////////////////////////////////////////////////////
static	void	TcpCSockHook(TCP_SOCKET *This)
{
	while(This->Rxl--)	Uart0PutChar(*(char *)This->Rxd++);
}

static	void	Delay(uint32 t){	while(--t);}

// 系统初始化 
static	void	SysInit(void)
{
	LedInit();
	LedOn();	
	Delay(5000000);
	LedOff();	
	Uart0Init(115200);
	Uart0PutStr((char *)Welcome);
		
	KeyInit();
	NetSystemInitial();
	
	IRQEnable();						// 使能IRQ中断	
	VICIntSelect = 0x00000000;			// 设置所有的通道为IRQ中断
	
	VICVectCntl0 = 0x20 | 0x07;			// UART1分配到IRQ slot0,即最高优先级
	VICVectAddr0 = (uint32)IRQ_MODEM;	// 设置UART1向量地址
	VICIntEnable = 1 << 0x07;			// 使能UART1中断	
	
	VICVectCntl1 = 0x20 | 0x04;			// NetTimer分配到IRQ slot1
	VICVectAddr1 = (uint32)IRQ_NetTimer;// 设置NetTimer向量地址
	VICIntEnable = 1 << 0x04;			// 使能NetTimer中断	
	/*
	Printf(">>\r\n");	
	Printf("打开网络连接\r\n");
	Printf("提示:当板上LED点亮的时,表明系统已经接入网络\r\n");
	*/
	PhyLayer.Open();	
}

static	void	GetUrlTask(TCP_SOCKET *Socket)
{
	const	uint8	GxutAddr[4]  = {222,217,19, 157};
	const	uint8	SinaAddr[4]  = {218,30, 66, 101};
	//const	uint8	ChinaAddr[4] = {124,238,253,20};
	const	char	Others[] =  
	{
		" HTTP/1.0\r\n"
		"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n"
		"User-Agent: Mozilla/3.0 (compatible)\r\n"
		"Host:"
	};
	const	char	HostGxut[] = {"www.gxut.edu.cn\r\n\r\n"};	
		
	if(Uart0RecvNew())
	{
		uint16	i;
		uint16	MyPort = 0;
		UrlLen = Uart0GetStr(URL,URL_BUF_LEN);


		if((UrlLen >= 22) && MemCmp((uint8 *)"http://www.gxut.edu.cn",(uint8 *)URL,22))
		{			
			while(MyPort < 1024 || MyPort > 3000)	MyPort = rand();
			TcpSocketReset(Socket);
			TcpSocketDelete(Socket);					
			TcpSocketCreate(Socket, (uint8 *)GxutAddr,	80,	MyPort,TcpCSockHook);
			
			Printf("打开网页 %s\r\n",URL);
			TcpSocketSend(Socket,(uint8 *)"GET /",5);
			TcpSocketSend(Socket,(uint8 *)(URL + 22),(UrlLen - 22));
			TcpSocketSend(Socket,(uint8 *)Others,sizeof(Others)-1);
			TcpSocketSend(Socket,(uint8 *)HostGxut,sizeof(HostGxut)-1);
			
			UrlLen = 0;
			URL[UrlLen] = 0;
			return;
		}
		
		if((UrlLen >= 15) && MemCmp((uint8 *)"http://",(uint8 *)URL,7))	
		{
			//Printf("%s\r\n",URL);
			for(i=7; i<UrlLen-7; i++)
			{
				if(MemCmp((uint8 *)"sina.com",(uint8 *)URL+i,8))
				{
					uint16	len;
					
					while(MyPort < 1024 || MyPort > 3000)	MyPort = rand();
					TcpSocketReset(Socket);
					TcpSocketDelete(Socket);					
					TcpSocketCreate(Socket, (uint8 *)SinaAddr,	80,	MyPort,TcpCSockHook);					
					
					Printf("打开网页 %s\r\n",URL);					
					len = 15;
					while(len < UrlLen)
					{						
						if(URL[len] == '/')	break;
						len++;						
					}
					TcpSocketSend(Socket,(uint8 *)"GET /",5);				// GET /
					if(len < UrlLen)
					{
						len++;
						while(len < UrlLen)
						{
							TcpSocketSend(Socket,(uint8 *)(&URL[len]),1);	// File
							len++;	
						}
					}					
					TcpSocketSend(Socket,(uint8 *)Others,sizeof(Others)-1);	// HTTP/1.0...
					
					len = 7;
					while(len < UrlLen)
					{
						if(URL[len] == '/')	break;
						TcpSocketSend(Socket,(uint8 *)(&URL[len]),1);		// Host
						len++;
					}
					
					TcpSocketSend(Socket,(uint8 *)"\r\n\r\n",4);				
					
					
					UrlLen = 0;
					URL[UrlLen] = 0;
					return;
				}
			}
		}
		
		if(	MemCmp((uint8 *)"close",(uint8 *)URL,5) )
		{
			if(LinkLayer.State == PPPS_CLOSED)
			{
				Printf("网络连接已关闭\r\n");
			}
			else
			{
				Printf("关闭网络连接\r\n");
				LinkLayer.Close();
			}
			
			UrlLen = 0;
			URL[UrlLen] = 0;
			return;
		}
		
		if(	MemCmp((uint8 *)"open",(uint8 *)URL,4)	)
		{
			if(LinkLayer.State == PPPS_CLOSED)
			{
				Printf("打开网络连接\r\n");
				PhyLayer.PutCmd("ATD*99***1#\r\n");
			}
			else
			{
				Printf("已经(或正在)打开连接\r\n");
			}
			
			UrlLen = 0;
			URL[UrlLen] = 0;
			return;
		}
		
		if(	MemCmp((uint8 *)"welcome",(uint8 *)URL,7))
		{
			Uart0PutStr((char *)Welcome);
			UrlLen = 0;
			URL[UrlLen] = 0;
			return;
		}
		
		if(	MemCmp((uint8 *)"thanks",(uint8 *)URL,6))
		{
			Uart0PutStr((char *)Thanks);
			UrlLen = 0;
			URL[UrlLen] = 0;
			return;
		}
		if(	MemCmp((uint8 *)"dial",(uint8 *)URL,4))
		{
			PhyLayer.Open();
			UrlLen = 0;
			URL[UrlLen] = 0;
			return;
		}
		if(	MemCmp((uint8 *)"reset",(uint8 *)URL,5))
		{
			void	(*Reset)(void) = NULL;
			Reset();
		}			
	}
}


static	void	HttpTask(TCP_SOCKET *Socket)
{
	GetUrlTask(Socket);
	//GetHtmlTask(Socket);
	if(Socket->TXS == SOCKS_CLOSED && Socket->TxWindow.DatLen > 0)
	{
		TcpSocketConnect(Socket);
	}
	if(Socket->TXS == SOCKS_OPENED && Socket->TxWindow.DatLen == 0)
	{
		TcpSocketClose(Socket);
	}
}

/********************************************************************************************
***                     文件结束                                                          ***	
********************************************************************************************/

⌨️ 快捷键说明

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