自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言基础:初识指针(二)

当你不知道指针变量初始化什么时,可以初始化为空指针我们看NULL的定义,可以看出NULL是0被强制转化为Void* 类型的0;实质还是个0;如何避免野指针:1.指针初始化2.小心指针越界3.指针指向空间释放即使置NULL4.避免返回局部变量的地址5.指针使用之前检查有效性。

2024-04-26 11:15:00 315

原创 C语言学习:初识指针(一)

与其给出指针的定义,看完让人模糊不清,不如给出下面几个通俗易懂的要点。指针理解的2个要点:1.指针是内存中一个最小单元的编号,也就是地址2.平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量这两句话引出新的概念,什么是内存呢内存是什么?内存是用于暂时存储CPU中的运算数据,以及与硬盘等外部存储设备交换的数据。可以比作一个房间,用来存储数据的载体。下图所示,我们把内存分成一个个小格子之后,我们给它一个个编号,这个编号就是一个地址,那我们会想两个问题编号是如何产生的呢?

2024-04-21 20:06:46 974

原创 C#基础:类,对象,类成员简介(第四节课)

类是对现实世界事物进行抽象所得到的结果事物包括“物质”(实体)与“运动” (逻辑)建模是一个去伪存真,由表及里的过程。

2024-04-07 22:02:00 1058

原创 C#学习:初始类与名称空间

比如我们有了1000个类,我们把1000个类搁在一起,你想使用其中一个类时,你会发现找起来很麻烦,那这就相当于你有1000本书,你把1000本书堆在屋子里,没有分门别类,那你想再去找一本书时那就比较麻烦了。名称空间就是把类用良好的结构组织在一起。起这样的一个作用。

2024-04-07 16:05:55 903

原创 C语言项目:数组与函数实践:扫雷游戏

1.如果位置不是雷,就显示周围有几个雷2.如果位置是雷,就炸死结束游戏3.把除10个雷之外的所有非雷都找出来,排雷成功,游戏结束。

2024-03-17 13:00:48 627

原创 32单片机基础:输入捕获测频率

在PWM模块中,执行的逻辑是,初始化TIM2的通道1,产生一个PWM波形,输出引脚是PA0,通过SetCompare1的函数,可以调节CCR1寄存器的值,从而控制PWM的占空比。分别读取四个通道的CCR,这四个函数和上面的SetCompare1,2,3,4是对应的,读写的都是CCR寄存器,输出比较模式下,CCR是只写的,要用SetCompare写入,输入捕获模式下,CCR是只读的,要用GetCapture读出,第五步:选择从模式的触发源,触发源选择为TI1FP1,这里调用一个库函数,给一个参数就OK了。

2024-03-07 12:35:29 766

原创 32单片机基础:TIM输入捕获

这样与测周法的操作步骤是一样的,上升沿用于触发输入捕获,CNT用于计数计时,每来一个上升沿,取一下CNT的值,自动存在CCR里,CCR捕获得到的值,就是计数值N,CNT的驱动时钟,就是fc,fc/N就得到了待测信号的频率,另外还有个细节问题,就是每次捕获之后,我们都要把CNT清零一下,这样下次上升沿再捕获时,取出的CNT才是两个上升沿的时间间隔。触发源,就是选择从模式的触发信号源的,触发源选择,选择指定的一个信号,得到TRGI,TRGI去触发从模式,从模式可以选择一项操作来自动执行。这就与中界频率有关了。

2024-03-05 16:29:50 912

原创 通信原理:通信的基本概念(第一节课)

我们先看一个调幅AM无线广播系统我们信号举个例子:可以看出,我们研究的参量不一样,对应的模拟和数字信号也会与我们看上去的不同。

2024-03-03 23:54:14 239

原创 32单片机基础:PWM驱动舵机,直流电机

接线图如上图所示。注意,舵机的5V 线不能接到面包板上的正极,面包板上的正极只有3.3V,是STM32提供的,所以要接到STLINK的5V,我们如何驱动舵机呢?由之前我们介绍原理知道,要输出如下图对应的PWM波形才行,只要你的波形能按照这个规定,准确的输出,就能驱动。

2024-03-03 18:44:10 779

原创 PWM驱动呼吸灯

