历史上的今天
返回首页

历史上的今天

今天是:2025年10月27日(星期一)

正在发生

2022年10月27日 | 52单片机四种方法实现流水灯

2022-10-27 来源:csdn

流水灯电路分析

流水灯电路图

电源→限流电阻→发光二极管→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码来计算。(重点)

计算示例:

2转16

二进制转十进制

十进制转二进制

十进制转十六进制

十六进制转十进制

IO口的总线程控制方式

单片机IO口控制方式

位控制:对单独的每个IO口进行控制 例:led0=0(我的上一篇文章点亮led用的这种方法)

总线控制:对八个IO口通知进行控制 例:P1=0XFE

下面是通过总线控制点亮单个led对应的十六进制数是什么

总线控制

参考代码

1、简单粗暴法

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


int i = 40000;

while(i--);//延时


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


#include

#define led_time 40000

void main()

{

unsigned int i;

while(1)

{

P1 = 0XFE;//点亮第1个led

i = led_time;

while(i--);//延时(下同)

P1 = 0XFD;//点亮第2个led

i = led_time;

while(i--);

P1 = 0XFB;//点亮第3个led

i = led_time;

while(i--);

P1 = 0XF7;//点亮第4个led

i = led_time;

while(i--);

P1 = 0XEF;//点亮第5个led

i = led_time;

while(i--);

P1 = 0XDF;//点亮第6个led

i = led_time;

while(i--);

P1 = 0XBF;//点亮第7个led

i = led_time;

while(i--);

P1 = 0X7F;//点亮第8个led

i = led_time;

while(i--);

}

}


2、左移法简化程序

#include

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

这个库函数包含了循环左移或者右移的子程序和_nop_延时函数

_nop_();//空操作,延迟一个机器周期时间

机器周期时间长短取决于晶振频率


#include

#include

void main()

{

unsigned int i;

P1 = 0XFE;//点亮第1个led

while(1)

{

i = 40000;

while(i--);//延时

P1 = _crol_(P1,1);//每次循环左移一格

}

}


4、数组法

#include

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--);//延时

}

}


总结

四种方法实现流水灯

第一种:简单粗暴法

特点:思路简单明了,程序过于繁杂。

第二种:左移法

特点:运用了左移的运算,简化了第一种的方法的程序。

第三种:调用库函数

特点:程序上最简便的方法,一条语句实现了流水灯的功能。

第四种:数组法

特点:控制流水灯最灵活的方法,可以实现任意花样流水灯的效果。

推荐阅读

史海拾趣

艾为(AWINIC)公司的发展小趣事

随着艾为电子在技术和产品方面的不断突破,公司开始积极拓展市场。艾为电子的产品不仅覆盖了华为、小米等知名手机厂商,还广泛应用于可穿戴设备、智能便携设备等领域。同时,公司还加大了品牌建设的力度,通过参加行业展会、举办技术研讨会等方式,提高了品牌知名度和影响力。

Baumer Electric Ag公司的发展小趣事

Baumer Electric Ag公司创立于1952年,初期主要专注于微动开关的生产。面对市场竞争的激烈,公司创始人Herbert Baumer凭借其敏锐的市场洞察力和坚定的决心,带领团队不断研发新产品,提升技术水平。1960年,公司成功推出首个程序控制系列,标志着Baumer在电控生产流程监控和控制领域取得了重要突破。

西安航天民芯公司的发展小趣事

除了商业产品的研发外,西安航天民芯还积极承担国家重大科研项目。公司参与了我国工业强基高性能工业DSP芯片等多项国产化项目的研发工作,为提升国家产业核心竞争力做出了贡献。这些项目的成功实施,进一步提升了西安航天民芯在行业内的影响力和地位。

Bipolar Integrated Technology Inc公司的发展小趣事

面对日益严峻的环境问题,BIT积极响应可持续发展的号召。他们开始研发更加环保、节能的电子产品,并推动整个行业向绿色、低碳的方向发展。同时,BIT还加大了对人才培养和技术研发的投入,为公司的未来发展奠定了坚实的基础。

请注意,以上故事仅为虚构示例,旨在展示一个电子行业中公司可能的发展历程。在实际中,每个公司的发展都有其独特的轨迹和经历。

