自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 五、玩51单片机之矩阵按键

因为单片机内部线路连接的问题,我们的P1_5口又连接的步进电机(增大输出电流能力),步进电机另一端又连接了BZ口,而BZ口连接了蜂鸣器,当BZ口以一定频率高低变化,那我们的蜂鸣器就会响。如果我们像独立按键那种接法,一端连GND,另一端连接IO口,那么我们至少需要十六个IO口,但是如果我们如下图这种接法,那么我们只需要用八个IO口,减少了IO口的使用数量。但是但我们用矩阵的方式进行扫描,这时我们只需要1902+1080个IO口,尽管还需要乘以三,但我们只需要九百个IO口,与之前相比,大大减少了IO口的使用。

2024-05-17 21:48:46 786

原创 四、玩51单片机之模块化编程及LCD1602液晶屏

一个容易犯的小错误,当我们在.h 文件中声明未加分号时就在主函数中使用该函数,这时编译的时候主函数会在主函数的开头报错。6、接下来我们来模块化Delay函数,我们只需再创建一个.c 文件来编写Delay函数的代码,再创建一个.h 文件来进行对Delay函数的声明即可。2、3我们将所要完成函数的内容编写到一个新的点C文件中,我们还需要一个头文件来对该函数进行声明,主函数如果需要使用该函数只要进行调用即可,具体的也可以去看我的初识C语言部分。如果我们定义了AAA,那么这里就报错了,里面的代码就被编译了。

2024-05-14 22:10:01 890 2

原创 三、玩51单片机之静态数码管篇

如果我们通过一个芯片进行传输,这样我们的输入数据就作为一种微弱的信号,再通过芯片的电源驱动数码管显示,这样就能使我们数码管以较亮的方式显示。这时,我们也能发现我们无法使数码管同时显示多个数字,也就是说在同一时刻只有一个数码管能够被点亮,即使有多个数码管被点亮,他们显示的数字也是相同的。我们的共阴极(即3、8口)连接的是低电频,这个公共端我们也称他为位选。看下边图右上,这里只不过分成了4个单元,每个单元有一个公共端,下面连接着相同的断码,当我们想让其中某一个数码管显示数字,就将上面那个数码管的位选端置0;

2024-05-11 22:25:17 833 1

原创 二、玩51单片机之独立按键篇

接下来就编写我们的主程序了,其中用if 语句来判断我们的按键是否按下,因为我们想要达到的效果是松开手后,LED灯才会电亮。单片机上电时,所以io 口都默认为高电频,如果按键没有按下,这个io 口就保证是高电频,如果按下了,这个io 口就为低电频了,单片机上有寄存器,我们写一个值他就会送到io口上。在正式编写程序前,我们先来了解独立按键。可以看到每个独立按键与单片机的io 口都连接了,独立按键的按键io 口有点特殊,按键K4接的是P33口,K3接的是P32口,K2接的是P30口,K1接的是P31口。

2024-05-09 22:37:05 1021 1

原创 一、玩51单片机之LED灯篇

当然,你可以自己编写延迟函数,但STC—ISP提供给我们一种更加容易得到延迟函数的方法,如下: 要得到符合我们单片机型号相同的延迟代码,我们需要调节数据,系统频率(即晶振频率)每种单片机的晶振频率可能会不同,所以要调节到符合我们型号的晶振频率(我这里的晶振频率是12MHz)。这样我们的第一个程序就写好了,但是因为单片机一直在启动,所以程序一直从main函数在进去,再出来,P2口也一直在被改变,所以我们需要让程序停下来,不能让他一直跑,于是我们需要把他困起来,我们可以用一个循环来实现这种效果。

2024-05-08 13:52:27 695 1

原创 第三节、函数的声明和定义、函数的递归与迭代

让我们来想下是否能简化问题,我们需要求“abc” 的长度,当第一个字符不等于 ‘\0’,那我们可以将问题简化为 1 + my_strlen("bc") --> 1 + 1 + my_strlen("c") -->1 + 1 + 1 +my_strlen("") --> 1 + 1 + 1 + 0 ,最终,我们就可以实现求字符串的长度。print函数的作用就是将问题简化,我们的目的是打印1234的每一位,但我们发现4是比较容易打印出来的,所以我们可以先按顺序打印123,然后再打印4。

2024-04-30 19:28:26 333

原创 第三节、函数(二)、函数的练习、函数的嵌套

1、函数的参数可以是常量、变量、表达式、以及函数,只要实参所使的函数会返回一个符合我们调用函数的参数类型(用下面Add举例即返回一个int类型的值),那么我们也可以用函数来作为我们的函数参数。这里拿16来举例,16可以被分为2个因子相乘,那么我只需要试除sqrt(16)之前的数,看看是否有数能被16整除,这样我们就大大减少了试除的时间。函数中数组传参实际上传递的是数组首元素的地址,而不是整个数组,所以在函数内部计算一个函数的参数部分的数组的元素个数是不靠谱的。把一个函数的返回值作为另一个函数的参数。

