- 博客(70)
- 收藏
- 关注
原创 LED显示的一种思路---摄像机思想(学习总结)
本文探讨了优化OLED动画显示的方法。传统逐像素绘制方式虽节省内存,但在动画转换时易出现卡顿。作者提出借鉴人眼视觉原理,将整个动画场景预先存储在内存中,仅通过移动"取景框"坐标来显示不同画面区域。这种以空间换时间的方法能显著提升动画流畅度,避免重复绘制带来的性能损耗。该方案尤其适用于需要频繁更新画面的动画场景,为OLED显示优化提供了新思路。
2025-10-27 23:54:44
453
原创 图灵完备之路(数电学习三分钟)----逻辑与计算架构
本文介绍了设计简单图灵完备机的逻辑架构和计算架构的方法。首先构建了包含解码器、输入端和逻辑门的逻辑运算架构,定义了4种基础逻辑运算的指令码。随后扩展了计算架构,加入加减法单元,发现指令冲突问题后改用三位解码器解决。该架构实现了基本逻辑运算和加减法功能,为构建图灵完备机奠定了基础。整个设计过程展示了从简单逻辑单元到完整计算系统的构建思路。
2025-07-06 20:59:07
751
原创 图灵完备之路(数电学习三分钟)----解码器
本文介绍了两种解码器设计:一位解码器和三位解码器。一位解码器通过开关控制两个输出通路,使用非门实现信号转换。三位解码器(三八译码器)利用二进制原理,通过三个开关控制8个输出通路,采用非门和三路与门实现。文中还说明了如何用一位解码器简化三位解码器的线路设计,本质上只是封装了非门。这两种解码器设计体现了从简单到复杂的逻辑扩展过程。
2025-07-05 22:02:02
589
原创 图灵完备之路(数电学习三分钟)----内存原理
本文探讨了计算机内存设计的基本原理。首先分析了定制电路的局限性,提出需要通用存储方案来解决多任务运算需求。文章从1bit存储单元入手,比较了锁存器和延时线两种方案,详细描述了基于延时线的1bit存储电路设计,并通过双存储器结构解决了数据持续存储问题。随后扩展到1字节存储设计,介绍了8位并行存储、数据总线拆分与整合的方法,以及读写控制信号的实现。最终完成了一个具备读写控制功能的1字节内存模块设计,为计算机系统提供了灵活的数据存储解决方案。
2025-07-05 13:29:18
581
原创 图灵完备之路(数电学习三分钟)----数据选择器与总线
之前我们学习了逻辑与算数的计算,得知两个数字之间的加减和与或的结果是不同的,而一个通用的数字电路不可能只有一个功能,所以我们将在本节引入电路选择器这一“器件”,来实现对两个输入的运算方式的选择,甚至是学习手机电脑中不同APP的切换的思想。由于输入不能接到输入(会短路),所以需要开关将输入分开,开关选几个呢?既然我们将不同的结果发送到了同一个输出端,那么接下来就自然而然的要将多个结果发送到多个输出,实现从线到面的转变,这便是总线。这便是2对2的总线,而计算机中的通信总线,无非就是对上述情况的堆量而已。
2025-07-04 22:39:53
475
原创 图灵完备之路(数电学习三分钟)----简易流水灯
摘要:流水灯设计是电子信息的基础实践,涉及逻辑与时序控制。通过引入延迟线和逻辑元件(如或非门),实现循环依赖的时间监控。设计关键在于使输出不依赖输入,仅通过延迟变化控制。示例以输入全0为例,利用或非门特性实现周期性输出变化(1→0→1...),从而完成流水灯效果。该方案展示了基础数字电路设计中时序控制和逻辑运算的巧妙结合。
2025-07-04 09:30:00
702
原创 图灵完备之路(数电学习三分钟)----开关与延迟线
逻辑的基本运算功能基本已经实现,接下来,我们将考虑将逻辑的功能融合到一个系统中,而怎么融合进去,就是接下来我们考虑的重点了,首先,我们将了解两个结构----开关与延迟线。所谓开关,就是能切换电路状态的结构,打开(使能)开关,数据能正常传输,关闭开关,数据停止传输。所以数据是否有效,取决于开关是否使能,当开关与输入均为1时,输出才为1,按他的逻辑,,但为了和与门区分,我们定义其如下:那么多路开关呢?
2025-06-30 23:19:51
384
原创 图灵完备之路(数电学习三分钟)----运算基础五之八位逻辑运算与取反运算
本文介绍了八位逻辑运算和取反运算的实现方法。在八位逻辑运算部分,通过将各个位单独运算,实现了八位取非、或、与等基本逻辑门电路设计。在取反运算部分,详细解释了补码的概念和二进制负数的表示方法,指出取反操作可以通过位取反加1实现,并给出了相应的电路设计方案。文章从基础逻辑运算延伸到负数表示,为数字电路中的算术运算提供了实现思路。
2025-06-30 09:00:00
689
原创 图灵完备之路(数电学习三分钟)----运算基础三
在上节中,我们实现了数据的简单计数,由该原理,我们可以推出更大的数据计数,8位/16位/32位甚至64位均是基于上节的方法(大概)。此时,我们想将一个信号的值翻倍,如何实现最好?可以先用几个例子来找规律,比如13,其翻倍为26,不妨将其转化为二进制:13---1101,26---11010;现实中没有一次性能表示多位数的元器件,但若一位一位的表示,会显得很繁杂,所以我们在这里约定有那么一个器件,可以用一根线传输十进制的数据,为了将该器件和现实联系起来,我们再约定两个名为集线器和分线器的器件,如上图所示。
2025-06-29 01:16:49
354
原创 图灵完备之路(数电学习三分钟)----运算基础四之全加器与加法
上1+下1,无非进一位到2,或者为1,或者为0三种情况,若为0或1,那么结果的第一为便定下来了,因为结果的第一位肯定只受两个加数的影响;一看是16路的电路的构建,是不是完全没有思路?进位有两种情况,一个是全为1时,一个三路与门即可实现;所以我们便可以发现,复杂电路不过是多个基础电路的融合罢了。这样,我们便实现了多路的加法器----全加器。该电路就可以运算两个255以下值的和了。
2025-06-29 01:16:39
662
原创 图灵完备之路(数电学习三分钟)----运算基础二
首先,我们需要了解,在数电中虽然能直接显示具体的数字,不过涉及到的工程量太大了,而且其本质也是一种编码,所以我们一般选择最简单的编码方式---二进制来代表数,如0010代表2,1101代表13,这里对二进制不做赘述。无疑,这个数量的卡诺图已经不好绘制了,所以我们得动用我们的超级智慧了,如果你注意力惊人的话,可以注意到,奇数时,最低位为1,所以上一节的判断奇数电路可以加入该电路,输入接入四个信号源,输出接入最低位;那么第二位如何设计呢?由此,我们便用电路实现了数学上的计数功能,迈开了数学之海的第一步。
2025-06-25 23:35:36
256
原创 图灵完备之路(数电学习三分钟)----运算基础
看真值表可知,任意一路电路使能,输出均为1,所以使用或门相关的门来设计最佳,而或门相关门包括----或,异或,同或,或门组合无法判断输入的1的数量,所以从异或和同或考虑,异或和同或本质是相反的,假如一个能判断1的数量,另一个就能判断0的数量,所以可以任选一个。四路输入,两两一分,奇数情况无非1和3,为1时,有个异或门必然为1,另一个必然为0,两个输出当作输入,可以再异或一次,符合要求;思路复杂,但电路简单,所以数电设计就是如此,大脑的功耗高了,电路的功耗必然低,也算是一种能量守恒了。
2025-06-25 22:23:26
328
原创 图灵完备之路(数电学习三分钟)----门的多路化
则我们按公式即可以设计出三路与非门,但此时突然发现,我们在设计这个之前好像还需要一个三路与门,这如何是好?直接设计一个三路与门无疑十分简单,但这就偏离了卡诺图设计的初衷,变得没有了逻辑的美感,此时,我们需要引入一个定律---若1的数量为2的次方数,且分布为一个矩形,就可以圈出那一片1,然后见将1对应的输入值按位01相消。上图中为了美观,已经将所有逻辑门进行封装,N为非门,AND为与门,OR为或门,XOR为异或门,NXOR为同或门,下文也是如此。其用于化简公式,那么我们也可以用来构造公式,我们将。
2025-06-22 22:08:01
401
原创 图灵完备之路(数电三分钟入门)----与非门实现所有门
由于与非这一逻辑的逻辑门相较于其他逻辑门的物理状态更好实现,所以大规模的集成电路都依赖于与非门来制作,下面几周我们将使用与非门与其他一些简易器件实现图灵完备,造出一台简易的可编程计算机。
2025-06-22 16:54:23
1300
原创 线程与排序(睡眠排序C语言实现)
线程在排序方面也有特殊的应用,我们可以把要排序的数都为其创建一个线程,根据数的值对其进行延时操作,线程中的值越大,其结束的越晚,里面的数出来的也越晚,所以自然可以将数据排出序来,当然,若数据较多,会十分消耗计算机资源,所以也是图一乐的一种思想,具体代码将于明日发布。
2024-12-09 22:54:12
213
原创 并发计算二三阶矩阵
矩阵的计算随着阶数的上升会越发的复杂,假如使用C语言直接计算,按照C语言按部执行的特性,那将会消耗大量的时间,所以本文计划将矩阵公式分割为几个小块,使用并发的方式来同时将各个小块计算出来从而节省时间(误,单纯是作者为了复习并发的知识而已)
2024-12-09 09:14:43
456
原创 CAN总线学习
can主要用于汽车、航空等控制行业,是一种串行异步通信方式,因为其相较于其他通信方式抗干扰能力更强,更加稳定。原因在于CAN不像其他通信方式那样,以高电平代表1,以低电平代表0,而是通过电压差来表示逻辑10。这样当干扰到来时,电压差是固定的,所以通信距离在1000米左右。其通信线路为两根,当两根线的电压差小于0.5V时,逻辑为1,当电压差大于0.9V时,为逻辑0。当多个节点同时发送数据时,CAN总线采用非破坏性位仲裁机制,通过比较报文的标识符来确定哪个节点获得总线的发送权。//图来自@爱上半导体。
2024-07-14 23:25:21
308
原创 STM32F103借助ESP8266连接网络
,他有三个模式,分别为AP接入点模式和无线终端模式、混合模式,AP模式可以自身产生一个WIFI信号(可以理解为手机开热点);无线终端模式,可以连接网络,不产生WIFI;STM32F103本身是不具备联网功能的,所以我们必须借助其他单片机来进行联网,然后让STM32与联网单片机通信,就可以实现STM32联网了。设置为服务器:AT+CIPSERVER=1,"8080";设置模式,2为AP模式。设置多连接服务器:AT+CIPMUX=1;
2024-06-01 23:28:11
1039
原创 基于标准库的STM32的外部中断EXTI
毕设已经告一段落了,接下来准备开始整理一下毕设中用到的知识与技术细节,今天整理的是STM32从编码器获取数据的方式-----外部中断(EXTI):外部中断分为四个硬件相关外设,GPIO/AFIO/EXTI/NVIC(EXTI/NVIC不需要开启时钟)
2024-06-01 12:06:16
1222
原创 STM32标准库中的PWM
在STM32标准库编译中查看相关函数的方法(以PWM为例):打开对应的头文件,比如PWM使用的库函数是tim库,打开tim.h结尾的文件,查找到1055行左右,如下图:其中1056/1057/1058/1059行为输出比较函数,第一个参数为选择定时器,第二个为输出比较的结构体;此外,还有以下函数:用以更改CCR寄存器值的,可用以修改PWM中的占空比。用以配置强制输出模式,作用是运行中暂停输出波形并强制输出高电平或低电平。作用为配置CCR寄存器的预装功能(影子寄存器,写入的值在更新事件后生效)
2024-05-04 23:53:50
1330
原创 STM32标准库编译流程
在keil中打开头文件#include"stm32f10x.h",找到第8296到8298行,复制USE_STDPERIPH_DRIVER到魔术棒的C/C++中的定义界面(因为头文件里的逻辑是必须定义USE_STDPERIPH_DRIVER才能使用conf文件)即可。将其复制到keil建立的工程的文件中,接着回到STM32F10x_StdPeriph_Driver文件夹,打开inc文件夹,继续复制到工程中;填入需要的参数,我们需要的是GPIO_Mode_Out_PP,再按该方法填入另外两个即可。
2024-05-04 22:24:13
2386
原创 基于寄存器的STM32操作流程
按原理图可知,需配置GPIOB5与GPIOE5,手册上5低寄存器,且输出模式需为通用推挽输出,最大速度为50HZ,则CNF为00,MODE为11。20,21为1,其余赋值为0,写成16进制。寄存器操作STM32的好处是不需要依靠外部文件,自由度更高,但也更加繁杂。接着按照开发板原理图或者自己接的引脚图配置端口配置寄存器,首先配置AHB外设时钟使能寄存器,
2024-05-02 23:57:59
214
原创 STM32编译前置条件配置
回到上述文件夹中的STM32F10x处,找到stm32f10x.h文件,其功能为描述(声明)引脚功能,以便省去配置引脚过程,其下方两个system文件功能为配置时钟。进入Libraries,然后进入CMSIS,再进入CM3,点击DeviceSupport,再顺序进入ST,STM32F10x,satrtup,arm,就可以看到库文件了:其为汇编文件。回到keil,建立新的group,向其加入之前建立的文件夹中的启动文件,包含所有以md.s结尾的文件,以及所有.c与.h文件。点击该按钮,选中其中的C/C++
2024-05-02 13:36:50
631
1
原创 GPIO驱动的传感器
操作:主机将总线拉低60~120us,表示发送0;发送完数据后将总线拉低30us,从机才能接受数据,每次发送时间应该大于60us。接着就可以接收温度了,即使用总线接收数据,接收两个字节(两个八进制数),一个为LSB,第二个为LSB;操作:主机将总线拉低1~15us,然后释放总线,接着开始读取数据(读取时间尽量靠近拉低的那15us)。现象:等待15~60us后,从机会响应一个60~240us的低电平,然后也置高。操作:首先将线电位置高,接着将其拉低480us以上,然后释放总线(将其置高)
2024-04-29 23:07:22
454
原创 I2C同步通信
在SCL时钟处于高电平的时候,SDA发送一个低电平(起始位),从而其他设备停止发送数据,进入聆听状态,然后主设备发送7位从机地址以及一位数据方向地址,其中方向地址为1时主机接收数据,为0时发送数据,在时钟位为低电平时,数据线才能产生电位变化(假如发送0010,发送到第二个0时,要发送第三个数字时,必须等到时钟线为低)。发送完一帧数据后(8位数据,先发MSB,再发LSB)必须再发送一位应答位,若应答(0),则可以继续发送或发送一位中止信号停止发送,若无应答(保持1),则发送一位中止信号。
2024-04-21 17:58:41
478
原创 UART串口通信
2^8-2smod * focs / 32 / bps / 12,其中smod表示PCON的B7,根据实际情况带入,不是0就是1,bps目标波特率,2^8这里的8来自定时器的工作方式,因为我们使用的是8位自动重装方式,所以是8。模式一:sm1为1,sm0为0,波特率可调,为2的(PCON寄存器第7位的值-5)次方×定时器1的溢出率。模式三:sm1为1,sm0为1,波特率可调,为2的(PCON寄存器第7位的值-5)次方×定时器1的溢出率。通讯协议中信号线上的状态位高电平代表’1’,低电平代表’0’。
2024-04-21 14:23:11
612
原创 ARM汇编基础
比较函数cmp :将cmp后的两个值进行对比,并根据比较结果设置条件码寄存器,如cmp a,b 将a与b进行比较。ble---若最后一次对比的值为小于等于,则跳转到b后面接着的函数。bge---若最后一次对比的值为大于等于,则跳转到b后面接着的函数。以add为例:add r0,r1,#1 含义为将r1 的值加1后赋予r0;bl---保存数据到r14并跳转。引用函数b:---跳转到b后面接着的函数。用以上代码即可以实现循环以及选择语句。nop---空闲一个指令周期。eor---按位异或。
2024-04-17 23:31:26
202
原创 数据结构DAY5--二叉树的概念
由n个节点组成的有限集,有一个根节点;其他节点只有一个前驱节点,但可以有多个后继节点。(一对多)叶子节点(终端结点):只有前驱结点没有后继结点非叶子节点(分支节点):既有一个前驱结点又有一个以上的后继结点。度:子节点的个数称之为度树的度:树中各节点度的最大值深度:从根节点到最底层节点的层数、所以除了叶子节点,其余结点度可以作为根节点。
2024-04-10 23:50:53
624
1
原创 数据结构DAY4--哈希表
用表结构体定义一个指针,设置一个循环次数为哈希表长度的循环,再嵌套一个循环,若角标为循环次数的哈希表不为空(循环条件),则使指针等于角标为循环次数的哈希表,并使该哈希表值为指针的后驱结点,最后释放指针即可。用表结构体定义一个大小为结构体大小的指针结点,使其数据域为输入的数据,后驱指针指向空,用建立的查找方法获得该结构体的角标,然后使后驱指针指向角标为获得的角标的哈希表,并使该表值为带新数据的表头。建立表结构体,包括储存数据的数据为和表结构体类型的指针(用于指向下一位)。
2024-04-09 22:03:36
823
原创 数据结构DAY3--栈与队列
首先建立结点,用结点结构体定义一个大小为结构体大小的指针,使其数据域为输入数据,结点的后驱指针指向空,然后将其返回,返回后,使结点的后驱等于栈链的栈顶,栈链的栈顶等于结点,栈个数加1,一个栈就建立好了。用结点结构体定义一个指针,其等于队列表头的头,队列表头的头等于指针的后驱结点,如果队列表头的头为空,则使其尾也为空,如果数据域不为空,则使传入的数据指针的值为数据域的值。用结点结构体定义一个指针 ,其值等于队列链表的前驱,只要该结点不为空,就打印其数据域的数据,并使该结点的值为该结点的后驱结点。
2024-04-07 22:31:15
781
原创 使用framebuff技术绘制图片与汉字
2.从尾部开始读取(bmp的特性),从左到右,循环从指针中读取rgb值,一次读取3个8位二进制值作为b、g、r的值,读取后,对r值左移16位,g值左移8位,b值移动0位(RBG888),或对r值右移3位再左移11位,g值右移2位再左移5位,b值移动3位(RBG565),然后相或。4.打印时,需再加一个循环遍历字符块的行数像素点(0~8),并使像素点的代码与0x80相与,判断其为字符体还是字符背景。3.按照先高后宽的原则循环打印字符块(数组)中的代码串---两个循环,一个高,一个宽。
2024-03-29 09:51:39
386
原创 framebuffer技术
即帧缓存技术,就是将像素点显示在显示屏上。其需显卡的硬件支持,显卡将显存中的数据转化到显示屏上,而该技术就是将用户空间与显存空间进行内存映射,用户在用户空间写入数据(RGB颜色值),显存空间也会有该数据,从而可以通过此过程实现绘制图像。显示屏上的数据储存是从左到右再从上至下的,而用户空间与显存空间是一维空间,所以要绘制指定位置的图像,首先要将显示屏上的二维坐标转化为一维坐标,再找到坐标根据RGB码绘制即可。
2024-03-28 14:30:45
569
原创 数据结构学习DAY1
其原理相同,即为创建一个结点类型的指针,使其等于(指向)表头的head,然后通过不断的使其指向结点的pnext,直到指向null值为止,该过程即为遍历,而查找只需将停止条件的null改为乡查找的数据即可,在找到后,向结点的数据中输入新的数据,即为修改。用表头的pnode指向表结点,即为一个单向列表,若需增加表长度,只需要将表结点的pnext指向下一个结点,增加结束,需将最后一个表结点指向NULL。操作:创建--插入--删除--查找--修改--销毁--遍历。V:视图----数据的反应和人机交互。
2024-03-23 18:06:59
505
原创 C语言下使用SQL语言
例如:sqlite3_exec(ppdb,tmpbuf,NULL,NULL,&errmsg);例如:sqlite3_open("1.db",&ppdb);//ppdb为定义的sqlite3类型的空指针。errmsg:出错信息存放空间首地址(使用完毕后使用sqlite3_free释放空间)callback: 只有在select时才会使用,其余调用时传递NULL。ppDb:操作数据库指针存放空间的首地址。sql: 要执行的SQL语句字符串首地址。sqlite3*: 数据库句柄。成功返回SQLITE_OK。
2024-03-13 17:37:08
911
原创 Linux环境下的数据库SQL学习
1.在Ubuntu下安装sqlite3软件输入sqlite3启动,输入.quit退去2.SQL语言与命令:sqlite3+文件名----寻找文件地址.header on/off 打开/关闭 数据库中列的名称数据库程序:名字.sql.schema 表名称 查看表名称对应的表的格式(有那几列?每列类型).width 宽度 设置显示时的数据宽度。
2024-03-12 23:17:53
916
原创 网络学习DAY3--TCP并发
events:要监听的事件 POLLIN:是否可读 POLLOUT:是否可写。select监听文件描述符集合中是否有文件描述编程ready状态。成功返回文件描述符集合中的文件描述符个数。fds:监听文件描述符集合数组空间首地址。exceptfds:其余文件描述符集合。nfds:监听文件描述符集合元素个数。writefds:写文件描述符集合。判断文件描述符fd是否仍在集合中。readfds:读文件描述符集合。监听文件描述符集合是否有事件发生。将文件描述符fd从集合中清除。epfd:事件表的文件描述符。
2024-03-11 17:33:39
743
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