巴丁微公司的发展小趣事

巴丁微积极参与各类电子行业的展会和交流活动,以此展示公司的技术实力和产品优势。在CITE2023第十一届中国电子信息博览会上,巴丁微向大家展示了其在电机驱动芯片在智能锁、气表、水表、个人护理及智能垃圾桶等领域的应用案例,吸引了大量专业人士和行业客户的关注。

通过展会,巴丁微不仅成功展示了公司的最新技术和产品,还加强了与业界同仁的交流与合作,进一步提升了公司在行业内的知名度和影响力。

Formosa MS公司的发展小趣事

巴丁微积极参与各类电子行业的展会和交流活动,以此展示公司的技术实力和产品优势。在CITE2023第十一届中国电子信息博览会上,巴丁微向大家展示了其在电机驱动芯片在智能锁、气表、水表、个人护理及智能垃圾桶等领域的应用案例,吸引了大量专业人士和行业客户的关注。

通过展会,巴丁微不仅成功展示了公司的最新技术和产品,还加强了与业界同仁的交流与合作,进一步提升了公司在行业内的知名度和影响力。

问答坊 | AI 解惑

发光二极管的简易测试

发光二极管的简易测试…

查看全部问答>

高频振荡金属探测器制作

谈起金属探测器,人们就会联想到探雷器,工兵用它来探测掩埋的地雷。金属探测器是一种专门用来探测金属的仪器,除了用于探测有金属外壳或金属部件的地雷之外,还可以用来探测隐蔽在墙壁内的电线、埋在地下的水管和电缆,甚至能够地下探宝,发现埋藏在地下 ...…

查看全部问答>

关于F28027功耗问题

刚用F28027,PCB做好以后,通上电发现电流就有60MA,很奇怪,烧入程序后发现电流有90MA,不知道为什么耗那么多电流,这个正常吗,根据芯片资料,我只给3.3V供电,那个VREGENZ我用电阻下拉到地了,在没烧程序前拿掉电阻,电流就没了,但是烧好程序后那个电阻有无 ...…

查看全部问答>

德州仪器高性能模拟器件在大学生创新设计中的应用与快速选型指南

德州仪器高性能模拟器件在大学生创新设计中的应用与快速选型指南…

查看全部问答>

华为硬件工程师手册..pdf免费!!!

.华为硬件工程师手册..pdf免费!!!…

查看全部问答>

SQLCE3.0问题

1、智能设备平台WINCE5.0、PC编程VS2005 C# 2、我想在WINCE5.0上操作数据库。运行我我自己的应用软件时提示:报错:无法加载 DLL“SQLCEME30.DLL”: 3、我重新编译内核,现在运行wince5.0时,WINGDOWS目录下已经有了所需的7个*。DLL文件,注册表 ...…

查看全部问答>

《AlientekSTM32例程手册》28个实验连载--触摸屏实验+USB鼠标

触摸屏实验 ALIENTEK MINISTM32 实验18 触摸屏实验.rar (1.81 MB) 下载次数: 560 2010-11-9 02:09 触摸屏实验.pdf (621.53 KB) 下载次数: 471 2010-11-9 02:09 USB鼠标 ALIENTEK MINISTM32 实验2 ...…

查看全部问答>

关于循环的效率问题的探讨

在辛昕 的帖子里看到一个问题,就是for循环的效率问题,因此自己查找了一下答案。   一.关于for(;;);和while(1);的循环效率问题。 a)         在keil C51上面,这两个没有差异,是一样的。在IAR F ...…

查看全部问答>

如何在4寸TFT屏幕上显示我需要的菜单同时还要显示视频图像

刚接到一个项目,功能类似可视对讲门铃,要求是在显示视频图像的同时还要按需显示文字信息,请问用mega128加上4寸TFT显示屏和一个cmos摄像头能做到吗?如何才能实现呢?小弟在这方面是空白,希望大家多多帮助···…

查看全部问答>

9B96移植nes模拟器求助!

前两天看到有人发帖移植成功nes模拟器的,小弟也在移植碰到很多问题,有没有人有移植文档啊,参考一下。…

查看全部问答>