- 博客(81)
- 收藏
- 关注
转载 12.6 1602液晶介绍
前边我们讲的流水灯、数码管、LED 点阵这三种都是 LED 设备,这节课我们来学习一下 LCD 显示设备——1602 液晶。那个大大的,平时第一行显示 16 个小黑块,第二行什么都不显示的东西就是 1602 液晶,是不是早就注意到它了呢?大家学习这些电子器件,头脑中要逐渐形成一种意识,不管是我们的单片机,还是74HC138,甚至三极管等等,都是有数据手册的。不管是设计电路还是编写程序,器件的数据...
2019-02-26 13:58:21
881
1
转载 12.5 C语言字符数组和字符指针
常量和符号常量在程序运行过程中,其值不能被改变的量称之为常量。常量分为不同的类型,有整型常量如 1、2、3、100;浮点型常量 3.14、0.56、-4.8;字符型常量„a‟、„b‟、„0‟;字符串常量“a”、“abc”、“1234”、“1234abcd”等。细心的同学会发现,整型和浮点型常量我们直接写的数字,而字符型常量用单引号来表示一个字符,用双引号来表示一个字符串,尤其大家要注意„a‟和...
2019-02-26 11:58:38
252
转载 12.4 C语言指向数组元素的指针
指向数组元素的指针和运算法则所谓指向数组元素的指针,其本质还是变量的指针。因为数组中的每个元素,其实都可以直接看成是一个变量,所以指向数组元素的指针,也就是变量的指针。指向数组元素的指针不难,但很常用。我们用程序来解释会比较直观一些。unsigned char number[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};unsigned char *p;如果...
2019-02-26 09:57:19
1200
转载 12.3 C语言指针的简单示例
前边我们提到了,指针的意义往往在小程序里是体现不出来的,对于简单程序来说,有时候用了指针,反而可能比没用指针还麻烦,但是为了让大家巩固一下指针的用法,我还是写了个使用指针的流水灯程序,目的是让大家从简单程序开始了解指针,当程序复杂的时候不至于手足无措。#include <reg52.h>sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2...
2019-02-26 09:50:14
218
转载 12.2 C语言指针变量的声明
在 C 语言中,变量的地址往往都是编译系统自动分配的,对我们用户来说,我们是不知道某个变量的具体地址的。所以我们定义一个指针变量 p,把普通变量 a 的地址直接送给指针变量 p 就是 p = &a;这样的写法。对于指针变量 p 的定义和初始化,一般有两种方式,这两种方式,初学者很容易混淆,因此这个地方没别的方法,就是死记硬背,记住即可。方法 1:定义时直接进行初始化赋值。unsign...
2019-02-26 09:42:45
157
转载 12.1 C语言变量的地址
要研究指针,我们得先来深入理解内存地址这个概念。打个比方:整个内存就相当于一个拥有很多房间的大楼,每个房间都有房间号,比如从 101、102、103 一直到 NNN,我们可以说这些房间号就是房间的地址。相对应的内存中的每个单元也都有自己的编号,比如从0x00、0x01、0x02 一直到 0xNN,我们同样可以说这些编号就是内存单元的地址。房间里可以住人,对应的内存单元里就可以“住进”变量了:假如一...
2019-02-26 09:35:09
605
转载 11.6 通信实例与ASCII码
我们学习串口通信主要是要实现单片机和电脑之间的信息交互,可以用电脑控制单片机的一些信息,可以把单片机的一些信息状况发给电脑上的软件。下面我们就做一个简单的例程,实现单片机串口调试助手发送的数据,在我们开发板上的数码管上显示出来。#include <reg52.h>sbit ADDR3 = P1^3;sbit ENLED = P1^4;unsigned char code Led...
2019-02-25 17:58:20
1457
2
转载 11.5 UART串口通信的基本应用
通信的三种基本类型常用的通信从传输方向上可以分为单工通信、半双工通信、全双工通信三类。单工通信就是指只允许一方向另外一方传送信息,而另一方不能回传信息。比如电视遥控器、收音机广播等,都是单工通信技术。半双工通信是指数据可以在双方之间相互传播,但是同一时刻只能其中一方发给另外一方,比如我们的对讲机就是典型的半双工。全双工通信就发送数据的同时也能够接收数据,两者同步进行,就如同我们的电话一样,...
2019-02-25 16:13:51
691
转载 11.4 IO口模拟UART串口通信
为了让大家充分理解 UART 串口通信的原理,我们先把 P3.0 和 P3.1 当做 IO 口来进行模拟实际串口通信的过程,原理搞懂后,我们再使用寄存器配置实现串口通信过程。对于 UART 串口波特率,常用的值是 300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200 等速率。IO 口模拟 UART 串行通信程序是一个简单...
2019-02-25 14:41:16
1452
转载 11.3 USB转串口通信
随着技术的发展,工业上还有 RS232 串口通信的大量使用,但是商业技术的应用上,已经慢慢的使用 USB 转 UART 技术取代了 RS232 串口,绝大多数笔记本电脑已经没有串口这个东西了,那我们要实现单片机和电脑之间的通信该怎么办呢?我们只需要在电路上添加一个 USB 转串口芯片,就可以成功实现 USB 通信协议和标准UART 串行通信协议的转换,在我们的开发板上,我们使用的是 CH340T...
2019-02-25 11:13:08
432
转载 11.2 RS232通信接口
在我们的台式电脑上,一般都会有一个 9 针的串行接口,这个串行接口叫做 RS232 接口,它和 UART 通信有关联,但是由于现在笔记本电脑都不带这种 9 针串口了,所以和单片机通信越来越趋向于使用 USB 虚拟的串口,因此这一节的内容作为了解内容,大家知道有这么回事就行了。我们先来认识一下这个标准串口,在物理结构上分为 9 针的和 9 孔的,习惯上我们也称之为公头和母头,如图 11-3 所示。...
2019-02-25 10:48:36
638
转载 11.1 单片机串行通信介绍
通信按照基本类型可以分为并行通信和串行通信。并行通信时数据的各个位同时传送,可以实现字节为单位通信,但是通信线多占用资源多,成本高。比如我们前边用到的 P0 = 0xFE;一次给 P0 的 8 个 IO 口分别赋值,同时进行信号输出,类似于有 8 个车道同时可以过去 8 辆车一样,这种形式就是并行的,我们习惯上还称 P0、P1、P2 和 P3 为 51 单片机的 4 组并行总线。而串行通信,就如...
2019-02-25 10:43:19
369
转载 10.5 单片机长短按键的应用
在单片机系统中应用按键的时候,如果只需要按下一次按键加 1 或减 1,那用第 8 章学到的知识就可以完成了,但如果想连续加很多数字的时候,要一次次按下这个按键确实有点不方便,这时我们会希望一直按住按键,数字就自动持续增加或减小,这就是所谓的长短按键应用。当检测到一个按键产生按下动作后,马上执行一次相应的操作,同时在程序里记录按键按下的持续时间,该时间超过 1 秒后(主要是为了区别短按和长按这两个...
2019-02-22 10:43:51
1140
1
转载 10.4 51单片机RAM区域的划分
前边介绍单片机资源的时候,我们提到过 STC89C52 共有 512 字节的 RAM,是用来保存数据的,比如我们定义的变量都是直接存在 RAM 里边的。但是单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。51 单片机的 RAM 分为两个部分,一块是片内 RAM,一块是片外 RAM。标准 51 ...
2019-02-22 10:40:15
877
转载 10.3 单片机交通灯实例
同学们在学习技术的时候,一定要多动脑筋,遇到问题后,三思而后问。有些时候你考虑的和真理就差一点点了,没有坚持下去,别人告诉你后才恍然大悟。这样得到的结论,可以让你学到知识,但是却培养不了你的逻辑思维能力。不是不能问,而是要在认真思考的基础上再发问。有同学有疑问,板子上只有 8 个流水灯,那如果我要做很多个流水灯一起花样显示怎么办呢?那我们在讲课的时候其实都提到过了,板子上是有 8 个流水灯,还有...
2019-02-22 10:16:24
486
转载 10.2 PWM的原理与控制程序
PWM 在单片机中的应用是非常广泛的,它的基本原理很简单,但往往应用于不同场合上意义也不完全一样,这里我先把基本概念和基本原理给大家介绍一下,后边遇到用的时候起码知道是个什么东西。PWM 是 Pulse Width Modulation 的缩写,它的中文名字是脉冲宽度调制,一种说法是它利用微处理器的数字输出来对模拟电路进行控制的一种有效的技术,其实就是使用数字信号达到一个模拟信号的效果。这是个什...
2019-02-22 10:13:55
341
转载 10.1 单片机数字秒表程序
不同数据类型间的相互转换在 C 语言中,不同数据类型之间是可以混合运算的。当表达式中的数据类型不一致时,首先转换为同一种类型,然后再进行计算。C 语言有两种方法实现类型转换,一是自动类型转换,另外一种是强制类型转换。这块内容是比较繁杂的,因此我们根据常用的编程应用来讲部分相关内容。当不同数据类型之间混合运算的时候,不同类型的数据首先会转换为同一类型,转换的主要原则是:短字节的数据向长字节数据转...
2019-02-21 14:24:32
997
转载 9.9 单片机蜂鸣器
蜂鸣器从结构区分分为压电式蜂鸣器和电磁式蜂鸣器。压电式为压电陶瓷片发音,电流比较小一些,电磁式蜂鸣器为线圈通电震动发音,体积比较小。按照驱动方式分为有源蜂鸣器和无源蜂鸣器。这里的有源和无源不是指电源,而是振荡源。有源蜂鸣器内部带了振荡源,如图 9-8 所示中,给了 BUZZ 引脚一个低电平,蜂鸣器就会直接响。而无源蜂鸣器内部是不带振荡源的,要让他响必须给 500Hz~4.5KHz 之间的脉冲频率...
2019-02-21 13:48:48
476
转载 9.8 实用的电机控制程序
上面我们虽然完成了用中断控制电机转动的程序,但实际上这个程序还是没多少实用价值的,我们不能每次想让它转动的时候都上下电啊,是吧。还有就是它不但能正转还得能反转啊,也就是说不但能转过去,还得能转回来呀。好吧,我们就来做一个实例程序吧,结合第 8 章的按键程序,我们设计这样一个功能程序:按数字键 1~9,控制电机转过 1~9 圈;配合上下键改变转动方向,按向上键后正向转 1~9 圈,向下键则反向转 1...
2019-02-21 12:00:28
1352
转载 9.7 电机控制程序基础
解决了精度问题,让我们再次回到我们的电机控制程序上吧。上面给出的两个例程都不是实用的程序,为什么?因为程序中存在大段的延时,而在延时的时候是什么其它的事都干不了的,想想第二个程序,整整 200 秒什么别的事都干不了,这在实际的控制系统中是绝对不允许的。那么怎么改造一下呢?当然还是用定时中断来完成了,既然每个节拍持续时间是2ms,那我们直接用定时器定时 2ms 来刷新节拍就行了。改造后的程序如下:...
2019-02-21 11:53:49
433
转载 9.6 转动精度与深入分析
转是转了,但是不是感觉有点不太对劲呢?太慢了?别急,咱们继续。根据本章开头讲解的原理,八拍模式时,步进电机转过一圈是需要 64 个节拍,而我们程序中是每个节拍持续 2ms,那么转一圈就应该是 128ms,即 1 秒钟转 7 圈多,可怎么看上去它好像是 7 秒多才转了一圈呢?那么,是时候来了解“永磁式减速步进电机”中这个“减速”的概念了。图 9-7 是这个28BYJ-48 步进电机的拆解图,从图中...
2019-02-21 11:32:27
396
转载 9.5 让电机转起来
再重新看一下上面的步进电机外观图和内部结构图:步进电机一共有 5 根引线,其中红色的是公共端,连接到 5V 电源,接下来的橙、黄、粉、蓝就对应了 A、B、C、D 相;那么如果要导通 A 相绕组,就只需将橙色线接地即可,B 相则黄色接地,依此类推;再根据上述单四拍和八拍工作过程的讲解,可以得出下面的绕组控制顺序表,如表 9-1 所示:我们板子上控制步进电机部分是和板子上的显示控制的 74HC13...
2019-02-21 11:10:11
377
转载 9.4 28BYJ-48步进电机
28BYJ-48 是 4 相永磁式减速步进电机,其外观如图 9-3 所示:图 9-3 步进电机外观我们先来解释“4 相永磁式”的概念,28BYJ-48 的内部结构示意图 9-4 所示。先看里圈,它上面有 6 个齿,分别标注为 0~5,这个叫做转子,顾名思义,它是要转动的,转子的每个齿上都带有永久的磁性,是一块永磁体,这就是“永磁式”的概念。再看外圈,这个就是定子,它是保持不动的,实际上它是...
2019-02-21 11:05:58
6699
2
转载 9.3 电机的分类
电机的分类方式有很多,从用途角度可划分为驱动类电机和控制类电机。直流电机属于驱动类电机,这种电机是将电能转换成机械能,主要应用在电钻、小车轮子、电风扇、洗衣机等设备上。步进电机属于控制类电机,它是将脉冲信号转换成一个转动角度的电机,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,主要应用在自动化仪表、机器人、自动生产流水线、空调扇叶转动等设备。步进电机又分为反应式、永磁式...
2019-02-21 11:04:31
540
转载 9.2 单片机上下拉电阻
前边似乎我们很多次提到了上拉电阻,下拉电阻,具体到底什么样的电阻算是上下拉电阻,上下拉电阻都有何作用呢?上拉电阻就是将不确定的信号通过一个电阻拉到高电平,同时此电阻也起到一个限流作用,下拉就是下拉到低电平。比如我们的 IO 设置为开漏输出高电平或者是高阻态时,默认的电平就是不确定的,外部经一个电阻接到 VCC,也就是上拉电阻,那么相应的引脚就是高电平;经一个电阻到 GND,也就是下拉电阻,那么...
2019-02-20 17:52:39
548
转载 9.1 单片机IO口的结构
上节课我们提到了单片机 IO 口的其中一种“准双向 IO”的内部结构,实际上我们的单片机 IO 口还有另外三种状态,分别是开漏、推挽、高阻态,我们通过图 9-1 来分析下另外这三种状态。图 9-1 单片机 IO 结构示意图前边我们简单介绍“准双向 IO”的时候,我们是用三极管来说明的,出于严谨的态度,我们这里按照实际情况用 MOS 管画图示意。实际上三极管是靠电流导通的,而 MOS 管是靠...
2019-02-20 17:34:58
1264
转载 8.8 简易加法计算器
学到这里,我们已经掌握了一种显示设备和一种输入设备的使用,那么是不是可以来做点综合性的实验了。好吧,那我们就来做一个简易的加法计算器,用程序实现从板子上标有0~9 数字的按键输入相应数字,该数字要实时显示到数码管上,用标有向上箭头的按键代替加号,按下加号后可以再输入一串数字,然后回车键计算加法结果,并同时显示到数码管上。虽然这远不是一个完善的计算器程序,但作为初学者也足够你研究一阵子了。首先,本...
2019-02-18 17:40:05
639
转载 8.7 单片机矩阵按键的扫描
我们讲独立按键扫描的时候,大家已经简单认识了矩阵按键是什么样子了。矩阵按键相当于 4 组每组各 4 个独立按键,一共是 16 个按键。那我们如何区分这些按键呢?想一下我们生活所在的地球,要想确定我们所在的位置,就要借助经纬线,而矩阵按键就是通过行线和列线来确定哪个按键被按下的。那么在程序中我们又如何进行这项操作呢?前边讲过,按键按下通常都会保持 100ms 以上,如果在按键扫描中断中,我们每次让...
2019-02-18 17:35:33
866
转载 8.6 单片机按键消抖
通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动,如图 8-10 所示。图 8-10 按键抖动状态图按键稳定闭合时间长短是由操作人员决定的,通常都会在 100ms 以上,刻意快速按的话能达到 40-50ms 左右,很难再低了。抖动时间是由按键的...
2019-02-18 17:29:06
538
转载 8.5 单片机独立按键的扫描
原理搞清楚了,那么下面我们就先编写一个独立按键的程序,把最基本的功能验证一下。#include <reg52.h>sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;sbit LED9 = P0^7;sbit LED8 = P0^6;sbit...
2019-02-18 17:17:17
811
转载 8.4 单片机按键介绍
独立按键常用的按键电路有两种形式,独立式按键和矩阵式按键,独立式按键比较简单,它们各自与独立的输入线相连接,如图 8-6 所示。图 8-6 独立式按键原理图4 条输入线接到单片机的 IO 口上,当按键 K1 按下时,+5V 通过电阻 R1 然后再通过按键 K1 最终进入 GND 形成一条通路,那么这条线路的全部电压都加到了 R1 这个电阻上,KeyIn1 这个引脚就是个低电平。当松开按键...
2019-02-15 18:00:00
974
转载 8.3 C语言函数的形参和实参
上一个例程中在进行函数调用的时候,不需要任何参数传递,所以函数定义和调用时括号内都是空的,但是更多的时候我们需要在主调函数和被调用函数之间传递参数。在调用一个有参数的函数时,函数名后边括号中的参数叫做实际参数,简称实参。而被调用的函数在进行定义时,括号里的参数叫做形式参数,简称形参。我们用个简单程序例子做说明。unsigned char add(unsigned char x, unsigned...
2019-02-15 17:05:52
357
转载 8.2 C语言函数的调用
在一个程序的编写过程中,随着代码量的增加,如果把所有的语句都写到 main 函数中,一方面程序会显得的比较乱,另外一个方面,当同一个功能需要在不同地方执行时,我们就得再重复写一遍相同的语句。此时,如果把一些零碎的功能单独写成一个函数,在需要它们时只需进行一些简单的函数调用,这样既有助于程序结构的清晰条理,又可以避免大块的代码重复。在实际工程项目中,一个程序通常都是由很多个子程序模块组成的,一个模...
2019-02-15 17:00:15
212
转载 8.1 单片机最小系统解析
电源我们在学习过程中,很多指标都是直接用的概念指标,比如我们说+5V 代表 1,GND 代表 0 等等。但在实际电路中的电压值并不是完全精准的,那这些指标允许范围是什么呢?随着我们所学的内容不断增多,大家要慢慢培养一种阅读数据手册的能力。比如,我们要使用 STC89C52RC 单片机的时候,找到它的数据手册第 11 页,看第二项——工作电压:5.5V~3.4V(5V 单片机),这个地方就说明这...
2019-02-15 12:01:51
565
3
转载 7.6 LED点阵的横向移动
上下移动我们会了,那我们还想左右移动该如何操作呢?方法一、最简单,就是把板子侧过来放,纵向取模就可以完成。这里大家是不是有种头顶冒汗的感觉?我们要做好技术,但是不能沉溺于技术。技术是我们的工具,我们在做开发的时候除了用好这个工具外,也得多拓展自己解决问题的思路,要慢慢培养自己的多角度思维方式。那把板子正过来,左右移动就完不成了吗?当然不是。大家慢慢的学多了就会培养了一种感觉,就是一旦硬件设计...
2019-02-15 11:43:36
761
转载 7.5 LED点阵的纵向移动
点阵的动画显示,说到底就是对多张图片分别进行取模,使用程序算法巧妙的切换图片,多张图片组合起来就成了一段动画了,我们所看到的动画片、游戏等等,它们的基本原理也都是这样的。上一节我们学了如何在点阵上画一个❤形,有时候我们希望这些显示是动起来的,而不是静止的。对于点阵本身已经没有多少的知识点可以介绍了,主要就是编程算法来解决问题了。比如我们现在要让点阵显示一个 I ❤ U 的动画,首先我们要把这个图...
2019-02-15 11:27:06
892
转载 7.4 LED点阵的图形显示
独立的 LED 小灯可以实现流水灯,数码管可以显示多位数字,那点阵 LED 就得来显示一点花样了。我们要显示花样的时候,往往要先做出来一些小图形,这些小图形的数据要转换到我们的程序当中去,这个时候就需要取模软件。给大家介绍一款简单的取模软件,这种取模软件在网上都可以下载到,大家来了解一下如何使用,先看一下操作界面,如图 7-3 所示。图 7-3 字模提取软件界面鼠标点一下“新建图形”,根...
2019-02-15 09:03:39
2343
转载 7.3 LED点阵的介绍
点阵 LED 显示屏作为一种现代电子媒体,具有灵活的显示面积(可任意分割和拼装)、高亮度、长寿命、数字化、实时性等特点,应用非常广泛。前边学了 LED 小灯和 LED 数码管后,学 LED 点阵就要轻松得多了。一个数码管是 8 个LED 组成,同理,一个 88 的点阵就是由 64 个 LED 小灯组成。图 7-1 就是一个点阵 LED 最小单元,即一个 88 的点阵 LED,图 7-2 是它的内...
2019-02-13 11:24:09
630
转载 7.2 C语言变量的存储类别
变量的存储类别分为自动、静态、寄存器和外部这四种。其中后两种我们暂不介绍,主要是自动变量和静态变量这两种。函数中的局部变量,如果不加 static 这个关键字来修饰,都属于自动变量,也叫做动态存储变量。这种存储类别的变量,在调用该函数的时候系统会给他们分配存储空间,在函数调用结束后会自动释放这些存储空间。动态存储变量的关键字是 auto,但是这个关键字是可以省略的,所以我们平时都不用。那么与动...
2019-02-13 11:19:59
107
转载 7.1 C语言变量的作用域
所谓的作用域就是指变量起作用的范围,也是变量的有效范围。变量按他的作用域可以分为局部变量和全局变量。局部变量在一个函数内部声明的变量是内部变量,它只在本函数内有效,在本函数以外是不能使用的,这样的变量就是局部变量。此外,函数的形参也是局部变量,形参我们会在后面再详细解释。比如上节课程序中定义的 unsigned long sec 这个变量,它是定义在 main 函数内部的,所以只能由 mai...
2019-02-13 11:05:48
128
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人