当前位置: 首页 > ds >正文

【Proteus仿真】点亮小灯系列仿真——小灯闪烁/流水灯/交通灯

目录

0案例视频效果展示

0.1 例子1:单个LED闪烁

0.2 例子2:流水灯共阳极接法

0.3 例子3:流水灯共阴极极接法

0.4 例子4:花样流水灯

0.5 例子5:交通灯

1基础知识补充

1.1PWM信号

1.1.1基础知识

1.1.2物理本质

1.1.3应用

1.1.4实现方式

2例子1:单个LED灯闪烁仿真

2.1电路原理图

2.1.1电路组成及接线

2.2控制程序

2.2.1示波器效果

2.2.2控制程序步骤

2.2.3源代码

3例子2:流水灯共阳极接法

3.1电路原理图

3.1.1电路组成及接线

3.2控制程序

3.2.1控制程序步骤

3.2.2源代码

4例子3:流水灯共阴极接法

4.1电路原理图

4.1.1电路组成及接线

4.2控制程序

4.2.1控制程序步骤

4.2.2源代码

5例子4:花样流水灯

5.1电路原理图

5.1.1电路组成及接线

5.2控制程序

5.2.1控制程序步骤

5.2.2源代码

6例子5:交通灯

6.1电路原理图

6.1.1电路组成及接线

6.2控制程序

6.2.1控制程序步骤

6.2.2源代码

7 硬件工程师笔试面试相关文章链接


摘要:本文介绍了基于AT89C51单片机的LED控制案例,共包含5个实例:1)单个LED闪烁;2)共阳极流水灯;3)共阴极流水灯;4)花样流水灯;5)交通灯模拟。每个案例详细说明了电路原理图、接线方式和控制程序实现,其中重点讲解了PWM调光原理及其在LED控制中的应用。案例由简至繁,从基础I/O控制到复杂花样显示,最后实现交通灯逻辑控制,展示了单片机在LED控制中的典型应用方法。文中提供了完整的源代码,便于读者理解和实践。

0案例视频效果展示

0.1 例子1:单个LED闪烁

例子1:单个LED灯闪烁

0.2 例子2:流水灯共阳极接法

例子2:流水灯共阳极接法

0.3 例子3:流水灯共阴极极接法

例子3:流水灯共阴极接法

0.4 例子4:花样流水灯

例子4:花样流水灯

0.5 例子5:交通灯

例子5:交通灯

1基础知识补充

1.1PWM信号

1.1.1基础知识

PWM(Pulse Width Modulation,脉冲宽度调制)是一种周期性方波,其频率 f 固定,而高电平持续时间(脉宽)可调。

频率 f1 s 内 PWM 波形重复多少次。

占空比 Duty高电平时间 / 周期,0~100 %

分辨率:占空比最小可调步长(8 bit ⇒ 255 级,16 bit ⇒ 65535 级)。

1.1.2物理本质

用“面积等效”思想把数字信号变成“模拟”效果的万能工具

数字 I/O 只能输出 0/1,但通过高速开关把能量切成小片,在负载上取时间平均,就得到 0~Vcc 之间的任意电平:
V̅ = D × Vhigh

1.1.3应用

LED 调光、RGB 呼吸灯
直流电机调速、舵机角度控制
开关电源(Buck/Boost)、音频 D 类功放
逆变器、太阳能 MPPT 充电
通信:红外 NEC、舵机 1~2 ms 脉宽协议

1.1.4实现方式

软件:
定时器中断 + I/O 翻转(51、AVR 无硬件 PWM 时)
硬件:
专用定时器 PWM 通道(STM32 TIMx, AVR Timer1/3, ESP32 MCPWM)
片上 sigma-delta 调制(ESP8266)
专用 IC(TL494、SG3525、DRV8871)

2例子1:单个LED灯闪烁仿真

实现功能:LED灯固定时间循环亮灭(闪烁)

本质:单片机的某个 I/O 口输出高/低电平,去驱动一个LED

2.1电路原理图

2.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P1.0—>连接共阳极LED小灯/示波器

复位电路

晶振电路

示波器

共阳极LED小灯

2.2控制程序

2.2.1示波器效果

P1.0引脚的PWM信号能够实现闪烁参数的控制

PWM信号周期——>小灯闪烁频率

PWM信号占空比——>小灯闪烁亮度

2.2.2控制程序步骤

库文件与引脚定义

延时函数

主程序控制

2.2.3源代码

//功能:LED按设定的时间间隔闪烁#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}

3例子2:流水灯共阳极接法

实现功能:流水灯从左到右依次闪烁。
本质:单片机的I/O 口输出高/低电平,去驱动一个流水灯。

3.1电路原理图

3.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>连接共阳极LED流水灯

复位电路

晶振电路

共阳极LED流水灯

3.2控制程序

3.2.1控制程序步骤

库文件

延时函数

主程序(循环左移)

_crol_ 是 Keil C51(以及 Keil C166、部分国产 51 编译器)提供的 循环左移” 内联函数(intrinsic),原型位于头文件 <intrins.h> 中。

_cror_函数同上所述
功能:把一个无符号字符或整型变量 整体向左循环移动 n ,移出的最高位会回到最低位。

3.2.2源代码

//功能:接在P0口的8个LED从左到右循环依次点亮,产生流水灯效果#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}

4例子3:流水灯共阴极接法

实现功能:流水灯从左到右依次闪烁后从右到左依次闪烁一直循环。
本质:单片机的I/O 口输出高/低电平,去驱动一个流水灯。

4.1电路原理图

4.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P2.0-P2.7—>连接共阴极LED流水灯

复位电路

