Ejemplo n.º 1
0
int main(void)
{
	Sys_Init();										//系统初始化
	DS18B20_Link(); 								//连接DS18B20模块
	SIM900A_Link();									//连接GSM模块
	if(sim900a_send_cmd("AT+CMGF=1","OK",200))         return 1;	//设置文本模式 
	if(sim900a_send_cmd("AT+CSCS=\"UCS2\"","OK",200))  return 2;	//设置TE字符集为UCS2(2字节的UNICODE编码。还有UCS4,也就是4字节的UNICODE编码) 
	if(sim900a_send_cmd("AT+CSMP=17,0,2,25","OK",200)) return 3;	//设置短消息文本模式参数
	sim900a_data_ui(40,30);											//GSM信息界面UI
	LCD_Clear(BLUE);        //清屏
	while(1)
	{ 
		Show_Str_Mid(0,20,"基于GSM的实时温度查询系统",16,240); 				    	 	
		sim900a_sms_read();  
		LED0=!LED0;             //1.5s闪烁 
		delay_ms(1500);
		LCD_Fill(0,100,239,224,BLUE);
	} 	
}
Ejemplo n.º 2
0
Archivo: gui.c Proyecto: nvero/fmhobby
//在指定位置显示指定颜色的按钮
//(x,y):按钮起始坐标
//xlen,ylen:x,y方向的长度
//str:按钮上要显示的字符
//color:字符颜色
void GUI_Draw_Button(u16 x,u16 y,u16 xlen,u16 ylen,u8 *str,u16 color)
{	
	u16 tback_color,tpoint_color;
	//////////////////画按钮部分//////////////////////   
	LCD_Fill(x,y,x+xlen,y+ylen,LGRAY);//画实体
	GUI_DrawLine(x,y,xlen,0,WHITE);   //上外边框
	GUI_DrawLine(x,y,0,ylen,WHITE);   //左外边框   	   
	GUI_DrawLine(x+1,y+1,xlen-1,0,0XB5B6);//上内边框
	GUI_DrawLine(x+1,y+1,0,ylen-1,0XB5B6);//左内边框
	GUI_DrawLine(x,y+ylen,xlen,0,0X8431); //下外边框
	GUI_DrawLine(x+xlen,y,0,ylen,0X8431); //右外边框   	   
	GUI_DrawLine(x+1,y+ylen-1,xlen-2,0,0XA535);//下内边框
	GUI_DrawLine(x+xlen-1,y,0,ylen-1,0XA535);  //右内边框
	//////////////////显示按钮上面的信息///////////////  
	if(ylen<16)return;//不够画	 
	tback_color=BACK_COLOR;
	tpoint_color=POINT_COLOR;
	BACK_COLOR=LGRAY;
	POINT_COLOR=color; 
	Show_Str_Mid(x,y+(ylen-16)/2,str,16,xlen);//只对16字体
	BACK_COLOR=tback_color;	 //恢复之前的颜色
	POINT_COLOR=tpoint_color; 
}
Ejemplo n.º 3
0
Archivo: gui.c Proyecto: nvero/fmhobby
//////////////////////////////与文件浏览相关的函数//////////////////////////////
//功能选择调度函数	    
//list  :功能条目指针
//title :标题
//func  :选择/确定/。。。
//len   :功能条目的个数(1~8)
//sel   :开始选中的条目(0~7)
//返回值:0~7,选中的条目;8,没有选择任何条目。
u8 Load_Fun_Sel(const u8 * *list,const u8 *title,u8 *func,u8 len,u8 sel)
{	
	u8 t,key;
	Load_Gui_Bro(func);	   
	//显示标题
	POINT_COLOR=WHITE;
	Show_Str_Mid(0,2,(u8*)title,16,240); //叠加模式,非自动换行  
	POINT_COLOR=DARKBLUE;
	Show_Str(0,23,"请选择:",16,0x01);    //叠加模式,非自动换行	 
	//加载条目信息
	for(t=0;t<len;t++)
	{	 											    
		if(t==sel)
		{
			LCD_Fill(0,45+sel*32,239,37+(sel+1)*32,LBBLUE );//对选中的条目,填充棕色 
			POINT_COLOR=WHITE;
		}else POINT_COLOR=DARKBLUE;	  
		Show_Str(0,50+t*32,(u8*)list[t],16,0x01); //叠加模式,非自动换行       
	} 
 	key=0;
	Pen_Point.Key_Sta=Key_Up;//释放显示期间的触发	    
	while(1)//等待按键
	{	 
		key=AI_Read_TP(30);
		if(key)Pen_Point.Key_Reg|=0X80;//标记按键已经按下了 	   
		if(key==0&&(Pen_Point.Key_Reg&0X80))//按键松开了
		{
			Pen_Point.Key_Reg=0;			    
			key=Touch_To_Num(2);
			if(key)//有按键按下
			{  									    
				switch(key)
				{
					case 1:
					case 2:
					case 3:
					case 4:
					case 5:
					case 6:
					case 7:
					case 8:
					case 9://确认键按下
					key-=1;
					if(sel!=key&&key<len)//选中一个
					{
						POINT_COLOR=DARKBLUE;//画笔颜色选择		 
						LCD_Fill(0,45+sel*32,239,37+(sel+1)*32,WHITE);//清空上次选择的
						Show_Str(0,50+sel*32,(u8*)list[sel],16,0x01);//重新显示上次的名字
			        	sel=key;//选择这次选择的
						LCD_Fill(0,45+sel*32,239,37+(sel+1)*32,LBBLUE);//填充底色
						POINT_COLOR=WHITE;//画笔颜色选择		 
						Show_Str(0,50+sel*32,(u8*)list[sel],16,0x01);//显示名字 
					}else if(sel==key||key==8)//选择按钮,或者双击
					{	 	
						return sel;//返回选择的条目号
					}
						break;  		  	  
					case 10:return 8;//选择了"返回"按钮,返回一个不可能值  
				}  
				key=0;//取消按键值
			}											    
		}	  
		delay_ms(1);	
	}  
}
Ejemplo n.º 4
0
//ATK-RM04 串口以太网测试
//用于测试TCP/UDP连接
//返回值:0,正常
//    其他,错误代码
u8 atk_rm04_cometh_test(void)
{
	u8 netpro=0;	//网络模式
	u8 key;
	u8 timex=0; 
	u8 ipbuf[16]; 	//IP缓存
	u8 *p; 
	u16 t=999;		//加速第一次获取链接状态
	u8 res=0;
	u16 rlen=0;
	u8 constate=0;	//连接状态
	p=mymalloc(SRAMIN,32);							//申请32字节内存
	atk_rm04_send_cmd("at+netmode=1","ok",500);		//设置串口以太网模式
	atk_rm04_send_cmd("at+dhcpd=0","ok",500);		//DHCP服务器关闭(仅AP模式有效) 
	atk_rm04_send_cmd("at+dhcpc=1","ok",500);		//DHCP客户端使能(net_ip无效)
PRESTA:
	netpro=atk_rm04_netpro_sel(50,30,(u8*)ATK_RM04_NETMODE_TBL[1]);	//选择网络模式
	if(netpro&0X02)atk_rm04_send_cmd("at+remotepro=udp","ok",500);	//UDP协议
	else atk_rm04_send_cmd("at+remotepro=tcp","ok",500);			//TCP协议
	sprintf((char*)p,"at+remoteport=%s",portnum);
	atk_rm04_send_cmd(p,"ok",500);					//设置 端口号. 
	if(netpro&0X01)	//客户端
	{
		if(atk_rm04_ip_set("ETH-COM 远端IP设置",(u8*)ATK_RM04_WORKMODE_TBL[netpro],(u8*)portnum,ipbuf))goto PRESTA;	//IP输入 
		sprintf((char*)p,"at+remoteip=%s",ipbuf);
		atk_rm04_send_cmd(p,"ok",500);					//设置远端(连接)IP地址. 
		atk_rm04_send_cmd("at+mode=client","ok",500);	//设置为客户端		
	}else atk_rm04_send_cmd("at+mode=server","ok",500);	//设置为服务端		
	LCD_Clear(WHITE);
	POINT_COLOR=RED;
	Show_Str_Mid(0,30,"ATK-RM04 ETH-COM 测试",16,240); 
	Show_Str(30,50,200,16,"正在配置ATK-RM04模块,请稍等...",12,0); 	
	if(atk_rm04_send_cmd("at+net_commit=1","\r\n",4000))//提交网络配置,最长可能需要等待40s
 	{ 
		LCD_Fill(30,50,239,50+12,WHITE);	//清除之前的显示
		Show_Str(30,50,200,16,"配置ATK-RM04模块失败!",12,0); 
		delay_ms(800);        
		res=1; 
	}else
	{	
		atk_rm04_send_cmd("at+reconn=1","ok",500);		//重启串口转换服务
		LCD_Fill(30,50,239,50+12,WHITE);//清除之前的显示
		Show_Str(30,50,200,16,"配置ATK-RM04模块成功!",12,0);		
		delay_ms(600);
		Show_Str(30,50,210,16,"KEY_UP:退出测试  KEY0:发送数据",12,0); 
		atk_rm04_quit_trans();			//退出透传
		while(1)						//等待ATK-RM04连接上路由器
		{
			atk_rm04_get_wanip(p);		//获取WAN IP
			if(p[0]!=0)break;			//成功获取到了IP地址			
			Show_Str(30,80,200,12,"ATK-RM04 连接路由器失败",12,0); //连接失败 
			delay_ms(800);     
			Show_Str(30,80,200,12,"ATK-RM04 等待连接中....",12,0); 
			delay_ms(800); 
		}
		LCD_Fill(30,80,239,80+12,WHITE);
		if((netpro&0X01)==0)atk_rm04_get_wanip(ipbuf);//服务器模式,获取WAN IP
		sprintf((char*)p,"IP地址:%s 端口:%s",ipbuf,(u8*)portnum);
		Show_Str(30,65,200,12,p,12,0);				//显示IP地址和端口	
		Show_Str(30,80,200,12,"状态:",12,0); 		//连接状态
		Show_Str(120,80,200,12,"模式:",12,0); 		//连接状态
		Show_Str(30,100,200,12,"发送数据:",12,0); 	//发送数据
		Show_Str(30,115,200,12,"接收数据:",12,0);	//接收数据
		POINT_COLOR=BLUE;
		Show_Str(120+30,80,200,12,(u8*)ATK_RM04_WORKMODE_TBL[netpro],12,0); 		//连接状态
		USART3_RX_STA=0;
		while(1)
		{
			key=KEY_Scan(0);
			if(key==WKUP_PRES)			//KEY_UP 退出测试		 
			{   
				res=0;
				break;												 
			}else if(key==KEY0_PRES)	//KEY0 发送数据 
			{
				sprintf((char*)p,"ATK-RM04 %s测试%02d\r\n",ATK_RM04_WORKMODE_TBL[netpro],t/10);//测试数据
				Show_Str(30+54,100,200,12,p,12,0);
				u3_printf("%s",p);		//发送该数据到ATK-RM04模块
				timex=100;
			}
			if(timex)timex--;
			if(timex==1)LCD_Fill(30+54,100,239,112,WHITE);
			t++;
			delay_ms(10);
			if(USART3_RX_STA&0X8000)		//接收到一次数据了
			{ 
				rlen=USART3_RX_STA&0X7FFF;	//得到本次接收到的数据长度
				USART3_RX_BUF[rlen]=0;		//添加结束符 
				printf("%s",USART3_RX_BUF);	//发送到串口   
				sprintf((char*)p,"收到%d字节,内容如下",rlen);//接收到的字节数 
				LCD_Fill(30+54,115,239,130,WHITE);
				POINT_COLOR=BRED;
				Show_Str(30+54,115,156,12,p,12,0); 			//显示接收到的数据长度
				POINT_COLOR=BLUE;				
				LCD_Fill(30,130,239,319,WHITE);
				Show_Str(30,130,180,190,USART3_RX_BUF,12,0);//显示接收到的数据  
				USART3_RX_STA=0;
				if(constate==0)t=1000;		//状态为还未连接,立即更新连接状态
				else t=0;                   //状态为已经连接了,10秒后再检查
			}  
			if(t==1000)//连续10秒钟没有收到任何数据,检查连接是不是还存在.
			{
				constate=atk_rm04_consta_check()-'0';//得到连接状态
				if(constate)Show_Str(30+30,80,200,12,"连接成功",12,0);  //连接状态
				else Show_Str(30+30,80,200,12,"连接失败",12,0); 	 
				t=0;
			}
			if((t%20)==0)LED0=!LED0;
			atk_rm04_at_response(1);
		}
	} 
	myfree(SRAMIN,p);		//释放内存 
	atk_rm04_quit_trans();	//退出透传
	return res;
}