这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » 基于K230DBOX的文本管理器设计

共1条 1/1 1 跳转至

基于K230DBOX的文本管理器设计

助工
2026-08-06 17:37:43     打赏

在一般的开发板上,较少提高文件系统和中文字库的支持。而K230D BOX恰恰这两样一个都不少,为此利于这些资源来设计一个文本管理器是十分方便的,也是十分具有应用价值的。

该文本管理器的界面见图1所示,通过按键的配合,可创建文本文件、读取文本文件及浏览指定目录的信息。

image.png

1 界面形式

在功能设计中,所涉及的文件操作函数有:f.write()、f.read()、open()

在操作过程中,按键KEY0用于生成文本文件,按键KEY1用于读取文本文件,按键KEY2则用于浏览指定目录的信息。

实现文本管理功能的程序为:

import time, os, urandom, sys
from media.display import *
from media.media import *
 
from machine import Pin
from machine import FPIOA
import uos
 
# 实例化FPIOA
fpioa = FPIOA()
 
# 为IO分配相应的硬件功能
fpioa.set_function(34, FPIOA.GPIO34)
fpioa.set_function(35, FPIOA.GPIO35)
fpioa.set_function(0, FPIOA.GPIO0)
 
# 构造GPIO对象
key0 = Pin(34, Pin.IN, pull=Pin.PULL_UP, drive=7)
key1 = Pin(35, Pin.IN, pull=Pin.PULL_UP, drive=7)
key2 = Pin(0, Pin.IN, pull=Pin.PULL_DOWN, drive=7)
 
img = image.Image(640, 480, image.RGB888)
Display.init(Display.ST7701, width=640, height=480, to_ide=True)
MediaManager.init()
 
def ts():
    img.clear()
    img.draw_string_advanced(40,0,32, "【 文本管理器 】", color=(200, 0, 0),)
    #img.draw_string_advanced(400,0,32, "目录信息:", color=(0, 200, 0),)
    img.draw_string_advanced(300,0,32, "文件名称:test.txt", color=(0, 200, 0),)
    t=0
    for t in range(0,639):             # 画线输出
        img.draw_circle(t, 50, 1, color=(255, 255, 255))   # 画线
        img.draw_circle(t, 440, 1, color=(255, 255, 255))  # 画线
 
ts()
Display.show_image(img)
 
while True:
            # 读取按键状态,并做相应的按键解释
            if key0.value() == 0:
                f = open('/sdcard/test.txt', 'w') #以写方式打开一个文件,没有该文件就自动新建
                #wr_data = "正点原子 K230D BOX + {}".format(i)
                wr_data = "正点原子 K230D BOX "
                ts()
                img.draw_string_advanced(100,50,32, "写入信息:"+wr_data, color=(0, 200, 0),)
                f.write(wr_data) #写入数据
                f.close() #每次操作完记得关闭文件
                print("write success") #读取数据并在终端打印
                time.sleep_ms(50)
            if key1.value() == 0:
 
                file_path = '/sdcard/test.txt'
                with open(file_path, 'rb') as file:
                    file.seek(0, 2)  # 将文件指针移动到文件末尾
                    file_size = file.tell()  # 获取文件指针的位置
                print(f"文件 {file_path} 的大小为 {file_size} 字节")
                file.close()
 
                f = open('/sdcard/test.txt', 'r') #以读方式打开一个文件
                text = f.read()
                ts()
                img.draw_string_advanced(100,50,32, "读取信息:"+text, color=(0, 200, 0),)
                img.draw_string_advanced(100,440,32, "文件长度:"+str(file_size)+" 字节", color=(0, 200, 0),)
                print(text) #读取数据并在终端打印
                f.close() #每次操作完记得关闭文件
                time.sleep_ms(50)
 
            if key2.value() == 1:
                print(uos.listdir("/sdcard/"))
                print(uos.listdir("/sdcard/")[0])
                ts()
                img.draw_string_advanced(40,60,32, "目录信息:", color=(0, 200, 0),)
                img.draw_string_advanced(360,60,32, uos.listdir("/sdcard/")[0], color=(0, 200, 0),)
                img.draw_string_advanced(360,100,32, uos.listdir("/sdcard/")[1], color=(0, 200, 0),)
                img.draw_string_advanced(360,140,32,uos.listdir("/sdcard/")[2], color=(0, 200, 0),)
                img.draw_string_advanced(360,180,32, uos.listdir("/sdcard/")[3], color=(0, 200, 0),)
                img.draw_string_advanced(360,220,32,uos.listdir("/sdcard/")[4], color=(0, 200, 0),)
            # 刷新到显示器上
            Display.show_image(img)
            time.sleep_ms(200)


经程序运行,其测试效果如图2至图4所示。

image.png

2 生成文本文件

image.png

3 读取文本文件及长度

image.png

4 浏览目录信息

值得指出的是, Python 中,文件长度通常指的是文件所占用的字节数。对于文本文件,一个英文字符通常占用 1 个字节,而一个中文字符在 UTF - 8 编码下通常占用 3 个字节。对于二进制文件,文件长度就是其实际存储的字节数。

对于“正点原子 K230D BOX ”来说,其字节长度=4*3+11=23。

 这里介绍的是对文本信息进行处理,若采用字节数据的读取方式,则可以配合画点函数的使用来实现图像的绘制。





关键词: 文本管理器设计    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]