目录

硬件驱动51单片机LED动态数码管

硬件驱动——51单片机、LED、动态数码管


一、51单片机


1.寄存器

https://i-blog.csdnimg.cn/direct/1dd6cf1f600e40e893e02c5f220d6f21.png

51单片机共40个引脚,其中P0,P1,P2,P3是四个有8引脚的 寄存器 ,寄存器可视为 全局变量 ,寄存器在 keil 中以 特殊宏 的形式储存,例如:

https://i-blog.csdnimg.cn/direct/87b4d1c89dc548aabaeb57793dfb6f9f.png

用C语言规范写法,需将寄存器地址的值 强转为指针 ,然后访问修改指针所指向内容,因此上图中的寄存器代码等价于:

https://i-blog.csdnimg.cn/direct/75fe9b0b331e435a970e351fd65e7a1a.png

二、LED点灯


1.原理

单片机通电后,51单片机的40个引脚均为高电平(即值均为1),其中引脚2128为 寄存器P2 的八个引脚P20P27,负责控制LED模块的 8个发光二极管

https://i-blog.csdnimg.cn/direct/79ea4de49b724dc5bcdfe433dd93cbff.png

若将P20置为低电平(即值改为0),则发光二极管D1两端产生电势差,从而产生电流,二极管导通发光。方法为用 位运算 的方式将寄存器P2的值由1111 1111改为1111 1110,例:

    P2 &= ~(1 << 0);
    // (1 << 0)即二进制数  0000 0001
    //~(1 << 0)按位取反后为1111 1110
    //&=即与等于,执行置0操作

2.封装函数

封装一个延时函数

https://i-blog.csdnimg.cn/direct/224a360467214680b80b8eebb07791ad.png

封装一系列LED相关函数

https://i-blog.csdnimg.cn/direct/e3c22a473eb54630943abe3e5a8db8ac.png

3.顺序点灯

让灯顺序点亮 ,再循环亮回来

https://i-blog.csdnimg.cn/direct/2b478f1616e0490ab8b80738c74cffe8.png

4.特定位点灯

令能被2整除的位数上的灯亮,再让能被3整除的灯亮,交替闪烁

https://i-blog.csdnimg.cn/direct/2bedf5400ed745e68574c3b7f6b0115b.png

三、动态数码管


1.原理

单片机通电后,51单片机的40个引脚均为高电平(即值均为1),其中引脚3932为 寄存器P0 的八个引脚P00P07,负责控制 数码管a,b,c,d,e,f,g,dp 的亮灭。

另外引脚14为 寄存器P1 的前四个引脚P10P13,负责控制 4位数码管模块 的亮灭。

https://i-blog.csdnimg.cn/direct/2b665d40e4264680825005b4573aea18.png

2.封装函数

封装一系列数码管相关函数

https://i-blog.csdnimg.cn/direct/abb7bfec06064dea8e293acb81ee9a10.png

3.0~9跳变

从指定数码管由0~9进行跳变

https://i-blog.csdnimg.cn/direct/d1aada3410c343259c76ef61f65c63cf.png

4.顺序移位0~9跳变

先第0位数码管从0跳变到9,再第1位数码管从0跳变到9,直到第3位数码管跳变完再循环至第0位数管

https://i-blog.csdnimg.cn/direct/fe46ce7c393442aa9b58ceb009e0fccc.png