2019-03-18 10:55:25 wowocpp 阅读数 692
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4010 人正在学习 去看看 朱有鹏
参考代码:

[原创] [STM32L496] 使用FreeRTOS任务通知实现命令行解释器
http://www.stmcu.org.cn/module/forum/thread-615444-1-1.html

E:\Nu_LB_Nuc140\work\Nu_LB_NUC140_SPI_Flash_FATFS\project\KEIL
方便自己查看

NUC100 FATFS TEST!

SPI FLASH Open success

rc=0

>?

dd [<lba>] - Dump sector

di - Initialize disk


bd <ofs> - Dump working buffer

be <ofs> [<data>] ... - Edit working buffer

br <pd#> <sect> [<num>] - Read disk into working buffer

bw <pd#> <sect> [<num>] - Write working buffer into disk

bf <val> - Fill working buffer


fi - Force initialized the logical drive

fs - Show volume status

fl [<path>] - Show a directory

fo <mode> <file> - Open a file

fc - Close the file

fe <ofs> - Move fp in normal seek

fd <len> - Read and dump the file

fr <len> - Read the file

fw <len> <val> - Write to the file

fn <object name> <new name> - Rename an object

fu <object name> - Unlink an object

fv - Truncate the file at current fp

fk <dir name> - Create a directory

fa <atrr> <mask> <object name> - Change object attribute

ft <year> <month> <day> <hour> <min> <sec> <object name> - Change timestamp of an object

fx <src file> <dst file> - Copy a file

fg <path> - Change current directory

fj <ld#> - Change current drive

fm <ld#> <rule> <cluster size> - Create file system


>


>

应用需求
  1. 串口接收中断用于接收字符流,每收到一个字符就保存在buff里面,
    如果接收到回车换行符,表明已经接收到一条完整命令
  2. 遇到 退格键 怎么办

atoi()的实现

atoi()和itoa()函数详解以及C语言实现
atoi()函数
atoi()原型: int atoi(const char *str );

函数功能:把字符串转换成整型数。

参数str:要进行转换的字符串

返回值:每个函数返回 int 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则atoi的返回值为 0。

注意:使用该函数时要注意atoi返回的是int类型,注意输入str的范围不要超出int类型的范围。

一小段代码演示一下该函数的使用:

下面来用C语言进行实现该函数:

#include <stdio.h>                                                                                                                            
#include <stdbool.h>
  
int my_atoi(const char *src)
{
      int s = 0;
      bool isMinus = false;
  
      while(*src == ' ')  //跳过空白符
      {
          src++; 
      }
  
      if(*src == '+' || *src == '-')
      {
          if(*src == '-')
          {
              isMinus = true;
          }
          src++;
      }
      else if(*src < '0' || *src > '9')  //如果第一位既不是符号也不是数字,直接返回异常值
      {
          s = 2147483647;
          return s;
      }
  
      while(*src != '\0' && *src >= '0' && *src <= '9')
      {
          s = s * 10 + *src - '0';
          src++;
      }
      return s * (isMinus ? -1 : 1);
 }

 int main()
 {
      int num;
  
      char *str = "a123456";
      num = my_atoi(str);
      printf("atoi num is: %d \r\n", num);
  
      return 0;
 }   
参考设计

/*--------------------------------------------------------------------------*/
/* Monitor                                                                  */

/*----------------------------------------------*/
/* Get a value of the string                    */
/*----------------------------------------------*/
/*	"123 -5   0x3ff 0b1111 0377  w "
	    ^                           1st call returns 123 and next ptr
	       ^                        2nd call returns -5 and next ptr
                   ^                3rd call returns 1023 and next ptr
                          ^         4th call returns 15 and next ptr
                               ^    5th call returns 255 and next ptr
                                  ^ 6th call fails and returns 0
*/

