设计一:51单片机流水灯控制

news2025/1/11 20:54:37

目录

一、设计内容

二、硬件电路分析

三、仿真原理图

四、程序设计

五、仿真结果

六、思考题

作者有话说


一、设计内容

       本次设计使用4个按键,当KEY1按下时,P0口所接的发光二极管(D1~D8)以100ms的时间间隔自下至上循环点亮3圈,当KEY2按下时,以200ms的时间间隔自上至下循环点亮3圈;当KEY3按下时,LED自两边至中间循环点亮,循环次数为3圈,时间间隔为1000ms;当KEY4按下时,LED自中间至两边循环点亮,循环次数为3圈,时间间隔为1000ms。平时LED的状态为全部熄灭。

二、硬件电路分析

1、芯片74HC245功能、引脚含义

74HC245功能是做缓冲器,其OE管脚控制输出使能,低电平有效,DIR 管脚控制数据传输方向,若DIR为高电平数据传输方向是为A->B ,否则为B ->A,A0->A7和B0->B7管脚均用于数据的输入/输出,VCC和GND分别为芯片的电源端和接地端。

2、芯片74HC138功能、引脚含义

74HC138功能为3位二进制,译码成8种输出状态,并且一共有8个输出I/OA0->A2为数据输入管脚,Y0->Y7为数据输出管脚,E1、E2、E控制芯片使能,只有当E1=0,E2=0,E3=1时,芯片才能被使能否则芯片不会有任何有效输出VCC和GND分别为芯片的电源端和接地端。

3、P0口作为通用I/O口时需注意

由于P0口的内部上拉电阻较大属于“弱上拉”,因此P0口输出高电平电流很小,而输出低电平时,下拉MOS管导通,灌电流较大,负载能力强。因此在设计中,一般采用低电平驱动方式。

4、点亮发光二极管硬件满足条件

点亮发光二极管需要让三极管导通,即Q3为低电平,即二极管的阴极为低电平。

三、仿真原理图

四、程序设计

/*******************************************************************************
* 函 数 名  				: main
* 函数功能		        : 按键流水灯
* 创作者  				: 薄情书生
* 创作时间  				: 2022.9.15
*******************************************************************************/

#include "reg52.h"         
#include "intrins.h"

/*********类型定义*********/
typedef unsigned char u8;
typedef unsigned int u16;

/*********按键定义*********/
sbit KEY0 = P3^2;
sbit KEY1 = P3^3;
sbit KEY2 = P3^4;
sbit KEY3 = P3^5;

/*********毫秒延时*********/
void delay_ms(u16 ms)
{
	u16 x,y;
	for(x=ms;x>0;x--)
		for(y=114;y>0;y--);
}

/*************38译码器**************/
void SelectHC138(unsigned char channel)
{
   switch(channel)
	 {
		 case 0:
        P1 = (P1 & 0x1f)|0x00;break;    //发光二极管(LEDS0)
   }
}

/*************LED由下至上**************/
void Bottom_Up()
{
	u8 i,j;
	for(j=0;j<3;j++)
	{
		for(i=0,P0 = 0xff;i<8;i++)
		{
			P0 = P0<<1;	 
			delay_ms(200); 
		}
	}
	P0 = 0xff;
}

/*************LED由上至下**************/
void Up_Bottom()
{
	u8 i,j;
	for(j=0;j<3;j++)
	{
		for(i=0,P0 = 0xff;i<8;i++)
		{
			P0 = P0>>1;	 
			delay_ms(100); 
		}
	}
	P0 = 0xff;
}

/*************两边至中间**************/
void LED_sides()
{
	u8 i,j,ri,lf;
	for(j=0;j<3;j++)
  {
		for(i=0,ri=0x7f,lf=0xfe;i<4;i++)
		{
			P0 = ri&lf;
			ri = _cror_(ri,1);
			lf = _crol_(lf,1);
			delay_ms(1000);
		}
  }
	P0 = 0xff;
}

