[英]Do a python program lcd 20x4 display need to used RPi GPIO 08 pin?
I have created a python program used wxpython
module to display output from mcp3008 which convert data from analog to digital from rain sensor. 我创建了一个Python程序,该程序使用
wxpython
模块显示mcp3008的输出,该输出将雨量传感器的数据从模拟转换为数字。 This project I'm doing is to upgrade the current project with only display data through lcd 20x4 display from other input or source. 我正在做的项目是通过其他输入或源的20x4液晶显示器升级仅显示数据的当前项目。 But the my
wxpython
program used the GPIO08
pin which has a SPIO_CE0_N
function for spi bus as my mcp3008
required it to check my other spi pin. 但是我的
wxpython
程序使用了GPIO08
引脚,该引脚具有SPI总线的SPIO_CE0_N
功能,因为我的mcp3008
要求它检查我的其他SPI引脚。 This my mcp3008 pin layout to raspberry pi: 这是我的mcp3008到树莓派的引脚布局:
VDD 3.3V
VREF 3.3V
AGND GROUND
CLK GPIO11 (P1-23)
DOUT GPIO9 (P1-21)
DIN GPIO10 (P1-19)
CS GPIO8 (P1-24)
DGND GROUND
And this is lcd 20x4 display pin layout to raspberry pi: 这是树莓派的LCD 20x4显示引脚布局:
LCD Pin Function Pi Function Pi Pin
01 GND GND P1-06
02 +5V +5V P1-02
03 Contrast
04 RS GPIO7 P1-26
05 RW GND P1-06
06 E GPIO8 P1-24
07 Data 0
08 Data 1
09 Data 2
10 Data 3
11 Data 4 GPIO25 P1-22
12 Data 5 GPIO24 P1-18
13 Data 6 GPIO23 P1-16
14 Data 7 GPIO18 P1-12
15 +5V via 560 ohm
16 GND P1-06
As the python program for the lcd display i get from the internet use GPIO 08
in the program: 作为我从互联网上获得的液晶显示器的python程序,请在程序中使用
GPIO 08
:
#!/usr/bin/python
#--------------------------------------
# ___ ___ _ ____
# / _ \/ _ \(_) __/__ __ __
# / , _/ ___/ /\ \/ _ \/ // /
# /_/|_/_/ /_/___/ .__/\_, /
# /_/ /___/
#
# lcd_16x2.py
# 20x4 LCD Test Script with
# backlight control and text justification
#
# Author : Matt Hawkins
# Date : 06/04/2015
#
# http://www.raspberrypi-spy.co.uk/
#
#--------------------------------------
# The wiring for the LCD is as follows:
# 1 : GND
# 2 : 5V
# 3 : Contrast (0-5V)*
# 4 : RS (Register Select)
# 5 : R/W (Read Write) - GROUND THIS PIN
# 6 : Enable or Strobe
# 7 : Data Bit 0 - NOT USED
# 8 : Data Bit 1 - NOT USED
# 9 : Data Bit 2 - NOT USED
# 10: Data Bit 3 - NOT USED
# 11: Data Bit 4
# 12: Data Bit 5
# 13: Data Bit 6
# 14: Data Bit 7
# 15: LCD Backlight +5V**
# 16: LCD Backlight GND
#import
import RPi.GPIO as GPIO
import time
# Define GPIO to LCD mapping
LCD_RS = 7
LCD_E = 8
LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18
LED_ON = 15
# Define some device constants
LCD_WIDTH = 20 # Maximum characters per line
LCD_CHR = True
LCD_CMD = False
LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line
# Timing constants
E_PULSE = 0.0005
E_DELAY = 0.0005
def main():
# Main program block
GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
GPIO.setup(LCD_E, GPIO.OUT) # E
GPIO.setup(LCD_RS, GPIO.OUT) # RS
GPIO.setup(LCD_D4, GPIO.OUT) # DB4
GPIO.setup(LCD_D5, GPIO.OUT) # DB5
GPIO.setup(LCD_D6, GPIO.OUT) # DB6
GPIO.setup(LCD_D7, GPIO.OUT) # DB7
GPIO.setup(LED_ON, GPIO.OUT) # Backlight enable
# Initialise display
lcd_init()
# Toggle backlight on-off-on
lcd_backlight(True)
time.sleep(0.5)
lcd_backlight(False)
time.sleep(0.5)
lcd_backlight(True)
time.sleep(0.5)
while True:
# Send some centred test
lcd_string("--------------------",LCD_LINE_1,2)
lcd_string("Rasbperry Pi",LCD_LINE_2,2)
lcd_string("Model B",LCD_LINE_3,2)
lcd_string("--------------------",LCD_LINE_4,2)
time.sleep(3) # 3 second delay
lcd_string("Raspberrypi-spy",LCD_LINE_1,3)
lcd_string(".co.uk",LCD_LINE_2,3)
lcd_string("",LCD_LINE_3,2)
lcd_string("20x4 LCD Module Test",LCD_LINE_4,2)
time.sleep(3) # 20 second delay
# Blank display
lcd_byte(0x01, LCD_CMD)
time.sleep(3) # 3 second delay
def lcd_init():
# Initialise display
lcd_byte(0x33,LCD_CMD) # 110011 Initialise
lcd_byte(0x32,LCD_CMD) # 110010 Initialise
lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
lcd_byte(0x01,LCD_CMD) # 000001 Clear display
time.sleep(E_DELAY)
def lcd_byte(bits, mode):
# Send byte to data pins
# bits = data
# mode = True for character
# False for command
GPIO.output(LCD_RS, mode) # RS
# High bits
GPIO.output(LCD_D4, False)
GPIO.output(LCD_D5, False)
GPIO.output(LCD_D6, False)
GPIO.output(LCD_D7, False)
if bits&0x10==0x10:
GPIO.output(LCD_D4, True)
if bits&0x20==0x20:
GPIO.output(LCD_D5, True)
if bits&0x40==0x40:
GPIO.output(LCD_D6, True)
if bits&0x80==0x80:
GPIO.output(LCD_D7, True)
# Toggle 'Enable' pin
lcd_toggle_enable()
# Low bits
GPIO.output(LCD_D4, False)
GPIO.output(LCD_D5, False)
GPIO.output(LCD_D6, False)
GPIO.output(LCD_D7, False)
if bits&0x01==0x01:
GPIO.output(LCD_D4, True)
if bits&0x02==0x02:
GPIO.output(LCD_D5, True)
if bits&0x04==0x04:
GPIO.output(LCD_D6, True)
if bits&0x08==0x08:
GPIO.output(LCD_D7, True)
# Toggle 'Enable' pin
lcd_toggle_enable()
def lcd_toggle_enable():
# Toggle enable
time.sleep(E_DELAY)
GPIO.output(LCD_E, True)
time.sleep(E_PULSE)
GPIO.output(LCD_E, False)
time.sleep(E_DELAY)
def lcd_string(message,line,style):
# Send string to display
# style=1 Left justified
# style=2 Centred
# style=3 Right justified
if style==1:
message = message.ljust(LCD_WIDTH," ")
elif style==2:
message = message.center(LCD_WIDTH," ")
elif style==3:
message = message.rjust(LCD_WIDTH," ")
lcd_byte(line, LCD_CMD)
for i in range(LCD_WIDTH):
lcd_byte(ord(message[i]),LCD_CHR)
def lcd_backlight(flag):
# Toggle backlight on-off-on
GPIO.output(LED_ON, flag)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
pass
finally:
lcd_byte(0x01, LCD_CMD)
lcd_string("Goodbye!",LCD_LINE_1,2)
GPIO.cleanup()
So my question is can i change the pin for lcd display that used GPIO 08
to other pin and change the program to used the changing RPi pin as i don't know whether the lcd display python program need to used the SPIO_CE0_N
in GPIO 08
or only used the GPIO 08
without the SPIO_CE0_N
function. 所以我的问题是我可以将使用
GPIO 08
LCD显示器的引脚更改为其他引脚,并将程序更改为使用更改的RPi引脚,因为我不知道LCD显示器python程序是否需要在GPIO 08
使用SPIO_CE0_N
还是仅使用不带SPIO_CE0_N
功能的GPIO 08
。
You use GPIO 8
for SPI_CE0
on Raspberry Pi only if you are using hardware SPI , and from your MCP3008
connections, it is pretty clear that you are. 仅在使用硬件SPI且从
MCP3008
连接中使用GPIO 8
, SPI_CE0
在Raspberry Pi SPI_CE0
GPIO 8
用于SPI_CE0
。
The simplest solution is to use Software SPI
for MCP3008
instead, and connect MCP3008 CLK
, DOUT
, DIN
, and CS/SHDN
pins to any other free digital GPIO pins, and use your GPIO08
for your LCD connections. 最简单的解决方案是改用
MCP3008
Software SPI
,并将MCP3008的CLK
, DOUT
, DIN
和CS/SHDN
引脚连接到任何其他免费的数字GPIO引脚,并使用GPIO08
进行LCD连接。 Or you can do the opposite and use software SPI for your LCD. 或者,您可以做相反的事情,并为LCD使用软件SPI。
Switching from hardware SPI to software SPI is easy, you only have to change pin numbers in the code. 从硬件SPI切换到软件SPI很容易,您只需更改代码中的引脚号即可。 You can read more details on using Software SPI with
MCP3008
here, https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/mcp3008#software-spi 您可以在这里( https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/mcp3008#software-spi)上了解有关将SPI与
MCP3008
使用的更多详细信息。
GPIO image for future reference, GPIO映像以供将来参考,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.