int xatoi (			/* 0:Failed, 1:Successful */
	TCHAR **str,	/* Pointer to pointer to the string */
	long *res		/* Pointer to a valiable to store the value */
)
{
	unsigned long val;
	unsigned char r, s = 0;
	TCHAR c;


	*res = 0;
	while ((c = **str) == ' ') (*str)++;	/* Skip leading spaces */

	if (c == '-') {		/* negative? */
		s = 1;
		c = *(++(*str));
	}

	if (c == '0') {
		c = *(++(*str));
		switch (c) {
		case 'x':		/* hexdecimal */
			r = 16; c = *(++(*str));
			break;
		case 'b':		/* binary */
			r = 2; c = *(++(*str));
			break;
		default:
			if (c <= ' ') return 1;	/* single zero */
			if (c < '0' || c > '9') return 0;	/* invalid char */
			r = 8;		/* octal */
		}
	} else {
		if (c < '0' || c > '9') return 0;	/* EOL or invalid char */
		r = 10;			/* decimal */
	}

	val = 0;
	while (c > ' ') {
		if (c >= 'a') c -= 0x20;
		c -= '0';
		if (c >= 17) {
			c -= 7;
			if (c <= 9) return 0;	/* invalid char */
		}
		if (c >= r) return 0;		/* invalid char for current radix */
		val = val * r + c;
		c = *(++(*str));
	}
	if (s) val = 0 - val;			/* apply sign if needed */

	*res = val;
	return 1;
}

地址

2018-06-03 18:01:43 ylm1521 阅读数 7977
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4010 人正在学习 去看看 朱有鹏

今天完成了初级阶段的学习,其实以前在开发单片机的时候用过C语言,但是没有系统的学过,所以再次学习感觉能够查缺补漏。

C语言中的printf( )函数是一个很重要的函数。printf( )中的字符包含了三种:

(1)以%开头的格式控制字符

(2)以 \ 开头的转义字符

(3)普通字符

在printf函数中一旦出现格式控制字符%和转义字符 \  ,他们会立即寻找后面紧跟着的字符进行组合。这里我进行了简单总结:

#格式控制符#

%i---输出一个整型数;

%d---输出一个整型数;

%f---输出一个浮点数;

%e---输出一个浮点数,科学计数法;

%g---输出一个浮点数,当指数小于-4或者大于5,则运用科学计数法,否则正常显示浮点数;
%c---输出一个字符;
%o---输出一个八进制的整型数,前面不带0;
%#o---输出一个八进制的整型数,前面带0;
%x---输出一个十六进制的整型数,前面不带0x;
%#x---输出一个十六进制的整型数,前面带0x, 如果x大写,则显示的时候也是大写。
%u---不带符号的十进制整数。
%%---输出一个%。

#转义字符#

\n        回车换行

\t        横向跳格(相当于tab)

\v        竖向跳格(打印机专用)

\r        回车

\f        换页(打印机专用)

\b        退格(相当于backspace)

\\        反斜杠字符\

\'        单引号 '

\"        双引号“

\ddd        以八进制形式代表的ASCII字符

\xhh        以十六进制形式代表的ASCII字符

\0        空值


下面是本次感悟的重点:\n \r 这两个转义字符的具体含义:

(1)二者都有“回车”的意思,那么“回车”是什么意思呢?如果能搞清楚回车的含义,就可以很清楚知道这两个转义字符的区别了。

回车这个词,其实是来源于针式打字机(一些谍战片能看到,例如《北平无战事》第44集)如下图:




最后一张图中那个装铸造字体的机构就叫字车,因为它还要左右移动,象固定在轨道上的车一样,故称为字车

打字的时候,字车由左向右移动,打完一行,要将字车回到最左边,这个过程可以理解为“回车”,所以回车的意思就是将字车回到首列。而如果要继续打字,就要将字车移到下一行,继续从左到右,一个一个打字。

现代计算机语言中延续了“回车”的概念,而以前打字机的字车的概念等同于现在的屏幕上光标,所以科学家在设计C语言时,采用了“回车”的这种概念:

‘\r’就是将光标移到本行的首列。

回车换行的‘\n’就是将光标移到本行首列以后换行(移到下一行)。

2016-12-19 17:21:46 si_zhou_qun_84342712 阅读数 12806
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4010 人正在学习 去看看 朱有鹏

一、简介

本文介绍单片机如何发送回车换行。


二、实验平台

1:单片机


版权声明

博主:si_zhou_qun_84342712

声明:喝水不忘挖井人,转载请注明出处。

原文地址:

联系方式:495527583@qq.com

四轴开源群:84342712

四轴开源(淘宝店):

基础知识

方法一:

在发送的字符串时用格式:“原字符串\r\n”。

方法二:

