51单片机I/O口简单应用中常用的头文件​

而且单片机最小系统是在以51单片机为基础上扩展,使其能更方便地运用于测试系统中。以上就是单片机最小系统的组成介绍了。这样能帮助我们更好地理解基于51单片机I/O口的简单应用。

第2课(更新:2021.9.3)

51单片机I/O口C51常用头文件简单应用

​ 通常有reg51.h、reg52.h、math.h、ctype.h、stdio.h、stdlib.h、absacc.h、intrins.h。 但唯一常用的是reg51.h或reg52.h、math.h。 reg51.h和reg52.h定义了51单片机或52单片机的特殊功能寄存器和位寄存器。 这两个头文件中的大部分内容是相同的。 52单片机比51单片机多了一个定时器T2。 因此,reg52.h中只比reg51.h中多了几行来定义T2寄存器的内容。 math.h定义了常见的数学运算,如求绝对值、求平方根、求正弦余弦等。该头文件包含各种数学运算函数,需要时可以直接调用其内部函数。

C51数据类型扩展定义

    单片机内部有很多的特殊功能寄存器,每个寄存器在单片机内部都分配有唯一的地址,一般会根据寄存器功能的不同给寄存器赋予各自的名称,当需要在程序中操作这些特殊功能寄存器时,必须要在程序的最前面将这些名称加以声明,声明的过程实际就是将这个寄存器在内存中的地址编号赋给这个名称,这样编译器在以后的程序中才可认知这些名称所对应的寄存器。

sfr-特殊功能寄存器数据声明,声明一个8位寄存器。

sfr16-16位特殊功能寄存器的数据声明。

sbit——特殊功能位声明,即声明特殊功能寄存器中的某个位。

bit – 位变量声明,定义位变量时可以使用该符号。

例如:sfr SCON=0x98;

SCON是单片机的串口控制寄存器。 该寄存器在微控制器内存中的地址是0x98。 经过这个声明之后,以后想要操作这个控制寄存器的时候,就可以直接操作SCON了。 这时编译器也会明白,实际要操作的是单片机内部0x98地址的寄存器,而SCON也只是在这个地址。 这只是一个代号或名称。 当然,也可以定义为其他名称。

例如:sfr16 T2=0xCC; 声明一个16位特殊功能寄存器,其起始地址为0xCC。

例如:sbit TI =SCON^1;

SCON是一个8位寄存器。 SCON^1代表这个8位寄存器的倒数第二位,最低位为SCON0; SCON7 代表该寄存器的最高位。 该语句的作用是声明SCON寄存器的第二低位为TI。 以后如果想操作SCON寄存器的倒数第二位,可以直接操作TI。

微控制器最小系统

​ 单片机最小系统,或者说最小应用系统,是指由最少的部件组成的、以单片机为核心部件的、具有特定功能的单片机系统。 它是单片机产品开发的核心电路。 而且最小单片机系统是在51单片机的基础上进行扩展的,更方便在测试系统中使用。 下面介绍其组成:

单片机的最小系统主要由电源、复位、振荡电路和扩展部分组成。 最小系统原理图如图1所示。

图1 最小系统电路图

1. 电源模块

对于一个完整的电子设计来说,首要问题是为整个系统提供电源模块。 电源模块的稳定性和可靠性是系统平稳运行的前提和基础。 51单片机虽然历史最悠久,应用范围最广,但在实际使用中,一个典型的问题是,与其他系列单片机相比,51单片机更容易受到干扰,程序跑掉。 克服这种现象出现的一个重要手段就是为单片机系统配置稳定可靠的电源模块。 电源模块电路如图2所示。

图2 电源模块电路图

这个最小系统中的电源模块可以通过计算机的USB端口或外部稳定的5V电源模块供电。 电源指示LED与电源电路相连,图中R11为LED的限流电阻。 S1是电源开关。

2.复位电路

单片机的设置和复位是将电路初始化到某种状态。 一般来说,单片机复位电路的作用就是将一个状态机初始化为空状态,而在单片机内部,复位时,单片机会把一些寄存器和存储设备加载上厂家预设的值。 复位电路图如图3所示。

图3 复位电路图

单片机复位电路的原理是在单片机的复位引脚RST上外接一个电阻和电容,实现上电复位。 当复位电平持续超过两个机器周期时复位有效。 复位电平的持续时间必须大于微控制器的两个机器周期。 具体值可以通过RC电路来计算时间常数。

复位电路由按键复位和上电复位两部分组成。

(1)上电复位:STC89系列单片机为高电平复位。 通常在复位引脚RST到VCC上接一个电容,然后再接一个电阻到GND,从而构成RC充放电电路,保证单片机上电时,RST引脚有足够的电压高电平复位的时间,然后返回低电平进入正常工作状态。 这个电阻和电容的典型值为10K和10uF。

(2)按钮复位:按钮复位就是在复位电容上并联一个开关。 当按下开关时,电容放电,RST也被拉至高电平,并且由于电容的充电,会在一段时间内保持高电平。 重置微控制器。

