[应用] 基于Purple Pi的LCD5110屏显示驱动

[复制链接]
40493|3
 楼主| 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
为便于后续对引脚的控制,将引脚配置为输出模式的程序为:
  1. echo 87 > /sys/class/gpio/export
  2. echo 88 > /sys/class/gpio/export
  3. echo 89 > /sys/class/gpio/export
  4. echo 18 > /sys/class/gpio/export
  5. echo 17 > /sys/class/gpio/export

  6. echo out > /sys/class/gpio/gpio87/direction
  7. echo out > /sys/class/gpio/gpio88/direction
  8. echo out > /sys/class/gpio/gpio89/direction
  9. echo out > /sys/class/gpio/gpio18/direction
  10. echo out > /sys/class/gpio/gpio17/direction

在使用脚本语言进行编程的情况下,实现串行发送字节数据的函数为:
  1. function lcd_write_byte {
  2. # wbyte, dat_cmd
  3. i=8
  4. let data=$wbyte
  5. let p=$dat_cmd
  6. #cs  87
  7. echo 0 > /sys/class/gpio/gpio87/value
  8. if [ $p -eq 1 ] ; then
  9. #dc  17
  10.     echo 1 > /sys/class/gpio/gpio17/value
  11. else
  12.     echo 0 > /sys/class/gpio/gpio17/value
  13. fi
  14. while [ $i -gt 0 ]
  15. do
  16.     let p=$data/128
  17.     if [ $p -eq 1 ] ; then
  18.     # sda  88
  19.     echo 1 > /sys/class/gpio/gpio88/value
  20.     else
  21.     echo 0 > /sys/class/gpio/gpio88/value
  22.     fi
  23.     let data=$data*2
  24.     let data=$data%256
  25.     let i=$i-1
  26.     #scl  89
  27.     echo 0 > /sys/class/gpio/gpio89/value
  28.     echo 1 > /sys/class/gpio/gpio89/value
  29. done
  30. echo 1 > /sys/class/gpio/gpio87/value
  31. }


实现LCD5110清屏处理的函数为:
  1. function lcd_clr_scr {
  2. let j=0
  3. let wbyte=0x80
  4. let dat_cmd=0
  5. lcd_write_byte
  6. let wbyte=0x40
  7. lcd_write_byte
  8. let dat_cmd=1
  9. while [ $j -lt 504 ]
  10. do
  11.   let wbyte=0x00
  12.   #let dat_cmd=1
  13.   lcd_write_byte
  14.   let j=$j+1
  15. done
  16. }


LCD5110屏进行初始化的函数为:
  1. function lcd5110_init {
  2.   echo 0 > /sys/class/gpio/gpio18/value
  3.   sleep 0.2
  4.   echo 1 > /sys/class/gpio/gpio18/value
  5.   let wbyte=0x21
  6.   let dat_cmd=0
  7.   lcd_write_byte
  8.   let wbyte=0x06
  9.   lcd_write_byte
  10.   let wbyte=0x13
  11.   lcd_write_byte
  12.   let wbyte=0xc8
  13.   lcd_write_byte
  14.   let wbyte=0x20
  15.   lcd_write_byte
  16.   let wbyte=0x0c
  17.   lcd_write_byte
  18.   let wbyte=0x40
  19.   lcd_write_byte
  20.   let wbyte=0x80
  21.   lcd_write_byte
  22.   lcd_clr_scr
  23. }

  24. 由于显示定位的辅助处理函数为:
  25. function lcd_pos_byte {
  26. # x, y
  27.   if [ $x -lt 128 ]; then
  28.   let x1=$x+0x80
  29.   fi
  30.   if [ $y -lt 64 ]; then
  31.   let y1=$y+0x40
  32.   fi
  33.   let wbyte=$x1
  34.   let dat_cmd=0
  35.   lcd_write_byte
  36.   let wbyte=$y1
  37.   let dat_cmd=0
  38.   lcd_write_byte
  39. }


为便于进行驱动测试,可将清屏函数修改为如下的内容:
  1. function lcd_clr_scr {
  2. let j=0
  3. let wbyte=0x80
  4. let dat_cmd=0
  5. lcd_write_byte
  6. let wbyte=0x40
  7. lcd_write_byte
  8. let dat_cmd=1
  9. while [ $j -lt 504 ]
  10. do
  11.   let wbyte=0xf0
  12.   lcd_write_byte
  13.   let j=$j+1
  14. done
  15. }


经程序测试,其显示效果如图3所示,说明驱动有效。
3.jpg
3 驱动测试

实现字符显示的测试函数为:
  1. function lcd_printc{
  2. # x, y, c_dat
  3. let i=0
  4. let j=0
  5. let c_dat=0xcc
  6. let x=$x*8
  7. let y=$y*2
  8. let j=0
  9. while [ $j -lt 2 ]
  10. do
  11.     let x=$x
  12.     let y=$y+$j
  13.     lcd_pos_byte
  14.     let i=0
  15.     while [ $i -lt 8 ]
  16.     do
  17.        let dat_cmd = 1
  18.        lcd_write_byte
  19.        let i=$i+1
  20.     done
  21.     let j=$j+1
  22. done
  23. }

经程序测试,其输出效果如图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 | 显示全部楼层
风之呢喃 发表于 2025-6-17 11:56 | 显示全部楼层
这个开发板感觉是不是很古早了
 楼主| jinglixixi 发表于 2025-6-17 16:06 | 显示全部楼层
风之呢喃 发表于 2025-6-17 11:56
这个开发板感觉是不是很古早了

当时刚推出,是比较有代表性的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

525

主题

2963

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部