52单片机IO口输出-流水灯

  • 流水灯电路分析
    • 流水灯电路图
    • 74HC573
      • 芯片图
      • 电极特性
      • 真值表
  • 二进制十进制和十六进制转换
    • 进制图表
    • 二进制转十六进制
    • 二进制转十进制
    • 十进制转二进制
    • 十进制转十六进制
    • 十六进制转十进制
  • IO口的总线程控制方式
    • 单片机IO口控制方式
  • 参考代码
    • 1、简单粗暴法
    • 2、左移法简化程序
    • 3、调用库函数法
    • 4、数组法
  • 总结

欢迎你的到来!这里是我的单片机学习笔记,希望我的笔记可以在你学习的道路上对你有所帮助!

流水灯电路分析

流水灯电路图

电源→限流电阻→发光二极管→74HC573输出端→单片机P1组IO口

因为单片机的IO口输出电流非常小,无法直接用IO口驱动发光二极管,所以我们需要用到74HC573这个芯片(可以理解为电流放大的芯片)。

74HC573

芯片图

从图中可以看出74HC573有20个引脚,Vcc和GND是电源的正负极,2 ~ 9的引脚是输入端,12 ~ 19的引脚是输出端

电极特性

①我们的电路板一般的工作电压是5V,根据表中数据可以得知,芯片高电平的输入电压为≥3.15V,低电平输入电压为0~1.35V。我们使用的单片机STC89C52输出的电压为5V或者0V,满足上面的条件。
②再看高低电平的转换时间,Vcc=4.5V对应的是500ns,单片机执行一条指令最少的时间为1.08微秒,大于500纳秒,不需要额外加入延时就能达到芯片的要求。
③工作温度在-45摄氏度和85摄氏度之间。

真值表

L表示低点平,H表示高电平,X表示任意
Q0表示保持上一次的状态,Z表示保持高阻状态

由图可得:
①当输入OE的电平为低电平,LE为高电平时,输出电平的高低与输入电平相同。
②当输入OE的电平为低电平,LE也为低电平时,输出电平保持原来的电平高低。
③当输入OE的电平为高电平时,输出电平为高阻状态。

由于我的OE始终时接地的,所以OE始终为低电平,不会出现上述第③种情况
我把跳线帽接在了1和2(如上图),则LE为高电平,符合上述第①种情况

二进制十进制和十六进制转换

进制图表

表示方法:
二进制:0B 十六进制:0X 十进制数直接表示

示例:
十进制:15➡二进制:0B1111➡十六进制:0X0F

二进制转十六进制

一位十六进制数由四位二进制数表达,通过8421码来计算。(重点)
计算示例:

二进制转十进制

十进制转二进制

十进制转十六进制

十六进制转十进制

IO口的总线程控制方式

单片机IO口控制方式

位控制:对单独的每个IO口进行控制 例:led0=0(我的上一篇文章点亮led用的这种方法)
总线控制:对八个IO口通知进行控制 例:P1=0XFE
下面是通过总线控制点亮单个led对应的十六进制数是什么

参考代码

1、简单粗暴法

上面我有提到单片机运行这一条代码的时间是微秒级别的,而我们人眼对于每11毫秒闪烁一次约83赫兹就已经基本感觉不到了。所以我们要在上面代码的基础上加上延时

int i = 40000;
while(i--);//延时

我们知道程序运行时需要时间,运行一次的时间很短,但我们可以用while循环让它多运行几次,从而达到延时的效果

