极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14405|回复: 4

[TPYBoard-Micropython之会python就能做硬件 4] 学习使用电位器和1602显示屏

[复制链接]
发表于 2017-2-8 17:31:48 | 显示全部楼层 |阅读模式
本帖最后由 mybag1 于 2017-2-8 17:31 编辑

转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi            欢迎加入讨论群 64770604

一、实验器材

1、TPYboard V102板  一块

2、电位器   一个

3、1602 屏 一块

4、杜邦线:若干
二、电位器的使用

        电位器 (英文:Potentiometer)是可变电阻器的一种。通常是由电阻体与转动或滑动系统组成,即靠一个动触点在电阻体上移动,获得部分电压输出。电位器具有三个引出端,阻值可按某种变化规律调节。电位器通常由电阻体和可移动的电刷组成。当电刷沿电阻体移动时,在输出端即获得与位移量成一定关系的电阻值或电压。电位器在电路中的主要作用有三个,一是用作分压器;二是用作变阻器;三是用作电流控制器。今天的实验中,我们主要是用它来控制LCD1602的对比度。

   如上图,电位器(或微调电阻等等)常规引脚(仅举例说有3个引脚的电位器),两头的电阻值是固定的,中间引脚对任何一端引脚的电阻值是可变的。连接时,如果作为可变分压电阻用,则一端接输入电压,中间端接输出,余下端接地;如果作为可变电阻用,一端接输入电压,中间端接输出,余下端可悬空,或与中间端连接。
三、LCD1602的使用方法11602液晶板  1602液晶板也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。目前,尽管各厂家对其各自产品命名不尽相同,但均提供几乎都同样规格的1602模块或者兼容模块。1602最初采用的LCD控制器是HD44780,在各厂家生产的1602模块中,基本上也都采用了与之兼容的控制IC,所以从特性上基本上是一样的。因此,我们买到的1602模块,在端口标记上可能有所不同,有的从左向右,有的从右向左,但特性上是一样的。


21602的引脚情况
第1脚:VSS为电源负极
第2脚:VCC接5V电源正极
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,本实验通过一个10K的电位器调整对比度,也可以换用一个1KΩ电阻)。
第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。
第7~14脚:D0~D7为8位双向数据端。
第15~16脚:背灯电源。15脚背光正极,16脚背光负极。
31602的接线方法
1602的接线方法有两种,一种是8线连接法,一种是4线连接法。这两种方法具体可参见http://www.cnblogs.com/xiaowuyi/p/3390024.html
四、实验板的连接方法
具体接线如下:

LCD1602
TPYBoard V102
电位器
VSS
GND
3
VDD
3.3V
1
V0

                        2
                        RS
                        Y10

                        RW
                        GND

                        E
                        Y9

                        D0


                        D1


                        D2


                        D3


                        D4
                        Y5

                        D5
                        Y6

                        D6
                        Y7

                        D7
                        Y8

                        A
                        3.3V

                        K
                        GND

连接后如下图:


五、显示hello world的实验1、代码如下
  1. # main.py -- put your code here!

  2. import pyb

  3. from pyb import Pin

  4. from pyb import delay, udelay,millis

  5. from tpyb_lcd1602 import TPYBoardLcd1602Api

  6. from tpyb_gpio_lcd1602 import TPYBoardGpioLcd1602

  7.    

  8.    

  9. def main():

  10.     lcd = TPYBoardGpioLcd1602(rs_pin=Pin.board.Y10,

  11.                   enable_pin=Pin.board.Y9,

  12.                   d4_pin=Pin.board.Y5,

  13.                   d5_pin=Pin.board.Y6,

  14.                   d6_pin=Pin.board.Y7,

  15.                   d7_pin=Pin.board.Y8,

  16.                   num_lines=2, num_columns=16)

  17.    lcd.lcd1602_write_string("hello world!\nThis is TPYBoard")


  18.    

  19. #if __name__ == "__main__":

  20. main()
复制代码

