#申请原创# @21小跑堂
Purple Pi开发板是以SigmaStarSSD201 SoC(ARM Cortex A7 内核)为核心,是一款兼容树莓派的开发板,其主频高达1.2GHz,并配有256KB L2-缓存,内置双MAC、一个PHY,支持双100M以太网接口等。 另外,它集成了H.264/AVC和H.265/HEVC解码器,支持最大分辨率FHD(1920x1080)/60帧解码。 此外,Purple Pi主板配有TF卡座、双10/100Mbps以太网、音频接口、USB2.0、MIPI-DSI屏幕接口和单频WIFI等。该开发板主要应用于智能楼宇室内机、智能家居中控、86盒家庭中控、电梯楼层显示器、IP网络广播设备和语音识别设备等,由此可见其性能的强大和应用面的宽广,其外观如图1和图2所示。
图1 正面布局
图2背面布局 由于Purple Pi开发板已固化LINUX系统,因此用户可直接上手使用,免去了固件安装的麻烦。 为便于人机的交互,这里为其配置了一个以往用于诺基亚手机的显示屏LCD5110。 该显示屏以SPI接口的方式工作,其引脚与开发板的连接关系为: cs---87 rst---18 dc---17 scl---89 sda---88 为便于后续对引脚的控制,将引脚配置为输出模式的程序为: echo 87 > /sys/class/gpio/export
echo 88 > /sys/class/gpio/export
echo 89 > /sys/class/gpio/export
echo 18 > /sys/class/gpio/export
echo 17 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio87/direction
echo out > /sys/class/gpio/gpio88/direction
echo out > /sys/class/gpio/gpio89/direction
echo out > /sys/class/gpio/gpio18/direction
echo out > /sys/class/gpio/gpio17/direction
在使用脚本语言进行编程的情况下,实现串行发送字节数据的函数为: function lcd_write_byte {
# wbyte, dat_cmd
i=8
let data=$wbyte
let p=$dat_cmd
#cs 87
echo 0 > /sys/class/gpio/gpio87/value
if [ $p -eq 1 ] ; then
#dc 17
echo 1 > /sys/class/gpio/gpio17/value
else
echo 0 > /sys/class/gpio/gpio17/value
fi
while [ $i -gt 0 ]
do
let p=$data/128
if [ $p -eq 1 ] ; then
# sda 88
echo 1 > /sys/class/gpio/gpio88/value
else
echo 0 > /sys/class/gpio/gpio88/value
fi
let data=$data*2
let data=$data%256
let i=$i-1
#scl 89
echo 0 > /sys/class/gpio/gpio89/value
echo 1 > /sys/class/gpio/gpio89/value
done
echo 1 > /sys/class/gpio/gpio87/value
}
实现LCD5110清屏处理的函数为: function lcd_clr_scr {
let j=0
let wbyte=0x80
let dat_cmd=0
lcd_write_byte
let wbyte=0x40
lcd_write_byte
let dat_cmd=1
while [ $j -lt 504 ]
do
let wbyte=0x00
#let dat_cmd=1
lcd_write_byte
let j=$j+1
done
}
对LCD5110屏进行初始化的函数为: function lcd5110_init {
echo 0 > /sys/class/gpio/gpio18/value
sleep 0.2
echo 1 > /sys/class/gpio/gpio18/value
let wbyte=0x21
let dat_cmd=0
lcd_write_byte
let wbyte=0x06
lcd_write_byte
let wbyte=0x13
lcd_write_byte
let wbyte=0xc8
lcd_write_byte
let wbyte=0x20
lcd_write_byte
let wbyte=0x0c
lcd_write_byte
let wbyte=0x40
lcd_write_byte
let wbyte=0x80
lcd_write_byte
lcd_clr_scr
}
由于显示定位的辅助处理函数为:
function lcd_pos_byte {
# x, y
if [ $x -lt 128 ]; then
let x1=$x+0x80
fi
if [ $y -lt 64 ]; then
let y1=$y+0x40
fi
let wbyte=$x1
let dat_cmd=0
lcd_write_byte
let wbyte=$y1
let dat_cmd=0
lcd_write_byte
}
为便于进行驱动测试,可将清屏函数修改为如下的内容: function lcd_clr_scr {
let j=0
let wbyte=0x80
let dat_cmd=0
lcd_write_byte
let wbyte=0x40
lcd_write_byte
let dat_cmd=1
while [ $j -lt 504 ]
do
let wbyte=0xf0
lcd_write_byte
let j=$j+1
done
}
经程序测试,其显示效果如图3所示,说明驱动有效。
图3 驱动测试
实现字符显示的测试函数为: function lcd_printc{
# x, y, c_dat
let i=0
let j=0
let c_dat=0xcc
let x=$x*8
let y=$y*2
let j=0
while [ $j -lt 2 ]
do
let x=$x
let y=$y+$j
lcd_pos_byte
let i=0
while [ $i -lt 8 ]
do
let dat_cmd = 1
lcd_write_byte
let i=$i+1
done
let j=$j+1
done
}
经程序测试,其输出效果如图4所示,说明程序正确。在配备相应显示字模的情况下,其显示效果如图5所示。 图4 显示测试
图5 显示测试
在配置图6所示结构的字库情况下,其实现字符串显示的函数为: 图6 显示测试
经程序测试,其输出效果如图7所示,说明程序正确。
此外,在显示内容较多的情况下它还能实现自动换行处理,其效果如图8所示。 图7 显示字符串
图8 多行显示
|