本帖最后由 jinglixixi 于 2023-8-29 20:48 编辑
#申请原创# @21小跑堂
Milk-V Duo是一款基于算能 CV1800B芯片的MPU,它能够运行基于LINUX和RTOS的操作系统。Milk-V Duo为专业人士、工业OEM企业、物联网爱好者、业余爱好者、DIYers和创作者提供了一个可靠、低成本且极具功能的平台。 Milk-V Duo开发板的外观如图1和图2所示,在使用前需借助板载的TF卡座来连接装有固件的TF卡。 图1 开发板正面
‘
’ 图2开发板背面
在安装固件后,系统就可提供一个进行开发和测试的LINUX环境。
图3 进入系统后
1. 显示驱动 为了能快速地解决8*8点阵模块的显示驱动问题,这里是采用脚本编程的方式。 所用的8*8点阵模块是以MAX7219为功能处理芯片,从而将GPIO口所输出的串行信号转化并行信号来控制点阵模块。 点阵模块与开发板的具体连接关系为: DIN---GP6---gpio375 CS ---GP7---gpio374 CLK---GP8---gpio373
图4 所用引脚
将所用引脚配置为输出工作模式的程序为: - din_GPIO=/sys/class/gpio/gpio375
- cs_GPIO=/sys/class/gpio/gpio374
- clk_GPIO=/sys/class/gpio/gpio373
- if test -d $din_GPIO; then
- echo "GPIO375 already exported"
- else
- echo 375 > /sys/class/gpio/export
- echo 374 > /sys/class/gpio/export
- echo 373 > /sys/class/gpio/export
- fi
- echo out > $din_GPIO/direction
- echo out > $cs_GPIO/direction
- echo out > $clk_GPIO/direction
实现串行信号模拟输出程序为: - function max7219_byte {
- i=8
- let s=$i
- echo 0 > $cs_GPIO/value
- while [ $s -gt 0 ]
- do
- let p=$dat/128
- echo 0 > $clk_GPIO/value
- if [ $p -eq 1 ] ; then
- echo 1 > $din_GPIO/value
- else
- echo 0 > $din_GPIO/value
- fi
- let dat=$dat*2
- let dat=$dat%256
- let s=$i-1
- let i=$s
- echo 1 > $clk_GPIO/value
- done
- }
实现MAX7219向指定地址发送数据的函数为: - function write_max7219 {
- echo 0 > $cs_GPIO/value
- let dat=$add1
- max7219_byte
- let dat=$dat1
- max7219_byte
- echo 1 > $cs_GPIO/value
- }
实现点阵模块初始化的函数为: - function int_max7219 {
- add1=11
- dat1=7
- write_max7219
- add1=12
- dat1=1
- write_max7219
- add1=15
- dat1=0
- write_max7219
- }
通过程序实现指定汉字“中”的显示程序为: - function look {
- # 0x8,0x7F,0x49,0x49,0x7F,0x8,0x8,0x8
- int_max7219
- add1=1
- dat1=0x8
- write_max7219
- add1=2
- dat1=0x7F
- write_max7219
- add1=3
- dat1=0x49
- write_max7219
- add1=4
- dat1=0x49
- write_max7219
- add1=5
- dat1=0x7F
- write_max7219
- add1=6
- dat1=0x8
- write_max7219
- add1=7
- dat1=0x8
- write_max7219
- add1=8
- dat1=0x8
- write_max7219
- }
在运行程序后,其显示效果如图5所示。
图5汉字显示效果
2. 字库构建及使用 由于此时的LINUX系统没有提供对数组的支持,因此给程序设计带来了较大的制约。 那如何来解决这个问题呢? 方法有2个,当数据量较小的情况下,可通过字符串截取的方式来解决;而在数据量较大的情况下,则可通过文本文件的读取来解决。
1)字符截取方式 在该处理方式下,是将多个数据以字符串的方式存放到一个变量中,例如: m="0x21,0x23" 然后使用指令echo ${m:0:4},即可获得第一项数据“0x21”。 若使用指令 echo ${m:5:4},则可获得第二项数据“0x23”。
2)文件读取方式 在该处理方式下,首先是创建一个文本文件test.txt,其内容如下: 123 456 789 然后编写一个脚本程序,其内容为: - count=1
- cat test.txt | while read line
- do
- echo "Line $count:$line"
- let count=$count+1
- done
这样在执行该脚本程序时,就可得到如下的输出结果,即数据文件中的数据就按行被提取出来。 Line 1: 123 Line 2: 456 Line 3: 789
3)混合处理方式
为便于更好地利用字模提取软件所输出的数据,可采用混合处理的方法来解决,即按行来从数据文件中读取数据,再以字符截取的方式来提取各项数据,即可达到使用二维数组的功效。 图6 提取结果
当我们以该处理方式来进行显示时,就可将字库中的内容循环地显示处理,相应的显示程序为:
所实现的显示效果如图7和图8所示,这样就完美地突破了数组的限制! 图7 数字显示效果
图8 字符显示效果
|