DSP2812实现七段数码管控制教程

版权申诉
0 下载量 163 浏览量 更新于2024-12-08 收藏 310KB ZIP 举报
资源摘要信息:"本资源提供了一个利用DSP2812控制器实现对七段数码管显示控制的源程序。七段数码管是一种广泛应用于电子显示领域的显示器件,具有结构简单、成本低廉、易于理解和使用等特点。本资源的源程序通过DSP2812控制器进行编程,能够控制七段数码管显示数字、字符等信息。此外,源程序还具备与12864液晶显示屏的接口,使得显示内容不仅限于七段数码管,还可以扩展到12864液晶显示屏上。这种结合了七段数码管和液晶显示屏的显示方案,能够为开发者提供更加丰富和灵活的显示效果,适用于需要多种显示方式的嵌入式系统开发。开发者可以通过本资源提供的源程序,了解并掌握如何使用DSP2812控制器控制七段数码管和12864液晶显示屏,从而在各类电子项目中实现直观的数据显示。" 知识点详细说明: 1. 七段数码管的基础知识 七段数码管是一种由七个发光二极管组成的数字显示器,七个段分别标记为A到G,通过控制这七个段的亮灭,可以显示出0到9的数字,以及一些特定的字符。它广泛应用于电子钟表、计算器、计数器以及各类电子仪器的面板显示中。 2. DSP2812控制器的应用 DSP2812是德州仪器(Texas Instruments)公司生产的一款32位数字信号处理器,它具有强大的浮点运算能力、高效的指令集和丰富的外设接口,特别适用于实时信号处理领域。在本资源中,DSP2812被用来作为七段数码管的驱动控制器,通过编写相应的程序代码,DSP2812可以控制数码管的显示内容。 3. 七段数码管的控制原理 七段数码管的控制原理涉及到如何通过编程来控制各个段的电流,从而实现相应段的亮灭。通常情况下,通过向数码管的每一段发送高电平或低电平信号,来控制该段是否点亮。在多段数码管中,还需要考虑如何快速地切换和扫描各个数码管,以实现多个数字的连续显示。 4. 七段数码管与DSP2812的接口设计 要实现DSP2812对七段数码管的控制,需要设计相应的硬件接口电路,并编写相应的软件程序。接口电路可能包括限流电阻、驱动电路(如晶体管或专用驱动芯片)等,而软件程序则需要根据DSP2812的编程环境和语法进行开发,包括初始化设置、显示内容的定义和刷新显示等。 5. 12864液晶显示屏的接入与控制 12864是一种常见的图形点阵液晶显示屏,它支持汉字显示、图形显示等多种显示模式,能够提供更加丰富的显示效果。在本资源中,12864液晶显示屏被用作与七段数码管配合使用的显示设备,可以显示更加复杂的文字信息和图形。DSP2812同样需要提供控制代码来实现对12864显示屏的控制。 6. DSP2812程序开发基础 开发者需要具备一定的DSP2812控制器编程基础,了解其编程模型、指令集、开发环境(如Code Composer Studio),以及相关的硬件接口和外设编程。此外,还需要了解如何通过C语言或汇编语言编写程序来实现对七段数码管和12864显示屏的控制。 通过本资源,开发者将能够学习到如何将DSP2812控制器与七段数码管和12864显示屏相结合,开发出各种数字显示相关的应用项目。这对于提升嵌入式系统开发者的硬件接口编程能力、对实时控制系统的理解以及综合显示技术的运用均具有重要意义。