这些其他外设也是同理,比如我们要是有SPI的MISO引脚,那就是PA6,如果要I2C2的SCL引脚,那就是PB10,这个关系是定死的,不能任意更改。这些函数就是用来单独设置输出比较的极性的,带个N的就是高级定时器里的互补通道的配置,OC4没有互补通道,所以没有OC4N的函数,那这里可以设置极性,在结构体初始化的那个函数也可以设置极性,这两个设置极性的作用是一样的,结构体初始化只不过是用结构体一起初始化的,而在这里是一个单独的函数进行修改的,一般来说,结构体里的参数,都会有一个单独的函数可以进行修改的。

2024-03-03 13:39:30 1377

原创 C#学习:初识各类应用程序

Solution是针对客户需求的总的解决方案,举例:汽车经销商需要一套销售软件,然后能够帮他宣传自己的这个商品然后能够帮他宣传自己的这个商店,让大家了解到他卖的哪些汽车。汽车经销商不懂软件,你懂软件,所以他来找你,你为了解决他的这个需求,那你要向他提供一些完整的这个解决方案,这就是Solution.console lication,控制台,人机交互窗口,这样的程序没有界面,就是靠命令与用户去交互,一般都是有一定计算机操作水平的人来使用的。2.要能就跟着操作,一遍一遍的练习,为的是熟悉手里的工具,培养感觉。

2024-02-29 15:29:46 1347

原创 32单片机基础:TIM输出比较

为了理解方便,置有效电平就是置高电平,置无效电平就是置低电平这三个模式都是当CNT与CRR值相等时,执行操作,这些模式就可以用做波形输出了,比如相等时电平翻转这个模式,这个可以方便的输出一个频率可调,占空比始终为50%的PWM波形,比如你设置CCR为0时,那当CNT每次清零时,就会产生一次CNT =CCR的事件,这就会导致输出电平翻转一次,每更新两次,输出为一个周期。LED不会立马熄灭,而是有一定的惯性,过一段时间才会熄灭,电机也是,当电机断电时,电机的转动不会立马停止,而是有一定的惯性,过一会才停。

2024-02-29 13:45:47 1038

原创 32单片机基础:定时器定时中断&定时器外部时钟

第一步:RCC开启时钟,这个基本上没=每个代码都是第一步,在这里打开时钟后,定时器的基准时钟和整个外设的工作时钟就会同时打开了。下图是定时器框架的所有结构,我们只需要把这里面的每个模块都打通,就可以让定时器工作了,第三步:配置时基单元,包括预分频器,自动重装器,计数模式等,这些参数用结构体配置。第五步:配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级。第二步:选择时基单元的时钟源,对于定时中断,我们就选择内部时钟源。当计数器使能后,计数器开始计数了,当计数器更新时,触发中断。

2024-02-29 00:55:00 1102

原创 32单片机基础:TIM定时中断

定时器就是一个计数器,当这个计数器的输入是一个准确可靠的基准时钟的时候,那它在这个基准时钟进行计数的过程,实际上就是计时的过程。比如在STM32中,定时器的基准时钟一般是主频72MHz,如果我对72MHz计72个数,那就是1MHz也就是1us的时间,如果计72000个数,那就是1KHz也就是1ms的时间。计数器就是用来执行计数定时的一个寄存器,每来一个时钟,计数器加1,预分频器,可以对计数器的时钟进行分频,让这个计数更加灵活。自动重装寄存器就是计数的目标值,就是我们想要计多少个时钟申请中断。

2024-02-27 00:22:01 1114

原创 32单片机基础:旋转编码器计次

如果把一相的下降沿用作触发中断,在中断时刻读取另一相的电平,正转时B就是高电平,反转是B就是低电平,这样就能区别旋转方向了。只不过这样在操作上有一些小瑕疵,比如你正转的时候,由于A相先出现下降沿,所以你刚开始动,就进中断了,而反转时是A相后出现下降沿,所以就是你转到位了,才进行中断。所以打算A,B都触发中断,只有在B相下降沿和A相低电平时,才判断为正转,在A相下降沿和B相为低电平时,才判断为反转。这样保证正转和反转都转到位了,才执行数字加减的操作,同时可以演示两个初始化代码。

2024-02-25 00:44:45 634

原创 32单片机基础:对射式红外传感器计次

