从本节起,開始使用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类库。

【Allwinner ClassA20类库分析】4.GPIO类的使用的更多相关文章

  1. 【Allwinner ClassA20类库分析】 2.free pascal语法及结构简析

        上一节介绍了Lazarus一般的开发操作流程,对于不熟悉pascal语言的朋友可能看的还是不大明确.不知道pascal代码里都应该包括什么或起什么作用.这回就简单地介绍下语法及代码文件的结构. ...

  2. WindowsPhone自定义控件详解(二) - 模板类库分析

    转自:http://blog.csdn.net/mr_raptor/article/details/7251948 WindowsPhone自定义控件详解(一) - 控件类库分析 上一节主要分析了控件 ...

  3. (转)C++类库开发之导出类设计原则

    上一篇博客详细陈述了类库开发的各个知识点(http://blog.csdn.net/z702143700/article/details/45989993),本文将进一步陈述,对于类库开发过程中导出类 ...

  4. LibLog 类库 分析

    前期思考: Microsoft.Logging 是否可用? 是否需要提供默认的 Logger 实现? 不需要.1,用户自己开启日志功能,设置开启属性,即可打印出相应的日志. LibLog 类库分析: ...

  5. 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】

    之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...

  6. C#抓取和分析网页的类

    抓取和分析网页的类. 主要功能有: Ontology 1.提取网页的纯文本,去所有html标签和javascript代码 2.提取网页的链接,包括href和frame及iframe 3.提取网页的ti ...

  7. 分析业务模型-类图(Class Diagram)

    分析业务模型-类图(Class Diagram)     分析业务模型-类图(Class Diagram)(上) 摘要:类图(Class Diagram)可能是用得最多的一种UML图.类图的基本语法并 ...

  8. STM32 C++编程 002 GPIO类

    使用 C++ 语言给 STM32 编写一个 Gpio 类 我使用的STM32芯片:STM32F103ZET6 我们使用的STM32库版本:V3.5.0 注意: 想学习本套 STM32 C++编程 的专 ...

  9. 如何分析一个QT类

    作者:gnuhpc  出处:http://www.cnblogs.com/gnuhpc/ 我们以QLineEdit这个类为例来看看如何学习分析一个QT类. 1.Public Types: 这是一个在这 ...

随机推荐

  1. 331 Verify Preorder Serialization of a Binary Tree 验证二叉树的前序序列化

    序列化二叉树的一种方法是使用前序遍历.当我们遇到一个非空节点时,我们可以记录这个节点的值.如果它是一个空节点,我们可以使用一个标记值,例如 #.     _9_    /   \   3     2  ...

  2. 使用Jquery.form.js ajax表单提交插件弹出下载提示框

    现象: 使用jquery的from做ajax表单提交的时候,后台处理完毕返回json字符串,此时浏览器提示下载一个json文件而不是在success里面继续解析该json对象. 具体的原因: 浏览器兼 ...

  3. cocos2dx实现单机版三国杀(二)

    接上续,东西还没有做完 所以代码免不了改动 之前的头文件现在又改了不少,因为架构也改变了现在主要类就是GameScene.GameUI.PlayInfo.Poker这四个类  前面想的GameLoop ...

  4. JQuery中常用的$.get(),$.post(),$.ajax(),$.getJSON(),load()的详解与区别

    背景:因为最近需要获取本地的数据件进行项目测试,需要用到JQuery实现数据文件的读取,但是由于对JQuery内的获取文件方式不太了解,这次趁着机会进行一下总结.因为该总结是本人根据平常的使用及网上的 ...

  5. C#——计时器的操作

    我们可以用Stopwatch类获得程序的运行时间,在优化代码时,可以用此方法来查看优化前后程序所耗费的时间 static void Main(string[] args) { Stopwatch sw ...

  6. 史上巨坑: vim的"set foldmethod=syntax"设置竟然是导致ctrl+p(ctrl+n)补全在文件稍大时光标位于中间位置补全效率变慢的元凶!

    最近我的vim又让我闹心了. 问题出现在supertab的补全速度上, 有时候按下tab键半天才弹出补全列表, 即便是弹出了列表在列表上下移动也变得的相当缓慢, 这让我的很是蛋疼. 在完全无法接受这个 ...

  7. Caffe2:添加CUDA路径

    在使用Eclipse时候,仍然出现 libcuda.so 找不到的情况..... 原因:cuda环境没有设置到系统环境中. 方案: 设置CUDA path: 在bashrc中添加路径,只对当前用户产生 ...

  8. Java-Class-Miniprogram:com.common.utils.miniprogram.Auth

    ylbtech-Java-Class-miniprogram:com.common.utils.miniprogram.Auth 1.返回顶部 1.1. package com.ylbtech.com ...

  9. cmake更新版本简记

    问题描述: 由于需求,要在服务器上安装ANTs(Advanced Normalization Tools).然而最新版的ANTs需要下载源码并用cmake编译, 于是根据https://github. ...

  10. models中,字段参数limit_choices_to的用法

    这里,在使用 ModelForm 渲染前端页面的前提下,对于 models 中的 ManyToManyField 类型字段会在 ModelForm 中被转化为 ModelMultipleChoiceF ...