用动态数码管原理设计显示:第一屏显示21-c-1,显示1S,灭屏1S;第二屏显示040214,显示1S,灭屏1
时间: 2023-05-26 09:03:37 浏览: 67
S。
首先,需要了解动态数码管的工作原理。它是通过不停地切换不同的数码管显示来实现多个数码的显示效果。所以,要实现上述的显示效果,就需要在控制电路中设置合适的时序和数码管显示模式。
以下是一个可能的设计方案:
1. 接线
- 数码管1:使用1个4位共阴数码管,连接P2.0~P2.3引脚,连接SEG1~SEG4段选引脚,连接COM1~COM4位选引脚。
- 数码管2:使用1个8位共阴数码管,连接P3.0~P3.7引脚,连接SEG1~SEG8段选引脚,连接COM5~COM12位选引脚。
2. 时序
根据常规的动态数码管工作方式,可以设置约1ms的扫描周期,并在每个周期内按照以下顺序进行操作:
- 关闭所有位选引脚;
- 第一屏显示数字 2,第二屏显示数字 0;
- 开启第一个数码管的位选引脚,设置其对应的数码管段选信号为 21-c-1;
- 等待1秒钟;
- 关闭所有位选引脚;
- 第一屏显示程序结束标志,即 A-4(也可以显示“End”等文本),第二屏灭屏;
- 等待1秒钟;
- 开启第二个数码管的位选引脚,设置其对应的数码管段选信号为 040214;
- 等待1秒钟。
这样,就可以按照要求实现题目中的显示效果。
需要注意的是,具体的代码实现可能会因不同的芯片和编程语言而有所不同。因此,上述方案仅供参考,并不一定适用于所有情况。在实际设计中,需要仔细测试和调试,以确保显示效果的正确性和稳定性。
相关问题
用动态数码管原理设计显示:第一屏显示21-c-1,显示1S,灭屏1S;第二屏显示040214,显示1S,灭屏1S。如此重复显示。
实现思路:
首先需要明确动态数码管的原理,即通过逐位扫描的方式控制数码管的显示。在本题中,需要分别控制两个数码管的显示,因此需要使用两个定时器分别控制两个数码管的显示。
例如,在显示第一屏时,将21-c-1分别存储在四个数码管控制器中,并使用定时器1控制第一个数码管的显示,使用定时器2控制第二、三、四个数码管的显示。依次轮流显示,并且每个数码管的显示时间为1秒钟。
具体实现方法如下:
1.配置定时器1和定时器2,使它们的工作模式为重复计数模式。
2.将21、-、c、1四个数码通过转换成二进制码的方法存储到一个数组中,每个数码需要占用8位二进制数。
3.设计一个函数,该函数将数组中的四个数码依次显示在数码管上。
4.使用定时器1控制第一个数码管的显示,使用定时器2控制第二、三、四个数码管的显示,使它们依次轮流显示。
5.在主函数中,循环调用该函数,每次调用时都先显示第一屏,再显示第二屏,然后再延时1秒钟。
6.由于需要实现数码管的闪烁效果,因此可以在函数中添加一个参数,控制数码管的显示和灭屏。
代码如下:
用动态数码管原理设计显示:第一屏显示年级21-c-1,显示1S,灭屏1S;第二屏显示学号的后6位,显示1S,灭屏1S。如此重复显示。
### 回答1:
这里提供一种基于Arduino的实现方法:
```
#include <TM1637Display.h>
// 定义动态数码管的引脚
#define CLK 2
#define DIO 3
// 初始化动态数码管
TM1637Display display(CLK, DIO);
// 定义要显示的内容
uint8_t grade[] = {0x3f, 0x06, 0x5b, 0x4f}; // "21-c-1"
uint8_t id[] = {0x06, 0x5b, 0x4f, 0x7c, 0x39, 0x5e}; // 后6位学号
void setup() {
// 设置动态数码管的亮度(可选)
display.setBrightness(7);
}
void loop() {
// 显示第一屏(年级)
display.setSegments(grade, 4);
delay(1000);
display.clear();
delay(1000);
// 显示第二屏(学号)
display.setSegments(id, 6);
delay(1000);
display.clear();
delay(1000);
}
```
说明:
1. 首先需要引入 `TM1637Display` 库,这是一个用于控制动态数码管的库。
2. 然后定义动态数码管的引脚,这里我选择了 2 和 3。
3. 初始化动态数码管并设置亮度。
4. 定义要显示的内容,这里我使用了两个数组分别表示年级和学号的后六位。需要注意的是,这里的数码管是共阴极的,所以需要将每个数字的对应段点亮的值取反(例如 `0x3f` 表示数码管上的 "0",但它的二进制表示中,需要将 "0" 的各个段点亮的位取反,才能得到正确的值)。
5. 在 `loop()` 函数中,先显示第一屏,然后延迟 1 秒并清空,再显示第二屏,然后延迟 1 秒并清空,如此循环往复。
6. 最后上传程序到 Arduino 上,就可以看到动态数码管按照要求不断地显示年级和学号了。
### 回答2:
要设计一个滚动显示的动态数码管,按照要求,首先需要一个计时器来控制屏幕的显示和灭屏时间。
首先来设计第一屏的显示内容。首先需要将"年级21-c-1"这个字符串转为对应的数码管显示的数字码。例如,将"年级"转为对应的数字码,将"21"转为对应的数字码,将"c"转为对应的数字码,将"-"转为对应的数字码,将"1"转为对应的数字码。然后按照转换后的数字码依次显示在数码管上,持续1秒钟,然后灭屏1秒钟。
接下来设计第二屏的显示内容。首先需要获取学号的后6位数字,将这6位数字转为对应的数字码。然后按照转换后的数字码依次显示在数码管上,持续1秒钟,然后灭屏1秒钟。
设计好上述的显示内容后,通过计时器来循环控制第一屏和第二屏的显示和灭屏时间。每1秒钟,先显示第一屏的内容持续1秒钟,然后灭屏1秒钟,然后显示第二屏的内容持续1秒钟,然后灭屏1秒钟。如此循环重复,实现滚动显示。
总结:通过利用动态数码管的原理,设计一个滚动显示的屏幕,分别显示"年级21-c-1"和学号的后6位数字,持续1秒钟,然后灭屏1秒钟。通过一个计时器循环控制两个屏幕的显示和灭屏时间,实现滚动显示的效果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)