从本节起,開始使用ClassA20类库完毕操作外设的功能,请先在https://github.com/tjCFeng/ClassA20下载ClassA20类库。

封装的目的就是简化操作,试想一下。假设想在Linux中直接设置GPIO寄存器须要做什么工作?基本上计算物理地址、获取映射地址、了解每一个寄存器的作用、设置相应的位。。

。。。非常是繁琐。而使用了封装的类库之后,仅仅须要这样做:

仅仅要从原理图上找到了相应的IO口,其它的能够不必考虑。这样的开发效率我就不多说了(说的这段时间IO口已经操作完了,呵呵)。

Fun的作用是选择IO口的功能。打开GPIO.pas文件能够看到定义。每一个IO口的功能是不一样的。所以须要依照手冊说明指定。

只是一般都是Fun0是输入。Fun1是输出,其它的没有规律。

Pull的作用是是否打开内部的拉电阻。香蕉派的PH24已经有上拉电阻了,所以能够不用设置。假设是自己建立的电路没有拉电阻不妨设置一下。

单个IO口操作非常快,假设我要是想对某一器件输出一个8位、16位等的数据,难道我要创建这很多的对象然后再一个个的操作吗?绝对不行,就算你不怕麻烦。时序上可能也不同意,所以这个时候,TGPIOGROUP这个类就该出现了。

TGPIOGROUP在创建的时候仅仅指定哪个Port,而不用指定Pin。所以在输出的时候可以一次性赋值给这个Port。比如:

不要试图在你的设备上执行这段代码。由于这段代码仅仅是举个样例,执行的话可能会造成系统崩溃,请更改为正确的Port后再执行。

既然叫IO,那么有输出就必定有输入。然而因为如今还没有实现内核中断转到用户程序中,所以如今临时不能响应输入之类的中断,仅仅能採用轮询法。这个强烈不推荐。还是等中断转发实现后再来考虑吧(不知为何在香蕉派中request_irq总是返回ErrorCode:-22。同一程序在pcDuino上没有问题。

并且驱动的编译还要根据内核的版本号,非常麻烦。眼下还没有找到一个好方法)。

了解这些后,想制作一个控制LED的程序简直易如反掌。比方以下这种:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGpDRmVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

实在太简单了,也非常没劲,不要浪费时间,做点有用的东西吧,控制Nokia 5110 的 LCD 显示一些东西。

先搭建硬件环境,找到空余的引脚,把LCD连接上。比方我是这样连接的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGpDRmVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGpDRmVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

RST - PI14

SCE - PI10

D/C - PI16

DIN - PH21

CLK - PH20

剩下的VCC和GND自己找吧

依据硬件的连接。再来编写软件。为了程序结构的清晰,我创建了一个5110的类。单独一个文件。类的定义是这种:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGpDRmVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

类中仅仅有public里的函数是可见的,其它的为私有函数和变量。

从这里下载这个单元文件LCD5110.pas,链接: http://pan.baidu.com/s/1gdxinGB password:
cnll。假设引脚的定义不一样。请在文件里找到这个部分改为自己的引脚:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGpDRmVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

功能实现了。以下来搭建显示界面。我是这样做的

放上了两个button和一个Memo输入框。

选择窗口后在事件里创建Create和Close两个事件,再分别双击两个button创建Click事件。输入代码:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGpDRmVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

编写完成,開始执行。在输入框中随便输入文字。然后点“ShowTextbutton”,小屏幕上有显示了:

请在这里下载这个单元文件LCD5110.pas,链接: http://pan.baidu.com/s/1gdxinGB password: cnll。

请在https://github.com/tjCFeng/ClassA20下载ClassA20类库。

请在这里下载这个单元文件LCD5110.pas,链接: http://pan.baidu.com/s/1gdxinGB password: cnll。

请在https://github.com/tjCFeng/ClassA20下载ClassA20类库。

最新文章

  1. yii2 伪静态配置
  2. 用原生js实现的链式调用函数
  3. 如何通过apk获得包名及Activiy 名称
  4. pip和requests模块的安装
  5. Oracle decode()函数应用
  6. sourcesafe.light 开源项目启动
  7. iOS 学习 - 5.UILabel设置行距
  8. 【C#】依赖于SharpZipLib的Zip压缩工具类
  9. WCF学习
  10. 文件上传工具类 UploadUtil.java
  11. http://www.cnblogs.com/chillsrc/category/49632.html
  12. memcachedb-持久化存储的缓存系统
  13. Android APK反编译详解(非常有用)
  14. 老李分享:为何要使用 Web Services
  15. JAVA设计模式之【装饰者模式】
  16. 三、编辑 Update set
  17. C++ 中缀转后缀表达式并求值
  18. windows下安装nodejs以及python2502,2503解决方案
  19. [MapReduce_add_5] MapReduce 实现标签的生成与聚合
  20. WPF 带清除按钮的文字框SearchTextBox

热门文章

  1. Hadoop Hive概念学习系列之hive与依赖环境的交互(二十一)
  2. Java系列学习(零)-写在前面的话
  3. CSS——半透明
  4. CNN结构:色彩特征提取-从RGB空间到HSV空间(色彩冷暖判断)
  5. CSS居中布局方案
  6. seam的定时轮巡
  7. c#符号含义
  8. CAD通过扩展记录实体向数据库读写用户自定义的全局数据(com接口VB语言)
  9. Boolean对象与Boolean原始值的区别
  10. grep,cut,wc,sort,diff,uniq,patch命令