2025年51单片机设计100例(51单片机设计方案)

51单片机设计100例(51单片机设计方案)单片机通过配置寄存器来控制内部线路的连接 内部线路的不同连接方式实现不同电路 不同电路完成不同的功能 2 1 点亮一个 LED P4 17 47 LED 灯点亮原理 LED 灯具有单向导电性 只有电流正向通过时才会点亮 图中 正极都给定了恒定高电平 当负极这边为低电平的时候 对应的 LED 灯才会有正向电流通过 灯才会亮 即 只要 CPU 通过控制负极 使其输出低电平的时候 LED 灯就会亮

大家好,我是讯享网,很高兴认识大家。



单片机通过配置寄存器来控制内部线路的连接。内部线路的不同连接方式实现不同电路,不同电路完成不同的功能。

[2-1] 点亮一个LED P4 - 17:47 LED灯点亮原理

LED灯具有单向导电性,只有电流正向通过时才会点亮。

图中,正极都给定了恒定高电平,当负极这边为低电平的时候,对应的LED灯才会有正向电流通过,灯才会亮。

即,只要CPU通过控制负极,使其输出低电平的时候,LED灯就会亮。

[3-1] 独立按键控制LED亮灭 P7 - 06:30 检测按键原理

按键的两边是两个连续的电路。当按下时,按键的金属圆片会导通两个电路。

在开发板原理图中,一个独立按键的一方电路导入GND,另一边电路接到IO口上。

单片机上电时所有IO口默认都是高电平,如果按键按下,IO口就会变成低电平。

寄存器会检测IO口的电平,从而知道按键是否按下。

[3-2] 独立按键控制LED状态 P8 - 01:26 按键的软件防抖

当按键按下时,可能会存在不稳定的抖动。可以通过硬件或者软件防抖。

软件防抖主要是延迟检测。按键按下时,先延迟到不再抖动(比如delay20ms),再检测按键状态,如果状态还是按下,就认为按键真正的状态是按下了。

检测按键一次按下和松开:

检测按键按下(如p3_1==0),在这个状态下循环,直到检测到按键松开(如p3_1!=0)

这样就可以视为一次按键按下再松开的过程。然后再在后面添加逻辑操作。

[3-4] 独立按键控制LED移位 P10 - 13:54 按键控制LED左右移动

通过两个按键,对应LED的八位地址进行修改。这里使用循环左移。使用LEDNum计数,对地址计算需要左移几位。

注意:这里按键左右移动都是循环左移,因为本质上是对P2_0 (0x01地址)移动。

注意判断边界值。

[4-1] 静态数码管显示 P11 - 04:01 数码管驱动原理

一个数字有8个数码管,A~G和DP,有十个引脚1~10。有两种连接方式,共阴极连接(右上)和共阳极连接(右下)。

    显示一个“6”数字,需要把A,C,D,E,F,G编号的数码管点亮。

    以共阴极连接为例:

    位选:选中公共端,阴极给0接低电平

    段选:段选阳极7,4,2,1,9,10引脚给高电平

    共阳极同理类推。

      和1位数字显示原理基本一致,区别在于有多个公共端。

      显示数字时,先位选公共端,然后段选需要点亮的数码管。

        为了节省引脚,各个数字之间的数码管共用引脚,所以同一时刻,只能显示一个数字。

        显示多个数字的原理,利用的是数字高速刷新,人眼的视觉暂留会让数字看起来像是同时显示了多位数字。

          89C52单片机的数码管,有8个公共阴极端。

          138译码器有三个输入端,C是高位,A是低位。可表示2^3=8种状态,对应数码管8个公共端。

          用138译码器可以实现选中任意一个公共端口,节省了IO口。

          如 CBA=001,选中的是Y1,Y1有效,给低电平,其他给高电平。

          总结:如果让某一位显示数字


          讯享网

          通过138译码器,位选选中公共端口(LED1~7),使其输出0。然后给予P0口段码的数据。【位选,段选】

            动态数码管显示实际会出现位置错乱问题,原因是:

            位选 段选 位选 段选 位选 段选 …

            当显示完一个数字重新位选时,因为上一次显示的数字对应的数码管有值,会造成下一个数字也会短暂显示上一个数字,造成显示错乱问题。

            解决方法:显示后把数码管的值清零,再显示下一个值。

            [5-1] 模块化编程 P13 - 04:53 模块化编程

            将各个模块的代码放到不同.c文件中,通过.h文件提供声明,其他.c文件只需要#include "xx.h" 文件即可。

            使用 # 的作用是在编译开始前,对代码进行预编译。

            如 #ifndef XX_H 意思是如果没有定义 XX_H

            配合 #define XX_H 可以实现如果没有定义某个文件,就让这个文件参与编译。

            这是头文件中常见的一种写法,被称为"头文件保护"或"防止重复包含"。

            它的作用是防止同一个头文件被多次包含导致的重定义错误。

            [5-2] LCD1602调试工具 P14 - 00:12

            [6-1] 矩阵键盘 P15 - 00:23

            为了减少IO口的使用,将按键排列成矩阵形式,然后扫描。

              每一行或者每一列的按键共用行、列线。可按行或者按列进行扫描来获取键码。

              以按列扫描为例:

              第一列按键共用P13引脚,每一列的按键和之前的独立按键电路类似。

              对于第一列来说,给P13低电平,看做是公共的GND。第一列的按钮按下,对应的P17~P14引脚的电平就会变为低电平,从而判断是哪一个按钮按下。

              PS:单片机电路图上没有特别标注GND等地线的话,默认接高电平

              [7-1] 定时器 P17 - 00:12 定时器驱动原理

              定时器&中断系统

              小讯
              上一篇 2025-06-01 19:21
              下一篇 2025-06-01 20:22

              相关推荐

              版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
              如需转载请保留出处:https://51itzy.com/kjqy/156581.html