3、振荡电路

单片机系统中有一个晶体振荡器。 晶振在单片机系统中起着非常重要的作用。 整个过程称为晶体振荡器。 它结合单片机的内部电路,产生单片机所需的时钟频率。 单片机晶振提供的时钟频率越高,单片机的运行速度就越快。 快速,连接到微控制器的所有指令的执行都是基于微控制器的晶振提供的时钟频率。 振荡电路如图4所示。

51单片机I/O口简单应用中常用的头文件​

图4 振荡电路图

在正常工作条件下,普通晶振频率的绝对精度可以达到百万分之五十。 高级精度更高。 有些晶体振荡器还可以通过外部电压在一定范围内调整频率,称为压控振荡器(VCO)。 晶振是利用能够将电能和机械能相互转换的晶体工作在谐振状态,提供稳定、准确的单频振荡。

单片机晶振的作用是为系统提供基本时钟信号。 通常一个系统共用一个晶振,以方便各部分的同步。 一些通信系统对基频和射频使用不同的晶体振荡器,并通过电子调节频率来保持同步。

晶体振荡器通常与锁相环电路结合使用,为系统提供所需的时钟频率。 如果不同的子系统需要不同频率的时钟信号,可以通过连接到同一晶振的不同锁相环来提供。

STC89C51采用11.0592MHz晶振作为振荡源。 由于单片机内部有振荡电路,因此只需外接一个晶振和两个电容即可。 电容容量一般在15pF到50pF之间。

4.扩展部分

4.1LED电路

图5 LED电路图

图5中的主要元件包括1K电阻、LED。 1K电阻是每个LED的限流电阻。 该最小系统提供 8 个独立的 LED,由 P1 端口控制。 它们采用共阳极连接方式,因此只有当P1端口输出低电平时LED才会点亮。

4.2 蜂鸣器电路

图6 蜂鸣器电路图

图6中的蜂鸣器由PNP晶体管驱动和控制。 该蜂鸣器为电磁有源蜂鸣器。 三极管的集电极通过蜂鸣器接5V电源,基极为控制端,发射极接地。 当单片机P2.3输出低电平时,三极管导通,蜂鸣器响。 蜂鸣器是电感元件,也可以在两端接一个二极管,起到漏电的作用。

4.3 系统数码管电路

图7 数码管电路图

如图7所示,多位数码管的“位选择”可以独立控制,而“段选择”连接在一起,可以用于数码管的动态显示和静态显示。 图7所示数码管均为共阴极数码管。 74HC573是存储器。 可以用单片机来控制存储器的存储端,进而控制锁存器的数据输出。 采用分时控制方式,可以方便地控制任意数码管显示任意数字。

4.4 系统键盘电路

图8 独立式和矩阵式键盘电路图

图8中,S2-S3是4个独立的按钮,分别连接到单片机的P3.4-P3.7。

当独立键盘与微控制器连接时,每个按键都需要微控制器的I/O端口。 如果按键较多,会占用过多的I/O端口资源。 为此,引入了矩阵键盘。 图8中,16个按钮排列为4行4列,总共8根线,节省了8个I/O端口。 S6-S21为16位矩阵键盘,分别有8根线连接到单片机的P3口。

4.5A/D电路

图9 A/D电路图

集成A/D转换器的类型有很多种,一般采用顺序比较A/D转换器。 图 9 中的 ADC0804 就是这种类型的单片集成 A/D 转换器。 它采用CMOS工艺20引脚集成芯片,分辨率为8位,转换时间为100us,输入电压范围为0-5V。 该芯片具有三态输出数据锁存器,可以直接连接到数据总线。

4.6D/A电路

图10 D/A电路图

DAC0832是一种非常常用的8位D/A转换器,转换时间为1us,工作电压为+5V~+15V,参考电压为正负10V。 它主要由两个8位寄存器和一个8位D/A转换器组成。 它有一个片上输入数据缓冲器,可以直接与微控制器连接。 DAC0832具有电流输出。 当需要转换为电压输出时,可外接运算放大器。

4.7 系统串行通讯电路

图11 串行通讯电路图

RS232串口电路采用MAX232作为电平转换芯片,可以通过串口线连接到计算机背面的COM口,用于单片机与上位机之间的通信以及与其他串口设备的数据交互。

以上是对单片机最小系统组成的介绍。 由于微控制器经常被用作核心部件,仅了解微控制器的知识是不够的。 因此,应根据具体应用对象的特点,采用具体的硬件结构和软件的组合,才能更好地提高使用效果。

开始制作闪光灯:

日常生活中,有各种各样的闪灯,有的用于娱乐场所,有的用于商店装饰等,还有的起到警示作用。 如舞台灯、汽车转向灯、路口黄闪灯等。在单片机控制系统中,通过I/O口的开关量控制占有很大的比重,如LED的亮灭发光二极管、电机的启停等,都属于单片机的开关量输出控制。 LED发光二极管是几乎所有微控制器系统中使用的显示器件。 常见的发光二极管主要有红、绿、黄等单色发光二极管,也有双色二极管。

