在一般的开发板上,较少提高文件系统和中文字库的支持。而K230D BOX恰恰这两样一个都不少,为此利于这些资源来设计一个文本管理器是十分方便的,也是十分具有应用价值的。
该文本管理器的界面见图1所示,通过按键的配合,可创建文本文件、读取文本文件及浏览指定目录的信息。

图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所示。

图2 生成文本文件

图3 读取文本文件及长度

图4 浏览目录信息
值得指出的是,在 Python 中,文件长度通常指的是文件所占用的字节数。对于文本文件,一个英文字符通常占用 1 个字节,而一个中文字符在 UTF - 8 编码下通常占用 3 个字节。对于二进制文件,文件长度就是其实际存储的字节数。
对于“正点原子 K230D BOX ”来说,其字节长度=4*3+11=23。
这里介绍的是对文本信息进行处理,若采用字节数据的读取方式,则可以配合画点函数的使用来实现图像的绘制。
我要赚赏金