2024-04-22 15:09:08 282

原创 第三节、goto 语句以及函数(一)

strlen()、strcmp()、printf()函数等等,每个人写的代码分格以及是否有bug,我们是未知的,所以为了更高效的写代码,于是就定义了一些库函数。原因在于函数传参出了问题,函数形参只是实参的一份临时拷贝,如果我们想要改变实参的值,我们需要用到指针。这里形参也有自己的一份空间,我们只不过是把实参的值传进去了,但对于形参的交换并没有改变实参,这里面函数执行的内容只是把形参的两个值进行交换了。1、使用goto语句,可随意跳转我们想去的位置,如下代码,会一直打印(hehe)以及(haha)

2024-04-20 22:17:02 215 1

原创 一、选择与循环语句的基本练习(一)

(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。猜数字游戏代码如下,其中用到了time()函数、rand()函数、srand() ,可通过查有关资料来了解函数的作用以及所需头文件。* n ,因此我们可以通过求前一个数字的阶乘后再乘以n ,然后再通过相加就得到了1~n阶乘的和。计算1~n 阶乘的和,我们可以先求出每一个数的阶乘,之后在逐个相加,也就是要加n次,所以外面还需要套一层循环。通过for 循环来求n的阶乘,while循环也是可以的,只不过初始化与调整会麻烦一点。

2024-04-19 22:12:47 190 1

原创 第二节-分支语句和循环语句(二)

在 for 循环中,continue 跳过本次循环后面的部分来到调整位置,而 while 循环跳过本次循环后面的部分来到判断位置。如上图,当数据的初始化、判断、调整在程序中隔的太远,当我们需要修改某一部分时,不方便修改,于是有更好用的循环——for 循环。再讲for 循环前我们来回顾下while 循环,打印从1到10的数字,主体可分为三个部分。while 循环和 for 循环中 continue 的对比。1、在 for 循环内随意的改变循环变量容易让循环失去控制。三、for 语句的循环控制变量。

2024-03-28 21:11:12 163 1

原创 第二节-分支语句和循环语句(一)

解释:18

2024-03-25 09:49:28 124

原创 初识C语言(四)

原因:如果我们存储一个 char 类型的变量,向内存申请1个字节的空间,那么用一个 bit 单元来表示一个地址,那么 char 类型的变量就占了8个地址,空间利用率不高。static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性。一个函数本来是具有外部链接属性的,但是被static修饰的时候,外部链接属性就改变为内部链接属性,其他源文件(.c)就无法使用。当用static修饰局部变量时,局部变量的存储位置就在静态区,而不是在栈区。取地址a的地址为第一个字节空间的地址。

2024-03-20 22:29:55 262

原创 初识C语言(三)

操作符,使逻辑取反,即为假,不可进入if 语句,即打印不了“hehe”。除号两端都是整数的时候,执行的是整数除法,如果两端只要有一个浮点数就执行浮点数的除法。如上图,当表达式一为真,即执行表达式二,将表达式二的结果作为整个式子的结果。如上代码,只要a、b中有一个不为0时,屏幕上就可以打印“hehe”。当表达式一为假,即执行表达式三,将表达式三的结果作为整个式子的结果。如上代码,只有当a和b都不为0时,才能在屏幕上打印“hehe”。注意:取模操作符的两个操作符只能是整数。1、算数操作符中主要讲除法和取模。

2024-03-13 22:16:23 333

原创 初识C语言(二)

对 \130 的解释:\ 后的3个数字为八进制位数字,转化为十进制位为88,所打印出来的值为十进制位对应ASCII 编码的字符。为了打印单个引号或者单个双引号,我们也需要用 \ 来进行转义,防止打印的单个引号或双引号对另一对单引号或者双引号进行配对。在C语言中,const 修饰的a本质上是变量,但不能被直接修改,具有常量的属性。因为arr2数组中没有 \0,所以打印出来的字符串长度为随机值。所以,为了防止这种情况的出现,我们可以用 \ 进行转义。#define 可以定义不同的类型,且定义的值不能被改变。

2024-03-12 14:15:11 315

原创 初学C语言(一)

在我们日常生活中会用到整形,浮点型。例如我们买书花费了5元,买零食花费了30.56元。生活中的有些值是不变的(比如:血型、身份证号等),有些值是可变的(比如:年龄、身高等)注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。main函数是程序的入口,一个程序只能有一个mian函数。但c语言中为何又出现短整型、长整型和双精度浮点型?变量的作用域:在哪里能够使用,哪里就是他的作用域。c语言中把不变的量称为常量,变化的量称为变量。接下来让我们看看不同类型所占空间的大小。4、变量的作用域和生命周期。

2024-03-09 11:08:26 392

空空如也

空空如也

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

TA关注的人

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