51单片机+proteus仿真+基本实验学习1(跑马灯、独立按键和数码管)

news2025/2/24 14:15:54

目录

1.实验一跑马灯

1.1代码的生成

1.1.151单片机的延时函数的生成

1.1.251单片机的流水灯代码编写

1.2仿真框图

 2.实验二I/O独立按键

2.1基本概念

2.1.1按键所需的基本知识

2.2代码的生成

2.2.1头文件定义的代码

2.2.2 执行代码

2.3仿真图

​3实验三数码管

3.1基本概念

3.1.1 数码管的简介

 3.1.2 数码管的显示方式

3.2代码生成

3.2.1静态数码管的代码

3.3proteus仿真

3.3.1数码管器件

 3.3.2总体框图


1.实验一跑马灯

1.1代码的生成

1.1.151单片机的延时函数的生成
  • nop函数作用:对于延时很短的,要求在us级的,采用“nop”函数,这个函数相当汇编NOP指令延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时
    1uS。对于延时比较长的,要求在大于10uS,采用C51中的循环语句来实现
  • 左移和右移:

(1)逻辑右移:高位补0,低位溢。注:无论是有符号数还是无符号数都是高位补0,低位溢出

         算数右移:对无符号数来说,高位补0,低位溢出。对有符号数来说,高位补符号位,低位溢出

(2)左移:高位溢出,低位补零

/**
 * @brief 在stc-isp中生成的1ms函数在进行xms循环的后即可以实现自定义的毫秒参数定义
 * @param xms:传送要延迟多少毫秒的参数
 * @retval 无
 */
void Delay_ms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j; 
    _nop_();        //相当于一条空语句,在12MHz的晶振下延时1us
    while(xms)
    {
        i = 12;
        j = 169;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
}



1.1.251单片机的流水灯代码编写
  • 流水灯简单来所就是灯的不停交换的闪烁
/*方案1*/
unsigned char i;
  
 while(1)
    {
        for(i=0;i<8;i++)
        {
            /*将低位为低电平时,为点亮LED灯*/
            P2=~(0x01<<i);       //循环递增右移
            Delay_ms(100);       //100ms的延时
        
        }
    }

/*方案2*/
P2=~(0x01<<0);        //相当于0xFE,向左移动0位,再取反
Delay_ms(100);        //100ms的延时
P2=~(0x01<<1);        //相当于0xFD,向左移动1位,再取反
Delay_ms(100);        //100ms的延时
P2=~(0x01<<2);        //相当于0xFB,向左移动2位,再取反
Delay_ms(100);        //100ms的延时
P2=~(0x01<<3);        //相当于0xF8,向右移动3位,再取反
Delay_ms(100);        //100ms的延时
P2=~(0x01<<4);        //相当于0xEF,向左移动4位,再取反
Delay_ms(100);        //100ms的延时
P2=~(0x01<<5);        //相当于0xDF,向左移动5位,再取反
Delay_ms(100);        //100ms的延时
P2=~(0x01<<6);        //相当于0xBF,向左移动6位,再取反
Delay_ms(100);        //100ms的延时
P2=~(0x01<<7);        //相当于0x8F,向左移动7位,再取反
Delay_ms(100);        //100ms的延时

1.2仿真框图

 2.实验二I/O独立按键

2.1基本概念

2.1.1按键所需的基本知识
  • 独立式键盘:每个键占用一根并口线,键位多时占用并口线多。
  • sbit关键字:sbit关键字用于定义特殊功能寄存器(SFR)中的位。SFR是一种特殊的寄存器,用于控制单片机的输入输出引脚、定时器、串行通信等特殊功能。通过sbit,可以将SFR中的某一位与一个符号名关联起来,从而方便地对其进行操作
  • 按键消抖:按键按下时,由于一端接地,会使按键接IO端变成低电平,相反,当按键被松开时,由于按键接IO端与接地端断开,会变成高电平。值得注意的是,按键是有一定弹性的,按键在按下时,按键接IO端变成低电平需要时间,这段时间按键会发生前沿抖动,同理,松开按键,按键接IO端变成高电平也需要一段时间,这段时间按键会发生后沿抖动,整个抖动需要5ms-10ms时间
  • 软件消抖使用延时函数就是消除按下和松开时的那不稳定的高低电平时间

  • 拨码开关(非常完美)

https://blog.csdn.net/cupid3516501/article/details/121291146

2.2代码的生成

2.2.1头文件定义的代码
#include "intrins.h" 
#include <REGX52.H>  //使用该头文件才能直接控制引脚的某位,例:使用P1_2

sbit key1=P1^7;//将P1的第7位引脚定义成key1变量,相当于P1^7=P1_7
sbit LED=P1^2; //将P1的第2位引脚定义成LED变量,相当于P1^2=P1_2
2.2.2 执行代码
//方案1:对立按键执行代码
if(key1==0) 
{
    Delay_ms(10);  //改延时进行了两次的去抖,即抬起和按下
    if(key1==0)
    {
         LED=~LED;      //按键取反,实现翻转
         while(key1==0); //等待按键抬起,防止执行多次LED幅值操作
    }
}   