给出相同功能的代码import os import numpy as np import nibabel as nib import imageio from PIL import Image def read_niifile(niifilepath): # 读取niifile文件 img = nib.load(niifilepath) # 提取niifile文件 img_fdata = img.get_fdata(dtype='float32') return img_fdata def save_fig(niifilepath, savepath, num, name): # 保存为图片 name = name.split('-')[1] filepath_seg = niifilepath + "segmentation\" + "segmentation-" + name filepath_vol = niifilepath + "volume\" + "volume-" + name savepath_seg = savepath + "segmentation\" savepath_vol = savepath + "volume\" if not os.path.exists(savepath_seg): os.makedirs(savepath_seg) if not os.path.exists(savepath_vol): os.makedirs(savepath_vol) fdata_vol = read_niifile(filepath_vol) fdata_seg = read_niifile(filepath_seg) (x, y, z) = fdata_seg.shape total = x * y for k in range(z): silce_seg = fdata_seg[:, :, k] if silce_seg.max() == 0: continue else: silce_seg = (silce_seg - silce_seg.min()) / (silce_seg.max() - silce_seg.min()) * 255 silce_seg = np.uint8(Image.fromarray(silce_seg).convert('L')) silce_seg = cv2.threshold(silce_seg, 1, 255, cv2.THRESH_BINARY)[1] if (np.sum(silce_seg == 255) / total) > 0.015: silce_vol = fdata_vol[:, :, k] silce_vol = (silce_vol - silce_vol.min()) / (silce_vol.max() - silce_vol.min()) * 255 silce_vol = np.uint8(Image.fromarray(silce_vol).convert('L')) imageio.imwrite(os.path.join(savepath_seg, '{}.png'.format(num)), silce_seg) imageio.imwrite(os.path.join(savepath_vol, '{}.png'.format(num)), silce_vol) num += 1 return num if name == 'main': path = r'C:\Users\Administrator\Desktop\LiTS2017' savepath = r'C:\Users\Administrator\Desktop\2D-LiTS2017' filenames = os.listdir(path + "segmentation") num = 0 for filename in filenames: num = save_fig(path, savepath, num, filename) 。用另一段代码实现相同功能

102 浏览量

import os import numpy as np import nibabel as nib import imageio import cv2 def read_niifile(niifilepath): # 读取niifile文件 img = nib.load(niifilepath) # 提取niifile文件 img_fdata = img.get_fdata(dtype='float32') return img_fdata def save_fig(niifilepath, savepath, num, name): # 保存为图片 name = name.split('-')[1] filepath_seg = niifilepath + "segmentation\" + "segmentation-" + name filepath_vol = niifilepath + "volume\" + "volume-" + name savepath_seg = savepath + "segmentation\" savepath_vol = savepath + "volume\" if not os.path.exists(savepath_seg): os.makedirs(savepath_seg) if not os.path.exists(savepath_vol): os.makedirs(savepath_vol) fdata_vol = read_niifile(filepath_vol) fdata_seg = read_niifile(filepath_seg) (x, y, z) = fdata_seg.shape total = x * y for k in range(z): silce_seg = fdata_seg[:, :, k] # 三个位置表示三个不同角度的切片 if silce_seg.max() == 0: continue else: silce_seg = (silce_seg - silce_seg.min()) / (silce_seg.max() - silce_seg.min()) * 255 silce_seg = cv2.threshold(silce_seg, 1, 255, cv2.THRESH_BINARY)[1] if (np.sum(silce_seg == 255) / total) > 0.015: silce_vol = fdata_vol[:, :, k] silce_vol = (silce_vol - silce_vol.min()) / (silce_vol.max() - silce_vol.min()) * 255 imageio.imwrite(os.path.join(savepath_seg, '{}.png'.format(num)), silce_seg) imageio.imwrite(os.path.join(savepath_vol, '{}.png'.format(num)), silce_vol) num += 1 # 将切片信息保存为png格式 return num if name == 'main': path = r"C:\Users\Administrator\Desktop\LiTS2017" savepath = r"C:\Users\Administrator\Desktop\2D-LiTS2017" filenames = os.listdir(path + "segmentation") num = 0 for filename in filenames: num = save_fig(path, savepath, num, filename) 替换掉代码中的cv2模块,实现相同功能

2023-05-25 上传

