
嵌入式学习
文章平均质量分 81
路x飞
这个作者很懒,什么都没留下…
展开
-
day08DS1302时钟
本案例讲解如何使用DS1302时钟芯片将时间信息显示在LCD上。在Int目录下创建Int_DS1302N.h,写入以下内容。在Int目录下创建Int_DS1302N.c,写入以下内容。在main.c写入以下内容。原创 2024-04-22 21:06:19 · 633 阅读 · 0 评论 -
day07 51单片机-18B20温度检测
本案例讲解如何从18B20传感器获取温度信息并显示在LCD上。原创 2024-04-22 21:05:26 · 1076 阅读 · 0 评论 -
day07 51单片机-串口通信
在方式0,当串行接收到第8位结束时,由内部硬件自动置位RI=1,向主机请求中断,响应中断后必须用软件复位,即RI=0。在其他方式中串行接收到停止位的中间时刻由内部硬件置位,即RI=1,必须由软件复位即RI=0。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。 SM2:在方式1时,如果SM2位为1,则只有在接收到有效的停止位时才置位中断请求标志位RI为1,如果SM2为0,则无论是否接收到有效的停止位都可以置位RI。原创 2024-04-22 21:02:58 · 1359 阅读 · 0 评论 -
day06 51单片机-点阵led
点阵LED的原理也非常简单,就是LED点灯。例如,我们想要让13列(阳极端)9行(阴极端)的LED点亮,需要13为高电平,9为低电平。注意对于我们的硬件原理图,阳极端通过74HC595芯片驱动,阴极端接P00-P07。如果想让点阵LED显示我们想要的图案,要采用“逐行扫描”的思路:通过74HC595芯片,依次激活每一行的阳极,再通过P0端口选择该行想点亮的LED即可。本案例讲解如何在LED点阵屏上从上到下循环滚动显示“尚硅谷”三个字。本案例介绍如何使用点阵LED显示一排由左上到右下的斜线。原创 2024-04-22 20:59:37 · 818 阅读 · 0 评论 -
day05 51单片机-外部中断、定时器
单片机中断是一种重要的计算机编程概念,用于处理在程序执行过程中突然发生的事件或条件。这些事件可以是外部硬件触发的,如按下按钮、传感器数据到达或定时器溢出等,也可以是软件内部条件满足时触发的,如某个特定的计算结果或状态变化,如图所示:中断的作用在于允许单片机暂时中止当前执行的程序,跳转到事先定义好的中断服务程序,以处理特定事件,然后再返回到原来的程序流程。这种机制使单片机能够实时响应外部事件,提高了系统的灵活性和响应能力。原创 2024-04-22 20:57:23 · 1016 阅读 · 0 评论 -
day04 51单片机-矩阵按键
在项目的Int目录下创建Int_MatrixKeyboard.h,写入以下内容。在项目的Int目录下创建Int_MatrixKeyboard.c,写入以下内容。本案例实现以下功能:按下矩阵按键SW5到SW20,数码管会显示对应的按键编号。原创 2024-04-22 20:55:23 · 751 阅读 · 0 评论 -
day03 51单片机
随着我们的代码越来越复杂,我们的main.c越来越长,阅读性也越来越差。如果将来开始做项目,我们可能要同时操作好几个模块,这种情况下我们无法再把代码写到同一个文件,而是要分模块管理代码。具体实现方法,就是将源码按照不同功能和模块,拆成若干部分源码,再用头文件相互引用。原创 2024-04-07 20:17:45 · 1042 阅读 · 0 评论 -
day02 51单片机
打开STC-ISP,选择软件延时计算器标签,指定时长1ms,指令集选择STC-Y1(说明:STC89/STC90单片机都是Y1指令集),即可得到1ms的延时代码。DIG.2的编码是001,也就是1表示,依次类推,每个片选和对应的编码都是差1。所以后续想显示某个数码管时,需要对应的片选减1,才能和编码对应上。指令周期=1条指令完成所需要的时钟周期(一般12/24/48)。这个案例,我们要让P00引脚对应的LED按照1秒闪烁1次。这一案例,我们让右边数码管的左1位显示数字1。// 关掉当前数码管。原创 2024-04-07 20:15:43 · 1003 阅读 · 0 评论 -
day02 VS Code开发单片机
VS Code 用于编辑 C 代码,我们还需要 C 编译器来运行 C 代码,所以安装 VS Code之前我们需要先安装 C 编译器。这里我们使用 MinGW-w64(Minimalist GNU for Windows 64-bit)。MinGW-w64 是一个用于Windows操作系统的开发工具集,其包含了C语言编译器 GCC(GNU Compiler Collection)。官网地址:https://www.mingw-w64.org。原创 2024-04-07 20:09:18 · 1008 阅读 · 0 评论 -
day01 51单片机
目前使用的51单片机一般是宏晶STC89系列,这其中流传最广的版本,也是我们课程的主角,就是STC89C52RC。原创 2024-04-02 18:22:39 · 1195 阅读 · 0 评论 -
day05 设计计算机硬件
总线,在前面的课程中我们有过介绍,但是没有相应的实物,看起来比较抽象,其实总线就是CPU和外部通讯的导线,如果我们将CPU结构稍作改造,例如下图:我们将A,str,ld,Dout和Din五根导线分别接上输入和输出,就可以实现CPU和外部数据的交换,而这五根线就是总线,其中:Ø A线为数据总线,用来传输CPU寻址地址。Ø ld和str线为控制总线,用来传输CPU控制信号,表明CPU是打算对地址进行读,还是写。Ø Din和Dout为数据总线,用来传输数据。原创 2024-03-26 18:18:25 · 1028 阅读 · 0 评论 -
day04 设计计算机硬件
指令的本质就是控制信号的开关。现在已经有11位的信号控制了,如果电路越来越复杂,控制信号会越来越多。每一个控制信号都需要一个2进制位来表示它,现代计算机的指令多达几百上千个,那我们指令占用的位就太多了,我们必须用一种方式简化指令占用的控制位。一个二进制位表示2个数字,目前我们的系统一共有如下9条指令,那么只需要24=16,也即4个二进制位就可以表示。为了后期进一步扩展完善系统,我们选择25,32条指令的空间留有扩展的余地。5个二进制位在这里我们称为操作码,英文缩写opcode。原创 2024-03-25 20:11:24 · 571 阅读 · 0 评论 -
day03 设计计算机硬件
当要执行将数据RAM的值直接输入到A寄存器时,需要将ALU的A输入设置为0即可,因为ALU的B输入是从数据RAM中直接读取数据,我们选择ALU的运算模式为加,那么ALU的输出S=A输入+B输入(数据RAM的值),我们只需要保证此时A输入为0,那么ALU的输出 = 0 + 数据RAM中的值。上面的电路中,当执行str存储操作的时候,数据RAM的输出其实并不重要,但是这个数据输出仍然会被输入给ALU进行计算,我们不希望这样的情况出现,因此,可以通过控制数据RAM的ld引脚,来控制数据RAM的输出。原创 2024-03-23 16:41:21 · 890 阅读 · 0 评论 -
day02 设计计算机硬件
通过分析发现,PC计数器累加后,可以从内存中读取数据到ALU进行运算,而ALU的控制引脚一直输入的是00(加),因此,执行的结果是将数据RAM中的数据进行了累加。那如果我们改变ALU的控制引脚,使其进行其他操作,那么,我们的程序就可以进行复杂的运算了。加入一块新的EEPROM,将数据设置为16bit,地址设置为2bit,并输入数据0、0、1、1,对应ALU的加法、加法、减法、减法。右键点击A、B、加法器,减法器,与门,或门,比较器、S,将它们的位数改为16bit,这个ALU的位数就被设置成了16bit。原创 2024-03-22 18:02:39 · 1636 阅读 · 0 评论 -
day02 计算机组成原理
由科学家冯诺依曼提出的模型理论。基于通用图灵机建造的计算机都是在存储器(内存/寄存器)上存储数据。鉴于程序和数据在逻辑上是相同的,因此程序也能存储在计算机的存储器中。(1)存储器:用来存储数据和程序的区域(2)算数逻辑单元(ALU):用来进行计算(算数运算、逻辑运算、位运算等)的地方。(3)控制单元:对存储器、算数逻辑单元、输入/输出等子系统进行控制操作。(4)输入/输出单元:输入子系统负责从计算机外部接收输入数据,输出子系统负责将计算机处理结果输出到计算机外部。原创 2024-03-22 17:56:34 · 654 阅读 · 0 评论 -
day01 数字电路基础
D锁存器尽管可以起到保存数据的作用,但是当en信号为1时,D输入和Q输出相当于是联通的,此时如果D信号有波动,Q会跟随波动。问题:当en为1时,D的输入直接影响Q*的输出,为了提高触发器的可靠性,增强抗干扰能力,希望触发器的次态仅仅取决于en的下降沿(或上升沿)到来时的输入信号状态。En=0,与非门特性,G3输出S1=1,G4输出R’=1,因为S’、R’低电平有效,此处都为1,处于高电平,既不置0也不置1,输出保持不变。我们就得到了一个带en输入的D锁存器,其特性为:当en为高电平,Q和D的输入保持一致;原创 2024-03-20 19:45:50 · 857 阅读 · 0 评论 -
day02 模拟电路基础
信号是反映信息的物理量,用电流作为载体的信号,方便的储存和传递。电信号分为模拟信号和数字信号,模拟信号是连续的,数字信号是离散的。模拟电路就是用来管理和传递模拟信号的电路,涉及对于模拟信号的滤波,放大和传递,除了用到我们上面讲过的一些器件,还要用到一些其他核心元件,例如二极管、晶体管、场效应管等。在嵌入式软件开发中,有关模拟电路的部分,主要是用晶体管和场效应管做开关电路(继电器其封装体积较大,不适合用在集成电路里),至于信号的放大,滤波等是嵌入式硬件工程师的事情。原创 2024-03-19 19:05:08 · 1066 阅读 · 0 评论 -
嵌入式学习-02_数据结构和算法 (快速排序)
快速排序(Quick Sort)由图灵奖获得者Tony Hoare发明,被列为20世纪十大算法之一,是迄今为止排序算法中速度最快的一种,快速排序的时间复杂度为O(nlog(n))。快速排序通常明显比同为O(nlogn)的其他算法更快,因此常被采用,而且快排采用了分治法的思想,所以在很多笔试面试中能经常看到快排的影子。排序思想:从数列中挑出一个元素,称为"基准"(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。原创 2024-03-18 18:15:04 · 680 阅读 · 0 评论 -
嵌入式学习-02_数据结构和算法 (冒泡算法)
1.1.1冒泡排序原理如下:(1)比较相邻元素: 从数组的第一个元素开始,依次比较相邻的两个元素。(2)交换位置: 如果前面的元素比后面的元素大(或小,根据升序或降序排序的要求),则交换这两个元素的位置。(3)一趟遍历完成后,最大(或最小)元素已移至末尾: 经过一趟遍历,最大(或最小)的元素会被交换到数组的最后一个位置。(4)重复进行遍历和交换: 除了最后一个元素,对数组中的所有元素重复执行上述两步,每次遍历都会将当前未排序部分的最大(或最小)元素放置到合适的位置。原创 2024-03-18 18:13:50 · 425 阅读 · 0 评论 -
嵌入式学习-02_数据结构和算法 (二分查找)
其原理是通过将数据集划分为两半并与目标进行比较,以确定目标在哪一半中,从而逐步缩小搜索范围,直到找到目标元素或确定不存在。(4)缩小搜索范围: 对于一个升序的数据集,如果中间元素大于目标元素,说明目标可能在左半部分;(5)重复步骤: 重复上述步骤,不断将搜索范围缩小,直到找到目标元素或搜索范围为空。(3)查找成功: 如果中间元素等于目标元素,则查找成功,返回中间元素的索引。(1)选择中间元素: 在有序数据集中,选择数组的中间元素。(2)比较目标: 将中间元素与目标元素进行比较。原创 2024-03-18 18:13:11 · 432 阅读 · 0 评论 -
嵌入式学习-02_数据结构和算法 (顺序查找)
(4)查找失败:如果遍历完整个数据集仍未找到目标元素,则查找失败,返回一个特殊的标识来表示未找到。(3)查找成功:如果当前元素等于目标元素,则查找成功,返回当前元素的索引。(1)从头开始遍历:从数据集的起始位置开始,逐个检查每个元素。(2)比较目标:对于每个遍历到的元素,将其与目标元素进行比较。原创 2024-03-18 18:12:39 · 458 阅读 · 0 评论 -
嵌入式学习-02_数据结构和算法 (队列)
队列(Queue):也是操作受限的线性表,限制为仅允许在表的一端进行插入(入队或进队),在表的另一端进行删除(出队或离队)操作。方法1:使用数组实现,入队列时添加到队列的最后,出队列时移除第一个元素同时将右侧的元素左移。可用顺序表(数组)和链表来存储队列,队列可以依照存储结构分为两种:顺序队列和链式队列。可用顺序表(数组)和链表来存储队列,队列按存储结构可分为顺序队列和链式队列两种。方法2:为队列分配的向量空间看成是一个首尾相接的圆环,这种队列称为循环队列。队列中没有元素时,称为空队列。原创 2024-03-16 16:52:54 · 531 阅读 · 0 评论 -
嵌入式学习-02_数据结构和算法 (栈)
栈(stack),是限制在只能在表的一端进行插入和删除操作的线性表。应用范围非常广泛。生活中也有栈的场景,比如堆叠的盘子、报 ,电梯中的人们,邮局的邮筒等。原创 2024-03-16 16:51:49 · 422 阅读 · 0 评论 -
嵌入式学习-02_数据结构和算法 (链表)
由于链表中的结点不是连续存储的,无法像数组一样根据索引直接计算出每个结点的地址。必须从头结点开始遍历链表,直到找到目标结点,这导致了链表的随机访问效率较低。物理结构:与数组不同,链表中的结点需要自行组织,向系统申请很多分散在内存各处的结点,每个结点都保存了当前结点的数据和下一个结点的地址(指针),通过指针将结点串成一串。(2)额外的存储空间。链表的每个结点都需要存储指向下一个结点的指针,这会占用额外的存储空间。(2)动态扩展性能更好,链表不需要像数组那样预先指定固定的大小,而是可以随时动态的增长或缩小。原创 2024-03-15 16:56:24 · 606 阅读 · 0 评论 -
嵌入式学习-02_数据结构和算法 (数组)
可变长的动态数组是一种数据结构,它允许在运行时根据需要动态地调整数组的大小,而不需要提前指定固定的大小。这种动态数组通常被称为动态数组、动态分配数组、动态增长数组或动态内存数组。(2)重新分配内存(realloc): 如果需要改变动态数组的大小,可以使用realloc函数来重新分配内存。C语言中是通过使用指针和内存分配函数来实现动态数组,常见的内存分配函数是malloc、realloc和free。(3)释放内存(free): 当不再需要动态数组时,应使用free函数释放之前分配的内存,以避免内存泄露。原创 2024-03-15 16:54:25 · 526 阅读 · 0 评论 -
嵌入式学习-01C语言day11
宏定义,就是用一个标识符(宏名称)来表示一个替换文本,如果在后面的代码中出现了宏名称,预处理器会将它替换为对应的文本,称为宏替换或宏展开。原创 2024-03-14 10:23:57 · 879 阅读 · 0 评论 -
嵌入式学习-01C语言day10
1)语法格式enum 枚举名称枚举元素1,枚举元素2,...枚举元素N2)枚举常量枚举元素也称为枚举成员或枚举常量,具有如下特点:(1)枚举元素的值必须在同一枚举中是唯一的(2)枚举元素的值必须是整数类型,通常是int(3)如果没有为枚举元素指定值,编译器会自动为它们分配值,从0开始,依次递增。(4)定义枚举的时候也可以为枚举元素自定义值,需保证唯一性和整型类型。3)代码演示// 定义枚举类型,表示星期一到星期天,枚举元素的值自动分配,从0到6。原创 2024-03-12 19:03:21 · 1318 阅读 · 0 评论 -
嵌入式学习-01C语言day08
如果函数的返回值是一个指针,这样的函数称为指针函数。原创 2024-03-10 18:16:25 · 891 阅读 · 0 评论 -
嵌入式学习-01C语言day08
如果一个变量专门用来存放内存地址,则它称为指针变量,通常简称为指针。我们可以通过指针间接访问内存中另一个数据。如图,指针里面存储的是变量 num 的地址,我们可以说该指针指向变量 num,通过该指针可以间接访问变量 num。一般格式****:****数据类型 *指针变量名 [=初始地址值];数据类型是指针所指向的地址处的数据类型,如 int、char、float 等。符号 * 用于通知系统,这里定义的是一个指针变量,通常跟在类型关键字的后面,表示指针指向的是什么类型的值。原创 2024-03-09 18:27:09 · 1357 阅读 · 0 评论 -
嵌入式学习-01C语言day03
空格“SPACE” 是32(二进制00100000)大写的字母A是65(二进制01000001)隐式类型转换中的宽类型赋值给窄类型,编译器是会产生警告的,提示程序存在潜在的隐患,如果非常明确地希望转换数据类型,就需要用到强制(或显式)类型转换。原创 2024-03-08 14:53:55 · 879 阅读 · 1 评论 -
嵌入式学习-01C语言day04
嵌套分支是指,在一个分支结构中又嵌套了另一个分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。嵌套分支层数不宜过多,建议最多不要超过3层。原创 2024-03-08 14:58:56 · 974 阅读 · 1 评论 -
嵌入式学习-01C语言day07
相比于 scanf(),多了一个参数,第一个参数是要提取数据的字符串,后面参数与 scanf() 一致。局部变量、局部数组等通常存储在栈(Stack)区,这些局部数据的内存分配和释放是自动管理的,它们的生命周期受限于其定义的函数或块级作用域,当函数返回或块级作用域结束时,这些变量的内存会被自动释放。1,1,2,3,5,8,13…块级作用域是C99标准引入的概念,在代码块(分支语句、循环语句等)中定义的变量、标识符常量、数组等具有块级作用域,只有在该代码块内部才能被访问,代码块通常具有花括号 {} 结构。原创 2024-03-08 18:29:13 · 1120 阅读 · 1 评论 -
嵌入式学习-01C语言day05
用来存放字符的数组称为字符数组,也可以称为字符串。字符串的输入输出格式占位符是 %s。字符串结尾,会自动添加一个 \0 作为字符串结束的标志,所以字符数组最后一个元素必须是 \0。\0 是ASCII码表中的第0个字符,用NUL表示,称为空字符,该字符既不能显示,也不是控制字符,输出该字符不会有任何效果,它在C语言中仅作为字符串的结束标志。原创 2024-03-08 18:00:35 · 997 阅读 · 0 评论 -
嵌入式学习-01C语言day02
空格“SPACE” 是32(二进制00100000)大写的字母A是65(二进制01000001)原创 2024-03-08 14:44:08 · 914 阅读 · 1 评论 -
嵌入式学习-01C语言day01
/ 注释内容1.1.2。原创 2024-03-08 14:39:06 · 497 阅读 · 1 评论