晶振电路

共阴极LED流水灯

4.2控制程序

4.2.1控制程序步骤

库文件

延时函数

主程序(循环左移/循环右移)

4.2.2源代码

//功能:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}

5例子4:花样流水灯

实现功能:两排流水灯按照程序设定进行花样闪烁。
本质:单片机的I/O 口输出高/低电平,去驱动一个流水灯。

5.1电路原理图

5.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>连接共阳极LED流水灯

P2.0-P2.7—>连接共阳极LED流水灯

复位电路

晶振电路

两排LED流水灯

5.2控制程序

5.2.1控制程序步骤

库函数

预设的闪烁花样闪烁方案1

预设的闪烁花样闪烁方案1

延时函数

主程序(循环方案1/2)

5.2.2源代码

//按照预设的闪烁花样闪烁#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){       //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}

6例子5:交通灯

实现功能(模仿交通灯亮):东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,一直重复。

本质:单片机的I/O 口输出高/低电平,去驱动一个流水灯。

6.1电路原理图

6.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.5—>连接共阳极交通灯

复位电路

晶振电路

交通灯

6.2控制程序

6.2.1控制程序步骤

库函数与引脚定义

延时函数

交通灯切换函数

主函数

6.2.2源代码

//东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,一直重复。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit RED_A=P0^0;      //东西向灯sbit YELLOW_A=P0^1;sbit GREEN_A=P0^2;sbit RED_B=P0^3;       //南北向灯sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量//延时void DelayMS(uint x){uchar i;while(x--) for(i=0;i<120;i++);}//交通灯切换void Traffic_Light(){switch(Operation_Type){case 1:     //东西向绿灯与南北向红灯亮RED_A=1;YELLOW_A=1;GREEN_A=0;RED_B=0;YELLOW_B=1;GREEN_B=1;DelayMS(2000);Operation_Type=2;break;case 2:     //东西向黄灯闪烁,绿灯关闭DelayMS(300);YELLOW_A=~YELLOW_A;GREEN_A=1;if(++Flash_Count!=10) return; //闪烁5次Flash_Count=0;Operation_Type=3;break;case 3:     //东西向红灯,南北向绿灯亮RED_A=0;YELLOW_A=1;GREEN_A=1;RED_B=1;YELLOW_B=1;GREEN_B=0;DelayMS(2000);Operation_Type=4;break;case 4:     //南北向黄灯闪烁5次DelayMS(300);YELLOW_B=~YELLOW_B;GREEN_B=1;if(++Flash_Count!=10) return;Flash_Count=0;Operation_Type=1;}}//主程序void main(){while(1) Traffic_Light();}

7 硬件工程师笔试面试相关文章链接(部分链接)

更多文章可前往主页观看

1、硬件工程师笔面试真题汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/140742900?spm=1011.2415.3001.5331硬件工程师笔试面试高频考点汇总——(2025版)_电容或者电感对锁存器的影响-CSDN博客https://blog.csdn.net/XU157303764/article/details/1488349782、硬件工程师笔试面试汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/1419048583、硬件工程师笔试面试学习汇总——器件篇目录(2025版本)_【【硬件工程师炼成之路】器件篇(更新中。。。)-CSDN博客https://blog.csdn.net/XU157303764/article/details/142316204

硬件工程师笔记——电子器件汇总大全-CSDN博客https://blog.csdn.net/XU157303764/article/details/147342935?spm=1011.2415.3001.5331Multisim14使用教程详尽版--(2025最新版)-CSDN博客https://blog.csdn.net/XU157303764/article/details/147197406?spm=1011.2415.3001.5331

http://www.xdnf.cn/news/19555.html

相关文章:

  • R3:适用于 .NET 的新一代响应式扩展库,事件订阅流
  • TFS-2002《Fuzzy Clustering With Viewpoints》
  • 嵌入式ARM程序高级调试技能:19.qumu arm elf无法生成coredump
  • 接口测试:如何定位BUG的产生原因
  • nginx-增加VTS模块
  • 数据结构八股
  • 数据结构(C语言篇):(八)栈
  • vscode+EIDE+Clangd环境导入keil C51以及MDK工程
  • shell脚本第六阶段---三剑客之sed
  • C++日志系统:高效异步日志实现解析
  • LeetCode 36. 有效的数独 - 解题思路与实现详解
  • ans.1中的对象标识符OBJECT_IDENTIFIER----OID
  • 【机器学习基础】决策树算法原理及其在无人驾驶技术中的应用
  • Matplotlib:让数据在Python中跳舞的魔法画笔![特殊字符]
  • 基于FPGA的正弦波和及滤波(已通过仿真和上板)
  • 如何确定虚拟机的IP
  • DVWA靶场通关笔记-SQL Injection (Impossible级别)
  • [ Android Audio 篇 ] 高通平台 Android AudioRecord 多通道录音
  • LangChain中Prompt处理机制的技术架构与核心思想分析
  • STL库——stack/queue(类函数学习)
  • 切片语法[::-1]及其可用的类型
  • 基于STM32设计的智能家居控制系统(华为云IOT)_275
  • 2023年IEEE IOTJ SCI1区TOP,动态环境下无人机目标覆盖任务路径规划,深度解析+性能实测
  • KingbaseES JDBC 驱动详解:连接、配置与最佳实践
  • 介绍Ansible和实施Ansible PlayBook
  • pinia状态管理工具
  • Redis核心原理与Java应用实践
  • 洞悉边界:软件测试中边界值分析的艺术与科学
  • OpenJDK 17 解释器分发表与安全点表机制解析
  • 零基础入门AutoSar中的ARXML文件