最新WIFI课程设计实习报告.docx
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateWIFI课程设计实习报告电子与信息工程学院电子与信息工程学院课 程 设 计 报 告(2012 2013学年 第 2 学期) 课程名称: 基于WIFI 模块的无线表决器 班 级: xxxxxxxxx 学 号: xxxxxx 姓 名: xxxxxxxxxxxxxx 指导教师: xxxxxxxxxx 2013年 05月基于WIFI 模块的无线数据传输一、选题背景: 随着科技进步,很多嵌入式设备使用以太网接口实现数据传输,有线方式需布线、使用点不灵活等问题,采用WIFI模块实现无线通信,方便、灵活成为很多嵌入式设备完成数据传输的首选。二、 设计选题: 无线表决器(决定某件事情是否通过)三、小组成员: 四、设计器材: Wifi模块 一块、手机(为安卓系统的且带有有人网络助手软件)、单片机一块、液晶显示屏一个。五、课题简介: 做一个无线表决器,判定某件事是否予以通过,采用少数服从多数原则;”Y”表示赞同,”N”表示反对,”G”表示弃权。当手机使用有人网络助手软件(此时已经与wifi成功连接)发送Y,N,G三种不同信息时,通过wifi经过串口将信息送至单片机中进行信息处理,最后将投票结果显示在液晶显示屏上,同时也可以按下独立按键S5(与C51单片机P37端口相连),将显示结果发送至手机中显示。六、设计整体框图:显示模块液晶显示屏终端模块手机无线模块 wifi处理器模块单片机 发送投票决定 串口连接 接受投票结果1.终端模块: 使用安卓系统手机并下载有人网络助手软件,给wifi模块上电,手机开启WIFI 功能,找到并加入ABCDEFG12345的WIFI 网络,在手机上启动有人网络助手软件,切换到TCP Client 界面,点击增加,创建一个到10.10.100.254的8899 端口(为wifi的IP地址与端口)的TCP 连接,创建成功后,会建立和WIFI 模块的TCP 连接。建立连接成功后,手机发送数据,单片机的串口会收到数据。投票结束时,按下独立按键S5(与C51单片机P37端口相连),可以将投票结果送到手机上。独立按键内部电路连线图与单片机管脚图如下2.无线模块:(1)功能描述 1.无线组网 HF-A11x 的无线模块即可以配置成一个无线STA,也可以配置成AP。所以HF-A11x 逻辑上支持2 个无线接口,一个作为STA,另一个接口相当于一个AP,其它STA 可以通过这个模块的AP 接口连入无线网络。所以,利用HF-A11x 可以提供十分灵活的组网方式,和网络拓扑。HF-A11x 的功能模块如下图所示: <说明>:AP:即无线接入点,是一个无线网络的中心节点。通常使用的无线路由器就是一个AP,其它无线终端可以通过AP 相互连接。STA:即无线站点,是一个无线网络的终端。如笔记本电脑、PDA 等。 2. 安全机制HF-A11x 模块支持多种无线网络加密方式,能充分保证数据的安全传输,包括: WEP WAP-PSK/TKIP WAP-PSK/AES WAP2-PSK/TKIP WPA2-PSK/AES3. 地址绑定HF-A11x 模块支持在联网过程中(作为STA,去连接AP 过程中)绑定目的网络的BSSID 的功能。根据802.11 协议规定,不同的无线网络可以具有相同的网络名称(即SSID/ESSID),但是必须对应一个唯一的BSSID 地址(即MAC 地址)。非法入侵者可以通过建立具有相同的SSID/ESSID 的无线网络的方法,使得网络中的STA 联接到非法的AP 上,从而造成网络的泄密。通过BSSID 地址绑定,可以防止STA 接入到非法的网络上,从而提高无线网络的安全性。4. 以太网接口功能HF-A11x 模块提供一个100M 以太网接口,通过这个100M 以太网接口,用户可以实现WIFI 口、串口、以太网口,三个接口互通。在组网方面,HF-A11x 模块支持桥接模式和路由模式来对应不同的具体应用。<说明>:对于不同的组网方式,HF-A11x 可能需要不同的软件版本支持(如下面所描述的N-Ver和Z-Ver)。请联系有人科技的技术支持人员来获得更进一步的以太网组网应用。 5. 工作模式 HF-A11x 模块支持两种工作模式:透明传输模式和协议传输模式。透明传输模式可以实现串口即插即用,从而最大程度的降低用户使用的复杂度。协议传输模式可以实现用户数据的准确传输。用户可以根据实际需要设置不同的工作模式,并保存在Flash 中,上电起动后模块会自动进入该工作模式。HF-A11x 模块上电起动后,会根据用户预先设置好的参数,自动的去连接无线网络及服务器,并且进行设置的工作模式,按预设的串口参数打开串口。 6. 网络协议 HF-A11x 模块支持TCP/UDP 网络协议,协议端口可以通过web 方式或串口的AT+命令设置。HF-A11x 网络侧的接口可以是server,也可以是client,通过web 方式或串口的AT+命令设置。(2)收发测试 给wifi上电,在笔记本电脑上搜索网络并找到wifi网络与之相连。打开测试软件 USR-TCP232-Test.exe,选择硬件连接到的计算机的串口号,这里是 COM3,选择波特率57600,此为WIFI模块内部串口默认的波特率,点打开串口。 网络设置区选择 TCP client模式,服务器 IP 地址输入10.10.100.254,此为WIFI 模块默认的 IP 地址,服务器端口号8899,此为模块默认监听的TCP端口号,点击连接建立TCP连接。至此,你就可以在串口和网络之间进行数据数据收发测试了,串口到网络的数据流向是:计算机串口->模块串口->模块WIFI->计算机网络,网络到串口的数据流向是:计算机网络->模块WIFI->模块串口->计算机串口。(3)wifi设置 给wifi模块上电,保持计算机与WIFI 网络链接,登录http:/10.10.100.254,即可进入设置网页,默认用户名和密码均为 admin。按图中右上角提示依次设置,在无线接入点与在串口及其他设置中:按下图所示设置,完成wifi设置。3.处理器模块:1. 串口:Wifi通过串口才能与单片机相连,相互传输信息。而要保证二者准确无误的通信,必须要对串口通信初始设定(其中尤其要注意数据位、波特率要与wifi设置保持一致,否则二者之间无法正常通信),还要编写串口发送、中断、接收等功能的C语言程序再入单片机中。如下图所示为串口内部电路连线图:由图中可知,串口有三条有用线,一条接地线,另两条分别为输入、输出线,可将信息传入单片机处理,也可让单片机将处理后的信息传输出去。另外,单片机的RS232串口是TTL电平接口,所以通过连接MAX232芯片进行电平转换后为232电平,可以直接接PC机进行调试和烧写程序。2. C51单片机:单片机是一种集成电路芯片,它的基本结构为运算器、控制器、主要寄存器。单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能。单片机要对所接收到的信息进行处理操作,所以必须要有延时、中断(即串口中断)、计数等函数环节。为此,根据课题内容要求以及所学知识编写相应的C语言程序载入单片机中。下面给出一个51单片机的最小系统电路图:图中:(1)震荡电路单片机系统正常工作的保证如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振和瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。(2)复位电路 给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两种复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,通过按钮接通低电平给系统复位,这时如果手按着一直不放,系统将一直复位,不能正常工作。4显示模块: 液晶显示屏RS、R/W、E管脚分别与c51单片机P35,P36,P34端口相连。要将单片机处理的信息显示在液晶屏上,必须要进行检查LCD忙状态、写指令数据到LCD、写显示数据到LCD、LCD初始化设定、设定显示位置、数据显示函数等环节操作,写出相应的C语言程序载入单片机中。如下表所示为液晶显示模块内部控制指令:下表为字符型LCD的引脚定义:DDRAM就是显示数据RAM用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:清屏指令功能:<1> 清除液晶显示器,即将DDRAM的内容全部填入“空白”的ASCII码20H; <2> 光标归位,即将光标撤回液晶显示屏的左上方<3> 将地址计数器(AC)的值设为0。显示开关控制指令设定显示屏或光标移动方向指令读取忙信号或AC地址指令下图为液晶屏内部电路连线机与管脚图以及部分与单片机管脚连线图:七、程序流程图:开始 串口初始化液晶屏初始化串口接收中断单片机计数液晶屏显示按下独立按键S5 NO yes经串口将结果信息返回终端八、C语言程序及注释:#include<reg51.h>/包含头文件#include<string.h>#include <intrins.h>#define uint unsigned int/宏定义#define uchar unsigned char#define delayNOP(); _nop_();_nop_();_nop_();_nop_();/延时sbit key=P37;/独立按键S5;sbit LCD_RS = P35; /液晶屏读写使能控制口 sbit LCD_EN = P34;sbit LCD_WR = P36;uchar ch,m;uchar n=0x30,y=0x30,g=0x30;/计数位uchar n1=0x30,y1=0x30,g1=0x30; bit playflag=0;/串口接收标志位uchar code cdis1 = " YES NO NG "uchar code cdis2 = " 00 00 00 " /函数声明void init_serialcom();/串口初始化void send_char_com(uchar ch);/串口发送一个字符void send_string_com(uchar *str,uint strlen);/串口发送一个字符串void send_result();/返回表决结果void delay(uint m);/延时void jishu();/表决计数void init_yjp();/液晶屏初始化函数void lcd_wcmd(uchar cmd);/写指令数据到LCD void lcd_wdat(uchar dat);/写显示数据到LCD void lcd_init();/ LCD初始化设定void lcd_pos(uchar pos);/ 设定显示位置void play();/ 数据显示函数 void main() /主函数 init_serialcom(); /初始化串口init_yjp();/初始化液晶屏 while ( 1 ) if(key=0)delay(1);if(key=0)while(key=0);send_result();/发送表决结果jishu();/表决计数play();/显示 /-串口-void init_serialcom() /串口通信初始设定 P0 = 0xff; P2 = 0xff; SCON = 0x50 ; /UART为模式1,8位数据,允许接收TMOD = 0x20 ; /定时器1为模式2,8位自动重装PCON = 0x00 ; /SMOD=0; TH1 = 0xFD ; /Baud:9600 fosc=11.0592MHz TL1=0XFD;IE = 0x90 ; /开中断 TR1 = 1 ; /启动定时器 TI=1; /向串口发送一个字符 void send_char_com(uchar ch) ES=0;TI=0;SBUF=ch; while (TI=0) TI= 0 ;ES=1; /向串口发送一个字符串,strlen为字符串长度void send_string_com(uchar *str,uint strlen) uint k=0; do send_char_com(*(str + k); k+; while(k < strlen); void send_result()/发送表决结果函数uchar *str1="表决结果,赞成票:"uchar *str2="反对票:"uchar *str3="弃权票:"send_string_com(str1,18);send_char_com(y1);send_char_com(y);send_string_com(str2,8);send_char_com(n1);send_char_com(n);send_string_com(str3,8);send_char_com(g1);send_char_com(g);/串口接收中断函数 void serial () interrupt 4 using 3 if (RI) RI = 0 ; ch=SBUF; playflag= 1 ; /就置位取数标志 /-液晶屏-/液晶屏初始化函数void init_yjp()lcd_init(); lcd_pos(0x00); /设置显示位置为第一行 for(m=0;m<16;m+) lcd_wdat(cdis1m); /显示字符delay(5); lcd_pos(0x40); /设置显示位置为第二行 for(m=0;m<16;m+) lcd_wdat(cdis2m); /显示字符 delay(5);/写指令数据到LCD /RS=L,RW=L,E=高脉冲,D0-D7=指令码。 void lcd_wcmd(uchar cmd) LCD_RS = 0; LCD_WR = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /写显示数据到LCD /RS=H,RW=L,E=高脉冲,D0-D7=数据。 void lcd_wdat(uchar dat) LCD_RS = 1; LCD_WR = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; / LCD初始化设定void lcd_init() delay(15); lcd_wcmd(0x01); /清除LCD的显示内容 lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x0c); /开显示,显示光标,光标闪烁 delay(5); lcd_wcmd(0x01); /清除LCD的显示内容 delay(5);/ 设定显示位置void lcd_pos(uchar pos) lcd_wcmd(pos | 0x80); /数据指针=80+地址变量/ 数据显示函数void play() if(1) lcd_pos(0x40); /设置位置为第二行 for(m=0;m<16;m+) switch(m)case 1:lcd_wdat(y1);break;case 2:lcd_wdat(y);break;case 7:lcd_wdat(n1);break;case 8:lcd_wdat(n);break;case 12:lcd_wdat(g1);break;case 13:lcd_wdat(g);break;default:lcd_wdat(' ');break; delay(5); void delay(uint ms)/延时函数定义uchar t;while(ms-)for(t=0;t<120;t+); void jishu()if (playflag) /如果取数标志已置位,就将读到的数从串口发出 playflag= 0 ; /取数标志清0 if(ch='Y')y+;if(y=0x3A)y=0x30;y1+;if(ch='N') n+;if(n=0x3A)n=0x30;n1+;if(ch='G') g+;if(g=0x3A)g=0x30;g1+;九、显示结果:显示时,“YES”表示赞同,”NO”表示反对,”NG”表示弃权。当手机使用有人网络助手软件(此时已经与wifi成功连接)向wifi发送Y,N,G三种不同信息时(”Y”表示赞同,”N”表示反对,”G”表示弃权),液晶屏显示结果如下:再按下独立按键S5,就可将投票结果反馈给手机。显示结果如下:十、课题小结: 通过本次project课题实习,我学会了许多知识,可以说收获良多。首先,明白了什么是服务器与客户端以及二者之间的关系,懂得了服务器wifi的设置,客户端手机的与之相匹配的设置,使二者可以相互连接。接着便是学会了使用处理器单片机,学会了相应的C语言编程,在这里尤其要注意串口通信初始设定(数据位、波特率必须要与wifi设置保持一致),稍有差错便会导致数据无法正常传输,以致信息结果显示异常。这是课题设计中必须注意的问题!最后就是学会了液晶屏的显示,为此我们上网查资料并相互讨论借鉴,最终将之完成,形成了完整的课题设计。总之,为了完成这次任务,我们查阅了许多的资料,花费了许多的时间,所幸最终圆满完成了,并且我们都从中获益良多。-