暂时未有相关云产品技术能力~
暂无个人介绍
td::string是C++标准库中的一个类,它用于表示字符串,在C++中是一个非常常用的数据类型。std::string可以保存任意长度的字符串,并且支持各种字符串操作,包括连接、查找、替换等等。
首先 简要介绍此 登陆系统的基本作用。 登录系统效果展示 下面这就是 登录系统的主界面了。主要通过账户,密码来登录系统app. 关于效果展示的各个功能,都会 详细为大家讲解。
QT 中 信号 与 槽机制(Signal and Slot)是QT GUI 编程中的一项非常强大的功能。简单来说,它是一种事件处理机制,可以实现类与类之间的通信,并且可以解耦合应用程序。本文将对QT中信号与槽的详细使用方法做出介绍。
“QT 快速上手指南“ 之 计算器(二)组件,坐标,窗口
从这篇文章开始,我们开始学习 QT 的知识,首先 我们先开始做一个小项目,制作一个计算器。 本教程是在 Windows 下来实现该项目,具备计算器的一些基础功能。
STM32Cube HW-493激光发射
OLED 屏幕是一种高对比度、高亮度、低功耗、灵活可弯曲的显示技术。在电子产品中,OLED 屏幕通常用于显示各种文本、图标、图像等内容。本篇文章将介绍 使用 I2C 接口 在 OLED 屏幕上显示字符,汉字。
在C++中,手动管理内存很容易出错,例如忘记释放内存、释放了已经释放的内存等。而智能指针可以通过封装指针,自动管理内存的释放,使得代码更加健壮、易于维护。
外部中断 是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去. 外部中断 是指由 外部设备 发出的 中断请求 ,如键盘、鼠标、计时器、网络数据等。外部中断可以提高系统的效率,使系统能够有效地处理外部设备发出的中断请求,从而改善系统的性能。
E18-D8ONK 这是一种 集发射与接收于一体 的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出。有效的避免了可见光的干扰。透镜的使用,也使得这款传感器最远可以检测80厘米距离的问题(由于红外光的特性,不同颜色的物体,能探测的最大距离也有不同;白色物体最远,黑色物体最近)。
上一篇文章 详细介绍了 USART 串口 不使用中断 发送接收数据 ,这篇文章 将介绍如何 使用中断控制 USART 串口 发送接收数据。 对于如何根据 CubeMX 生成 USART 的工程,可以参考我的上篇文章,也介绍了 关于生成 usart.c 代码的解析 : STM32Cube串口USART发送接收数据
这篇文章介绍 实现 USART 异步模式下 通过 串口助手 发送,接收 数据
我们继续讲解 stm32 f103,这篇文章将详细 为大家讲解 如何 使用 按键点亮 RGB 灯。
可以看到 对于 103 板子,有 3 个 LED: 分别为 LED1 , LED2 , LED3 ;分别对应 io 端口 PB0 , PB1 ,PB5。 可以看到 LED 左边 接 3V 的电压,要想点亮 LED,只需在 右边的 io 端口输出 低电平 即可。 反之,要想 熄灭 LED,就在 右边的 io 端口输出 高电平 。 我这里的是 RGB灯,可以闪烁不同的颜色:红,绿,蓝。
从图中我们可以看到有 4个按键,B1 , B2 , B3 , B4。 对应的 GPIO 端口是 PB0 , PB1, PB2 ,PA0。 当按键按下,IO 口读到低电平;按键弹起,IO 口读到高电平。 LED 的原理图,CubeMX 配置,以及代码讲解都在我的上篇文章 里详细讲解了,这 篇文章主要为大家讲解 按键 的使用。 蓝桥杯嵌入式之 LED 闪烁
libjpeg解码 jpeg文件
环形缓冲区 是一段 先进先出 的循环缓冲区,有一定的大小,我们可以把它抽象理解为一块环形的内存。 我们使用环形缓冲区主要有两个原因; (1)当我们要存储大量数据时,我们的计算机只能处理先写入的数据,处理完毕释放数据后,后面的数据需要前移一位,大量的数据会频繁分配释放内存,从而导致很大的开销。使用环形缓冲区 可以减少内存分配继而减少系统的开销。 (2)如果我们频繁快速的持续向计算机输入数据,计算机可能执行某个进程不能及时的执行输入的数据,导致数据丢失。这时,我们可以将要输入的数据放入环形缓冲区内,计算机就不会造成数据丢失。
蓝桥杯嵌入式之 LED 闪烁
SELECT 机制、POLL 机制是完全一样的,只是 APP 接口函数不一样。 在调用 poll , select 函数时可以 传入“超时时间” ,相当于“定个闹钟”。在这段时间内,如果又数据可读,有空间可写等,就会立即返回,否则等到“超时时间”结束时就会返回错误。 poll, select 函数可以检测 多个文件,多种事件。
蓝桥杯嵌入式之 Keil 仿真与调试
链表有几种,大致分为:单链表, 双向链表,循环链表,静态链表。这里为大家简单介绍双向链表节点的添加,删除。
这篇文章主要讲一下如何在 LCD 上使用点阵显示汉字,字符 ,修改颜色 及效果展示。其中包含了几个核心函数,我们需要了解。
如果一个程序,你想实现按一下按键 就播放一首歌。可是呢?又担心按键程序会有延迟,不能及时的播放音乐。 这时,如果使用多进程编程,相当于出现了两个 main 函数,在这两个 main 函数之前要进行联络就需要使用相应的函数,就会造成很长时间的浪费。 如果,使用多线程编程,就会使两个功能在一个程序中,通过一个全局变量就可以实现联络,节省时间。
在 Linux应用基础中,Framebuffer 驱动程序主要用来控制 LCD。今天带大家来了解一下如何通过 Framebuffer 来编程 LCD。 在此之前,我们要先了解一下 Framebuffer 和 LCD。
数据类型,该整型类型有 6 个数据,默认是从 0 开始,依次递增一个。 yellow 是0 的名字,可以直接使用yellow代替0,yellow 不是变量名,就是一个名字,代表数字0.
c语言 函数指针做结构体成员,结构体的大小,联合体共用体 union
----结构体概述: 结构体就是将很多不同类型的数据包含在一起。 比如里面包含学生姓名、年龄、成绩:char name[20] ; int age ; double score,这些包含的都叫做结构体的成员; 当信息非常多修改就会发生错误,用结构体就会比较方便。
字符串操作函数是用于操作字符串的。有的函数有新版和旧版,大同小异。字符串操作函数的头文件: string.h
字符串中间有 \0 : 字符串只找结尾。若中间有 \0,则字符串结束;不管有多少个 \0,以第一个 \0 确定结尾。
" hello wyy" [0] " hello wyy" [1] “hello wyy” [2]…访问各元素可以输出,但是不能赋值修改,因为这是常量字符。
char str[5] = { ‘A’,66,‘C’ ,‘D’ ,69 }; / / 66换成大写字母就是B,69就是E char str[5] = { ‘A’,66,‘C’ }; / / 初始化部分元素,其余默认是0 char str[ ] = { ‘A’,66,‘C’ ,‘D’ ,69 }; / / 这样初始化时,可以不写个数
malloc , calloc, realloc 的是用来申请一段空间。realloc 的用法和 malloc 的用法类似,只是,malloc 的参数有一个, realloc 的参数分开成了两个。
free: 用来释放 malloc 所申请的空间。malloc 申请的空间,如果不使用需要释放,否则会造成内存泄露。 free 不能释放非malloc 申请的空间,不能重复释放空间。
前面测试,普通的数组变量默认最大不能申请1M的空间,甚至远少于1M的空间,毕竟程序中的其他变量也需要使用空间。总共就1M,要省着用。 想要使用更大的,没有限制的空间,C语言给我们提供了方式:
递归的本质就是循环。循环可以完全代替递归,但是递归在某些情况下代码会更简洁一点。 可控递归三要素:
空间的操作有两种: 名字,地址。如果传名字不行,传地址一定可以。 如果使用变量改变函数外部的参数时,要定义全局变量,如果使用局部变量的话,并不能实现该功能。例如:(不能实现改变外部变量的值)
函数调用时,实参是给形参初始化,所以,实参传递什么类型的数据,形参就以什么类型去接住。比如一维数组,如下: 函数 fun1 传递 a, 因为数组名就是数组的首地址,所以用 ***int * p***形参。
在有返回值的函数里:结束函数,返回一个值。 在没有返回值的函数里:结束函数。 结束这个功能就像是循环中的break,直接跳出函数。
今天将用户注册,登陆的三个界面界面及其倒计时。 注册和登录分别有三个界面,原理都类似。如下:
今天将新学生管理系统的第一章,登录界面。
本系统综合运用了C语言的相关知识,例如:增加,减少,删除,修改,以及登录本系统的方式(游客登陆或者其他的)。 例如:本系统部分功能:
函数:c语言模块编程的核心语法。 作用:将代码按照功能划分为一段一段的独立的代码,有利于代码的管理,调试,维护。
不同编译环境下,指针的大小不一样: 32 位编译环境下,是4 字节 64 位编译环境下,是8 字节
概述: 二维数组指针的定义就是把一维数组换成二维数组。二维数组的各个元素也都是地址。 步骤: int a[2][3] = { {1,2,3},{4,5,6} }; / / 定义一个二维数组 int (*p)[2][3] = &a; / / a 是整个二维数组的地址 int (*p)[2][3] 为二维数组指针类型,p ==&a 所以(*p)的用法和 a 一样,a[1][1] == ( *p)[1][1]; a[0] 和a[1] 是两个小数组的名字,所以 &a[0] , &a[1] 是一维数组类型 int (*)[3].
概述: 数组指针,就是数组类型的指针。数组里面的 每一个元素都是一个地址 。可以让 数组指针指向一个数组的地址 ,通过地址遍历数组的各个元素。
前面我们稍微提过数组的属性:数组名就是首元素的首地址,即 &a[0]==a; 则:int *p = &a[0] ; 也可写成 int *p = a ; 两者一摸一样,平时都是用第二种,因为写起来比较方便。
指针可以进行加减运算,且只能进行加减计算,叫做指针偏移。今天我们就讲解一下什么是指针偏移。
什么是指针数组呢? 指针数组 :就是首先定义一个数组,数组里面的每一个元素都是一个地址。
pp 就是二级指针变量,用来装1指针的地址。 int ** 就是二级指针类型,int *是一级指针类型。 同理: int ***是三级指针类型,装二级指针地址,&pp。 int **** 是四级指针类型,装三级指针地址。 平时顶多用到2级,本质都是一样的。
a 是某个变量。 &a 是变量 a 所在的地址。 int *p=a; / / p里面装着 a 的地址。 *p 里面装着 a 的数据。 *&a 里面装着 a 的数据。 即:*&a 相当于变量 a ,既然 *&a==a, 所以 *&a 与 a 的用法一摸一样。