找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2521|回复: 7
打印 上一主题 下一主题
收起左侧

求教!关于string函数

[复制链接]
跳转到指定楼层
楼主
ID:232280 发表于 2017-10-25 13:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. void Uart_Send_String(u8 *string)
  2. {
  3. while(*string)
  4. {
  5. Sent_UART(*string++);
  6. Delay_Us(5);
  7. }

  8. }
复制代码
  1. void  SendString(unsigned char *p)  
  2. {  
  3.     while(*p)  
  4.     {  
  5.         SendChar(*p);  
  6.         p++;  
  7.     }  
  8. }
复制代码
求教一下这两个函数,这个*号代表什么意思。另外这个好像和string函数没什么关系啊!我是想用单片机串口通讯发送字符串。网上说要用string函数,但解释怎么用却很笼统,看不太懂,而且上面这两个也是发生字符串的函数,却没有用string函数啊。新人求教,不胜感激
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:82765 发表于 2017-10-25 14:21 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

板凳
ID:215444 发表于 2017-10-25 16:49 | 只看该作者
u8 *string   这个意思 是 定义一个为U8*类型的变量, u8*的意思是:定义一个无符号8位整数且这个整数只能存放地址。如果有string=&i;则有string指向i, *string==i,
回复

使用道具 举报

地板
ID:232280 发表于 2017-10-25 19:55 | 只看该作者
为什么要加*号呢?另外为什么不直接将字符串复制给dat?
  1. #include<reg52.h>
  2. /*此程序是手机连接ESP8266模块以后向模块发送字符K,控制LED的翻转*/
  3. typedef unsigned char u8;
  4. typedef unsigned int u16;
  5. sbit LED = P2^3;u8 dat;
  6. void ConfigUART(u16 buad);//串口通信初始化函数,buad为单片机设置的波特率。
  7. void Delay_ms(u16 n);
  8. void Uart_Send_String(u8 *string);//串口发送多个字节。
  9. void Delay_Us(u8 us);
  10. void Sent_UART(u8 dat);//串口发送一个字节
  11. void ESP8266_Init();//ESP8266初始化
  12. void main()
  13. {
  14.          EA = 1;
  15.    ConfigUART(9600);
  16.          ESP8266_Init();
  17.         while(1);
  18. }

  19. void ConfigUART(u16 buad)
  20. {
  21.         SCON = 0x50;
  22.         TMOD &= 0X0F;
  23.         TMOD |= 0x20;
  24.         TH1 = 256 - (11059200/12/32)/buad;
  25.         TL1 = TH1;
  26.         ET1 = 0;
  27.         TR1 = 1;
  28. }
  29. void Sent_UART(u8 dat)
  30. {
  31.         ES = 0;
  32.         TI=0;
  33.         SBUF = dat;
  34.         while(!TI);
  35. TI = 0;
  36. ES = 1;
  37. }
  38. void Delay_Us(u8 us)
  39. {
  40. while(us--);
  41. }
  42. void Delay_ms(u16 n)
  43. {
  44.         unsigned int  i,j;
  45.         for(i=0;i<n;i++)
  46.                 for(j=0;j<123;j++);
  47. }

  48. void Uart_Send_String(u8 *string)
  49. {
  50. while(*string)
  51. {
  52. Sent_UART(*string++);
  53. Delay_Us(5);
  54. }

  55. }
  56. void ESP8266_Init()
  57. {
  58.         Uart_Send_String("AT\r\n");
  59.         Delay_ms(1000);
  60.         Delay_ms(1000);
  61.         Uart_Send_String("AT\r\n");
  62.         Delay_ms(1000);
  63.         Delay_ms(1000);
  64.   Uart_Send_String("AT+CIPMUX=1\r\n");
  65.         Delay_ms(1000);
  66.         Delay_ms(1000);
  67.   Uart_Send_String("AT+CIPSERVER=1,8080\r\n");
  68. }
  69. void InterruptUART() interrupt 4
  70. {
  71.     if (RI)  //接收到字节
  72.     {
  73.         RI = 0;  //手动清零接收中断标志位
  74.         dat = SBUF;  //接收到的数据保存到接收字节变量中
  75.          if(dat=='k')
  76.                                  {
  77.                                          LED = ~LED;
  78.                                  }                                         //接收到的数据又直接发回,叫作-"echo",
  79.                          //用以提示用户输入的信息是否已正确接收
  80.     }
  81.     if (TI)  //字节发送完毕
  82.     {
  83.         TI = 0;  //手动清零发送中断标志位
  84.     }
  85. }
复制代码


回复

使用道具 举报

5#
ID:232280 发表于 2017-10-25 21:15 | 只看该作者
k455619 发表于 2017-10-25 16:49
u8 *string   这个意思 是 定义一个为U8*类型的变量, u8*的意思是:定义一个无符号8位整数且这个整数只能 ...

这个*不是跟着string的吗,u8是unsigned char的意思,为什么要用这个函数做中转呢,全部函数我已经放下面了。谢谢
回复

使用道具 举报

6#
ID:232280 发表于 2017-10-25 21:16 | 只看该作者
cjjcjj1 发表于 2017-10-25 14:21
01.void Uart_Send_String(u8 *string)
这里的 string 只是一个变量,不是指的数据类型

嗯,但*是代表什么呢,另外为什么要用这个函数做中转,直接赋值不行吗,具体全部代码我已经贴下面了,谢谢了
回复

使用道具 举报

7#
ID:242956 发表于 2017-10-25 22:30 | 只看该作者
p是指针 指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。*p就是那个变量 *就相当于把地址解析出来
回复

使用道具 举报

8#
ID:232280 发表于 2017-10-26 08:33 来自手机 | 只看该作者
wyhJjd147 发表于 2017-10-25 22:30
p是指针 指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。*p就是那个变量 *就相当于把地址 ...

懂了,谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表