/*************中间至两边**************/
void LED_middle()
{
	u8 i,j,ri,lf;
	for(j=0;j<3;j++)
	{
		for(i=0,ri=0xef,lf=0xf7;i<4;i++)
		{
			P0 = ri&lf;
			ri = _crol_(ri,1);
			lf = _cror_(lf,1);
			delay_ms(1000);
		}
	}
	P0=0xff;
}

/*******************主程序************************/
void main()
{
    SelectHC138(0);
	while(1)
	{
		if(KEY0==0)
		{
			delay_ms(10); 
			if(KEY0==0)
			{
               Up_Bottom();
			}
	    }
		if(KEY1==0)
		{
            delay_ms(10); 
			if(KEY1==0)
			{
               Bottom_Up();
		    }
	    }
		if(KEY2==0)
		{
            delay_ms(10); 
			if(KEY2==0)
		    {
               LED_sides();
			}
			
		}
		if(KEY3==0)
		{
            delay_ms(10); 
			if(KEY3==0)
		    {
                LED_middle();
			}
		}
	}
}

五、仿真结果

KEY1按下时,P0口所接的发光二极管(D1~D8)以100ms的时间间隔自下至上循环点亮3圈。

 KEY2按下时,以200ms的时间间隔自上至下循环点亮3圈。

 KEY3按下时,LED自两边至中间循环点亮,循环次数为3圈,时间间隔为1000ms。

 当KEY4按下时,LED自中间至两边循环点亮,循环次数为3圈,时间间隔为1000ms。

平时LED的状态为全部熄灭。

、思考题

修改程序,实现4个按键控制,自上至下、自下至上、发光二极管闪烁3次,时间间隔为500ms、发光二极管全部点亮3秒后熄灭、结束后恢复到所有LED熄灭的正常状态。请自行编写程序并调试。思考题参考程序将在设计二:51单片机外部中断实验给出。

作者有话说

本专栏为51单片机实战教程,旨在以练促学,帮助小伙伴快速入门51单片机,学习51单片机相应理论知识请自行学习。本次设计涉及的相关理论知识:51单片机IO口控制、独立按键的使用,请自行参考资料学习。

本次设计源程序及仿真源文件百度网盘链接:https://pan.baidu.com/s/17PtMjM5y-YSfdHlqnqAUnA      提取码:4ma5 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/578310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考A计划-试题模拟含答案解析-卷六

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

在线Excel绝配:SpreadJS 16.1.1+GcExcel 6.1.1 Crack

前端&#xff1a;SpreadJS 16.1.1 后端&#xff1a; GcExcel 6.1.1 全能 SpreadJS 16.1.1此版本的产品中包含以下功能和增强功能。 添加了各种输入掩码样式选项。 添加了在保护工作表时设置密码以及在取消保护时验证密码的支持。 增强了组合图以将其显示为仪表图。 添加了…

chatgpt赋能python:Python成为行业中的主力之一

Python成为行业中的主力之一 Python作为一种高级编程语言&#xff0c;已经成为了行业中的主力之一。Python的功能强大&#xff0c;易于学习和使用&#xff0c;而且兼容性良好。在数据科学&#xff0c;人工智能&#xff0c;web开发等领域&#xff0c;Python已经成为了不可或缺的…

chatgpt赋能python:Python转化为数字:Python程序员必须知道的关键技能

Python 转化为数字&#xff1a;Python 程序员必须知道的关键技能 Python 是一种广泛使用的编程语言&#xff0c;不仅适用于数据科学、人工智能和机器学习领域&#xff0c;还可以用于一般的应用开发。在 Python 中&#xff0c;数字是最基本的数据类型之一&#xff0c;因此了解如…

arm3399主板-使用ubuntu20.04搭建LVS-DR(netplan)

目录 一、规划 1、网络拓扑 2、检查 二、配置设备 1、配置LVS 1.配置IP转发 2.清除防火墙 3.安装ipvsadm工具 4.配置VIP 5.netplan与NetworkManager介绍 6.添加LVS规则 1.清除防火墙 2.添加伪装IP 3.安装web服务 4. 修改内核参数&#xff0c;防止IP冲突 3、配置w…

Golang每日一练(leetDay0079) 最大正方形、完全二叉树节点数