2、实验效果
六、简单的秒表
下面做一个简单的计时器,断电、按键USR置零。
  1. # main.py -- put your code here!
  2. import pyb
  3. from pyb import Pin
  4. from pyb import delay, udelay,millis
  5. from tpyb_lcd1602 import TPYBoardLcd1602Api
  6. from tpyb_gpio_lcd1602 import TPYBoardGpioLcd1602


  7. lcd = TPYBoardGpioLcd1602(rs_pin=Pin.board.Y10,
  8.               enable_pin=Pin.board.Y9,
  9.               d4_pin=Pin.board.Y5,
  10.               d5_pin=Pin.board.Y6,
  11.               d6_pin=Pin.board.Y7,
  12.               d7_pin=Pin.board.Y8,
  13.               num_lines=2, num_columns=16)
  14. sw=pyb.Switch()
  15. def test():
  16.     global count
  17.     lcd.clear()
  18.     count = 0

  19. sw.callback(test)

  20. #lcd.lcd1602_write_string("hello world!\nThis is TPYBoard")
  21. #pyb.delay(1000)
  22. #lcd.clear()
  23. count=0
  24. while True:
  25.     lcd.move_to(0, 0)
  26.     #%1d 宽度  返回运行当前程序的累计时间,单位是毫秒
  27.     #lcd.lcd1602_write_string("%1d" % (millis() // 1000))
  28.     delay(1000)
  29.     count += 1
  30. lcd.lcd1602_write_string(str(count))  
复制代码
实现效果:

如果上面的flash显示不了,请查看:
http://v.youku.com/v_show/id_XMjQ5OTI3NzQ5Mg==.html
七、按键中断的使用1、按键使用  tpyboard v102有两个按键,一个rst,重启键,一个usr。按键常用usr。常用的使用方法如下:
(1)定义按键
      sw = pyb.Switch()
  (2)常用方法
      sw():读取按键状态

      sw.callback(lambda:pyb.LED(1).toggle())  定义按键回调函数,这里lambda表达式,可以查阅一下baidu。呵呵
      
      sw.callback(None)   禁用按键回调函数

  (3)更复杂的使用回调函数(按键后翻转LED2)
     def test():
        pyb.LED(2).toggle()
     sw.callback(test)
2、中断的解释  现在谈谈按键回调函数发生时的细节。当你调用了含有 sw.callback( )的函数时,按键将在其连接引脚产生一个边沿触发(下降沿)外部中断。这意味着芯片将监听该引脚的任何状态变换,且如下事情会发生:
     步骤1、当按键被按下时引脚将发生改变(电平由低到高?),芯片处理器将记录这种变化;
     步骤2、处理器完成当前机器指令,退出执行状态并保存当前的状态(将寄存器的内容推入栈中)。这将停止当前运行的任何代码,例如正在执行着的 python 脚本;
     步骤3、芯片开始执行与按键相关的特定外部中断触发处理。该处理指向你在 sw.callback( )函数中指定的函数功能并执行之;
     步骤4、直到回调函数执行完毕,控制主权将回到中断处理手上;
     步骤5、按键中断处理将返回,芯片处理器确认记录该中断被执行过;
     步骤6、芯片调回步骤 2 的状态;
     步骤7、继续执行开始时的代码,除了短暂的暂停,这部分代码看起来似乎没有被打断过。
  当同一时间多个中断同时发生上述的过程将复杂得多。这种情况下拥有最高优先级别的中断将被首先执行,其他的中断按各自的优先级数序执行。按键中断的优先级最低。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2017-2-8 18:23:53 | 显示全部楼层
支持arduino?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-10 09:04:58 | 显示全部楼层

与arduino类似,但是用python3.x进行程序设计,而不是用c
回复 支持 反对

使用道具 举报

发表于 2017-2-10 12:13:25 | 显示全部楼层
mybag1 发表于 2017-2-10 09:04
与arduino类似,但是用python3.x进行程序设计,而不是用c

python2.7不可以?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-4 21:41:40 | 显示全部楼层
suoma 发表于 2017-2-10 12:13
python2.7不可以?

不行的,只支持3.x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 09:10 , Processed in 0.059515 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表