方案2:使用拨码开关
unsigned char i;

   
  while(1)
  {
      i=P3;  //P3为全部的8位,对应拨码的8个开关
      P2=i;  //将i的值赋值给P2来控制P2引脚上的LED灯
 }

2.3仿真图

3实验三数码管

3.1基本概念

3.1.1 数码管的简介
  • LED数码(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。
  • 单位数码管的引脚有10个,内部一共有8个小的发光二级管,还有2个引脚是公共端,其实只有一个公共端,但是生产厂家为了封装统一,把这2个引脚连接在了一起。
  • STC89C52开发板上所用的是2个四位的数码管,在其内部公共端是独立的,独立的公共端可以用来控制哪一位数码管点亮,段线是连接在一起的,用来负责显示什么数字,我们常常把公共端叫做”位选线“,连接在一起的线叫做”段选线
  • 位选控制哪一个数码管亮
  • 段选控制数码管显示的内容
  • 按内部发光二极管单元的连接方式分:分为共阳极和共阴极

(1)共阳极数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。

(2)共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮

 3.1.2 数码管的显示方式
  • 静态驱动:也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

​​​​​

  • 动态驱动:是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动   

  

(1)所有数码管的段选线与一组VO接口线并连在一起。
(2)每个数码管的公共端由一根/O线控制。
(3)显示为逐个显示。

3.2代码生成

3.2.1静态数码管的代码
/*1.静态数码管显示*/
unsigned char num[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//由静态阴极数码管表显示数字0~9

  unsigned char i;
    while(1)
    {
        for(i=0;i<10;i++)
        {
            P2=num[i];     //数组赋值给P2显示
            Delay_ms(100); //延时100ms
        }
        
    }
/*2.动态数码管显示*/


3.3proteus仿真

3.3.1数码管器件

  • 7SEG-MPX8-CC是共阴极数码管显示器。显示器的A、B、C、D、E、F、G、DP是数码管显示器的I/O口,是段选信号;显示器的1、2、3、4、5、6、7、8是它的位选信号,即从左到右8位显示字符。段码线控制显示的字型,低电平为有效位表示选中的数码管显示数据,位选线控制该显示位的亮或暗。
  • 7seg-mpx8-ca是共阳极数码管,

 3.3.2总体框图

 

优秀的博客嵌入式硬件入门——74HC138译码器(三个IO实现8选1)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_43772810/article/details/120775594

单片机时钟周期、状态周期、机器周期、指令周期的理解-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_42238876/article/details/89528728

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

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

相关文章

多线程与并发区别

在Java中&#xff0c;多线程与并发是两个既相关又有所区别的概念。我们可以这样来理解它们&#xff1a; 多线程&#xff08;Multi-threading&#xff09;&#xff1a; 多线程是指程序能够同时执行多个线程。每个线程都是一个独立的执行流&#xff0c;它们共享程序的内存空间&a…

Kafka 中消息保留策略详解

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Java笔记 3 ch03_variable

第3章 变量 程序中号的使用 数据类型 整数类型 整型的类型 整型的使用细节IntDetail.java 浮点类型 浮点型的分类 浮点型使用细节FloatDetail.java Java API 文档 字符类型(char) 字符类型使用细节 字符本质探讨 布尔类型&#xff1a;boolean 基本数据类型转换 自动类型转换 自…

【机器学习】迁移学习的实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 迁移学习的实践迁移学习的常见框架1. 特征提取器微调(Fine-tuning the Feature …

✨机器学习笔记(三)—— 多元线性回归、特征缩放、Scikit-Learn

Course1-Week2: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Supervised%20Machine%20Learning%20Regression%20and%20Classification/week2机器学习笔记&#xff08;三&#xff09; 1️⃣多元线性回归及矢量化2️⃣特征缩放&#xff08;Featur…

JSON对接发送短信验证码怎么获取状态报告

现在很多网站的用户注册都会加一个短信验证功能&#xff0c;也就是需要用户填写手机号&#xff0c;然后点击“获取短信验证码”&#xff0c;将收到的短信验证码输入验证通过后方能进行下一步完成注册&#xff0c;现在短信验证码被广泛应用于网站用户注册&#xff0c;还被广泛应…

向量空间与函数空间的类比分析

目录 基与向量空间基本概念向量空间的基向量空间中的表示系数计算步骤二维空间中的向量 向量在不同基下的表示 基与函数空间基本概念常见的函数基 两者之间的关系相同点不同点 基与向量空间 基本概念 向量空间&#xff1a;一个向量空间是由一组遵循特定加法和数乘运算规则的元…

sqlgun新闻管理系统

一&#xff0c;打开主页 1.输入框测试回显点 -1union select 1,2,3# 出现回显点2 2.查看数据库表名 -1union select 1,database(),3# 3.查看表名 -1union select 1,2,group_concat(table_name) from information_schema.tables where table_schemasqlgunnews# 4.查看admin中…

CSS---序号使用css设置,counter-reset、counter-increment、content配合实现备注文案的序号展示

直接上代码&#xff0c;全代码copy即可使用! <template><div class"reminder"><span class"Bold_12_body" style"line-height: 8vw">温馨提示&#xff1a;</span><br /><div class"rule-container"…

NLP-transformer学习:(6)dataset 加载与调用

NLP-transformer学习&#xff1a;&#xff08;6&#xff09;dataset 加载与调用 平常其实也经常进行trainning等等&#xff0c;但是觉得还是觉得要补补基础&#xff0c;所以静下心&#xff0c;搞搞基础联系 本章节基于 NLP-transformer学习&#xff1a;&#xff08;5&#xff0…

【AI-19】Adam为什么会过拟合

Adam 算法可能会导致过拟合的原因主要有以下几点&#xff1a; 过拟合和欠拟合的概念 过拟合&#xff1a; 就好比一个学生在准备考试时&#xff0c;把课本上的每一个例子都背得滚瓜烂熟&#xff0c;但是考试的时候题目稍微变一下&#xff0c;他就不会做了。 在机器学习中&#…

tomcat项目报错org.apache.jasper.JasperException: java.lang.NullPointerException

现象&#xff1a; 访问tomcat项目报错&#xff0c;查看tomcat日志有报错 Sep 12, 2024 5:15:59 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [jsp] in context with path [] threw exception java.lang.NullPointerExce…

【linux006】目录操作命令篇 - pwd 命令

文章目录 1、基本用法2、常见选项3、举例4、注意事项 pwd命令在 Linux 中用于显示当前工作目录的绝对路径。它是一个非常基础且常用的命令&#xff0c;帮助用户确认自己在文件系统中的位置。 1、基本用法 pwd [选项]2、常见选项 -L&#xff08;逻辑路径&#xff09;&#xff…

实现LED流水灯效果 -(附代码和仿真)

流水灯程序分为三个模块&#xff08;顶层&#xff0c;流水灯控制模块&#xff0c;时钟分频模块&#xff09;&#xff1b; 流水灯程序有三个输入&#xff08;时钟&#xff0c;复位信号&#xff0c;控制开关&#xff09;&#xff0c;一个输出&#xff08;16位led灯&#xff09;实…

7-6 列出连通集

输入样例: 8 6 0 7 0 1 2 0 4 1 2 4 3 5输出样例: { 0 1 4 2 7 } { 3 5 } { 6 } { 0 1 2 7 4 } { 3 5 } { 6 } 注: bfs中 queue的 进 出 顺序一样&#xff0c;可以在进队列时输出&#xff0c;也可在出队列时。 代码&#xff1a; #include<iostream> #include<que…

胤娲科技:“斯坦福最新研究揭示:‘AI科学家‘创新能力获百位学者高分认可“

在科技浪潮的汹涌推动下&#xff0c;人工智能&#xff08;AI&#xff09;正以惊人的速度重塑着我们的世界&#xff0c;其影响力已远远超出了最初的设想。 最近&#xff0c;一篇关于自动化AI研究的论文在网络上引起了轩然大波&#xff0c;其核心观点犹如一颗重磅炸弹&#xff0c…

Redis 篇-深入了解基于 Redis 实现消息队列(比较基于 List 实现消息队列、基于 PubSub 发布订阅模型之间的区别)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 消息队列的认识 2.0 基于 List 实现消息队列 2.1 基于 List 实现消息队列的优缺点 3.0 基于 PubSub 实现消息队列 3.1 基于 PubSub 的消息队列优缺点 4.0 基于 St…

2009-2023年上市公司华证esg评级、评分年度数据(含细分项)

2009-2023年上市公司华证esg评级、评分年度数据&#xff08;含细分项&#xff09; 1、时间&#xff1a;2009-2023年 2、来源&#xff1a;整理自wind 3、指标&#xff1a;证券代码、年份、证券简称、评级日期、综合评级、综合得分、E评级、E得分、S评级、S得分、G评级、G得分…

《论负载均衡技术在Web系统中的应用》写作框架,软考高级系统架构设计师

论文真题 负载均衡技术是提升Web系统性能的重要方法。利用负载均衡技术&#xff0c; 可将负载(工作任务) 进行平衡、分摊到多个操作单元上执行&#xff0c; 从而协同完成工作任务&#xff0c; 达到提升Web系统性能的目的。 请围绕“负载均衡技术在Web系统中的应用”论题&…

《计算机组成原理:探索数字世界的基石》

《计算机组成原理&#xff1a;探索数字世界的基石》 在当今数字化的时代&#xff0c;计算机已经成为人们生活和工作中不可或缺的一部分。而要深入理解计算机的运作&#xff0c;就必须掌握计算机组成原理。 计算机组成原理是一门研究计算机硬件系统的学科&#xff0c;它涵盖了…