[应用]

基于Purple Pi的LCD5110屏显示驱动

[复制链接]
9939|1
手机看帖
扫描二维码
随时随地手机跟帖
jinglixixi|  楼主 | 2023-8-30 18:54 | 显示全部楼层 |阅读模式
#申请原创# @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.jpg
图1 正面布局


2.jpg
图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.jpg
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.jpg
4 显示测试

5.jpg
5 显示测试

在配置图6所示结构的字库情况下,其实现字符串显示的函数为:
6.jpg
6 显示测试

a.jpg
b.jpg

经程序测试,其输出效果如图7所示,说明程序正确。

此外,在显示内容较多的情况下它还能实现自动换行处理,其效果如图8所示。
7.jpg
7 显示字符串

8.jpg
8 多行显示


使用特权

评论回复

相关帖子

闻则123| | 2023-12-13 09:36 | 显示全部楼层

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2666

帖子

34

粉丝