首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环液晶显示屏信息

循环液晶显示屏信息
EN

Stack Overflow用户
提问于 2013-12-25 19:34:45
回答 1查看 553关注 0票数 0

我有下面的python源代码来显示一些信息,在液晶屏幕上附加到我的Raspberry Pi。它工作得很好,但我不能让它循环无限次。有人能帮我吗?

代码语言:javascript
复制
import RPi.GPIO as GPIO
import time
from time import sleep
import socket
import fcntl
import struct
from pycgminer import CgminerAPI

LCD_RS = 25
LCD_E  = 24
LCD_D4 = 23 
LCD_D5 = 17
LCD_D6 = 18
LCD_D7 = 22

LCD_WIDTH = 16 
LCD_CHR = True
LCD_CMD = False

LCD_LINE_1 = 0x80
LCD_LINE_2 = 0xC0 

E_PULSE = 0.00005
E_DELAY = 0.00005

def main():

  GPIO.setmode(GPIO.BCM)       
  GPIO.setup(LCD_E, GPIO.OUT)  
  GPIO.setup(LCD_RS, GPIO.OUT) 
  GPIO.setup(LCD_D4, GPIO.OUT) 
  GPIO.setup(LCD_D5, GPIO.OUT) 
  GPIO.setup(LCD_D6, GPIO.OUT) 
  GPIO.setup(LCD_D7, GPIO.OUT) 

  lcd_init()

  #UNIT

  lcd_byte(LCD_LINE_1, LCD_CMD)
  lcd_string("UNIT NAME",2)
  lcd_byte(LCD_LINE_2, LCD_CMD)
  lcd_string("MODEL NUMBER",2)
  sleep(7)

  #CLEAR

  lcd_byte(LCD_LINE_1, LCD_CMD)
  lcd_string("",2)
  lcd_byte(LCD_LINE_2, LCD_CMD)
  lcd_string("",2)
  sleep(0.4)

  #IP ADDRESS

  pi_ip = get_ip_address('eth0')
  lcd_byte(LCD_LINE_1, LCD_CMD)
  lcd_string("IP Address",2)
  lcd_byte(LCD_LINE_2, LCD_CMD)
  lcd_string(pi_ip,2)
  sleep(7)

  #CLEAR

  lcd_byte(LCD_LINE_1, LCD_CMD)
  lcd_string("",2)
  lcd_byte(LCD_LINE_2, LCD_CMD)
  lcd_string("",2)
  sleep(0.4)

  # AVG SPEED

  cgminer = CgminerAPI()
  summary = cgminer.summary()
  avgspeed = avg_speed()
  lcd_byte(LCD_LINE_1, LCD_CMD)
  lcd_string("Avg. Speed",2)
  lcd_byte(LCD_LINE_2, LCD_CMD)
  lcd_string(str(avgspeed) + " MH/s", 2)
  sleep(7)

  #CLEAR

  lcd_byte(LCD_LINE_1, LCD_CMD)
  lcd_string("",2)
  lcd_byte(LCD_LINE_2, LCD_CMD)
  lcd_string("",2)
  sleep(0.4)

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
    )[20:24])

def avg_speed():
    cgminer = CgminerAPI()
    summary = cgminer.summary()
    avg_speed_value = cgminer.command('summary')['SUMMARY'][0]['MHS av']
    return avg_speed_value

def lcd_init():
  lcd_byte(0x33,LCD_CMD)
  lcd_byte(0x32,LCD_CMD)
  lcd_byte(0x28,LCD_CMD)
  lcd_byte(0x0C,LCD_CMD)  
  lcd_byte(0x06,LCD_CMD)
  lcd_byte(0x01,LCD_CMD)  

def lcd_string(message,style):
  if style==1:
    message = message.ljust(LCD_WIDTH," ")  
  elif style==2:
    message = message.center(LCD_WIDTH," ")
  elif style==3:
    message = message.rjust(LCD_WIDTH," ")

  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

def lcd_byte(bits, mode):
  GPIO.output(LCD_RS, mode) 
  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)

  time.sleep(E_DELAY)    
  GPIO.output(LCD_E, True)  
  time.sleep(E_PULSE)
  GPIO.output(LCD_E, False)  
  time.sleep(E_DELAY)      

  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)

  time.sleep(E_DELAY)    
  GPIO.output(LCD_E, True)  
  time.sleep(E_PULSE)
  GPIO.output(LCD_E, False)  
  time.sleep(E_DELAY)   

if __name__ == '__main__':
  main()

简单地说,我想做的是在def main()下重复所有的事情

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-25 19:48:04

愚蠢的解决方案:

代码语言:javascript
复制
def main():
    while True:
        # all your code here

但这可能不是个好主意..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20776141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档