自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 51单片机

基本原理:利用定时20ms拿到按键的准确状态(按下/松开后会发生抖动,而抖动时间大概为20ms,所以定时20ms一定能扫描到按键的变化)根据定时器20ms取样速度,一定能在按下时取到keynum状态(如果前一次取到抖动区间,则下一次一定是keynum)---间隔取有效下降沿,同样一定能在松开时取到0状态(keynum)---间隔取有效上升沿,而通过对按键松开检测(定义两个前后状态,当前一个状态为按下即keynum状态同时后一个为松开即0状态)来获取按哪个键一次的信息。

2024-03-08 15:21:56 147

原创 C语言学习06

1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。2. 如何看待内存空间的视角。(float和int都是4字节,但是在内存中存储的方式不同)

2024-02-20 19:49:51 644

原创 C语言学习05

发现程序错误的存在以隔离、消除等方式对错误进行定位确定错误产生的原因提出纠正错误的解决办法对程序错误予以改正,重新测试Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便很好地使用。条件断点---满足条件才停下。

2024-02-19 17:28:30 210

原创 C语言学习04

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。

2024-02-17 20:01:03 177

原创 C语言学习03

指针就是地址,口语中说的指针通常指的是指针变量。指针的类型决定了指针在进行解引用操作时,能够访问空间的大小。指针的类型决定了指针向前或者向后走一步有多大(距离)(指针类型影响指针的算数运算)。

2024-02-16 22:29:44 576

原创 C语言学习02

特点:1在表达式中使用短整型运算时,每个短整型操作数被整型提升,提升分两种:(1).有符号提升,提升时使用符号位的值扩充到int(四字节)。取0---先将(1)按位取反(~),再按位与(&)上整数,完成该位改0操作。取决于他们的优先级。实际是利用&和I的特点:与0或和与1&,其本身逻辑值不变,与0&赋0,与1或赋1.逻辑 | |,从左边开始判断,若左为真,右边不执行,直接为真。(3).取1---直接将(1)按位或(|)上整数,完成该位改1操作。逻辑&&,从左边开始判断,若左为假,右边不执行,直接为假。

2024-02-15 21:43:29 617

原创 C语言学习01

将一件事情拆成多重的与自身相似的事件去解决问题。特点就是大事化小,代码量小。需要具有两个必要条件:1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。2.每次递归调用之后越来越接近这个限制条件。递归分两个过程:深入:不断重复调用自身,接近限制条件。返回:结束递归,不断结束自身直至跳到第一次重复调用自身的那一行。

2024-02-06 23:05:02 177

原创 C语言学习00

分别定义左右数组下标变量,求中值,比大小,更新左/或右值,while(l>r)循环查找。在循环中break代码块中可以使用bool变量作为在循环外部判断的条件。想要的结果时,需要在循环后加入判断语句,在判断语句中体现失败信息,边画图边写效果会好。

2024-02-02 20:54:24 221

原创 Ubuntu下QT5使用git管理

工具/git/remote repository/push---需要连接到一个有ssh密钥的远程库,初始时库中分支的内容要与本地库同步,在push时注意是从本地的哪个分支push到哪个远程分支。工具/git/local repository/commit---只要git init后可以使用,即有本地仓库就可提交。在账号中添加ssh密钥(1中)

2024-01-23 20:20:51 246

原创 C/C++

