首页 > 编程语言 >【自学嵌入式(5)环形电阻、数码管、随机数字程序】

【自学嵌入式(5)环形电阻、数码管、随机数字程序】

时间:2025-01-19 12:28:30浏览次数:3  
标签:电阻 引脚 digitalWrite 环形 嵌入式 HIGH 数码管 自学

环形电阻、数码管、随机数字程序

本篇文章将会手动搭建一个电路,使用到的硬件主要有面包板一个、若干杜邦线、UNO开发板一个、按键开关一个、一个200-500欧姆的电阻、共阴极数码管一个
由于对即将要使用的环形电阻和共阴极数码管的结构不太清晰,就去查了一下,具体如正文所示。

环形电阻

概念

环形电阻是一种环形结构的电阻器,它通常是将电阻材料以环形的方式绕制在一个绝缘的环形骨架上,两端引出电极,形成一个具有一定电阻值的电子元件。它在一些需要高精度、高稳定性或特定的功率处理能力的情况下能起到很大的作用。

特点

① 高精度:环形电阻的误差范围比较小,可以用于精密测量仪器、传感器校准电路等仪器。
② 高稳定性:环形电阻在不同的环境条件下能够保持较为稳定的电阻特性,因此它们可以长期在各种复杂环境中稳定工作,减少因环境因素导致的电阻值变化而引起的电路性能波动。
③ 功率承受能力高:环形电阻可以设计为能够承受相对较高的功率,不会因为电流通过时产生的热量而迅速失效或电阻值发生较大偏差。在电源电路、功率放大器等大电流、高功率的场景很有优势。
③ 低电感:环形电阻的电感特性通常较低,相比于一些长条形或其他形状的电阻,它受到高频信号的影响相对较小,能够应用在高频的电路中。

但在我使用过程中,也能够明显感觉到缺点:环形电阻体型很小,并且颜色色差小,即使打光在上面也依旧难以辨认,导致在判断它的大小时非常困难,对于这一点,我们应当使用万用表来更便捷地测定电阻值。
电阻值对应表
请添加图片描述


共阴极数码管

概念

共阴极数码管是一种七段数码显示器件,它由七个(LED)组成,这些 LED 被排列成一个数字 “8” 的形状,通过点亮不同组合的段来显示数字 0-9 和一些字母及符号。其内部结构是将所有的发光二极管的阴极连接在一起,形成一个公共阴极,当真值为1时,数码管点亮;真值为0时,数码管不亮
在这里插入图片描述
在实际使用时,只要记住数码管的那个引脚连接了开发板上的哪个引脚,再对开发板上的引脚进行操作即可。


随机数字程序

电路图纸:
请添加图片描述
电路搭建完成
请添加图片描述
由于没有面包跳线,导致接完线后整个电路的构造比较混乱,还没学习更高级的连线方式,因此电路的连接可能也显得比较臃肿,以后学得深了应该就会明白怎么优化。

源代码

void setup() {
  // 将引脚 2 设为上拉输入模式
  pinMode(2, INPUT_PULLUP);
  // 初始化串口通信,波特率为 9600
  Serial.begin(9600);
  int pinNumber = 3;
  // 将引脚 3 到 9 设为输出模式
  while(pinNumber <= 9){
    pinMode(pinNumber, OUTPUT);
    pinNumber = pinNumber + 1;
  }
  // 用模拟引脚 A0 的模拟值作为随机数种子
  randomSeed(analogRead(A0));
}

void loop() {
  int myNumber;
  // 若引脚 2(按下按钮)
  if(!digitalRead(2)){
    // 调用 getRandomNumber 函数获取随机数
    myNumber = getRandomNumber(0, 10);
  }
  // 调用 displayNumber 函数显示数字
  displayNumber(myNumber);
}

// 获取随机数的函数,范围在 minNumber 到 maxNumber 之间
int getRandomNumber(int minNumber, int maxNumber){
  int randomNumber;
  int i = 0; // 初始化循环计数器 i
  // 循环 5 次
  while(i < 5){
    i = i + 1;
    randomNumber = random(minNumber,maxNumber);
    // 调用 displayNumber 函数显示生成的随机数
    displayNumber(randomNumber);
    // 延迟 100 毫秒
    delay(100);
    // 调用 displayClear 函数清除显示
    displayClear();
    // 再延迟 100 毫秒
    delay(100);

    // 打印当前循环次数
    Serial.print("i = ");
    Serial.println(i);
    // 打印生成的随机数
    Serial.print("randomNumber = ");
    Serial.println(randomNumber);
    Serial.println("");    
  }
  // 返回最后生成的随机数
  return randomNumber;
}

