日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树莓派上使用 LCD1602 显示状态

發(fā)布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派上使用 LCD1602 显示状态 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

手頭有一塊 LCD1602顯示屏,于是嘗試著用樹莓派控制它的顯示。網(wǎng)上直接找到現(xiàn)成的例子,操作成功,在此記錄。

?

樹莓派版本:Model 3B+

樹莓派系統(tǒng):Raspbian Stretch with desktop and recommended software,April 2019

參考資料:《樹莓派+LCD1602實現(xiàn)系統(tǒng)監(jiān)控: IP/時鐘/溫度/內(nèi)存》。

在樹莓派電源關(guān)閉時,根據(jù)參考資料中的連接方式(截圖如下)連接樹莓派、LCD顯示屏和電位器,因為很多引腳需要連接正負(fù)極,樹莓派上沒有足夠多的5v,所以我用了一個面包板。

連接好后如下圖所示。我的線太長了,顯得有些亂,大家接線的時候小心短路。

樹莓派開機(jī)。

LCD 顯示屏就會亮,但沒有顯示內(nèi)容。

將參考資料中的兩個 python 文件保存至樹莓派中的同一文件夾下,長文件命名為1602led.py,短文件命名為1602.py。代碼如下,點擊+展開:

#!/usr/bin/python# # based on code from lrvick and LiquidCrystal # lrvic - https://github.com/lrvick/raspi-hd44780/blob/master/hd44780.py # LiquidCrystal - https://github.com/arduino/Arduino/blob/master/libraries/LiquidCrystal/LiquidCrystal.cpp # from time import sleepclass lcd1602:# commandsLCD_CLEARDISPLAY = 0x01LCD_RETURNHOME = 0x02LCD_ENTRYMODESET = 0x04LCD_DISPLAYCONTROL = 0x08LCD_CURSORSHIFT = 0x10LCD_FUNCTIONSET = 0x20LCD_SETCGRAMADDR = 0x40LCD_SETDDRAMADDR = 0x80# flags for display entry modeLCD_ENTRYRIGHT = 0x00LCD_ENTRYLEFT = 0x02LCD_ENTRYSHIFTINCREMENT = 0x01LCD_ENTRYSHIFTDECREMENT = 0x00# flags for display on/off controlLCD_DISPLAYON = 0x04LCD_DISPLAYOFF = 0x00LCD_CURSORON = 0x02LCD_CURSOROFF = 0x00LCD_BLINKON = 0x01LCD_BLINKOFF = 0x00# flags for display/cursor shiftLCD_DISPLAYMOVE = 0x08LCD_CURSORMOVE = 0x00# flags for display/cursor shiftLCD_DISPLAYMOVE = 0x08LCD_CURSORMOVE = 0x00LCD_MOVERIGHT = 0x04LCD_MOVELEFT = 0x00# flags for function setLCD_8BITMODE = 0x10LCD_4BITMODE = 0x00LCD_2LINE = 0x08LCD_1LINE = 0x00LCD_5x10DOTS = 0x04LCD_5x8DOTS = 0x00def __init__(self, pin_rs=14, pin_e=15, pins_db=[17, 18, 27, 22], GPIO = None):# Emulate the old behavior of using RPi.GPIO if we haven't been given# an explicit GPIO interface to useif not GPIO:import RPi.GPIO as GPIOself.GPIO = GPIOself.pin_rs = pin_rsself.pin_e = pin_eself.pins_db = pins_dbself.GPIO.setmode(GPIO.BCM)self.GPIO.setwarnings(False)self.GPIO.setup(self.pin_e, GPIO.OUT)self.GPIO.setup(self.pin_rs, GPIO.OUT)for pin in self.pins_db:self.GPIO.setup(pin, GPIO.OUT)self.write4bits(0x33) # initializationself.write4bits(0x32) # initializationself.write4bits(0x28) # 2 line 5x7 matrixself.write4bits(0x0C) # turn cursor off 0x0E to enable cursorself.write4bits(0x06) # shift cursor right self.displaycontrol = self.LCD_DISPLAYON | self.LCD_CURSOROFF | self.LCD_BLINKOFFself.displayfunction = self.LCD_4BITMODE | self.LCD_1LINE | self.LCD_5x8DOTSself.displayfunction |= self.LCD_2LINE""" Initialize to default text direction (for romance languages) """self.displaymode = self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENTself.write4bits(self.LCD_ENTRYMODESET | self.displaymode) # set the entry mode self.clear()def begin(self, cols, lines):if (lines > 1):self.numlines = linesself.displayfunction |= self.LCD_2LINEself.currline = 0def home(self):self.write4bits(self.LCD_RETURNHOME) # set cursor position to zeroself.delayMicroseconds(3000) # this command takes a long time!def clear(self):self.write4bits(self.LCD_CLEARDISPLAY) # command to clear displayself.delayMicroseconds(3000) # 3000 microsecond sleep, clearing the display takes a long timedef setCursor(self, col, row):self.row_offsets = [ 0x00, 0x40, 0x14, 0x54 ]if ( row > self.numlines ): row = self.numlines - 1 # we count rows starting w/0 self.write4bits(self.LCD_SETDDRAMADDR | (col + self.row_offsets[row]))def noDisplay(self): """ Turn the display off (quickly) """self.displaycontrol &= ~self.LCD_DISPLAYONself.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)def display(self):""" Turn the display on (quickly) """self.displaycontrol |= self.LCD_DISPLAYONself.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)def noCursor(self):""" Turns the underline cursor on/off """self.displaycontrol &= ~self.LCD_CURSORONself.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)def cursor(self):""" Cursor On """self.displaycontrol |= self.LCD_CURSORONself.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)def noBlink(self):""" Turn on and off the blinking cursor """self.displaycontrol &= ~self.LCD_BLINKONself.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)def noBlink(self):""" Turn on and off the blinking cursor """self.displaycontrol &= ~self.LCD_BLINKONself.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)def DisplayLeft(self):""" These commands scroll the display without changing the RAM """self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVELEFT)def scrollDisplayRight(self):""" These commands scroll the display without changing the RAM """self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVERIGHT);def leftToRight(self):""" This is for text that flows Left to Right """self.displaymode |= self.LCD_ENTRYLEFTself.write4bits(self.LCD_ENTRYMODESET | self.displaymode);def rightToLeft(self):""" This is for text that flows Right to Left """self.displaymode &= ~self.LCD_ENTRYLEFTself.write4bits(self.LCD_ENTRYMODESET | self.displaymode)def autoscroll(self):""" This will 'right justify' text from the cursor """self.displaymode |= self.LCD_ENTRYSHIFTINCREMENTself.write4bits(self.LCD_ENTRYMODESET | self.displaymode)def noAutoscroll(self): """ This will 'left justify' text from the cursor """self.displaymode &= ~self.LCD_ENTRYSHIFTINCREMENTself.write4bits(self.LCD_ENTRYMODESET | self.displaymode)def write4bits(self, bits, char_mode=False):""" Send command to LCD """self.delayMicroseconds(1000) # 1000 microsecond sleep bits=bin(bits)[2:].zfill(8)self.GPIO.output(self.pin_rs, char_mode)for pin in self.pins_db:self.GPIO.output(pin, False)for i in range(4):if bits[i] == "1":self.GPIO.output(self.pins_db[::-1][i], True)self.pulseEnable()for pin in self.pins_db:self.GPIO.output(pin, False)for i in range(4,8):if bits[i] == "1":self.GPIO.output(self.pins_db[::-1][i-4], True)self.pulseEnable()def delayMicroseconds(self, microseconds):seconds = microseconds / float(1000000) # divide microseconds by 1 million for seconds sleep(seconds)def pulseEnable(self):self.GPIO.output(self.pin_e, False)self.delayMicroseconds(1) # 1 microsecond pause - enable pulse must be > 450ns self.GPIO.output(self.pin_e, True)self.delayMicroseconds(1) # 1 microsecond pause - enable pulse must be > 450ns self.GPIO.output(self.pin_e, False)self.delayMicroseconds(1) # commands need > 37us to settledef message(self, text):""" Send string to LCD. Newline wraps to second line"""for char in text:if char == '\n':self.write4bits(0xC0) # next lineelse:self.write4bits(ord(char),True)if __name__ == '__main__':lcd = lcd1602()lcd.clear()lcd.message("hello world!") 1602led.py #!/usr/bin/pythonfrom lcd1602 import * from datetime import * import commandsdef get_cpu_temp():tmp = open('/sys/class/thermal/thermal_zone0/temp')cpu = tmp.read()tmp.close()return '{:.2f}'.format( float(cpu)/1000 ) + ' C'def get_gpu_temp():tmp = commands.getoutput('vcgencmd measure_temp|awk -F= \'{print $2}\'').replace('\'C','')gpu = float(tmp)return '{:.2f}'.format( gpu ) + ' C'def get_time_now():return datetime.now().strftime(' %H:%M:%S\n %Y-%m-%d')def get_ip_info():return commands.getoutput('ifconfig wlan0|grep inet|awk -Faddr: \'{print $2}\'|awk \'{print $1}\'')def get_mem_info():total= commands.getoutput('free -m|grep Mem:|awk \'{print $2}\'') free = commands.getoutput('free -m|grep cache:|awk \'{print $4}\'')return 'MEM:\n ' + free +' / '+ total +' M'lcd = lcd1602() lcd.clear()if __name__ == '__main__':while(1):lcd.clear()lcd.message( get_ip_info() )sleep(5)lcd.clear()lcd.message( get_time_now() )sleep(5)lcd.clear()lcd.message( get_mem_info() )sleep(5)lcd.clear()lcd.message( 'CPU: ' + get_cpu_temp()+'\n' )lcd.message( 'GPU: ' + get_gpu_temp() )sleep(5) 1602.py