值传递:将实参拷贝到形参(地址不一样,存的值相同),在形参函数里的操作不会影响到实参的值。不适宜在拷贝数据过大时使用。地址传递:将变量的地址传给函数参数指针,比起值传递只多了个指针变量。同时形参函数里的操作能改变实参的值。但有时候只想拿到值但是数据较大不宜用值传递,此时在形参处必须限制指针为常量指针(可改变指向。

2024-01-05 18:16:15 181

原创 C/C++

传数组时一定要跟上数组长度(数组元素的个数),因为此时为引用传递(不是直接值拷贝-值传递---两个变量不同地址,而是将指向该变量地址的指针传过去。引用传递可以在不同栈帧改变变量的值。又因为数组的内存是连在一起的,只要传过去数组基地址和元素个数就可以访问所有元素。A作为数组基地址是常量,对应的A[i]=*(A+i)也是固定的,不能改变这种表示关系。但是可以将A赋值给一个int* p,通过使用p来灵活操纵数组。传数组参数传的数组参数是首地址指针。

2023-12-13 22:01:16 136

原创 C/C++

是指向哪一个变量(一般一个*指的是在原来的目标上。

2023-12-12 18:11:40 250

原创 嵌入式day09

数组滑窗显示-在遍历数组时加上一个初始索引偏移量,偏移量=1-滚动滑窗,偏移量=8(宽度为8的点阵)-动画滑窗。在变量声明后加code表示将该数据储存到flash里(但在程序运行中,不能改变其中的值)。用在函数里的变量,要在使用该函数的初始化函数前声明变量。,然后将偏移量归0,实现循环动态显示。预处理语句末尾不用加;

2023-11-21 13:31:56 12

原创 嵌入式day08

其实就是以列为位选信号,通过具体的列号(自我规定,注意规定与实际端口的绑定)和段选逻辑(每一列的哪几个灯亮),完成上述位选和段选逻辑的确定,再加上每次位选后要延迟和清0(完成消影),最后放入死循环,依次完成不同位段选的(每8位LED)的点亮。special bit):特殊位声明,声明某个寄存器的某一位在ram中的地址,使得被声明过的位可以正确找到并被赋值。):特殊功能寄存器声明,声明寄存器在ram中的地址,使得被声明过的端口可以使用(被赋值)。位,所以位的数量是寄存器数量的。口寄存器,物理地址为。

2023-11-17 17:44:07 12

原创 嵌入式day07

在串口中使用定时器,只用于计数溢出产生波特率,不需要开启定时中断。在由单片机发送字节到串口助手时,配置好串口设置(发送模式)和波特率(定时器设置),通过写入SBUG来发送字节。具体发送每一帧是利用发送标志位TI位在一定波特率下不断溢出(TI==1由硬件置位),当TI第一次等于1证明第一个字节发送完毕。发送下一个字节前要将TI软件清0.如此往复,这整个过程没有需要用到定时器中断,串口中断的作用应该是在发送完一个字节后干嘛,发送字节本身不需要中断。主函数和中断函数中不能同时调用相同的函数。

2023-11-16 19:26:57 13

原创 嵌入式day06

单片机使用寄存器来配置想要的电路功能,配置控制某个功能的寄存器的具体操作是配置寄存器里每一位或两位的值,以达到期望功能的电路。中断:中断源和中断优先级,中断系统保证了不用暂停cpu(delay)来实现延迟作业。而可以通过使cpu在连续工作下完成功能实现。

2023-11-15 18:35:51 22

原创 嵌入式day05

先学一下c的宏定义,预编译。

2023-11-09 14:42:31 10

原创 嵌入式day04

数码管分共阳极和共阴极,通过这个特性进行位选(即在多位一体的数码管中,通过位选信号选择点亮的数码管)单个数码管亮的内容是通过段选信号决定。

2023-11-08 20:58:32 40

原创 嵌入式day03

一般使用unsigned char作为一个8位寄存器(0~255),将取到的值处理后赋值给对应的pin。为避免一直重新加载main函数,一般在最外围有一个whil死循环。对输入外设状态的判断,用于对输出外设的状态控制。取反很关键,分析用1,操作取反实现控制。

2023-11-07 22:18:01 9

原创 嵌入式day02

交换字符串时应该,最好保证字符串容量相等-char name1[20];struct就像一个只有成员变量/属性的类。使用:struct 结构名 name(自定义)=。。;typedef:给某种数据类型一个关键字,调用方便。。。(构造函数)nickname name={。。。初始化struct里的各个数据。结构数组(对象数组):struct Student students[ ]={student1,student2,student3,student4};

2023-11-05 21:18:59 13

原创 嵌入式day01

toupper()-字符变大写(#include)scanf()输入后按enter键在内存中会出现一个\n的缓冲带,容易被下一个输入scanf(“%c”)所接收,吸收缓冲需要加一个scanf(“%c”)。再用scanf(“%c”)接受字符数据。sizeof(array name)-数组对应类型,全部元素所占内存大小(其实就是求括号里数据所占内存),用于for循环时计算循环次数i

2023-11-02 17:09:00 15

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除