​ 这里我们使用Ubuntu下的MCU 8051 IDE进行学习。

首先,新建一个空白工程后,将芯片类型设置为AT89S52。

接下来,创建空白 c 文件后,将以下代码粘贴到该文件中。

`#include "8052.h"`
`#define LSA   P1_5`  			
`#define LSB   P1_6`  			
`#define LSC   P1_7` 
`int main(void)`
`{`
	 `LSA = 0;`
	 `LSB = 0;`
	 `LSC = 0;`
	 `P0=0XAA;` 
`}`

然后点击compile进行编译。

在编译源代码的过程中,我们分析了代码的原理。

51单片机I/O口简单应用中常用的头文件​

​ 这里先附上LED跑灯模组的原理图。 LED又称发光二极管,是一种半导体固体发光器件。 因此,LED的工作是有方向性的。 只有当正极连接到LED的阳极(+),负极连接到LED的负极(-)时才能工作。 如果LED接反了,将无法正常工作。 发光二极管与普通二极管一样,也具有单向导电性。 当对发光二极管施加大于其导通电压的正向电压时,就会产生电流并发出相应颜色的光。 不同颜色的二极管的工作也不同。 一般发光二极管的工作电压为2V。 其工作电流大多为5-20mA,因此如果采用5V电源供电,需要加限流电阻。

单片机的I/O口有“1”和“0”两种状态。 当为“1”时,其引脚输出为高电平,即5V,为“0”时,其引脚输出低电平,即0V。 从上图可以看出,当P1.0为高电平时,发光二极管两端电压相同,即不会产生电流,发光二极管不会发光。 当P1.0为低电平时,5V,P1.0会有5V的电压,电流会流过LED0,导致发光二极管发光。 这样我们就可以通过控制单片机I/O口的高低电平来控制LED的亮灭。

了解了原理之后,我们来分析代码。

`#include "8052.h"`
`#define LSA   P1_5`  			
`#define LSB   P1_6`  			
`#define LSC   P1_7` 
`int main(void)`
`{`
         `while(1)//使程序进入死循环,保证持续运行`
	 `{LSA =0;`
	 `LSB = 0;`
	 `LSC = 0;`
	 `P0=0XAA;//0XAA为十六进制形式,转化为二进制形式就是10101010`
	  `}`
`}`

​ 从硬件连接可以看出:当I/O口为“1”时,LED灭; 当I/O口为“0”时,LED亮; 在物理层面观察到的现象是它关闭、关闭、再关闭。 离开。 程序中我们还给P1.5、P1.6、P1.7赋值。 让LED1灯也亮起来。 这可以帮助我们更好地理解基于51单片机I/O口的简单应用。

​ 这时候程序编译成功后就会出现这样的界面。 如果出现错误,系统会提示错误的具体位置。

然后我们模拟程序(点击START,或者小火箭,小心,一定要先模拟)。

出现如下界面,模拟完成。

运行后,我们需要立即打开LED模拟界面。 并调试到如下界面。

这里,我们首先测试一下P0的任务安排是否成功。

效果不错,接下来测试一下P1的功能。

结束。

先进的:

让一只LED灯不停地闪烁。这里我们先补充一点小知识。
由于我们使用的是仿真软件,而仿真存在一个时间轴的概念,我们的一秒等同于仿真软件里面的一毫秒,这就使得仿真的现象非常慢,即使是在硬件中肉眼难以捕捉的现象也可以在软件中观察到。

 #include "8052.h"
 
#define LSA   P1_5  			
#define LSB   P1_6  			
#define LSC   P1_7 
 
int main(void)
{
         while(1)
	 {LSA =0;
	 LSB = 0;
	 LSC = 0;
	 P0 = 0xff;
	 P0 = 0x00;
	  }
}

由于我们没有在代码中添加延时功能,因此在硬件上很难观察到LED灯的亮灭。 不过就软件模拟而言,嘿嘿嘿。 。 。

#include "8052.h"
#define LSA   P1_5  			
#define LSB   P1_6  			
#define LSC   P1_7 
 
int main(void)
{        
         unsigned int a;
         LSA =0;
	 LSB = 0;
	 LSC = 0;
	 
         while(1)
	 {
	 a=60;
	 while(a--);
	 P0 = 0xff;
	 a=60;
	 while(a--);
	 P0 = 0x00;
	  }
}

不定期延误情况如上所述。 。 。

本文以张继电器老师的单片机课程为骨干,借鉴郭天祥老师的新概念51书的内容作为辅助。 亲自编辑整理,用于知识复习和概念学习。 我的知识浅薄,我在炫耀我的丑陋。 恳请大家批评指正并提出宝贵意见。 (随时间更新!)

单片机

单片机开发10年前,我也是一样,从点亮第一个LED开始

2024-4-25 17:07:39

单片机

33333西安电子科技大学本科毕业设计论文电子信息工程学生姓名fe

2024-4-25 18:08:01

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索