接线如下图:在HardWare建立两个文件:如图如何配置外部中断,根据下面图,我们需要把外部中断从GPIO到NVIC这一路出现的外设模块都配置好。把这条信号打通就OK了。1.配置RCC:把我们这里涉及的外设时钟都打开,不打开时钟,外设是没法工作的2.配置GPIO,选择我们的端口为输入模式3.配置AFIO,选择我们用的这一路的GPIO,连接到后面的EXTI4.配置EXTI,选择边沿触发方式,比如上升沿,下降沿,或者双边沿,选择触发响应方式,可以选择中断响应和事件响应,

2024-02-24 23:37:23 1472

原创 32单片机基础:EXTI外部中断

触发信号通过或门后,就兵分两路,上一路是触发中断的,下一路是触发事件的,触发中断会置一个挂起寄存器,这相当于是一个中断标志位,我们可以读取这个寄存器判断是哪一个通道触发的中断如果挂起寄存器置1,它就继续往左走,和中断屏蔽寄存器共同进入一个与门,然后至NVIC中断控制器,这里的与门实际就是开关的作用,因为1与上任意的数x,等于这个任意的数x,0与上任意的数x,都等于0.这就相当于,中断屏蔽器给1,另一个输入就是直接输出,也就是允许中断。画一个斜线写在20,表示的是,就是20根线,代表20个通道。

2024-02-24 12:09:25 1471

原创 32单片机基础:OLED调试工具的使用

根据上述接线图,PB6,PB7为0或1,因为OLED要接0和1, 正好影响到了,不过这个也是没关系的,我们直接不初始化这两个引脚就行了,如果STM32的引脚上电后,如果不初始化,默认是浮空输入模式。这里存的是OLED的字库数据,因为OLED显示屏是不带字库的,想要显示字符图形还要先定义字符的点阵数据,下面就是这些字符的点阵数据,也就是字库。比如让你学习C语言,但是不允许使用printf这个打印函数,那你想一下,C语言是不是根本没法学,同样,给你一个单片机,但是没有任何显示参数的东西,那你也没法学单片机。

2024-02-21 19:13:10 2041

原创 32单片机基础:GPIO输入

两种方式,我们一般用下接的方式。第一个图:注意点。当按键按下,PA0接地,被置为低电平, 但是一旦按键松手,PA0悬空,引脚电压不确定。所以无论怎么读引脚也不知道知否被按下,所以为了解决这个问题,所以必须要求PA0是上拉输入的模式,这样引脚悬空的话,就会被置为高电平,这样我们我们就可以读取PA0的电压就知道按键是否被按下。但是第二个图就不会出现问题,按下时,被置为低电平,松手,由于上拉电阻的作用,被置为高电平。这样引脚就不会出现浮空状态。所以此时PA0可以配置浮空输入和上拉输入。

2024-02-21 17:12:29 1973

原创 32单片机基础:GPIO输出

下面都是理论知识,可以稍微看一看,GPIO的基本结构:GPIO位结构:电路图说明:​​​​​​​​​​​​​​保护二极管:IO 引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于 VDD 时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输

2024-02-20 23:44:56 1213

原创 STM32入门教程:新建工程

可以看出这种方式需要不断查手册来了解每一个寄存器的每一位是用来干啥的,而且这个操作方式也有一个弊端,就是我们除了PC13之外的位都配置了0,这样就会影响到其他端口的原有配置,如果我们要做到只配置PC13而不影响其他位,需要&=和|=的操作,所以寄存器的操作方式,代码简单,不太方便操作。STM32的开发方式有:基于寄存器的方式,基于标准库也就是库函数的方式,基于HAL库的方式,基于寄存器的方式与使用51单片机一样,是程序直接配置寄存器。下面工程就是建好了,但是这里工程文件空空如也,这个工程还是不能直接用的。

2024-02-20 02:58:41 647

原创 51单片机编程应用(C语言):DS1302实时时钟

CE,I/O,SCLK,是我们主要操作的引脚,我们操作这三个引脚把芯片内部的时钟读出来。这个协议就规定,在时钟上升沿的时候,I/O的数据将会被写入,在时钟下降沿,DS1302就会把自己的数据输出。在哪就是我们要操作哪一个寄存器,这么多寄存器,每个寄存器是有地址的,类似于房间的门牌号。写入数据还是读出数据,所以就有了上面的控制寄存器。当然,上面只是RTC的寄存器,还有很多其他的寄存器,只是我们只要操作时钟,这些寄存器就够了。的下降沿就把数据发出来,如果是写,就在每个时钟的上升沿把数据写进去,