// 根据输入的数字显示相应数字的函数
void displayNumber(int ledNumber){
  switch(ledNumber){
    case 1:  // 显示 1
      digitalWrite(4, HIGH);
      digitalWrite(7, HIGH); 
      break;   
    case 2:  // 显示 2
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH); 
      digitalWrite(5, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;   
    case 3:   // 显示 3
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH); 
      digitalWrite(5, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      break;   
    case 4:  // 显示 4
      digitalWrite(4, HIGH); 
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      break;  
    case 5:  // 显示 5
      digitalWrite(3, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      break;
    case 6:  // 显示 6
      digitalWrite(3, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;    
    case 7:  // 显示 7
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH); 
      digitalWrite(7, HIGH);  
      break;
    case 8:  // 显示 8
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;
    case 9:  // 显示 9
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      break;
    case 0:  // 显示 0
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;
    default: // 显示默认情况
        digitalWrite(4, HIGH); 
        digitalWrite(5, HIGH); 
        digitalWrite(7, HIGH); 
        digitalWrite(8, HIGH);  
        digitalWrite(9, HIGH);   
    }
}

// 清除数码管显示的函数,将所有相关引脚置为低电平
void displayClear(){
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW); 
  digitalWrite(6, LOW); 
  digitalWrite(7, LOW); 
  digitalWrite(8, LOW); 
  digitalWrite(9, LOW); 
}

从结果上看,当点击按钮的时候,数码管将连续变换五个数字,并且停留在最后一个数字,直至下一次点击。写代码的时候注意,digitalWrite()所控制的引脚应当与连接的具体电路相吻合,否则无法实现相同效果。

标签:电阻,引脚,digitalWrite,环形,嵌入式,HIGH,数码管,自学
From: https://blog.csdn.net/STAB_/article/details/145235629

相关文章

  • 嵌入式Linux驱动开发学习--韦东山老师嵌入式Linux学习
    最无益,只怕一日曝十日寒,贵在有恒。目录2025-01-181、基础内容2、通用GPIO操作3、硬件操作4、驱动涉及的思想_面向对象_分层_分离1)面向对象2)分层3)分离5、驱动进化之路_总线设备驱动模型6、驱动进化之路_设备树的语法7、驱动进化之路_内核对设备树的处理与使用2025-01-181、基......
  • 嵌入式基础 C语言篇 数组.初阶
    一、基本概念逻辑:一次性定义多个相同类型的变量,并存储到一片连续的内存中语法释义:intbuf[5];buf是数组名,即这片连续内存的名称[5]代表这片连续内存总共分成5个相等的格子,每个格子称为数组的元素int代表每个元素的类型,可以是任意基本类型,也可以是组合类型,甚至可以是数组初......
  • 嵌入式基础 C语言篇 指针初阶
    一、指针的入门(1)、预备知识0、图解:1、内存地址字节:字节是内存的容量单位,英文称为byte,一个字节有8位,即1byte(00000000---11111111)=8bits(0---1)地址:系统为了便于区分每一个字节而对它们逐一进行的编号,称为内存地址,简称地址。在32位系统:说明:地址+1就是......
  • 嵌入式基础 C语言篇 错题
    (1) 若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是________。A.1     B.2    C.2.0    D.2.53/2=1;y=2.0(2)简述i++和++i    i++是先使用i的值,再i+1;++i是先i+1,再使用i的值底层原理:1、i++和++i都是带有返回值的函数2......
  • 求助,51单片机定时器中断控制数码管
    遇到的问题是:动态显示时,如果位选变化间隔太小,会导致计数的部分失效,数码管一直显示0000,间隔在30时数字会有变化,但是显示闪烁的效果太明显了代码如下:#defineuintunsignedint#defineucharunsignedchar//位选定义sbitwei0=P1^3;sbitwei1=P1^4;sbitwei2=P1^5;sbi......
  • 1. 数码管的静态动态控制
    数码管,我的超级LED![[Pastedimage20250116130225.png]]![[Pastedimage20250116134916.png]]![[Pastedimage20250116130421.png]]多个数码管共引脚连接节省接口在同一个时刻相同引脚的数码管只能显示相同内容动态数码管显示是根据人眼视觉残留与数码管余辉实现的图中C......
  • 嵌入式知识点总结(一)-C/C++关键字
     针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。目录1.C语言宏中"#“和"##"的用法1.1.(#)字符串化操作符1.2.(##)符号连接操作符2.关键字volatile有什么含意?并举出三个不同的例子?2.1.并行设备的硬件寄存器2.2.中断服务程序中修改的变......
  • 嵌入式杂谈——什么是DMA?有什么用?
    什么是DMA?——直接内存访问技术详解在嵌入式系统和计算机体系结构中,DMA(DirectMemoryAccess,直接内存访问) 是一种重要的数据传输技术。它允许外设(如UART、SPI、ADC等)直接与内存进行数据交换,而无需CPU的干预。DMA技术可以显著提高系统的效率和性能,尤其是在需要高速数据传输的......
  • 华为2024嵌入式研发面试题
    01你认为最好的排序算法是什么?在实际的编程中,最好的排序算法要根据实际需求和数据规模来选择,因为每种排序算法都有其优势和劣势。以下是一些常见排序算法及其优缺点:冒泡排序冒泡排序是一种简单直观的排序算法,它的时间复杂度是O(n^2)。虽然它的时间复杂度比较高,但它的实现方......
  • 大一计算机的自学总结:二叉树三种序的非递归遍历
    前言二叉树的递归遍历在我上一篇“二叉树及其三种序的递归遍历”里有。其中用到的“BinaryTree”也在链接文章的“二叉树的创建”里。大一计算机的自学总结:二叉树及其三种序的递归遍历而非递归遍历是借助栈的特性,会更难更复杂。TvT......一、先序遍历#include<bits/stdc++.......