目录 221. 最大正方形 Maximal Square &#x1f31f;&#x1f31f; 222. 完全二叉树的节点个数 Count Complete Tree Nodes &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/…

ThingsBoard教程(五五):规则节点解析 REST接口调用 REST API Call Node,发送邮件Send Email Node

REST接口调用 REST API Call Nod Since TB Version 2.0 调用外部 REST 服务器的 REST API。 配置: 端点 URL 模式 - 可以是静态字符串,也可以是使用消息元数据属性解析的模式。例如 ${deviceType}。请求方法 - GET、POST、PUT、DELETE头 - 请求头,头或值可以是静态字符串…

chatgpt赋能python:Python转换为日期:完整解析

Python 转换为日期&#xff1a;完整解析 日期和时间是计算机编程中非常重要的一部分&#xff0c;可以用来记录和管理各种信息&#xff0c;例如日程安排、用户活动、数据更新等等。在 Python 中&#xff0c;我们可以使用 datetime 模块来轻松地进行日期和时间的操作和转换。 什…

JavaScript之DOM案例练习

1. 循环精灵图 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible" …

SpringCloud Alibaba Sentinel

SpringCloud Alibaba Sentinel Sentinel 基础 官网 1 Github: https://github.com/alibaba/Sentinel 2 快速开始: https://sentinelguard.io/zh-cn/docs/quick-start.html 3 中文: https://github.com/alibaba/Sentinel/wiki/介绍 4 使用手册: https://spring-cloud-alib…

chatgpt赋能python:Python除数为0处理详解

Python除数为0处理详解 在Python编程中&#xff0c;最常见的问题之一是除数为0的错误。当我们尝试将一个数除以0时&#xff0c;Python会抛出ZeroDivisionError错误&#xff0c;这是一个常见的运行时错误。 为什么会发生除数为0的错误&#xff1f; 当我们尝试将一个数除以0时…

如何在华为OD机试中获得满分?Java实现【MVP争夺战】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…

1、Ovirt 开源虚拟化平台安装

ovirt官网 一、资源规划介绍 1.1、服务规划 ovirt版本 ovirt engine 4.3.10 ovirt node 4.3.10 ovirt.node01.opsvv.com 负责托管引擎服务 1.2、资源划分 1.2.1、节点划分 密码均为&#xff1a;12345678 Node02无法开启虚拟化&#xff0c;只演示加入集群节点使用 节点…

软考A计划-试题模拟含答案解析-卷四

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

Netty概述及Hello word入门

目录 概述 Netty是什么 Netty的地位 Netty的优势 HelloWord入门程序 目标 pom依赖 服务器端 客户端 运行结果 入门把握理解 概述 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable hi…

VITS语音生成模型详解及中文语音生成训练

1 VITS模型介绍 VITS&#xff08;Variational Inference with adversarial learning for end-to-end Text-to-Speech&#xff09;是一种结合变分推理&#xff08;variational inference&#xff09;、标准化流&#xff08;normalizing flows&#xff09;和对抗训练的高表现力语…

基于技能的工程方法及其在I4.0 中的应用

工业4.0 组件描述了两种架构&#xff0c;一种是面向服务的紧耦合分层系统架构&#xff0c;另一种基于协议的同层架构&#xff08;peer-to-peer&#xff09;。传统的工业自动化系统几乎都是分层架构。例如现场设备&#xff08;PLC&#xff09;将数据传送到控制中心&#xff0c;S…

如何在华为OD机试中获得满分?Java实现【不爱施肥的小布】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1、题目描述2、输入描述3、输出描述…

第6章 Constant, Static and Name Space

Const • declares a variable to have a constant value const int x 123; x 27; // illegal! x; // illegal! int y x; // Ok, copy const to non-const y x; // Ok, same thing const int z y; // ok, const is safer 变量variable 常量 constant &#x…

chatgpt赋能python:Python词性标注:一个重要的NLP应用

Python 词性标注&#xff1a;一个重要的 NLP 应用 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是 AI 领域中的重要分支之一&#xff0c;其可以帮助机器理解和处理人类语言。在 NLP 任务中&#xff0c;词性标注&#xff08;Part-of-Speec…