代碼需用 python2.7 運行,終端進(jìn)入對應(yīng)的文件夾下,執(zhí)行?python 1602.py?,就能發(fā)現(xiàn)顯示屏變化了。注意,可能需要旋轉(zhuǎn)電位器轉(zhuǎn)軸來矯正顯示屏。

運行結(jié)果:

?

該程序是無限循環(huán)的,終止程序后(control+C),顯示屏?xí)A糇詈鬆顟B(tài)。

相關(guān)文章

  • 樹莓派在 OLED 顯示屏上輸出文字
  • Python 控制樹莓派 GPIO 輸出:控制 LED 燈
  • 樹莓派中添加中文輸入法
  • Mac 通過 VNC 打開樹莓派遠(yuǎn)程桌面(不用獨立顯示屏)
  • 用 Mac 給樹莓派重裝系統(tǒng)
  • 樹莓派的系統(tǒng)安裝,并且利用網(wǎng)線直連 Mac 進(jìn)行配置
  • ?

    轉(zhuǎn)載于:https://www.cnblogs.com/zhenqichai/p/raspberry-pi-GPIO-control-lcd-1602.html

    總結(jié)

    以上是生活随笔為你收集整理的树莓派上使用 LCD1602 显示状态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 九九热这里只有 | 奇米视频在线 | 高清久久 | 超碰成人av | 韩国三级丰满少妇高潮 | 成人h片 | 久久成人免费网站 | 亚洲 欧美 激情 小说 另类 | 这里只有精品视频在线观看 | 性欧美精品中出 | 国产精品久久久一区二区三区 | 欧美手机看片 | 丰满少妇在线观看网站 | 91视频啪啪| 五月天婷婷在线播放 | 一区二区三区欧美日韩 | 国产成人亚洲精品自产在线 | 中文字幕在线成人 | 免费日本特黄 | 国产精品无码免费专区午夜 | 夜夜av | 五月婷婷综合在线 | 双腿张开被9个男人调教 | 国产aⅴ片 | aaa国产 | 波多野结衣黄色网址 | 不卡av电影在线 | 国产久视频 | 中文字幕一区二区三区四区不卡 | 欧美人xxxx | 精品在线观看免费 | 人妻少妇精品视频一区二区三区 | 乱lun合集小可的奶水 | 国产精品高清无码在线观看 | 男生和女生一起差差差视频 | 日本成人激情 | 免费天堂av | 欧美日韩国产区 | 中文字幕一区视频 | 久久1234| 日韩精品成人一区 | 超碰香蕉| 国产成人精品一区二区三区在线 | 宅男噜噜噜66一区二区 | 五月天三级 | 黑人中文字幕一区二区三区 | 第一章婶婶的性事 | 天天做日日做 | 久久精品三级视频 | 手机看片日韩福利 | 中文字幕视频观看 | 日批视屏 | 国产精品久久免费 | 国产成人三级在线 | 伊人av网站| 狂野欧美性猛交xxxx777 | 亚洲一区二区观看播放 | 久久这里只有精品23 | 婷婷亚洲五月色综合 | 美女隐私免费 | 高h调教冰块play男男双性文 | 爱爱中文字幕 | 靠逼在线观看 | 一区二区三区精品在线 | 亚洲一级二级 | 秋霞视频在线观看 | 亚洲精品小视频在线观看 | 国产精品久久久久久免费 | 欧美激情视频一区二区三区不卡 | 欧美精品黄色 | 中文字幕一二三四区 | 久久小视频 | 一级免费大片 | 白浆一区| 国产亚洲精品久久久久四川人 | 免费三片在线视频 | xx久久| 黄网站免费在线观看 | 久久久久婷 | h在线网站 | 裸体一区二区三区 | www.午夜激情 | 亚洲精品久久久久久无码色欲四季 | 中文字幕电影一区 | 欧美日韩一区二区三区在线视频 | 欧美视频导航 | 东京久久 | 国产午夜精品视频 | 少妇在线播放 | 最新天堂av| 国产人成 | 国产亚洲精久久久久久无码苍井空 | 美女让男人捅 | 天天操天天操天天 | 欧美一二三级 | 热久久免费| 国产艳情片 | 欧洲成人午夜精品无码区久久 | 性欧美色图 |