第18课.ADC和Touchscreen

1.简介

2.接口结构

解析:
    8路模拟信号的输入
    使用触摸屏时,引脚XP,XM,YP,YM被用于和触摸屏直接相连,剩下AIN[3:0]共4个引脚用于一般的ADC输入;当不使用触摸屏时,XP, XM,YP和YM这4个引脚也可以用于一般一般的ADC输入。

3.ADC转换时间

4.ADC寄存器解析

ADCCON: ADC控制寄存器

ADCTSC:ADC触摸屏控制寄存器

此寄存器多用于触摸屏,对于普通ADC,使用它的默认值即可,或设置其位[2]为0。

ADCDLY: ADC启动或初始化延时寄存器

通过此寄存器可以设置采样的延时时间
    问:为什么要延时采样?
    答:如下图

ADCDAT0: ADC转换数据寄存器

5.代码解析

adc.h

#ifndef _ADC_H
#define _ADC_H

void adc_init(void);
int adc_read_ain0(void);

#endif /*   _ADC_H  */

adc.c

void adc_init(void)
{
    /* [15] : ECFLG,  1 = End of A/D conversion
     * [14] : PRSCEN, 1 = A/D converter prescaler enable
     * [13:6]: PRSCVL, adc clk = PCLK / (PRSCVL + 1)
     * [5:3] : SEL_MUX, 000 = AIN 0
     * [2]   : STDBM
     * [0]   : 1 = A/D conversion starts and this bit is cleared after the startup.
     */
    ADCCON = (1<<14) | (49<<6) | (0<<3);

    ADCDLY = 0xff;
}

int adc_read_ain0(void)
{
    /*  启动ADC   */
    ADCCON |= (1<<0);

    while(!(ADCCON & (1<<15))); /*  等待ADC结束 */

    return ADCDAT0 & 0x3ff;
}

6.电阻触摸屏的原理

7.寄存器解析

ADCDAT1: ADC转换数据寄存器

ADCUPDN: 笔尖抬起或落下中断状态寄存器

8.程序设计流程图

原文地址:https://www.cnblogs.com/huangdengtao/p/12255656.html

时间: 2024-08-02 23:55:03

第18课.ADC和Touchscreen的相关文章

Spark IMF传奇行动第18课:RDD持久化、广播、累加器总结

昨晚听了王家林老师的Spark IMF传奇行动第18课:RDD持久化.广播.累加器,作业是unpersist试验,阅读累加器源码看内部工作机制: scala> val rdd = sc.parallelize(1 to 1000) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:21 scala> rdd.persist res0: rdd.type

3月3日完成第17课,准备开始第18课

昨天,也就是3月3日终于完成word文档"lvs+keepalived集群架构服务应用指南.doc"第17课的部分.之前,又完成1节51cto学院里,oldboy关于职业发展的视频笔记"linux运维人员需要具备的技能说明". 本来的计划是春节前完成第17课,没想到又拖成2个月. 第18课估计也不会好到那里去-- 我现在又开始纠结到底要不要进行MySQL的最后1课了,在公司根本就用不到MySQL.是不是要在换工作之前,先把4节shell课程完成再说呢? 先学能用的,

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform)让用户方便的操作数据库中的数据. 什么是ADO.NET 是一组库类,System.Data. Ado.net组成 Connection:用来连接数据库 Command:用来执行SQL语句 DataReader:只读.只进的结果集,一条一条读取数据(SteamReader.XmlReader) Da

数据-第18课-栈与递归

第18课-栈与递归 C语言中的疑惑 讨论中…… 小A:C语言中常说“局部变量在栈上分配空间”,那么这个地方的“栈”和我们之前学习的栈数据结构有关系吗? 小B:我觉得应该没关系吧 :我觉得应该没关系吧,只是名称碰巧一致而已吧?! 1. 函数调用时的栈 (1)程序中的“函数调用栈”是栈数据结构的一种应用. (2)函数调用栈一般是从高地址向低地址增长的. l  栈底为内存的高地址处. l  栈顶为内存的低地址处. (3)函数调用栈中存储的数据为活动记录 2. 活动记录 活动记录是函数调用时一系列相关信

安卓学习第18课——StackView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation

Alex 的 Hadoop 菜鸟教程: 第18课 用Http的方式访问HDFS - HttpFs 教程

声明 本文基于Centos 6.x + CDH 5.x HttpFs 有啥用 HttpFs可以干这两件事情 通过HttpFs你可以在浏览器里面管理HDFS上的文件 HttpFs还提供了一套REST 风格的API可以用来管理HDFS 其实很简单的一个东西嘛,但是很实用 安装HttpFs 在集群里面找一台可以访问hdfs的机器安装HttpFs $ sudo yum install hadoop-httpfs 配置 编辑/etc/hadoop/conf/core-site.xml <property>

第18课构造函数(中)

带有参数的构造函数(可以使每个对象有不同的初始化状态) 构造函数可以根据需要定义参数 一个类中可以存在多个重载的构造函数 构造函数的重载遵循C++重载的规则class Test{public: Test(int v) { //use v to initialize member }} 友情提示对象定义和对象声明不同 对象定义——申请对象的空间并调用构造函数 对象声明——告诉编译器存在这样一个对象 Test t; //定义对象并调用构造函数 int main(){ //告诉编译器存在名为t 的Te

第18课 对象的构造(中)

1. 带参数的构造函数 (1)构造函数可以根据需要定义参数 (2)一个类中可以存在多个重载的构造函数 (3)构造函数的重载遵循C++重载规则 [友情提示]对象的定义和声明不同 ①对象定义:申请对象的空间并调用构造函数(如Test t;//定义并调用构造函数) ②对象声明:告诉编译器己经存在一个对象,并不调用构造函数(如extern Test t;) 2. 构造函数的调用 (1)一般情况下,编译器会根据给定的参数情况自动调用相应的构造函数 [编程实验]带参数的构造函数 #include <stdi

第18课 三目运算符和逗号表达式

1. 三目运算符 (1)三目运算符(a?b:c)可以作为逻辑运算的载体 (2)规则:当a的值为真时,返回变量b的值(而不是变量本身):否则返回c的值. [实例分析]三目运算符初探 #include <stdio.h> int main() { int a = 1; int b = 2; int c = 0; c = a < b ? a : b; //(a<b)?a:b; //以下代码试图根据条件有选择地给a或b变量赋值.但这样的 //代码是错的,因为三目运算符的返回值是a或b变量的