首页 > 其他分享 >代码1:七段数码管

代码1:七段数码管

时间:2024-07-03 15:45:11浏览次数:20  
标签:... 代码 seg 数码管 033 line DISPLAY 七段 define

Intro:

  • 绪论1:操作系统概述。
  • 目的:模拟数字电路系统,这是当今的硬件基础。

代码Github分为两部分:

  • logisim.c 模拟 verilog 编程,输出 A=1;B=0... 到管道中。
  • seven_seg.py 将输出结果使用 ANSI 编码进行可视化展示。

这两部分的实施都比较巧妙。下面分别看一下这两段代码(略去了一部分不重要的部分)。

1. logisim.c

// 用 bool 和 struct 组成了 verilog 中最基础的 wire 和 reg 变量!
typedef bool wire; // Wires
typedef struct {
  bool value;
  wire *in, *out;
} reg; // Flip-flops

// Circuit constructs
#define CLOCK       for (; ; END_CYCLE) // 时钟写成了死循环,END_CYCLE 负责写入文件流
#define END_CYCLE ({ end_cycle(); putchar('\n'); fflush(stdout); sleep(1); })
#define PRINT(X) printf(#X " = %d; ", X)
void end_cycle() {
  PRINT(A);
  ...
}

#define NAND(X, Y)  (!((X) && (Y))) // 逻辑操作
...
#define OR(X, Y)    (NAND(NOT(X), NOT(Y)))

// Wire and register specification
wire X, Y, X1, Y1, A, B, C, D, E, F, G;
reg b1 = {.in = &X1, .out = &X}; // 指定输入输出
reg b0 = {.in = &Y1, .out = &Y};

int main() {
  CLOCK {
    // 数电部分
    X1 = AND(NOT(X), Y);
    ...
    *b1.out = b1.value;
  }
}

整个代码需要对七段式数码管的数字电路有所了解。在C语法方面,使用 .in 语法直接对结构体进行初始化,. 语法自己之前没见识过,可以掌握一下。

2. seven_seg.py

# DISPLAY 便是待显示的 ANSI 字符序列
DISPLAY = '''
     AAAAAAAAA
    .....
    DDDDDDDDD
'''

# STFW: ANSI Escape Code
CLEAR = '\033[2J\033[1;1f' # 清屏操作
BLOCK = { # 模拟屏幕显示的亮暗
    0: '\033[37m░\033[0m',
    1: '\033[31m█\033[0m',
}

for line in fileinput.input():
    # Load "A=0; B=1; ..." to current context
    exec(line) # 把每行输入都作为一条命令去执行,比如 A=0 就会定义一个变量 A

    # Render the seven-segment display
    pic = DISPLAY # 不能直接改
    for seg in set(DISPLAY): # set 会去重
        if seg.isalpha(): # 检查是否全部是字母
            val = globals()[seg]  # 0 or 1
            pic = pic.replace(seg, BLOCK[val])

    # Clear screen and display
    print(CLEAR + pic)

原理上:把 DISPLAYABC... 根据输入流替换成 BLOCK 的明暗块。Python 语法方面,需要注意以下几点:

  • exec(line) 是把 line 当做指令执行,这里会定义 A=0;B=1... 等一系列变量;
  • globals() 是获取所有全局变量,实际上就是获取 line 中的 ABC... 变量

标签:...,代码,seg,数码管,033,line,DISPLAY,七段,define
From: https://www.cnblogs.com/7ytr5/p/18281556

相关文章

  • 基于Java+Vue的智慧园区管理系统:创新园区运营模式,构建全方位企业服务体系(代码分享)
     前言:智慧园区管理系统是一个集成了多种功能的综合性系统,旨在通过信息化、智能化手段提升园区的管理效率和服务质量。以下是针对系统的各个功能模块的简要描述:一、楼栋管理会务管理:管理园区内的会议预约、会议室使用等。园区信息:展示园区的基本信息,如位置、面积、规划等。......
  • 基于Java+Vue的企事业移动培训考试系统:体系化培训管理,保障培训效果(代码分享)
     前言:企事业移动培训考试系统是一个集成多种功能的综合性平台,旨在为企业提供便捷、高效、灵活的在线培训和考试解决方案。以下是针对平台所列出的八个主要功能的详细解释:一、文档管理及在线预览允许企业上传、存储、管理和分享各种培训文档,如PPT、PDF、Word等。提供在线预......
  • 保持校园网自动登录的代码备忘: 基于webdriver和chrome
    在跑一个处理很多数据的代码,需要不间断地运行。而且最近打算回家一周,需要远程控制电脑。但是学校的校园网每到晚上就会自己断开,干脆写份脚本来保持校园网的连接这份简单的代码只包括三个部分,检测网络状态的部分,自动登录校园网的部分,循环执行的部分、importosimporttimeimpo......
  • Vector底层结构和代码解析
    基本介绍定义说明publicclassVector<E>extendsAbstractList<E>implementsList<E>,RandomAccess,Cloneable,java.io.Serializable{Vector底层是一个对象数组,protectedObject[]elementData;Vector是线程同步的(线程安全),Vector类的操作方法带有synchronized......
  • OA系统怎么开发 低代码开发OA办公系统的优势
    按照传统的开发模式,开发OA系统可能既耗时又昂贵,需要经验丰富的开发人员从头开始创建自定义代码。然而,随着低代码开发平台的出现,中小企业现在有了另一种方法,可以使用更快、更具成本效益的应用程序开发。今天,小编就来聊聊低代码平台怎么开发OA系统?低代码开发OA系统的优势开发......
  • 基于YOLOv5的人脸关键点检测(附代码)
    人脸关键点检测项目说明本项目的实现主要依靠两个算法:yolov5目标检测和resnet人脸关键点算法。其中目标检测算法为人脸关键点检测算法的前置算法,使用目标检测算法将人脸信息进行提取(起到前景与背景的分离),然后再对box内的人脸信息进行关键点检测。本项目支持功能:人脸关键......
  • 信息安全数学基础的几个C语言代码
    相关书籍:《信息安全数学基础-陈恭亮-清华大学出版社-第2版》(豆瓣)1.埃氏筛/*输入一个正整数,输出小于其的全部素数*/#include<stdio.h>#include<stdbool.h>#defineMAXN100001boolvis[MAXN]={1,1};voidEra(intqwq){for(inti=2;i<=qwq;i++){if(vis[......
  • [漏洞复现]Geoserver表达式注入致远程代码执行漏洞(CVE-2024-36401)
    觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。看到长亭昨晚发送的漏洞风险提示,我这边快马加鞭看看能不能赶上热度,payload就放在星球了,欢迎各位师傅来白嫖,看上眼的话可以留下试试。漏洞描述GeoServer是一个开源服务器,用于共享、处......
  • Pycharm远程连接GPU(内容:下载安装Pycharm、GPU租借、配置SSH、将代码同步到镜像、命令
    目录windows下载安装pycharmGPU租借网站GPU租借GPU选择选择镜像充值然后创建镜像创建成功复制SSH登录信息远程进入镜像在Pycharm中进行ssh连接新建SFTP配置SSH复制ssh根据复制的信息填写ssh配置测试连接将代码同步到远程镜像上设置mappings将本地代码上传到镜像配......
  • 调不出代码怒封了个string用来解气
    #include<bits/stdc++.h>usingnamespacestd;namespacehdk{ constintsiz=100001; classstring{ private: chars[siz]; intlengtht=0; intstart=0; public: voidoperator=(conststd::stringx){ memset(s,0,sizeofs); ......