2024-02-18 02:21:10 1112

原创 51单片机编程基础(C语言):LED点阵屏

类似于数码管,要用到肉眼视觉效应。扫描,才能把每一个LED都能选中,从而显示我们想要的图形,否则, 只能一次点亮一个LED,

2024-02-14 22:22:10 568

原创 51单片机编程基础(C语言):电子时钟(LED1602作为显示)

本课题设计一个带闹钟定时功能的电子时钟,采用Proteus软件或者单片机开发板实现。通过本实习,进一步加深《C语言程序设计》、《单片机原理及应用》等相关课程中的理论知识,熟练掌握单片机的编程、调试和应用系统的开发。

2024-02-12 21:40:08 1015

原创 51单片机编程应用(C语言):串口通信

串口,全称为串行接口(Serial Port),是一种计算机通信接口,主要用于连接计算机和其他外部设备,如键盘、鼠标、打印机等。串口通过串行通信的方式工作,这意味着数据是以位(bit)为单位依次发送的。这种通信方式的一个显著特点是可以使用简单的双绞线实现双向通信,这在成本降低方面非常有用,尤其适合于长距离通信。尽管串口的速度相对较慢,但它提供了可靠的数据传输和低成本的解决方案,因此在许多应用中仍然被广泛使用。串口通信遵循特定的通信协议,这些协议定义了数据位的位数、波特率、校验位和停止位等参数。

2024-02-09 18:42:56 1055

原创 51单片机编程应用(C语言):篮球比赛计分器

1.LCD1602显示A 000:B 000 右下角显示24的数字,显示一节时间12:00.2.规定矩阵键盘每一位表示的含义s1按下,A队加一分 s2按下,A队加两分 s3按下,A队加三分 s4按下,A队减一分如果加错了,减分修改错误计分,一分一分修改。s5按下,B队加一分 s6按下,B队加两分 s7按下,B队加三分 s8按下,B队减一分如果加错了,减分修改错误计分,一分一分修改。

2024-02-09 02:15:48 1423

原创 51单片机基础(C语言):定时器时钟

2.定时器中断,每隔一秒秒钟加一,过六十,分钟加一,到达24:00:00,变为00:00:00。2.独立按键二:暂停情况,修改时钟个位,个位加一,个位加到10,十位进一,加到24,变为0;3.独立按键三:暂停情况,修改分钟个位,个位加一,个位加到10,十位进一,加到60,都变0;4.独立按键四:暂停情况,修改秒钟个位,个位加一,个位加到10,十位进一,加到60,变为0;1.独立按键一:按下按键,暂停,再按下,启动,(刚开始是暂停的)延迟模块,独立按键模块,定时器中断模块,动态数码管模块。

2024-02-07 19:13:10 2338

原创 51单片机基础:定时器

51单片机通常有两个定时器:定时器 0/1好一点的可能有定时器3。在介绍定时器之前我们先科普下几个知识:1,CPU 时序的有关知识①振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。②状态周期:2 个振荡周期为 1 个状态周期,用 S 表示。振荡周期又称 S 周期或时钟周期。③机器周期:1 个机器周期含 6 个状态周期,12 个振荡周期。④指令周期:完成 1 条指令所占用的全部时间,它以机器周期为单位。

2024-02-06 16:12:09 2861

原创 51单片机编程应用(C语言):矩阵键盘密码锁

下面代码为实现的效果为输入四位密码,显示屏会显示正确或者错误的提醒,而且输入5次密码时会显示full input ,并不再允许输入。我们再把s11设置为确认键,s12为取消键,输入5次后重置键。(输入5次后,不再允许输入),按了这个键重新开始计数。怎么让s10为0呢,矩阵键盘得到的数取余,不仅解决了s10等于0;而且其他数输入也是相对应的数。我们先规定,s1-s10做为输入密码的数字,s1为1..............s10为0。定义一个int (0~65535)类型的变量(password)存密码。

2024-02-04 21:38:19 376

原创 51单片机编程应用(C语言):矩阵键盘