#include<reg52.h>
#define led_time 40000
void main()
{unsigned int i;while(1){P1 = 0XFE;//点亮第1个ledi = led_time;while(i--);//延时(下同)P1 = 0XFD;//点亮第2个ledi = led_time;while(i--);P1 = 0XFB;//点亮第3个ledi = led_time;while(i--);P1 = 0XF7;//点亮第4个ledi = led_time;while(i--);P1 = 0XEF;//点亮第5个ledi = led_time;while(i--);P1 = 0XDF;//点亮第6个ledi = led_time;while(i--);P1 = 0XBF;//点亮第7个ledi = led_time;while(i--);P1 = 0X7F;//点亮第8个ledi = led_time;while(i--);}
}

2、左移法简化程序

#include<reg52.h>
void main()
{unsigned int X = 0;unsigned int i;while(1){P1 = ~( 0X01 << X );//左移并取反X++;if( X >= 8 ){X = 0;    //左移7次后清零}i = 40000;while(i--);}
}

3、调用库函数法

#include<intrins.h>
这个库函数包含了循环左移或者右移的子程序和_nop_延时函数
_nop_();//空操作,延迟一个机器周期时间
机器周期时间长短取决于晶振频率

#include<reg52.h>
#include<intrins.h>
void main()
{unsigned int i;P1 = 0XFE;//点亮第1个ledwhile(1){i = 40000;while(i--);//延时P1 = _crol_(P1,1);//每次循环左移一格}
}

4、数组法

#include<reg52.h>
unsigned char code LED[8]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};
//点亮led的数组(加code为只读,不可修改,节省内存)
void main()
{unsigned int i;unsigned char j=0;//自加变量while(1){  P1 = LED[j++];if(j>=8)j=0;i = 40000;while(i--);//延时}
}

总结

四种方法实现流水灯
第一种:简单粗暴法
特点:思路简单明了,程序过于繁杂。
第二种:左移法
特点:运用了左移的运算,简化了第一种的方法的程序。
第三种:调用库函数
特点:程序上最简便的方法,一条语句实现了流水灯的功能。
第四种:数组法
特点:控制流水灯最灵活的方法,可以实现任意花样流水灯的效果。

参考内容链接: https://www.bilibili.com/video/BV1Kt411Q7aV?t=6824&p=5.

如有错误,还望斧正!感谢你的观看!

嘿~我亲爱的伙计!我想慷慨大方的你一定不会吝啬给我这个快要秃头的博主点赞的。


欢迎大家关注博主的公众号:小黄的阁楼,里面的学习笔记会和CSDN同步,欢迎前来一起学习!!

52单片机四种方法实现流水灯相关推荐

  1. 单片机-四个按键控制流水灯

    单片机-四个按键控制流水灯 代码 代码 代码片. #include "reg51.h" sbit key1 = P2 ^ 0; sbit key2 = P2 ^ 1; sbit k ...

  2. 【51单片机入门】实现流水灯的原理及四种方法(详细易上手型)

    初学单片机,流水灯的实现是必不可少的,下面将介绍流水灯的原理及使用STC-ISP软件延时计算器生成的延时代码实现流水灯的四种方法,最后介绍如何将延时函数模块化. 目录 一.流水灯原理 二.循环 三.移 ...

  3. ## C51单片机2种方法让8个流水灯依次亮灭

    C51单片机2种方法让8个流水灯依次亮灭 第一种 数组 就是把每次亮灯情况写在数组里面.8个二极管共同接地.比如说0xfe是二进制是11111110,第一个灯灭.然后下一个数是0xfd,对应二进制是1 ...

  4. 51单片机入门学习小结(流水灯与数码管)

    51单片机入门学习小结(流水灯与数码管) 对原理图的分析 以下是我所用单片机的原理图 这块51单片机一共有4个I/O口(意思为input/output),也代表着如果我们后续都要用到这四个的话那么功能 ...

  5. python可以实现哪些功能_Python中实现机器学习功能的四种方法介绍

    本篇文章给大家带来的内容是关于Python中实现机器学习功能的四种方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在本文中,我们将介绍从数据集中选择要素的不同方法; 并使用S ...

  6. 单片机并口应用实验c语言,1单片机并口简单应用(流水灯).docx

    试验1单片机并口简单应用(流水灯) 实验目的 1.了解单片机C语言程序的基本结构 2.了解单片机C语言程序的设计和调试方法 3.掌握顺序控制程序的简单编程 4.熟悉51单片机的端口使用 实验仪器 单片 ...

  7. 获取MAC地址的四种方法(转)

    https://www.cnblogs.com/zlshmily/p/10058560.html zlshmily 在实际的应用系统中,我们往往会需要在程序运行时获取当前机器的网卡的MAC地址,以便作 ...

  8. 四种方法处理“无法停止通用卷设备”

    在使用U盘的时候,用完U盘之后准备安全删除U盘时,大家常常会遇到提示"无法停止'通用卷'设备,请稍候再停止该设备." 这种情况下可以强行拔下U盘吗?当然不可以!这时候如果强行拔除的 ...

  9. 第四次画心形流水灯,并且选封装

    第四次画心形流水灯,并且选封装 一.再次检查自己画的PCB 致命问题 1.电源引入口和PCB的封装不对应 2. 原理图和封装不对应 3. 封装一定要标准命名!!!要不然怎么去根据封装选对应的元器件 二 ...

  10. 福禄克网络:突破百米布线的四种方法及优缺点分析

    综合布线如何突破百米壁垒这是一个常见问题--您需要连接的终端设备距离较近的电信机房(TR)有点远.虽然行业标准将通道长度限制为100米,但连接设备可能需要150米甚至200米的通道长度. 有四种方法可 ...

最新文章

  1. 97. Leetcode 剑指 Offer 60. n个骰子的点数 (动态规划-背包问题)
  2. .NET CORE 多语言实现方案
  3. (十五)深入浅出TCPIP之Hello CDN
  4. Apache Sqoop性能调整
  5. Log4j和Slf4j的比较
  6. 大数据的4v特征及思考_大数据智能下数据脱敏的思考
  7. 方正国际用CMMI的思想管理博客
  8. MagicDraw-序列图
  9. aes sm1 对比_SM1,SM2,SM3,SM4刨析
  10. matlab 彩色图片分解,MATLAB 彩色图像分割
  11. Java 明文转密文
  12. 波形发生器设计c语言文件,波形发生器设计方案.doc
  13. 在word中同时输入上下标设置
  14. 计算机软著发明,时健
  15. 服务器挂硬盘 BIOS,TaiShan服务器通过BIOS格式化硬盘将硬盘中的残留数据擦除操作方法...
  16. Ext中TextField的 label和feild的间距的设定
  17. RabbitMQ3:RabbitMQ的使用方法
  18. 自学Python 45 数字处理函数(三)
  19. ... ...WOW S4套装
  20. 安徽财贸职业技术学院计算机专业老师,安徽财贸职业学院首届“十佳老师”评选结果揭晓...

热门文章

  1. pytorch搭建深度学习网络
  2. 曲终人散,我亦是行人。
  3. IEEE1588v2解析(4)--透明时钟/一步时钟/二步时钟
  4. 华为往事(十四)---第一次去美国
  5. 火狐老是跳出提示“Firefox正在安装组件,以便播放此页面上......”
  6. 解决Chrome中打不开Google搜索结果链接
  7. 大数据论文_02_MapReduce(个人总结)
  8. 未来-YLB-跳蚤市场:跳蚤市场(flea market)
  9. java8使用 Comparator.comparing 进行排序
  10. 计算机cpu风扇不转怎么办,计算机CPU风扇不转怎么办