当前位置: 首页 > news >正文

网站架构价格医院建设网站要求分析 amp

网站架构价格,医院建设网站要求分析 amp,wordpress卡蜜,花店网站建设方案蓝牙模块 又叫蓝牙串口模块。 串口透传技术#xff1a;透传即透明传送#xff0c;是指在数据的传输过程中#xff0c;通过无线的方式使这组数据不发生任何形式的改变#xff0c;仿佛传输过程是透明的一样#xff0c;同时保证传输的质量#xff0c;原封不动地道了最终接收…蓝牙模块 又叫蓝牙串口模块。 串口透传技术透传即透明传送是指在数据的传输过程中通过无线的方式使这组数据不发生任何形式的改变仿佛传输过程是透明的一样同时保证传输的质量原封不动地道了最终接收者手里。 下载hc-08板子上二维码对应的HC蓝牙助手app将hc08接入单片机注意txrx反接此时烧录以下代码 #include reg52.h #include intrins.h #include string.h#define SIZE 12 sfr AUXR 0x8E; sbit led P3^7;char cmd[12];void Delay1000ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 8;j 1;k 243;do{do{while (--k);} while (--j);} while (--i); }void UartInit(void) //9600bps11.0592MHz {SCON 0x50; //定义串口工作方式为方式18位UART//PCON初值为00x1 0000符合我们的要求我们只需要SMOD0不加倍即可AUXR 0x01;TMOD 0x0F;TMOD | 0x20; //配置定时器1为8为自动重载定时器TL1 0xFD;TH1 0xFD; //9600波特率初值TR1 1; //打开中断EA 1; //开启总中断ES 1; //开启UART中断 }void sendByte(char data_msg){SBUF data_msg;//当8位数据没有传送结束时卡在while循环中while(!TI); //TI发送中断请求标志位第8位数据传送结束时硬件自动置1TI 0; }void sendString(char* str){while(*str ! \0){sendByte(*str);} }void main() {led 1;//配置C51串口的通信方式UartInit();while(1){Delay1000ms();//往发送缓冲区写入数据就完成数据的发送sendString(hello world\r\n);} }void Uart_Handler() interrupt 4 {static int i 0; //if(RI){ //中断处理函数中对于接收中断的响应RI 0;cmd[i] SBUF;i;if(i SIZE) i0;if(strstr(cmd,en)){ //判断cmd中是否有“en”子串led 0;i0;memset(cmd,\0,SIZE);}if(strstr(cmd,se)){led 1;i0;memset(cmd,\0,SIZE);}}if(TI); }打开手机app即可每隔一秒接收到一个hello world同时可以通过手机发送open或close开/关灯. 同时可以通过AT指令进行快乐的玩耍 WIFI模块 初始配置和验证 为了将来与单片机的波特率保持一致将波特率修改为9600 ATUART9600,8,1,0,0入网设置 1.设置工作模式 ATCWMODE3 //1.是station设备模式2.是AP路由模式3.双模OK2.以设备模式接入家中的路由器 ATCWJAPwifipig,66668888 WIFI CONNECTED WIFI GOT IPOK3.查询IP地址 ATCIFSR CIFSR:APIP,192.168.4.1 CIFSR:APMAC,a6:cf:12:c1:ec:eb CIFSR:STAIP,192.168.31.46 CIFSR:STAMAC,a4:cf:12:c1:ec:ebOK4.连接服务器 ATCIPSTARTTCP,192.168.31.152,8880 CONNECTOK5.发送数据 ATCIPSEND4 //设置即将发送的数据长度 4个字节//注意在发送数据的时候要取消勾选发送新行在上传指令的时候要勾选发送新行 Recv 4 bytesSEND OK透传发送数据 基于上述连接服务器之后 ATCIPMODE1 //开启透传模式OKATCIPSEND //即可肆意传输 当你不想传输了发送一个“”即可退出透传模式将wifi模块接入单片机进行开发 首先我们将以下代码烧录至单片机中 #include reg52.h #include intrins.h #include string.h#define SIZE 12 sfr AUXR 0x8E; sbit led P3^7;char cmd[SIZE];code char LJWL[] ATCWJAP\wifipi\,\66668888\\r\n; code char LJFWQ[] ATCIPSTART\TCP\,\192.168.31.152\,8880\r\n; char TCMS[] ATCIPMODE1\r\n; char SJCS[] ATCIPSEND\r\n;void Delay1000ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 8;j 1;k 243;do{do{while (--k);} while (--j);} while (--i); }void UartInit(void) //9600bps11.0592MHz {SCON 0x50; //定义串口工作方式为方式18位UART//PCON初值为00x1 0000符合我们的要求我们只需要SMOD0不加倍即可AUXR 0x01;TMOD 0x0F;TMOD | 0x20; //配置定时器1为8为自动重载定时器TL1 0xFD;TH1 0xFD; //9600波特率初值TR1 1; //打开中断EA 1; //开启总中断ES 1; //开启UART中断 }void sendByte(char data_msg){SBUF data_msg;//当8位数据没有传送结束时卡在while循环中while(!TI); //TI发送中断请求标志位第8位数据传送结束时硬件自动置1TI 0; }void sendString(char* str){while(*str ! \0){sendByte(*str);} }void main() {led 1;//配置C51串口的通信方式UartInit();while(1){//Delay1000ms();//往发送缓冲区写入数据就完成数据的发送//sendString(hello world\r\n);sendString(LJWL);Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();sendString(LJFWQ);Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();sendString(TCMS);Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();sendString(SJCS);Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();} }void Uart_Handler() interrupt 4 {static int i 0; //if(RI){ //中断处理函数中对于接收中断的响应RI 0;cmd[i] SBUF;i;if(i SIZE) i0;if(strstr(cmd,en)){ //判断cmd中是否有“en”子串led 0;i0;memset(cmd,\0,SIZE);}if(strstr(cmd,se)){led 1;i0;memset(cmd,\0,SIZE);}}if(TI); }依次传输连接网络、连接服务器、透传模式、数据传输的指令先传到电脑上检查一个格式是否正确。 之后可以将wifi模块接入单片机依次将上述指令传输给wifi模块但是我们如何知道wifi模块是否正确接收到指令并返回正确的回复 我们可以通过单片机传输指令至8266wifi模块之后将8266的tx与pc端串口助手的rx连接查看8266返回的数据以检查是否正确接收指令并作出正确的回复。 可以看到8266模块确实正确接收到了指令并且成功连接网络、连接服务器、开启透传模式进行了数据传输因此代码正确。 此时我们通过网络向8266发送数据后由于8266的tx口连着pc端因此会在pc端的串口助手中接收到数据当我们将8266的tx口与单片机相连就可以实现通过网络来操控单片机的效果。 通过TCP通信控制LED灯 将8266与单片机相连修改串口中断中的代码 #include reg52.h #include intrins.h #include string.h#define SIZE 12 sfr AUXR 0x8E; sbit led P3^7;char cmd[SIZE];code char LJWL[] ATCWJAP\wifipi\,\66668888\\r\n; code char LJFWQ[] ATCIPSTART\TCP\,\192.168.31.152\,8880\r\n; char TCMS[] ATCIPMODE1\r\n; char SJCS[] ATCIPSEND\r\n;void Delay1000ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 8;j 1;k 243;do{do{while (--k);} while (--j);} while (--i); }void UartInit(void) //9600bps11.0592MHz {SCON 0x50; //定义串口工作方式为方式18位UART//PCON初值为00x1 0000符合我们的要求我们只需要SMOD0不加倍即可AUXR 0x01;TMOD 0x0F;TMOD | 0x20; //配置定时器1为8为自动重载定时器TL1 0xFD;TH1 0xFD; //9600波特率初值TR1 1; //打开中断EA 1; //开启总中断ES 1; //开启UART中断 }void sendByte(char data_msg){SBUF data_msg;//当8位数据没有传送结束时卡在while循环中while(!TI); //TI发送中断请求标志位第8位数据传送结束时硬件自动置1TI 0; }void sendString(char* str){while(*str ! \0){sendByte(*str);} }void main() {int mark 0;led 1;//配置C51串口的通信方式UartInit();while(1){//Delay1000ms();//往发送缓冲区写入数据就完成数据的发送//sendString(hello world\r\n);if(mark 0){sendString(LJWL);Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();sendString(LJFWQ);Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();sendString(TCMS);Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();sendString(SJCS);Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();Delay1000ms();mark 1;}else{sendString(hello world\r\n);Delay1000ms();}} }void Uart_Handler() interrupt 4 {if(RI){ //中断处理函数中对于接收中断的响应RI 0;cmd[0] SBUF;if(cmd[0] 1){led 0;}if(cmd[0] 0){led 1;}}if(TI); }但是这段代码在运行时我们无法看到任何连接的信息不知道连接是否正确进行因此代码是不完善的在有时候我们无法连接上wifi因此我们还是需要借助上述白盒测试的方法来检查返回值程序可能会因为在5s内连接不上wifi而导致后续一系列操作都发生错误因此我们需要优化我们的代码 基本上当我能够正确接入wifi后续的操作就会成功而接入wifi后会返回的提示为WIFI CONNECTED WIFI GOT IP 根据程序正确运行时的返回值来进行判断. 这里记录一下在编程过程中遇到的一个错误卡了我好久 void Uart_Handler() interrupt 4 {static int i 0;char tmp;if(RI){ //中断处理函数中对于接收中断的响应RI 0;tmp SBUF;if(tmp W || tmp O || tmp L){i 0;}buffer[i] tmp;i;if(buffer[0] W buffer[5] G){ //当显示WIFI GOR IP时表示网络已经接入修改标志位AT_Connect_Net_Flag 1;memset(buffer,\0,SIZE);}if(buffer[0] O buffer[1] K){AT_OK_Flag 1;memset(buffer,\0,SIZE);}if(buffer[0] L buffer[2] 1){D5 0;memset(buffer,\0,SIZE);}if(buffer[0] L buffer[2] 0){D6 1;memset(buffer,\0,SIZE);}if(i 12) i0;memset(buffer,\0,SIZE);//出错了}if(TI); }在调试过程中我用之前的白盒测试方法来进行检验但是当我给单片机发送OK信号时没有用卡了很久最后发现是倒数第四行多写了一个memset。这段代码的含义是每次写入一个字节后会对每个写入的字符进行判断如果是W、O、L开头会强制将下标变为0为了能够方便下面的判断因为当我们连入wifi后8266模块会返回WIFI GOT IP第一个字符为W第6个字符为G因此我们可以判断buffer[0]是否为Wbuffer[5]是否为G从而判断是否成功入网如果满足条件将入网标志位置一同时清空buffer数组。但是上述代码会在我每次读取完一个字符后将buffer清空因此永远也无法达到效果。 修改完毕后就可以达到我们需要的效果了 检验完毕后我们直接连接到单片机即可。 #include reg52.h #include intrins.h #include string.h#define SIZE 12 sfr AUXR 0x8E; sbit D5 P3^7; sbit D6 P3^6;char buffer[SIZE];code char LJWL[] ATCWJAP\wifipig\,\66668888\\r\n; code char LJFWQ[] ATCIPSTART\TCP\,\192.168.31.152\,8880\r\n; char RESET[] ATRST\r\n; char TCMS[] ATCIPMODE1\r\n; char SJCS[] ATCIPSEND\r\n;char AT_Connect_Net_Flag 0; char AT_OK_Flag 0;void Delay1000ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 8;j 1;k 243;do{do{while (--k);} while (--j);} while (--i); }void UartInit(void) //9600bps11.0592MHz {SCON 0x50; //定义串口工作方式为方式18位UART//PCON初值为00x1 0000符合我们的要求我们只需要SMOD0不加倍即可AUXR 0x01;TMOD 0x0F;TMOD | 0x20; //配置定时器1为8为自动重载定时器TL1 0xFD;TH1 0xFD; //9600波特率初值TR1 1; //打开中断EA 1; //开启总中断ES 1; //开启UART中断 }void sendByte(char data_msg){SBUF data_msg;//当8位数据没有传送结束时卡在while循环中while(!TI); //TI发送中断请求标志位第8位数据传送结束时硬件自动置1TI 0; }void sendString(char* str){while(*str ! \0){sendByte(*str);} }void main() {int mark 0;D5 D6 1;//配置C51串口的通信方式UartInit();Delay1000ms(); //给wifi模块上电时间sendString(LJWL);while(!AT_Connect_Net_Flag);while(!AT_OK_Flag);AT_OK_Flag 0;sendString(LJFWQ);while(!AT_OK_Flag);AT_OK_Flag 0;sendString(TCMS);while(!AT_OK_Flag);AT_OK_Flag 0;sendString(SJCS);while(!AT_OK_Flag);if(AT_Connect_Net_Flag){D5 0; //点亮第一盏灯说明入网成功}if(AT_OK_Flag){D6 0; //点亮第二盏led说明网络连接成功并成功打开透传模式}while(1){Delay1000ms();sendString(hello world\r\n);} }void Uart_Handler() interrupt 4 {static int i 0;char tmp;if(RI){ //中断处理函数中对于接收中断的响应RI 0;tmp SBUF;if(tmp W || tmp O || tmp L || tmp F){i 0;}buffer[i] tmp;i;if(buffer[0] W buffer[5] G){ //当显示WIFI GOR IP时表示网络已经接入修改标志位AT_Connect_Net_Flag 1;memset(buffer,\0,SIZE);}if(buffer[0] O buffer[1] K){AT_OK_Flag 1;memset(buffer,\0,SIZE);}if(buffer[0] F buffer[1] A){for(i0;i5;i){D5 0;Delay1000ms();D5 1;Delay1000ms();}//sendString(RESET);memset(buffer, \0, SIZE);}if(buffer[0] L buffer[2] 1){D5 0;memset(buffer,\0,SIZE);}if(buffer[0] L buffer[2] 0){D5 1;memset(buffer,\0,SIZE);}if(i 12) i0;}//if(TI); }当成功连入后两盏灯都会点亮可以用过L-1点亮D5L-0熄灭D5。
http://www.zqtcl.cn/news/851435/