替换掉import cv2,将代码import os import numpy as np import nibabel as nib import imageio import cv2 def read_niifile(niifilepath): # 读取niifile文件 img = nib.load(niifilepath) # 提取niifile文件 img_fdata = img.get_fdata(dtype='float32') return img_fdata def save_fig(niifilepath, savepath, num, name): # 保存为图片 name = name.split('-')[1] filepath_seg = niifilepath + "segmentation\\" + "segmentation-" + name filepath_vol = niifilepath + "volume\\" + "volume-" +name savepath_seg = savepath + "segmentation\\" savepath_vol = savepath + "volume\\" if not os.path.exists(savepath_seg): os.makedirs(savepath_seg) if not os.path.exists(savepath_vol): os.makedirs(savepath_vol) fdata_vol = read_niifile(filepath_vol) fdata_seg = read_niifile(filepath_seg) (x, y, z) = fdata_seg.shape total = x * y for k in range(z): silce_seg = fdata_seg[:, :, k] # 三个位置表示三个不同角度的切片 if silce_seg.max() == 0: continue else: silce_seg = (silce_seg-silce_seg.min())/(silce_seg.max() - silce_seg.min())*255 silce_seg = cv2.threshold(silce_seg, 1, 255, cv2.THRESH_BINARY)[1] if (np.sum(silce_seg == 255) / total) > 0.015: silce_vol = fdata_vol[:, :, k] silce_vol = (silce_vol - silce_vol.min()) / (silce_vol.max() - silce_vol.min()) * 255 imageio.imwrite(os.path.join(savepath_seg, '{}.png'.format(num)), silce_seg) imageio.imwrite(os.path.join(savepath_vol, '{}.png'.format(num)), silce_vol) num += 1 # 将切片信息保存为png格式 return num if __name__ == '__main__': path= 'E:\\dataset\\LiTS17\\' savepath = 'E:\\dataset\\LiTS17\\2d\\' filenames = os.listdir(path + "segmentation") num = 0 for filename in filenames: num = save_fig(path, savepath, num, filename)改成有相同作用的代码

115 浏览量

import os import numpy as np import nibabel as nib import imageio import cv2 def read_niifile(niifilepath): # 读取niifile文件 img = nib.load(niifilepath) # 提取niifile文件 img_fdata = img.get_fdata(dtype='float32') return img_fdata def save_fig(niifilepath, savepath, num, name): # 保存为图片 name = name.split('-')[1] filepath_seg = niifilepath + "segmentation\\" + "segmentation-" + name filepath_vol = niifilepath + "volume\\" + "volume-" + name savepath_seg = savepath + "segmentation\\" savepath_vol = savepath + "volume\\" if not os.path.exists(savepath_seg): os.makedirs(savepath_seg) if not os.path.exists(savepath_vol): os.makedirs(savepath_vol) fdata_vol = read_niifile(filepath_vol) fdata_seg = read_niifile(filepath_seg) (x, y, z) = fdata_seg.shape total = x * y for k in range(z): silce_seg = fdata_seg[:, :, k] # 三个位置表示三个不同角度的切片 if silce_seg.max() == 0: continue else: silce_seg = (silce_seg - silce_seg.min()) / (silce_seg.max() - silce_seg.min()) * 255 silce_seg = cv2.threshold(silce_seg, 1, 255, cv2.THRESH_BINARY)[1] if (np.sum(silce_seg == 255) / total) > 0.015: silce_vol = fdata_vol[:, :, k] silce_vol = (silce_vol - silce_vol.min()) / (silce_vol.max() - silce_vol.min()) * 255 imageio.imwrite(os.path.join(savepath_seg, '{}.png'.format(num)), silce_seg) imageio.imwrite(os.path.join(savepath_vol, '{}.png'.format(num)), silce_vol) num += 1 # 将切片信息保存为png格式 return num if __name__ == '__main__': path = r"C:\Users\Administrator\Desktop\LiTS2017" savepath = r"C:\Users\Administrator\Desktop\2D-LiTS2017" filenames = os.listdir(path + "segmentation") num = 0 for filename in filenames: num = save_fig(path, savepath, num, filename)替换掉代码中的cv2模块,实现相同功能

2023-05-25 上传