《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 其他 > 教程:51单片机IO口应用实验

教程:51单片机IO口应用实验

2023-01-31
来源:滑小稽笔记
关键词: 51单片机 寄存器 IO口

  IO(Input/Output),即输入输出端口,就是单片机的IO口,STC89C52RC单片机具有4组IO口,P0~P3,每一组IO都有8个IO口,且8个IO口都可以单独读写,也就是说STC89C52RC单片机具备32个可以单独读写的IO口,这些端口可以通过程序来控制输出高低电平,高电平5V,低电平0V,也可以通过程序读取端口输入的电平状态,IO端口的操作有两种方式,一种是位带操作,这种操作是单独控制其中某一个IO端口,还有一种是总线式操作,就是可以同时给P0~P3这4组IO中的其中一组进行赋值,同时令8个IO口同时输出或者输入信号。

  2.1 位带操作

  2.1.1 原理图

251.JPG

  2.1.2 数据的输出

250.JPG

  第13行:利用sbit关键字定义一个端口名称,把P1.0端口定义成LED,之后的开发中,所有的端口定义都需要用到sbit关键字,这个格式需要牢记

  第22行~第27行:延时函数,通过2级循环完成的延时功能,由于单片机外部时钟是12MHz,所以程序执行起来会非常快,如果没有延时函数,在这个实验中,就无法实现LED的闪烁功能(因为人眼并没有那么快)

  第35行:控制P1.0输出低电平,即0V,由于硬件电路LED的正极通过一个电阻接到了5V上,根据二极管的单向导电性,当负极为0V时,LED就会发光,当负极为5V时,LED就会熄灭,电阻起到了限制电流的作用,防止电流过大烧毁LED

  第36行:调用延时函数,设置延时500ms

  第37行:控制P1.0输出高电平,即5V。

  注:主循环里面的不停地将P1.0端口设置成0V和5V的过程就可以控制LED不停的亮灭,其中延时函数就是为了让人眼能够看到这个过程,如果没有延时函数,就会因为程序执行的过快导致无法看到闪烁的效果。

  2.1.3 数据的输入

249.JPG

  这段程序和上一段数据输出的程序差不多,重点看以下几个位置

  第14行:利用关键字sbit定义端口P1.7在程序中的名称为KEY

  第35行~第43行:检测按键是否按下的流程

  (1)检测到P1.7端口为低电平,即0V,因为按键的一端接单片机P1.7端口,另一端接在了GND上,所以按下后端口被强制拉到0V,抬起后,单片机P1.7端口到恢复5V

  (2)延时一段时间(延时去抖动):延时的原因是由于机械按键按下后不是严格的按下,而是会有一段电平不稳定的时间,所以需要用程序将这段时间的电平忽略掉

  (3)经过10ms后再一次检测到P1.7位低电平,这时,才能够确定按键的确按下了,此时P1.0输出低电平点亮LED

  第44行~第47行:按键没有按下时,P1.7是默认的高电平,此时控制P1.0输出高电平

  2.2 总线操作

  2.2.1 原理图

248.JPG

  2.2.2 数据的输出

247.JPG

  当控制这种多个LED的时候,位带操作就显得比较麻烦,因为光sbit定义就需要8个,所以此时可以直接控制P1寄存器来控制LED状态,通过直接将数据写入P1寄存器来控制LED状态。

  第28行:定义P1寄存器数据,将8位二进制代码转换成16进制数据,由于LED接在了P1端口上,所以每个灯的状态如下表所示

246.JPG

  其中LED7为数据最高位,所以数据应该是1111 1110,而不是0111 1111

  第32行~第36行:利用for循环,循环8次将数据送入P1寄存器,P1寄存器的数据会直接映射在P1端口上。

  2.2.3 数据的输入

245.JPG

  数据输入这一部分代码明显少了很多,因为这里面不需要延时函数,所以直接删去了延时函数,在编程时,如果没有用到的函数可以直接注释掉或者删除,因为如果有函数没有调用,编译会报警告,但是并不影响程序执行结果,重点看17行的代码,将P3读取到的数据直接写入P1寄存器中,因为8个按键接在了P3端口上,LED接在了P1端口上,所以刚好可以通过按键来实现LED的控制。



更多信息可以来这里获取==>>电子技术应用-AET<<

mmexport1621241704608.jpg

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。