相关文章:

  • 黔西南州建设局网站网站建设流程的过程
  • 河南龙王建设集团网站沈阳专业建站
  • 百度网盘app下载安装手机版百度排名优化咨询电话
  • 网站微信公众号链接怎么做免费访问国外网站的应用
  • 东莞网站搜索排名wordpress 小工具居中
  • 网上商城网站源码网站建站中关键字搜索怎么弄
  • 房地产开发公司网站源代码 墨绿色风格河北省建设项目环保备案网站
  • 有没有做机械加工的网站企业网站建站企业
  • 网站自创重庆宣传片制作
  • 如何做美发店网站世界上网站做的好的例子
  • 不会代码可以做网站维护吗成版年蝴蝶视频app免费
  • html5手机论坛网站模板支付商城网站制作
  • 自己主机做多个网站网站备案和服务器备案
  • 长安手机网站建设江西做网站的公司有哪些
  • 泉州微信网站开发万能浏览器有哪些
  • 商丘做网站公司新站seo快速收录网站内容页快速建站工具
  • 质监站网址数字化展厅建设方案
  • 免费网上商城网站建设廊坊十大名牌模板厂
  • 网站建设格式龙泉建设工程有限公司网站
  • 四海网络网站建设咨询深圳网站优化网站
  • 报名网站开发多钱做酒网站
  • 2014年网站设计趋势怎样用代码建设一个网站
  • 手机网站使用微信支付瑞诺国际公司团队介绍
  • 如何做网站内容架构分析网站建站平台eazyshop
  • 网站开发 商标第几类建站模板大全
  • 找事做的网站杭州网站建设有限公司
  • 临沂网站建设搭建短视频如何引流与推广
  • 网站项目建设管理简介网络营销的概念
  • 网站后台怎么添加代码食品网站开发的背景
  • 茶楼 网站dedecms 旅游网站模板