下面写一个相关的实例吧,比如我们介绍过数码管和矩阵按键了,也讲过数码管了,这两个结合一起使用一下。就变成我们熟悉的独立按键了,用独立按键的方式编写即可,检测P13的值是0吗,如果是的,那就s1按下了,检测P12是0吗,如果是的,那s2按下了。按行扫描,看原理图如下,我们P17=0,另外三个置1,那么第一行就选中了,另外三行没有选中。矩阵键盘可以按行扫描也可以按列扫描,扫描原理很简单,变成之前的独立按键,比如。我是合在一起了的,其实都是我写过的每一个模块,自己可以按之前的博文来分开,

2024-02-04 13:54:48 461

原创 51单片机编程应用(C语言):易于模块化的函数大全

模块化编程的常用函数

2024-02-03 23:14:34 289

原创 51单片机编程应用(C语言):模块化编程

当然你每次写项目是都要把Delay.c,Delay.h文件放到跟main.c一样的文件夹中,这样软件就找到了你的Delay函数,不然编译就会报错,之后就可以使用延迟函数。检查时可以右击main.c,一定要在当前项目的main.c 找到你的Delay.c和Delay.h文件。这样我们就把Delay函数模块化好了。或者为了更好的调试代码,也可以把文件放进来。如:右击Source group 1,点如图所示。这个还是没截取完的,改代码是不是很麻烦,比如写其他工程时调用这个函数,又要从新复制粘贴,

2024-02-02 17:00:32 186

原创 C语言基础:头歌练习数组练习

题目分析:a字符串中最小的字符是A(ASCII码表对应的数字大小),b字符串最大的字符是y。题目描述:对于给定的一个字符串,统计其中数字字符出现的次数。题目描述:输入一个字符串,输出反序后的字符串。题目描述:输入两个字符串。串中的最大字符插入到。

2024-02-01 23:25:34 308

原创 51单片机编程应用(C语言):数码管

数码管是由8个LED组成的,其中共阴极数码管是8个LED共用一个阴极;共阳极数码管是8个LED共用一个阳极;每个数码管灯由图中左下角的8段LED构成,分别是ABCDEFG以及DP;正好和1个字节的8位相对应;从图中也可以看出,8段LED中,每段LED对应的引脚图,即每段LED和引脚之间的连接关系,基本是按照就近原则来连接的,比如A段,A段的正极连接3和8引脚(在共阳极数码管的情况下),A段的负极连接7号引脚;以此类推,其他引脚关系都可从图中看出来。值得注意的是,我们开发板上的连接方式是共阴极连接。

2024-02-01 18:24:29 1834

原创 51单片机编程应用(C语言):独立按键

独立按键控制LED亮灭,移位,流水灯等

2024-01-31 13:56:53 2454 1

原创 51单片机编程应用(C语言):LED灯

51单片机实现LED点亮,闪烁,流水灯

2024-01-29 23:48:20 1662

原创 微机原理:计算机中的数字与码制(5,6节课)

数据是信息的载体,是计算机保存和处理的对象。微机中的信息包括数值数据和文字、声音、图像、视频等非数值数据。计算机是典型的数字设备,它只能识别高低电平,分别用“1”和“0”表示,即二进制,因此计算机中的各种信息,其表现形式无论是数值还是非数值,都必须以二进制码的形式来表示。本节主要介绍数制及其转换、二进制数的运算、有符号数的表示与运算、实数的表示、非数值数据的编码等内容(计算机只识别二进制,用户写的10进制都要变成二进制才能被电脑识别)1.1数制及其转换1.数制。

2024-01-29 14:38:22 1031

原创 微机原理:现代微机总线结构(第4节课)

任何I/O设备与CPU都不能直接通信,所以需要一个I/O接口电路,比如显卡电路,连接显示器和CPU之间通信需要显卡电路,显卡就是连接显示器和系统总线的接口电路。音响要通信要声卡

2024-01-28 16:48:53 261

原创 C语言基础:写一个函数,输入一行字符,将此字符串最长的单词输出

写一个函数,输入一行字符,将此字符串最长的单词输出

2024-01-27 23:32:24 467

原创 微机原理:微型计算机系统组成(2,3节课)

早期计算机硬件组成:

2024-01-27 15:13:16 729 1

空空如也

空空如也

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

TA关注的人

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