在发送完字符或字符串后连续发送字符0x0d和0x0a,即可实现换行。即连续发送字符'\r'和'\n'。

部分代码例程:

方法一:

UartSendStr("转换结束!\r\n");

方法二(1):

UartSendStr("转换结束!");

UartSendChar(0x0d);

UartSendChar(0x0a);

方法二(2):

UartSendStr("转换结束!");

UartSendChar('\r');

UartSendChar('\n');


2019-04-11 20:34:41 weixin_43710544 阅读数 1739
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4010 人正在学习 去看看 朱有鹏

学习HC06蓝牙模块遇到一些问题,特此写下作为记录。

  1. 用USB转TTL连接,插到电脑上,发AT怎么也不回
    USB转TTL与蓝牙模块连接图
    USB转TTL与蓝牙模块连接图
    插到电脑上
    打开串口助手:
    一开始用的是丁丁串口助手,发·AT不回OK。
    后来用的是友善也不回。
    在这里插入图片描述
    原因是要,加回车。
    (光标在蓝色的地方,而不是红色的地方,就算 自动换行 你打 √ 了,还是要加回车)
    我看很多文章中写是发 AT/r/n 不知道为什么,我用了很多串口软件发送都没有用。

    HC06 灯闪烁是AT模式,常亮建立连接。

有一个方法可以确认你的蓝牙有木有问题或者连接有木有问题。
在这里插入图片描述
将蓝牙模块与USB转TLL连接好,插上电脑,打开串口助手打开串口,之后将蓝牙模块的Vcc与USB转TLL的5V连线断开,然后再插上。就会收到+REDAY…

  1. AT指令 可以输入AT+HELP查看
    AT+NAME mingzi
    可以修改蓝牙名称

  2. 单片机与HC06 就是串口通信UART
    (1)写APP时,要注意蓝牙的模式是串口通信
    (2)用51单片机时,要注意晶振。百度:51单片机波特率的计算方法 有详细的解释
    (3)发送的数据都是ACSII码

51单片机与蓝牙模块
参考 https://blog.csdn.net/qq_40277973/article/details/79345817
发送什么内容就回什么内容:

#include <reg52.h>
unsigned char tempbuf;	//存储接收到的信息

/*初始化串口*/
void BlueteethInit()
{
	SCON = 0x50;	//串口模式1,允许接收
	TMOD = 0x20;	//T1工作模式为2,自动重装
	PCON = 0x00;	//波特率不倍增
	REN = 1;

	TH1 = 0xfd;		//设置波特率为9600
	TL1 = 0xfd;

	RI = 0;

	EA = 1;
	ES = 1;

	TR1 = 1;
}

void main()
{
	BlueteethInit();
   	TI = 0;
}

void Serial(void) interrupt 4
{
	tempbuf = SBUF;
	RI = 0;	//读标志清零
	SBUF = tempbuf;	//将内容返回到手机端,可在手机查看发送的内容
	while(!TI);
	TI = 0;	//写标志清零
}

4.用电脑串口和手机蓝牙串口APP(接线同上)
手机APP用蓝牙串口,发中文会乱码
自己写的APP,还是中文
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2019-12-06 15:31:00 u012577474 阅读数 6
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4010 人正在学习 去看看 朱有鹏

单片机:PIC18F45K80

实现功能:接收发来的以回车换行(0x0D,0X0A)结尾的串口数据。

#define RX_SIZE 100  //接收缓存区大小
#define FINISH 1   
bit RX_flag;   //接收完成标志
unsigned char RX[RX_SIZE];  //接收缓存
unsigned char RX_C=0; //接收计数

void USART_RX()   //在中断中加入此函数
{
    unsigned char data;
    if(RC1IE&&RC1IF)   //判断是否是usart1中断,且RC1IF=1       
    {  
          data=RCREG1; //接收1字节数据
          RX[RX_C++]= data;    
          if(data== 0x0A && RX[RX_C-2] == 0x0D ) //判断接收是否结束
            {           
                RX_C=0; 
                RX_flag=FINISH;  //置位接收完成标志    
           }
   
    } 

}
注意:先判断data是否等于0x0a,再去判断RX[RX_C-2]等于0x0d。
因为0x0a是数据帧的最后一个数据。

回车和换行

阅读数 635

GPRS与51单片机

阅读数 2175

没有更多推荐了,返回首页