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 原理图
2.1.2 数据的输出
第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 数据的输入
这段程序和上一段数据输出的程序差不多,重点看以下几个位置
第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 原理图
2.2.2 数据的输出
当控制这种多个led的时候,位带操作就显得比较麻烦,因为光sbit定义就需要8个,所以此时可以直接控制p1寄存器来控制led状态,通过直接将数据写入p1寄存器来控制led状态。
第28行:定义p1寄存器数据,将8位二进制代码转换成16进制数据,由于led接在了p1端口上,所以每个灯的状态如下表所示
led0 led1 led2 led3 led4 led5 led6 led7 16进制数据
0 1 1 1 1 1 1 1 0xfe
1 0 1 1 1 1 1 1 0xfd
1 1 0 1 1 1 1 1 0xfb
1 1 1 0 1 1 1 1 0xf7
1 1 1 1 0 1 1 1 0xef
1 1 1 1 1 0 1 1 0xdf
1 1 1 1 1 1 0 1 0xbf
1 1 1 1 1 1 1 0 0x7f
其中led7为数据最高位,所以数据应该是1111 1110,而不是0111 1111
第32行~第36行:利用for循环,循环8次将数据送入p1寄存器,p1寄存器的数据会直接映射在p1端口上。
2.2.3 数据的输入
数据输入这一部分代码明显少了很多,因为这里面不需要延时函数,所以直接删去了延时函数,在编程时,如果没有用到的函数可以直接注释掉或者删除,因为如果有函数没有调用,编译会报警告,但是并不影响程序执行结果,重点看17行的代码,将p3读取到的数据直接写入p1寄存器中,因为8个按键接在了p3端口上,led接在了p1端口上,所以刚好可以通过按键来实现led的控制。

施耐德电气2023年一举揽获112项重磅荣誉
如何选电容器的大小
“无人时代,智驱未来”,共同探讨无人系统可持续战略发展
AFG31022任意波函数发生器代理商-西安安泰测试Agitek
什么是网络安全
51单片机IO口应用实验
新能源汽车的“隐形护卫”,揭开WAYON维安Auto TVS的神秘面纱
亚马逊鼓励商家清库存却公然售卖“港独”T恤
微软Build 2019开发者大会将于5月6日
AI芯片有所突破,促进人工智能人才培养体系的建成
线性温度传感器的使用常识
深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程
Profinet转CANopen协议转换网关基本应用
易制的家用脉冲治疗仪,Low frequency signal generator
上海 8月11日-12日《案例分析与EMC设计》公开课即将开始!
美国国家半导体温度传感器的广泛应用
关于FPGA实现FIR抽取滤波器的设计的分析
晶振的负载电容和等效电阻的概念、作用以及计算方法
MUX VLAN技术的基本概念和配置举例
苹果为iPad设置具有横向前摄模组的专利?