PIC16F690单片机做电容触摸程序
单片机高低电平实现电容触摸的原理
![单片机高低电平实现电容触摸的原理](https://img.taocdn.com/s3/m/ba938d82fc0a79563c1ec5da50e2524de518d0d8.png)
单片机高低电平实现电容触摸的原理
单片机实现电容触摸的原理可以简述为以下几个步骤:
1. 创建一个电容传感器电路:通过一个电容传感器电路将电容传感器与单片机连接起来。
该电路一般由一个电容触摸键与一个固定的参考电容组成。
2. 输出引脚设置为输出模式:将单片机的一个IO引脚设置为输出模式,将电容触摸键的控制电压输出到该引脚。
3. 创建一个短路:将输出引脚与接地进行短路,使得电容触摸键与参考电容形成一个带有电荷的电容电路。
4. 引脚设置为输入模式:将IO引脚设置为输入模式,停止输出控制电压。
5. 监测电压变化:开始监测IO引脚上的电压变化,由于电容触摸键的引脚与参考电容电路共享一个电容,当有物体触摸电容键时,电容的电荷将被改变,从而导致IO引脚上的电压变化。
6. 判断触摸:通过动态地监测IO引脚上电压的变化,可以判断是否有物体触摸了电容触摸键。
当监测到电压变化时,即可认为有物体触摸了电容触摸键,并进一步进行相应的处理。
总结来说,单片机实现电容触摸的原理是通过监测IO引脚上电压的变化,来判断是否有物体触摸了电容触摸键。
基于单片机的触摸软件处理
![基于单片机的触摸软件处理](https://img.taocdn.com/s3/m/222d2c4afe4733687e21aa3d.png)
图 1: 软件流程
电容的 初始化
使能中断 GIE = 1
Ma主i代n循L码o环op
中断
T0IF == 1?
ISR
否
调用其他 结束
外设中断服务
是,执行电容触摸传感程序
读 TMR1
否 T0IF == 1?
丢弃所读数据, 重新启动定时器
是
确定按钮 是否按下
求新的平均值
Cap ห้องสมุดไป่ตู้SR
设置下一个传感器
重启定时器 清零 T0IF 标志位
2008 Microchip Technology Inc.
DS01103A_CN 第 1 页
AN1103
变量 value 的结果将是当前传感器的读数,当前传感器
是在上一次电容触摸传感服务程序执行时设置为即将扫 描的传感器。随即变量 value 的值将会与 16 个点的平 均值进行比较,以确定频率计数是否有显著下降。
例 5:预定义常量
// C12INx- 0
1
2
3
COMP1[4] = {0x94, 0x95, 0x96, 0x97};
COMP2[4] = {0xA0, 0xA1, 0xA2, 0xA3};
必须根据 index 变量把比较器的寄存器设置为下例所示 常量之一。当使用某器件的四个固有按钮时,按钮的序 号直接映射成比较器输入通道。
当使用计算密集的方法 (如下文所述的百分比方法)
时,将添加额外的时间开销。
按钮检测算法
在编写固件之前要创建一个良好的系统,首先要做的就 是要使检测更为容易,通过使用寄生电容小的传感器从 而能够检测到较大的电容变化。这将使系统功能更容易 实现并减少开发时间。
对合理的系统而言,即使是非常小的变化也能被检测 到。能够控制如何去检测出变化量是衡量应用系统表现 的一个很好的观察点。我们所期望的系统是具有简单的 按钮并能在一定距离内感应到人的触摸。
MICROCHIP PIC16F690单片机 调试烧录指引
![MICROCHIP PIC16F690单片机 调试烧录指引](https://img.taocdn.com/s3/m/a31d6a3f3968011ca300913c.png)
一、烧录工具1.烧录器: GTFAB PM-D一台(配9V/3A内正外负电源适配器一个,USB线1条)2. PC电脑一台二、烧录软件版本信息MPLAB IDE V8.10三、适用芯片MICROCHIP PIC16F690单片机四、调试方法:1.取得烧录器,先将USB线连接PC电脑后,再插上电源适配器;2.打开烧写器电源,双击桌面图标,打开烧录软件界面。
3.选择菜单configure-device,在Device下拉中选择芯片型号为“PIC16F690”,并点击“OK”确认。
4.选择菜单Programmer-Select Programmer- PM-D,此时,output窗口显示烧录器的连接状态;5.确保烧写锁紧座内没放任何芯片,从MPLAB IDE上选择“Programmer(编程器)”->about跳出如下提示,点击“确定”,开始进行自检;6.屏幕跳出如下显示界面;7.点击OK,确认后在OUTPUT窗口中可以看到自检结果,如下图:8.选择菜单File-Import,打开待烧录的HEX文件(注:调用的文件必须与《芯片拷贝申请记录表》上的程序名称一致);9.此时,检查CHECKSUM值是否与《芯片拷贝申请记录表》上的校验码一致。
如不一致,需重新确认所调用的软件是否正确,或找软件工程师确认);10.确认校验码一致后,此时,即可进行芯片的烧写;11.将待烧录的芯片放入烧录座内。
放置方向为:烧录座第一脚与锁紧座柄成对角线,靠烧写杆相反一侧顶边放置。
芯片的上的极性标识靠烧写杆相反一侧的烧录座内顶边放置。
12.点击右上角的按钮,开始烧写芯片;13.烧录完成后,烧录器上方的绿色灯亮,output窗口内显示烧写结果;(注意:如出现红色字符或红灯亮,即为烧录失败)14.脱机烧写方法:14.1按第1-10步设置好,然后点击“Programmer”菜单下的“Offline Interface”进入脱机参数设置。
pic16f单片机例程 -回复
![pic16f单片机例程 -回复](https://img.taocdn.com/s3/m/145eb3c9a1116c175f0e7cd184254b35eefd1a99.png)
pic16f单片机例程-回复如何使用PIC16F 单片机编写程序。
第一步:了解PIC16F 单片机的基本知识PIC16F 是一种低功耗、高性能的单片机芯片,由美国微芯科技公司开发。
它拥有多种功能和较大的内存空间,适用于很多应用场景,如家电、汽车电子、工业控制等。
该单片机的主要特点包括:8 位的CPU,最多可存储8KB 的程序代码,具备各种输入/输出接口,支持多种通信协议,并且能够与外部设备进行数据交互。
第二步:准备开发工具和环境在编写PIC16F 单片机程序之前,我们需要准备好相应的开发工具和环境。
常用的工具包括MPLAB X IDE(集成开发环境)、XC8 C 编译器(用于编译C 语言代码),以及一个PICkit 编程器(用于将程序烧录到单片机上)。
安装MPLAB X IDE 后,在软件中选择合适的PIC16F 型号,创建一个新的项目,并将XC8 编译器与之关联。
第三步:编写程序代码在MPLAB X IDE 中,我们可以使用C 语言来编写PIC16F 的程序代码。
以下是一个简单的示例,用于控制一个LED 灯的开关:c#include <xc.h>配置LED 引脚#define LED_PIN RA0#define LED_TRIS TRISA0void main(void) {配置引脚为输出模式LED_TRIS = 0;主循环while (1) {点亮LEDLED_PIN = 1;延时一段时间__delay_ms(1000);熄灭LEDLED_PIN = 0;延时一段时间__delay_ms(1000);}}在这个示例中,我们首先通过宏定义来配置LED 对应的引脚和寄存器。
然后,在主函数中,我们将引脚配置为输出模式,并进入一个无限循环。
在循环中,我们先点亮LED,延时一段时间后再熄灭LED,并再次延时,以实现LED 的闪烁效果。
第四步:编译和烧录程序在编写完程序代码后,我们可以使用MPLAB X IDE 的XC8 编译器对代码进行编译。
PIC16程序设计及应用
![PIC16程序设计及应用](https://img.taocdn.com/s3/m/97efd0c6760bf78a6529647d27284b73f3423659.png)
PIC16程序设计及应用PIC16程序设计及应用第一章简介本文档旨在介绍PIC16系列微控制器的程序设计及应用。
针对初学者和有一定基础的开发人员,详细讲解了PIC16微控制器的相关知识和使用方法。
第二章 PIC16微控制器基础1.PIC16微控制器概述1.1.什么是PIC16微控制器1.2.PIC16微控制器的特点和优势1.3.PIC16微控制器的应用领域2.PIC16微控制器的硬件结构2.1.CPU和存储器单元2.2.输入输出端口2.3.定时器和计数器2.4.串行通信接口2.5.其他外设模块3.PIC16微控制器的指令集3.1.指令的格式和操作类型3.2.常用指令的详细介绍3.3.寄存器和存储器的访问方法第三章 PIC16程序设计基础1.开发环境搭建1.1.编程工具的选择1.2.编程环境的配置2.PIC16程序结构和编写规范2.1.基本程序框架和流程2.2.常用编程指导原则3.输入输出操作3.1.数字输入输出3.2.模拟输入输出3.3.中断输入输出4.定时器和计数器的应用4.1.延时功能的实现4.2.定时器中断的使用4.3.计数器的应用案例5.串行通信接口的使用5.1.串口通信的原理和标准5.2.串口通信的配置和编程6.其他外设模块的应用6.1.脉宽调制模块(PWM)6.2.电源管理6.3.LCD显示控制第四章 PIC16程序的调试和优化1.调试方法和工具1.1.硬件调试工具1.2.软件调试工具2.程序优化技巧2.1.代码效率的优化2.2.内存使用的优化附件:________本文档涉及的附件包括:________1.示例代码2.应用案例3.参考资料法律名词及注释:________1.版权:________指宪法或法律规定的对作品的独占权利,包括复制、发行、展览、表演、广播、改编等权利。
2.商标:________指用于标识商品和服务来源的标志,如商号、商品名称、服务名称、包装等。
电容式触摸按键(简介)1101
![电容式触摸按键(简介)1101](https://img.taocdn.com/s3/m/7ed541b11a37f111f1855bc4.png)
12
3
4
上电
本页已使用福昕阅读器进行编辑。
AN1101 福昕软件(C)2005-2009,版权所有,
仅供试用。
SQ RQ
C2OUT
时间
表 2:
工作时间段
时间段
置位
复位
1 2 2⇒3 3 3⇒4 4=2
C1+ > VS=0
C2+ > VR=1
C1+ > VS=0
C2+ < VR=0
C1+ < VS=1
为了使 Timer1 变得有用,就要用固定的时基在一段确 定的时间内测量频率。 Timer0 提供了这样的周期固定 的时基。在开始测量时,Timer0 清零,然后计数至 255, 而后将溢出。溢出时, Timer0 的中断 T0IF 将使程序通
图 5:
测量振荡器频率
内部
CVREF ~2/3 VDD
VDD 3k
既然已经知道了要检测什么,现在我们还需要一个振荡 器,其频率取决于电容器的感应极板 Cs。图 3 的电路能 够实现这一目标。该设计使用了一个松弛振荡器来产生 频率,频率取决于电容器的值。 RC 振荡器的电阻值是 设计参数,用来确保振荡频率在 100-400 kHz 范围内。 频率的精确值并不重要,但是在测量过程中,较高的频 率将产生更多的计数,因而精度要比较低频率的精度 高。
为了检测按钮是否按下,首先必须恰当地配置系统。然 后有下列几个关键步骤:
1. 通过传感器电容发出振荡信号。 2. 使用 T1CKI 对正边沿进行计数。 3. 在固定的测量周期结束时,获取读数(频率的计
数值)
4. 判断当前频率是否低于正常的未触压的平均值。
基于单片机的电容感应式触摸按键原理与程序
![基于单片机的电容感应式触摸按键原理与程序](https://img.taocdn.com/s3/m/9fc3dc629b6648d7c1c7461c.png)
基于单片机的电容感应式触摸按键原理与程序——原理近年来,电容感应式触摸按键技术已日臻成熟,在家电领域中,对于各种玻璃面板的家电产品,电容感应式触摸按键,以其高灵敏度、面板免钻孔、安装方便、使用寿命长等优点得以广泛的应用;尤其在许多小家上电诸如电磁炉、音视频设备、电茶壶等等,其应用更是随处可见,但是,毕竟目前这一技术并未完全普及,另外各种专用芯片也尚未统一标准大量上市,出现故障后往往需要更换原厂配件,这就使得业余维修无从下手,目前常见的电容感应式触摸按键的实现方法有两种,一种是专用芯片,有几种键位可选,使用方便,另一种是以单片机为基础通过编程实现,这种方式是将按键功能及其它控制功能综合设计,大大的简化了整个系统的设计,减少了原件降低了成本,应用较多;为此,本文将就玻璃面板式家电上的电容感应式按键的原理进行简单的分析,并且将用STC单片机编程实现电容感式应按键的C源程序及调试方法分享给大家。
图1:如图1所示,是电路原理图,它由两只二极管D1/D2、两只电阻R1/R2、一只充放电电容C0构成,弹簧将Φ12mm的金属片压紧到厚度为5mm的玻璃板的下方,玻璃板的另一面对应金属片的位置就是手指触摸区。
工作原理为:玻璃板接触金属片的附近,有电荷的集聚与其另一表面形成电容结构,无动作时电荷是很微量的电容值也极小,当有手指接触另一侧玻璃表面是,由于人体皮肤所带电荷的参与,使得电荷的运动发生了改变,电容值也会产生很多的变化,这就是感应电容的形成与变化过程,而感应电容的变化,又直接改变了充放电电容的充电电压值,这就给状态的检测提供了依据。
在PWM_IN的高电平段,电源电压经R2、D1给C0充电,在PWM_IN的低电平段,C0经R1、D2对地放电,充放电状态稳定后,ADC0端可以检测到一个稳定的电压值,本系统实测为2.7V左右,当有指触动作时由于感应电容相当于与C0并联了一个电容,其ADC0端检测到的电压将下降,本系统实测为2.3V左右,这个的400mV 的模拟电压量,对于8位ADC而言,是可以准确判别的。
PIC16程序设计及应用[1]
![PIC16程序设计及应用[1]](https://img.taocdn.com/s3/m/5e214918a4e9856a561252d380eb6294dd88220c.png)
PIC16程序设计及应用PIC16程序设计及应用引言PIC16是一种微控制器,它在嵌入式系统中有着广泛的应用。
本文将介绍PIC16程序设计的基本知识和应用场景,帮助读者了解和掌握PIC16的编程技巧和应用方法。
本文将以Markdown文本格式输出,方便读者阅读和理解。
什么是PIC16PIC16是微芯科技(Microchip Technology)推出的一种8位微控制器。
它具有低功耗、高性能和丰富的外设特性,适用于各种嵌入式应用中。
PIC16微控制器可以通过编程实现各种功能,如数据采集、通信、控制等。
因此,学习PIC16程序设计具有重要的意义。
PIC16程序设计基础1. 开发环境搭建在开始PIC16程序设计之前,我们需要搭建PIC16的开发环境。
首先,我们需要安装MPLAB X IDE(Integrated Development Environment),这是用于PIC16开发的集成开发环境。
其次,我们需要选择合适的编译器和调试工具。
最常用的编译器是XC8,它支持C语言编程。
调试工具可以使用MPLAB ICD等。
安装好开发环境后,我们可以开始编写程序了。
2. 程序结构每个PIC16程序都需要遵循一定的程序结构。
一个典型的PIC16程序包含以下几个部分:- 引用库文件:包含一些常用的库文件,以便在编程中使用预定义的函数和变量。
- 定义引脚:定义用于输入输出的引脚。
- 初始化:进行一些初始化工作,如配置引脚功能、初始化外设等。
- 主函数:程序的入口,包含了程序的主要逻辑。
- 中断处理函数(可选):处理来自外部的中断信号。
3. 常用函数和指令PIC16的编程主要使用C语言进行。
在编程过程中,我们会使用到一些常用的函数和指令,如GPIO控制、定时器操作、串口通信等。
这些函数和指令可以通过引用库文件进行调用。
以下是一些常用的函数和指令示例:```cinclude <pic16.h>void mn(){TRISB0 = 0; // 将B0引脚设置为输出PORTB0 = 1; // 将B0引脚输出高电平}```4. 调试和仿真在PIC16程序开发过程中,调试和仿真是非常重要的环节。
基于单片机的电容感应式触摸按键原理与程序——C程序
![基于单片机的电容感应式触摸按键原理与程序——C程序](https://img.taocdn.com/s3/m/cd2f0143b307e87101f69610.png)
/******************************************************************************
STC单片机电容感应按键C程序---------原创作者wannenggong
******************************************************************************/
{
R=0;
RV=GetADCResult(ee-1);
R=(FLG[ee-1]-RV);
if(R>=0x17 && R<=0x1d)
R=ee;
else
{R=0;ee++;}
if(ee>2)ee=1;
switch(R)
{
case 1://K1
{f1=1;f2=0;}
break;
case 2://K2
{f2=1;f1=0;}
{
uchar e;
Delay(50);//延时等待系统稳定很有必要
for(e=0;e<2;e++)
{
FLG[e]=GetADCResult(e);
Delay(5);
}
}
/*****************开关控制函数****************************************/
void key_control(void)
经过上篇文章的介绍,基于单片机的电容感应式触摸按键的实现方法也就没什么神秘的了,而且其控制程序也就呼之欲出了,核心就是用STC单片机的片内ADC实时的进行数据转换与比对判断,但虽然原理简单,但编程思路还是要啰嗦几句,想法是先设置一个空数组作为键值数据暂存器,每次上电运行时,经过短暂的等待,待电源和系统稳定后,扫描一次键盘,将无操作时的键值加以记录,而后循环扫描键盘与之对比,当差值符合条件是,判断为有键按下,同时返回键号及键控指令。
单片机电容触摸按键实践
![单片机电容触摸按键实践](https://img.taocdn.com/s3/m/b08ece0beff9aef8941e06c3.png)
触摸按键实践(二)前一段时间,做了一个使用 HT45R35 芯片的触摸按键项目,属于是芯片自带专门应用于触摸键功能的"专用芯片".近日,再次对触摸按键进行实践----使用 AD 转换方式.这样,就不要专门功能的芯片了.同时,调试更加简单方便,也没有了许多限制.下图是一个该实践的原理图,每一个按键包含了 10P,104 电容器,一只贴片封装的双二极管, 3 个电阻.项目里使用的按键数量没有限制.完全可以根据需要来决定.但是,需要单片机具有相同数量的 AD 输入接口.(----或者使用多路模拟开关反而成本上升,电路复杂,尽量不要这么干.)不管是哪一种测量方式,都需要有一个参考量.电容量→定时/计数方式的参考值是通过检测没有触摸按键时的计数值来实时得到,而 AD 方式的参考值就是基准电压,它无需任何手段就是天然存在的.无需追求 AD 的位数,可以使用仅仅 8 位的 AD 转换就足够了.电路工作原理是: 一个由单片机输出的 PWM 信号(没有 PWM 输出的芯片可以使用一个普通 I/O ,只要能够输出满足要求的频率就可以了.)这个信号频率与 10P 电容器有关系.频率低了,10P 电容器的容抗就会增大,造成后级二极管整流的电流下降,影响速度.加大电容量是受到人手触摸电容量的限制,这个 10P 电容量必须与人手触摸电容器有一个合适的配置.尽量让人手的触摸电容量与这个 10P 电容器的容量相同是最理想的.(可以更换 10P 电容器的大小来达到.)例如:如果使用 1K 对 1K 的电阻去分压一个 1V 的电压,这是最理想的.而如果使用一个 1Ω的电阻与一个 10MΩ的电阻去分压,那么,这个分压效果就很差很差了.由此可以知道:首先是从人手的触摸电容量出发,去决定 10P 电容器的电容量,而后,是根据这些电容量去决定信号频率的高低.这就是为什么不能直接使用 50HZ 交流电频率的原因.通常,AD 转换有一个基准电压,可以使用与系统供电相同的 +5V 作为基准电压.有些芯片的 AD 还可以改变基准电压的,则可以使用 2.5V 作为基准电压,灵敏度更高一些.不管是电容量→计数器方式还是电容量→电压方式,都要有一个参考标准,前者是实时测量得到参考值,后者就有一个天然的标准参考--基准电压.这就是使用 AD 方式的好处之一!对较高频率的信号来说,10P 电容器的容抗约为 30KΩ~50KΩ左右(取决于信号频率与电容量大小),它经过双二极管 A7 构成的倍压整流之后,可以得到约 2.2~3.5V 的直流电压.这就是没有触摸按键时的输出电压.由于有 AD 基准的约束,每只按键的读数是大致固定的.以基准=5V为例,读数就是 7FH 左右.这个电压可以比较随便的在印刷板上布线,不像电容量→计数器方式的一样麻烦,这是使用 AD 方式的第二大好处!倍压整流后由一只 104 的电容器进行滤波,得到较为平滑的直流电压.这个直流电压显然可以非常方便的传送.几乎没有什么顾忌.(电容量→定时/计数方式的则不允许乱布线).这里,需要提及与 104 电容器并联的 3M 电阻,这个电阻是给电容器放电使用的,可以根据对按键的反应速度调整其大小.(具体还得看看实际使用芯片的 AD 输入端口的阻抗大小).当不用这个电阻时(=无穷大),反应速度最慢.而且,如果取值较少,电压就会上不去.----中间如果插入一个运放跟随器就好了!还要提及的是 AD 转换的速率,尽量使用较快的速率,较高的系统时钟,因为相对于机械式按键来说,处理触摸式按键是比较麻烦的,耗费的指令也多得多.现在,关键的问题就是进行触摸调试了.试着用手触摸一个按键,使用直流电压表看看它的直流输出电压是否有变化?变化多少?时间快慢?根据实际测试,在触摸着按键时,输出电压会下降到没有触摸时的 50% 以下,但是时间会达到 2~3S .此时,可以细心调整 3M 电阻或者 104 电容器的大小.一般的,如果能够在 0.25S 之内,电压下降到原来数值的 80%~90% 就差不多了.判断哪一个按键被触摸了是很容易的事情了,就看看 AD 读数吧.它是有方向的,不用理会≥参考值,仅仅看看<参考值多少就是了.根据这个"多少"界线,还可以调整触摸灵敏度呢.灵敏度太高,测量值的波动会引起按键还没有触摸就有效了,灵敏度太小,就是摸了半天也没有反应.带 AD 的单片机现在已经很多了,例如 SN8P27XXX 系列, HT46XXXX,HT45XXX 系列,都有许多带 AD 的单片机,其中, HT45R54 自带 24 路 AD ,HT46R343 自带 16 路 AD .还有 Flash 的 HT46F25* ,自带 12 路 AD 而且可以反反复复烧写/擦除,做试验是最好的了!现在市场上有许多专门供货触摸按键芯片的,也有许多技术文章,总之,各师各法,实际处理触摸按键就像电压比较器一样,不需要知道其值的具体大小,仅仅判断有"高"电平还是"低"电平就足够了.----应该属于临界判断.根据上面所说,接下来,我会使用普通单片机来实践做触摸按键.既不使用专用芯片(电容量→定时/计数),也不使用自带 AD 芯片(电容量→电压→AD 转换),就直接使用普通单片机的端口+电压比较器来做.这样是否会让电路多放置一只比较器芯片?不!就使用自带运算放大器或者自带比较器的芯片.同样简单容易.-----也可能失败啊!欢迎各位指导!正是有了许许多多的自带 AD 的单片机,因此,那种使用外挂多路模拟开关的方法就不好用了.(多路 AD 实际芯片内部就有了多路模拟开关).在盛扬半导体(上海)的中文网站上,就有使用 HT46R47 做触摸按键的示例.需要了解更多此触摸按键的其它应用信息,欢迎浏览: .下图是我的 AD 方式试验板,只有 4 个触摸键, 3 只发光管以二进制编码指示按键号码,哪一个按键被触摸了,哪一个对应发光管就点亮 0.5S 时间.使用上,似乎比专用芯片的毫不狲色!----还有待实际应用来检验.我想:既然可以处理测量 0.1℃的温度,0.1mV 的电压,那么,不可能不能处理这种"界限"式的触摸关系.使用 AD 测量的电容触摸按键电路触摸按键实践(3)电容式感应按键以其无机械磨损、寿命长、防水防污、易清洁和时尚的特点, 近几年应用领域和数量迅速增加. 因此, 结合电容感应按键的特点, 设计了一种用A/D 口搭配简单的电路实现电容感应按键的方法. 经测试, 电路的稳定性较高, 在低成本的电路中适用性较强.触摸控制技术又可分为触摸屏(Touch Screen) 技术和触摸按键(Touch Key)技术. 在触摸按键技术方面, 目前主要可分为电阻式触摸按键与电容式感应按键. 由于电阻式的触摸按键需要在设备表面贴一张触摸电阻薄膜, 其耐用性较低, 而电容感应按键技术具有在非金属操作面板上无须开孔处理、防水防污、易清洁、无机械开关磨损而寿命长等优点. 近几年随着苹果公司将电容触摸感应技术从笔记本电脑引用到iPod 后, 电容触摸感应热浪正席卷几乎所有电子产品, 从笔记本电脑、智能电话、PDA、游戏机等手持设备, 到LCD TV、 DVD 等消费电子产品, 再到洗衣机、空调、冰箱、热水器、电磁炉以及咖啡壶等大小家电, 无不以加入电容触摸感应为新的卖点.目前, 世界知名电子元件供应商均加大了对电容触摸按键的应用研究, 并推出众多的专业芯片, 有专用电容感应按键类的全ASIC, 也有众多基于MCU集成类的IC. 但这些芯片价格较高, 在一些按键数量少、成本要求低的电路中很难得到运用. 另外, 使用这些集成类 IC, 很难做到所选资源恰好等于使用的情况, 存在资源的浪费情况. 而且对于升级成熟产品的机械式按键, 还存在变更原MCU 代码的风险. 同时, 目前, 对于电容式触摸按键的介绍大多也停留在基于电容量测量的原理上. 结合电容感应按键的原理, 设计了一种用MCU 的A/D 口实现电容触摸按键的低成本电路.1 电容式感应按键原理平行板电容器具有 2 个极板, 其间隔着1 层介质, 电容器中的大部分能量直接聚集在2 个极板之间, 1 个极板电荷数量的变化将引起另外极板电荷的增减, 从而在电容内部形成电流. 电容式感应按键的原理如图1 所示, 感应按键的金属电极, 放置于非金属面板内, 并连接交变的电信号. 如果在非金属面板另一侧与金属电极对应处放置另外1 块金属板(图2), 那么, 2 个极板就组成了平行板电容器, 非金属面板成为此平行板电容器的介质. 由于电场被封闭在2 个金属极板之间, 所以大部分能量均集中在非金属面板内. 如果在非金属面板外隔着金属, 手指触摸对其能量损失的影响就很小.图1 电容感应按键示意图图2 封闭电场示意图去除外侧的金属板, 电场的能量就会穿过非金属的密集区, 向外传播(图3).图3 电容感应电极的电力线当导体靠近操作面(即非金属面板表面)后, 电磁场即在导电介质中传播. 由于导体中存在自由电子, 这些自由电子在电场作用下就会形成传导电流, 进而产生焦耳热从而引起电磁波能量损耗. 由于人体组织中充满了传导电解质(一种有损电介质), 当手指靠近时同样会引起电磁能量损耗. 因此只要检测流经感应电极的电能变化, 就可以判断是否有手指靠近非金属操作面板.2 电容感应按键取样电路分析图 4 为电容感应按键取样电路图, 电路由5 个分离元件组成. 其脉冲信号频率为300 kHz, 幅度 12 V, 占空比为50%. 通过读取电容 C1上的电压值判别是否有手指靠近操作区域. 其原理分析如下: 二极管1N4148 正向导通电压为d V , 在脉冲信号跳变为高电平(12 V)时, 假定电容 C1上电压为 U0, 电容的充电回路根据 C1电压大小出现如下2 种情况:(1) 若, 则充电回路为图5(a), 充电时间常数电容C1的充电电压:(2) 若则充电回路为图5(b), 充电时间常数电容 C1的充电电压为:在振荡脉冲跳变为低电平时, 根据电容 C1电压大小, 出现以下2 种放电回路:(1) 当0 2 d U > V 时, 放电回路为图5(c), 放电电路的其放电时的电容电压为:图4 电容感应按键取样电路(2) 当U0≤2Vd 时, 放电回路为图5(d), 放电电路的其电容电压为:.由于电路中脉冲占空比为50%, 充放电时间在该电路中, 充放电电阻大, 流过的充放电电流小, 二极管1N4148 的导通电压也较小, 若以充电电路为图5(a)、放电电路为图5(c)来计算, 充电时间常数τ = 放电时间常数= 0.1 s, 而充放电时间为假定二极管电压在微弱电流下按0.2 V 计算根据(1)式和(2)式, 运用迭代可计算出电容电压最后稳定在5.9 V, 而以上计算不考虑由手指触摸等任何情况引起的能量损耗.电容 C1充放电如图6 所示. 在实际的充放电电路中, 电路对金属极板的充放电始终在进行. 当手指靠近金属极板时, 感应电极处存在的微弱电磁场被传导至人手指内电解质中, 同时消耗了部分能量, 电容 C1补充的电荷将减少, 因此电容 C 的电压将下降(图7). 当ΔV 变化量达到最小检测精度要求时, 系统即可通过计算识别出是否有手指或其他导电物体靠近操作区.图6 电容充电时间与电压的关系图7 手指触摸时的电平变化A/D 法电容感应按键、读键流程:将电容电压引入 MCU 通用A/D 口, 即可将电容 C1上的电压值转换为数字量并通过MCU计算出电容 C1两端电压的变化大小, 从而判断出是否有手指或其他导电物体靠近或离开触摸按键, 实现电容感应按键的识别. 软件流程如图8 所示.电路参数对感应灵敏度的影响输入脉冲影响输入脉冲的幅值决定了 C1上稳态电压, 如果脉冲幅值不稳定, 就会导致 C1上的电压波动. 如果该幅值变化引起的电容电压变化量ΔV 超过了检测的最小检测精度, 即使没有手指靠近, 也会造成读键的误判, 所以脉冲电压幅度要稳定. 此外, 输入脉冲的频率同样也会影响到 C1电容的工作状态, 如果输入脉冲的频率过低, 则 C1电压纹波会加大, 感应灵敏度下降; 反之, 输入脉冲的频率过高, 则线路损耗加大, 而且触摸容易受到干扰.充放电电阻值的影响如果同时改变 R1,R2 的阻值, 例如将阻值改为 100KΩ, 充放电时间常数减少10 倍, 因虽然 C1上电压变化不大, 但此时 C1上的充放电电流却显著增强, 使得手指触摸的灵敏度下降. 所以, 电路中 R1,R2 的阻值一定要选取恰当. 二极管的影响由于上述电容式感应按键电路工作频率高, 且流经电流小, 所以应当选择结电容小、开关速度快、正向导通电压低的二极管. 另外, 二极管的工作可靠性一定要好, D1,D2任一短路、断路都会破坏充放电回路, 从而使触摸电路失效.电容感应电极的形式电容式感应按键的感应电极有很多种, 常用的感应电极有PCB 板上的电极及弹簧金属片式电极. 电极形式可以根据外观进行任意设计, 如圆形、方形、三角形等. 但无论电极以哪种形式出现其周围都应尽量远离地: PCB 双面板电极对应的另一面铜箔应当刻蚀去除, 弹簧电极周围的PCB 铜箔也要刻蚀去除. 否则, 感应电极与金属之间将形成感应电流, 削弱了手指或外界导电物靠近电极时电路的灵敏度.同时, 电极应当与非金属面板紧贴, 如果中间有空隙, 相当于增加了感应距离, 使感应灵敏度降低. 感应电极的面积和非金属面板的厚度影响了感应的灵敏度. 实际应用中, 目前厚8mm 以下的钢化玻璃, 其圆形金属感应电极直径不小于12 mm.这种用分离元件组成触摸感应按键用的低成本电路, 在按键数量不多的情况下应用, 可根据按键数量多少进行自由组合感应电极数量和最简电路数量, 充分利用资源. 同时, 对于升级原成熟产品, 仅需选择原MCU 系列中带A/D 端口的产品, 编写读取触摸按键的程序, 可以很顺利地完成程序替换. 该电路目前成功运用于油烟机、消毒柜、微波炉、蒸箱、烤箱等一系列产品上, 顺利通过 EMC 标准的测试要求, 市场质量表现稳定可靠.。
单片机模拟电容触摸按键
![单片机模拟电容触摸按键](https://img.taocdn.com/s3/m/37e3b7e26294dd88d0d26b3c.png)
单片机模拟电容触摸按键这里我们使用的是检测电容充放电时间的方法来判断是否有触摸,图中R是外接的电容充电电阻,Cs是没有触摸按下时TPAD与PCB之间的杂散电容。
而Cx则是有手指按下的时候,手指与TPAD之间形成的电容。
图中的开关是电容放电开关(由实际使用时,由STM32的IO代替)。
先用开关将Cs(或Cs+Cx)上的电放尽,然后断开开关,让R给Cs(或Cs+Cx)充电,当没有手指触摸的时候,Cs的充电曲线如图中的A曲线。
而当有手指触摸的时候,手指和TPAD之间引入了新的电容Cx,此时Cs+Cx 的充电曲线如图中的B曲线。
从上图可以看出,A、B两种情况下,Vc达到Vth的时间分别为Tcs和Tcs+Tcx。
其中,除了Cs和Cx我们需要计算,其他都是已知的,根据电容充放电公式:Vc=V0*(1-e^(-t/RC))其中Vc为电容电压,V0为充电电压,R为充电电阻,C为电容容值,e为自然底数,t为充电时间。
根据这个公式,我们就可以计算出Cs和Cx。
利用这个公式,我们还可以把战舰开发板作为一个简单的电容计,直接可以测电容容量了,有兴趣的朋友可以捣鼓下。
在本章中,其实我们只要能够区分Tcs和Tcs+Tcx,就已经可以实现触摸检测了,当充电时间在Tcs附近,就可以认为没有触摸,而当充电时间大于Tcs+Tx时,就认为有触摸按下(Tx为检测阀值)。
本章,我们使用PA1(TIM5_CH2)来检测TPAD是否有触摸,在每次检测之前,我们先配置PA1为推挽输出,将电容Cs(或Cs+Cx)放电,然后配置PA1为浮空输入,利用外部上拉电阻给电容Cs(Cs+Cx)充电,同时开启TIM5_CH2的输入捕获,检测上升沿,当检测到上升沿的时候,就认为电容充电完成了,完成一次捕获检测。
在MCU每次复位重启的时候,我们执行一次捕获检测(可以认为没触摸),记录此时的值,记为tpad_default_val,作为判断的依据。
在后续的捕获检测,我们就通过与tpad_default_val的对比,来判断是不是有触摸发生。
2023修正版PIC16程序设计及应用
![2023修正版PIC16程序设计及应用](https://img.taocdn.com/s3/m/7987b73e03020740be1e650e52ea551810a6c9b4.png)
PIC16程序设计及应用PIC16程序设计及应用简介PIC16(Peripheral Interface Controller)是一种微控制器,由美国Microchip公司推出。
它采用RISC架构,具有较低的功耗、高速执行、丰富的外设等特点。
PIC16系列微控制器常应用于各种嵌入式系统中,例如家电控制、汽车电子、安防设备等领域。
本文档将介绍PIC16程序设计的基本概念及应用。
PIC16架构概述PIC16微控制器采用Harvard结构,具有独立的程序存储器和数据存储器。
它采用8位指令集,具有128个字节的RAM和4KB的闪存。
PIC16还拥有多种外设,例如定时器、串口通信接口、模拟比较器等。
PIC16程序设计基础1. 开发环境搭建要进行PIC16程序设计,首先需要安装PIC16开发环境。
Microchip官方提供了一款集成开发环境MPLAB X,可以用于编写、调试和PIC16程序。
安装完成后,还需要配合相应型号的编程器才能对PIC16进行编程。
2. 编写第一个程序下面将介绍一个简单的PIC16程序示例。
首先,我们需要创建一个新的源文件并命名为`mn.c`。
cinclude <xc.h>void mn(void) {TRISBbits.TRISB0 = 0; // 将RB0引脚设置为输出模式 while (1) {TB0 = 1; // 将RB0引脚输出高电平__delay_ms(1000); // 延时1秒TB0 = 0; // 将RB0引脚输出低电平__delay_ms(1000); // 延时1秒}}上述程序使用了XC8编译器提供的部分库函数。
首先,我们将RB0引脚设为输出模式,并在一个无限循环中不断将RB0引脚输出高低电平。
3. 编译和程序编译PIC16程序可通过MPLAB X提供的编译器进行,具体方法如下:1. 打开MPLAB X并创建一个新的项目。
2. 将前面编写的`mn.c`文件添加到项目中。
电容式触摸按键的设计与实现(软件部分)
![电容式触摸按键的设计与实现(软件部分)](https://img.taocdn.com/s3/m/8a19ab0403d8ce2f00662393.png)
学校代码: 11059学号: 0805070076Hefei University毕业论文(设计)B A CH ELO R D IS S ERTATIO N论文题目:电容式触摸按键的设计与实现(软件部分)学位类别:工学学士学科专业:自动化作者姓名:贾克慎导师姓名:储忠完成时间: 2012-5-24电容式触摸按键的设计与实现(软件部分)中文摘要当今,自动化控制系统已经在各行各业得到了广泛的应用和发展,在便携式媒体播放器和移动手持终端等大容量、高可视性产品的应用中,触摸式按键作为一种接口技术已被广泛采用。
由于具有方便易用,时尚和低成本的优势,越来越多的电子产品开始从传统的机械按键转向触摸式按键。
在触摸按键技术方面,目前主要可分为电阻式触摸按键与电容式感应按键。
由于电阻式的触摸按键需要在设备表面贴一张触摸电阻薄膜, 其耐用性较低;而电容感应按键技术具有在非金属操作面板上无须开孔处理、防水防污、易清洁、无机械开关磨损而寿命长等优点。
本论文通过分析电容式触摸感应技术,研究人体触摸算法,设计出基于PIC单片机的电容式触摸按键系统。
根据系统的要求完成了整体方案设计,在所设计的控制方案里对控制系统的软、硬件设计作了详细论述。
本论文主要介绍软件部分,并将系统软件分为:系统初始化模块、按键识别模块、LCD显示模块、高优先级和低优先级中断服务程序模块。
首先将各个模块进行分析研究,然后进行软硬件联合调试,最后完成该毕业设计所要求的内容。
关键词:电容式触摸感应;模块化;调试;PIC16F1937Design and implementation of capacitive touch keysAbstractNowadays,automatic control systems have been widely used and developed in Every aspect of life,the applicatio n of portable media players and mobile handsets, such as large-capacity, high-visib ility products, the touch buttons as an interface techno logy has been widely adopted. Easy to use, stylish and low-cost advantage, more and more electronic products began to shift fro m the traditio nal mechanical b uttons with to uch button.Touch-button techno logy can be divided into resistive touch butto ns and capacitive sensing buttons. Resistive touch keys touch the surface of the device is attached a resistive film, the lower its d urability; Capacitive sensing key technolo gies has a hand le on the panel o f no n-metallic operating without opening, watering pollution, easy to cleaning, non-mechanical switches wear long life advantages.In this paper, by analyzing capacitive touch sensing techno logy and studying human touch algorithm, we finish the design of capacitive touch b utton system ba sed on PIC microcontroller. According to the requirements of the system we complete the overall design of the control system,in which hardware and software design are discussed in detail. This paper mainly introduces the software part, which is divided into four modules: the system initialization module, the key recognition module, LCD display module, a high priority and low priority interrupt service routine module. First do analysis and stud y on every module. Then co mb ine hardware with so ftware and debug. Finally comp lete the g raduatio n design’s requirements.KEY WORD:Capacitive touch sensing;Modular design;Debugging;PIC16F1937目录第一章前言 (1)1.1 系统简介 (1)1.2 课题的研究背景 (1)1.3 课题研究现状与发展趋势 (1)1.4 课题研究的内容 (2)1.5 本章小结 (2)第二章系统设计 (3)2.1 设计任务 (3)2.1.1 电容触摸感应技术的分析 (3)2.1.2人体触摸检测算法的研究 (5)2.2 总体方案分析 (5)2.2.1中央处理模块 (6)2.2.2电源转换电路 (6)2.2.3信息显示模块 (6)2.3 系统功能结构及组成 (6)2.3.1 系统功能结构 (6)2.3.2 系统组成 (7)2.4 本章小结 (7)第三章系统软件设计 (8)3.1 软件设计思想 (8)3.1.1按键检测思想 (8)3.1.2 各个显示模块设计思想 (10)3.2 主处理程序设计 (10)3.3 按键设计模块 (14)3.3.1 按键识别 (14)3.3.2 按键的程序框图 (15)3.4 显示模块程序设计 (18)3.4.3 LCD显示模块 (18)3.5 软件开发环境介绍 (19)3.5.1 工程文件的建立 (19)3.5.2 源程序的加载 (21)3.5.3 源程序编译、下载 (22)3.6 本章小结 (23)第四章硬件设计 (24)4.1 硬件设计原则 (24)4.2 电容式触摸式按键的设计 (24)4.2.1 PCB常规设计 (24)4.2.2电极与元件的设计 (26)4.2.3覆盖物 (28)4.2.4触摸式按键的原理 (28)4.3 显示模块的设计 (30)4.4 段式液晶驱动HT1621 (30)4.5 本章小结 (32)第五章系统测试 (33)第六章总结 (37)参考文献 (38)致谢 (40)附录A系统原理图 (41)附录B 系统PCB布线图 (42)附录C 实物图片 (43)附录D 程序代码 (44)第一章前言在便携式媒体播放器和移动手持终端等大容量、高可视性产品的应用中,触摸式按键作为一种接口技术已被广泛采用[1]。
29. 电容触摸按键实验
![29. 电容触摸按键实验](https://img.taocdn.com/s3/m/664ed7c49e31433239689377.png)
普中STM32开发板带您进入ARM世界
普中STM32开发板带您进入ARM世界
3.编写电容触摸按键控制程序
本章所要实现的功能是:通过TIM5的通道2(PA1)捕获电容触摸按键 输入信号的高电平脉宽,根据捕获到高电平时间大小控制D2指示灯开关 ,同时D1指示灯不断闪烁表示系统正常运行。程序框架如下: (1)初始化PA1管脚为TIM5通道2输入捕获功能,设置上升沿捕获等 (2)读取一次捕获高电平的值 (3)电容触摸按键初始化 (4)检测电容触摸按键是否按下 (5)编写主函数
普中STM32开发板带您进入ARM世界
电容触摸按键实验
普中STM32开发板带您进入ARM世界
本讲主要内容
1.电容触摸按键介绍 2.硬件电路 3.编写电容触摸按键控制程序普Βιβλιοθήκη STM32开发板带您进入ARM世界
1.电容触摸按键介绍
触摸按键与传统的机械按键相比,不仅美观而且耐用、寿命长,它颠 覆了传统意义上的机械按键控制,只要轻轻触摸,就可以实现按键开关 的控制、量化调节甚至方向控制。触摸按键已广泛应用于手机、DVD、洗 衣机等消费类电子产品中。本章我们就介绍一种简单的触摸按键:电容 式触摸按键。
我们PZ6806D开发板上的电容触摸按键其实就是一小块覆铜区域,也 称之为触摸感应区。
通常我们会将四周的铜片与电路板地信号连通,触摸感应区设计成方 便手指触摸大小,并将其连接在输入捕获通道上。
普中STM32开发板带您进入ARM世界
触摸感应区与四周的铜片区域就形成了一个电容,通过检测电容充放 电时间即可判断是否有触摸。实现原理:
容充放电公式:Vc=V0*(1-e^(-t/RC))
普中STM32开发板带您进入ARM世界
我们使用TIM5的通道2(PA1)来检测触摸按键是否按下,每次检测前 ,我们需要先将电容Cs(或 Cs+Cx)放电,即配置PA1引脚为推挽输出模 式,输出一个低电平,才能使电容放电。然后配置PA1 为浮空输入模式 ,利用外部上拉电阻给电容 Cs(Cs+Cx)充电,同时开启TIM5_CH2的输入 捕获,配置极性为上升沿,当检测到上升沿的时候,就认为电容充电完 成了,完成一次捕获检测。
单片机16F690的PWM脉宽调制演示实例(德凯源科技)
![单片机16F690的PWM脉宽调制演示实例(德凯源科技)](https://img.taocdn.com/s3/m/cca41968de80d4d8d05a4f5b.png)
单片机 16F690 的 PWM 脉宽调制演示实例
输入函数: 无 输出函数: 无
********************************************************/
void ShanGuangDengInit(void)
//AD 转换以变确定 LED 灯在闪光和常亮
时的亮度,赋值
式
输入函数: 无 输出函数: 无
RC7 RB7
0
0
关机状态
0
1
常亮
1
0
闪光
********************************************************/
void Com(void)
//通信接收子程序(判断当前的工作
模式)
{
unsigned char temppc_com,temppb_com;
功能描述:通电后 RC5 脚输出调制波形 按键一次增加高电平的量 本例输出 500US 周期高电平从 10US 到 50OUS 可调的波形,可调步进为 2US
控制芯片:Microchip 的 PIC16F690 芯片 开发环境:MPLAB IDE V8.36 编程语言: C 编译器 : HI-TECH 的 PICC9.60 使用晶震: 内部 8MHZ 程序员 :yzh 版本 :V1.2 项目时间:2010.10.12 电路图为: 更新内容: 电路图: ******************************************************************************* *********/
if(PWM_H >= 501)
{
PWM_H = 10;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TXREG=a3;//把接收到的数据送到发送缓存
while(!TRMT);//等待发送完成
TXREG=a4;//把接收到的数据送到发送缓存
while(!TRMT);//等待发送完成
TXREG=a5;//把接收到的数据送到发送缓存
uint trip[]={400,400,250,320};//按键振荡计数阀值
uchar ltmr1,htmr1;//计时器1的高8位和低8位暂存
uint raw;//16位传感器当前振荡计数值
uchar index=0; //按键标号
uchar keya,keyb,keyc,keyd; //按键状态
RA4=0;
RB4=1;
RB6=0;
RC5=0;
RC6=1;
RC7=0;
}
if(keyc==1)
{
RA2=0;
RA4=0;
RB4=0;
RB6=0;
RC5=1;
RC6=1;
RC7=0;
TMR0=100;
TMR1H=0;
TMR1L=0;
}
if((TMR1IF)&&(TMR1IE))
{
TMR1IF=0;
TMR1H=0;
TMR1L=0;
}
if((RCIE)&&(RCIF))
{
rbuff=RCREG;//读取接收缓存的数据
}
}
// 按钮判断并置位按钮状态滞后量选200
else if(raw>((long)average[index]-(long)trip[index]+150))
{
switch(index)
{
case 0: keya=0; break;
a3=average[usdata]%1000/100;
a4=average[usdata]%100/10;
a5=average[usdata]%10;
a1=a1|0x30;
a2=a2|0x30;
a3=a3|0x30;
a4=a4|0x30;
a4=a4|0x30;
a5=a5|0x30;
//------------------------
TXEN=1; //打开发送使能
TXREG=a1;//把接收到的数据送到发送缓存
while(!TRMT);//等待发送完成
TXREG=a2;//把接收到的数据送到发送缓存
*/
}
}
//*********初始化配置****************
void init()
{
OSCCON=0x70; //振荡器控制寄存器
GIE=1;//总中断开
PEIE=1;
//------定时器0的配置----
OPTION=0x86; //选项寄存器配置
}
if(keyd==1)
{
RA2=1;
RA4=0;
RB4=0;
RB6=1;
RC5=1;
RC6=0;
RC7=0;
}
}
while(!TRMT);//等待发送完成
TXREG=a3;//把接收到的数据送到发送缓存
while(!TRMT);//等待发送完成
TXREG=a4;//把接收到的数据送到发送缓存
while(!TRMT);//等待发送完成
TXREG=a5;//把接收到的数据送到发送缓存
case 1: keyb=0; break;
case 2: keyc=0; break;
case 3: keyd=0; break;
default: break;
}
//求平均值
average[index]=average[index]+((long)raw-(long)average[index])/16;
//-----------------------------
uchar usdata=0;//串口发送数据端口号
uchar rbuff; //接收缓存
uchar a1,a2,a3,a4,a5;
void init();//初始化配置
void usart();//串口通信
void touchkey();//按键判断
while(!TRMT);//等待发送完成
TXEN=0; //关闭发送使能
rbuff=0;
}
if(rbuff==0x30)
{
usdata=0;
rbuff=0;
}
if(rbuff==0x31)
{
usdata=1;
//使用串口通信来读取振荡频率,通过读取没有按下和按下按键的不同频率来确定阀值。
//程序运行中也可读取每个按键通道的没有触摸时的1/16平均值,通道的扫描时间为10ms循环。
//配置字是,
__CONFIG (0x3BC4);
#include<pic.h>
#define uchar unsigned char
T0IF=0;//请定时器零中断标志位
T0IE=1;//开定时器零中断
TMR0=100;
//----------------------
//------计数器1的配置--------
T1CON=0x07;
TMR1IF=0;
TMR1IE=1;
TMR1H=0;
RCIE=1; //接收中断打开
TXIE=0; //发送中断关闭
//---------------------------
//-----IO口的配置-------
ANSEL=0xf2;// |设为数字IO口
ANSELH=0x00;//|
TRISA=0x22;
PORTA=0x00;
a1=usdata/10000;
a2=usdata%10000/1000;
a3=usdata%1000/100;
a4=usdata%100/10;
a5=usdata%10;
a1=a1|0x30;
a2=a2|0x30;
a3=a3|0x30;
#define uint unsigned int
uchar COMP1[]={0x94,0x95,0x96,0x97};//按键通道切换
uchar COMP2[]={0xa0,0xa1,0xa2,0xa3};//按键通道切换
uint average[]={0,0,0,0};//按键振荡计数平均值
TRISB=0x20;
PORTB=0x00;
TRISC=0x0f;
PORTC=0x00;
RA0=1;
}
//**********USART**************
void usart()
{
if(rbuff==0x74)
{
//------------------------
{
switቤተ መጻሕፍቲ ባይዱh(index)
{
case 0: keya=1; break;
case 1: keyb=1; break;
case 2: keyc=1; break;
case 3: keyd=1; break;
default: break;
rbuff=0;
}
if(rbuff==0x32)
{
usdata=2;
rbuff=0;
}
if(rbuff==0x33)
{
usdata=3;
rbuff=0;
}
}
//***************************
//进入中断时,10ms读取tmr1的计数值
htmr1=TMR1H; //读取计数器高8位
ltmr1=TMR1L;//读取计数器低8位
raw=raw|htmr1;
raw=(raw<<8)|ltmr1;
// 按钮判断并置位按钮状态
if(raw<((long)average[index]-(long)trip[index]))
a5=a5|0x30;
//------------------------
TXEN=1; //打开发送使能
TXREG=a1;//把接收到的数据送到发送缓存
while(!TRMT);//等待发送完成
TXREG=a2;//把接收到的数据送到发送缓存
void main()
{
init();//初始化配置
while(1)
{
usart();//串口通信
touchkey();//按键判断
}
}
void interrupt intcon()
{
if((T0IF)&&(T0IE))
{
T0IF=0;
TMR1L=0;
//---------------------------
//-------比较器的配置--------
CM1CON0=0x94;
CM2CON0=0xa0;
VRCON=0xcd;
SRCON=0xf0;
CM2CON1=0x02;
//---------------------------