PIC16F72X_触摸按键模块源码

合集下载

PIC16F690单片机做电容触摸程序

PIC16F690单片机做电容触摸程序
while(!TRMT);//等待发送完成
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))

基于PIC16F726的电容感应触摸按键demo说明

基于PIC16F726的电容感应触摸按键demo说明

2
R40 4.7K
3
1
R38 Q8 6.8K
KEY_VOLT
Q9 R41 2.5k
R42
10K
+5V
1
KEY2
2AB 3AB 1AB
Title
Size
Number
A4
A Revision
Date:
16-Sep-2008
Sheet of
File:
F:\工作项目\M-touch\PIC16F726PCB\F726MT~1.DrDaBwn By:
(5)串口软件的操作界面
该测试软件的正确设置如下:
① 串口号
根据你的串口驱动安装从 COM1 到 COM15 之间选择,若安装到 COM1 就直接填入 COM1;
② 波特率
单击下拉菜单,选择 19200;
③ 数据位
8 位;
④ 停止位
1;
⑤ 校验位
选择 None;
⑥ 流控制
选择 None;
⑦ 按键
可以选择 1~8 按键进行测试其中的增量的大小,若填入 0 则测试所有的按键键值;
发送信号 键编号
MB1
0
MB2
0
MB3
0
MB4
0
按键模拟



电压输出
0
0
1
1.0V
0
1
0
2.0V
0
1
1
3.0V
1
0
0
4.0V
(6)发送的按键数据格式以及相对应的按键模拟输出电压
发送信号 键编号
MB5
0
MB6
0
MB7
0

PIC16F72 TIMER0定时器练习程序

PIC16F72 TIMER0定时器练习程序

PIC16F72 TIMER0 定时器练习程序要使用PIC 的TIMER0,首先需要看数据手册,熟悉寄存器配置这里需要用到OPTION,INTCON 的配置,还有TMR0 计数值的预置。

典型应用程序:利用定时中断实现发光管一闪一闪功能。

源程序:#include #define uchar unsigned char#define uint unsigned int#define LED1 RC0///////////////////////初始化设置程序////////////////////////////////void Init(void){ PORTA = 0B00000000; PORTB = 0B00000000; PORTC = 0B00000000;TRISA = 0B00000000;//设置PORTA 口为输出TRISB = 0B00000001;//设置RB0 为输入,作为按键口TRISC = 0B00000000;//设置RC 输出ADCON1=0B11111111;//设置为数字I/Ocounter=0;OPTION=0B01010011;//配置中断和定时器0 TMR0=5; T0IE=1;//使能定时器中断0 GIE=1; //全局中断使能}///////////////////////定时中断程序////////////////////////////////void interrupt timer0_int(void){ T0IF=0;//清除中断标志位TMR0=5; //重新设置定时器时间counter++; if(counter==250) { counter=0; LED1=!LED1; }}///////////////////////主程序////////////////////////////////void main (void){Init();//初始化程序。

电动车无刷控制器电路图(高清)

电动车无刷控制器电路图(高清)

今以应用最广泛的以PIC16F72为智能控制中心,350W的整机电路为例,整机电路如图1 :(原文件名:1.gif)图1:350W 整机电路图整机电路看起来很复杂,我们将其简化成框图再看看:(原文件名:2.gif)图2:电路框图种旌用制肌抽输扎 ©卫再想罟输入电路大体上可以分成五部分:一、 电源稳压,供应部分;二、 信号输入与预处理部分;三、 智能信号处理,控制部分;四、 驱动控制信号预处理部分;五、 功率驱动开关部分。

下面我们先来看看此电路最核心的部分: PIC16F72组成的单片机智能处理、控 制部分,因为其他电路都是为其服务或被其控制, 弄清楚这部分,其它电路就比 较容易明白。

唯丿;机冲沖I「心 7\ 电從放嵐部井 『朕世述*扎剧喉输入PtC'l4FT2(原文件名:3.gif )图3:PIC16F72在控制器中的各引脚应用图我们先来简单介绍一下PIC16F72的外部资源:该单片机有28个引脚,去掉电 源、复位、振荡器等,共有22个可复用的IO 口,其中第13脚是CCP1输出口, 可输出最大分辨率达10BIT 的可调PWM 信号,另有AN0-AN4共5路AD 模数 转换输入口,可提供检测外部电路的电压,一个外部中断输入脚,可处理突发事 件。

内部软件资源我们在软件部分讲解,这里并不需要很关心。

各引脚应用如下:I : MCLR 复位/烧写高压输入两用口2:模拟量输入口:放大后的电流信号输入口,单片机将此信号进行 A-D 转换后 经过运算来控制PWM 的输出,使电流不致过大而烧毁功率管。

正常运转时电压 应在0-1.5V 左右 3:模拟量输入口:电源电压经分压后的输入口,单片机将此信号进行 A-D 转换 后判断电池电压是否过低,如果低则切断输出以保护电池,避免电池因过放电而 损坏。

正常时电压应在3V 以上4 :模拟量输入口:线性霍尔组成的手柄调速电压输入口,单片机根据此电压高 低来控制输出给电机的总功率,从而达到调整速度的目的。

MICROCHIP PIC16F723单片机在线调试烧录指引(SP-178)

MICROCHIP PIC16F723单片机在线调试烧录指引(SP-178)

一、烧录工具
1.编程器:PRO ICD2一个,USB连接线1条,5pin连接线1条
2. PC电脑一台
二、烧录软件版本信息
MPLAB IDE V8.10
三、适用芯片
MICROCHIP PIC16F723-I/SS单片机适用于SP-178主板在线烧录
四、调试方法:
1.取编程器,一端连PC电脑,另一端连接待烧录主板,连接线第一脚与SP-178主板上的
JP2第一脚“VPP”对应;
2.取得研发工程师提供的烧录文件,将其存放在除系统盘外的其它盘符内,注意存放路径
只能用英文或数字命名,不能含有中文;
图1
3.双击打开Microchip MPLAB.Workspace文件,如图2,检查Checksum是否与《芯片拷贝
申请记录表》上的校验码一致;
4.确认校验码一致后,点击烧录图标,屏幕显示正确烧录结果;
图14
(注:若上图出现非黑色字体的编译信息,则说明编译出错,则需检查下载连接及设置是否正确)
5.烧录完毕,在烧录OK的芯片上方打点做标记,取下PCBA,重复第4步,进行下一轮烧
写;
五、注意事项:
1.烧录过程中,需配带防静电手腕扣,并确保静电腕扣接地良好;
2.烧录过程中,校验码不能变化,如有误,须立即停止烧录;
3.烧录过程中,注意做好区分标识,不可混装;
六、相关文件及表单:
1.《芯片拷贝申请记录表》。

电动车无刷控制器电路图(高清)精编版

电动车无刷控制器电路图(高清)精编版

今以应用最广泛的以PIC16F72为智能控制中心,350W的整机电路为例,整机电路如图1:(原文件名:1.gif)图1:350W整机电路图整机电路看起来很复杂,我们将其简化成框图再看看:(原文件名:2.gif)图2:电路框图电路大体上可以分成五部分:一、电源稳压,供应部分;二、信号输入与预处理部分;三、智能信号处理,控制部分;四、驱动控制信号预处理部分;五、功率驱动开关部分。

下面我们先来看看此电路最核心的部分:PIC16F72组成的单片机智能处理、控制部分,因为其他电路都是为其服务或被其控制,弄清楚这部分,其它电路就比较容易明白。

(原文件名:3.gif)图3:PIC16F72在控制器中的各引脚应用图我们先来简单介绍一下PIC16F72的外部资源:该单片机有28个引脚,去掉电源、复位、振荡器等,共有22个可复用的IO口,其中第13脚是CCP1输出口,可输出最大分辨率达10BIT的可调PWM信号,另有AN0-AN4共5路AD模数转换输入口,可提供检测外部电路的电压,一个外部中断输入脚,可处理突发事件。

内部软件资源我们在软件部分讲解,这里并不需要很关心。

各引脚应用如下:1:MCLR复位/烧写高压输入两用口2:模拟量输入口:放大后的电流信号输入口,单片机将此信号进行A-D转换后经过运算来控制PWM的输出,使电流不致过大而烧毁功率管。

正常运转时电压应在0-1.5V左右3:模拟量输入口:电源电压经分压后的输入口,单片机将此信号进行A-D转换后判断电池电压是否过低,如果低则切断输出以保护电池,避免电池因过放电而损坏。

正常时电压应在3V以上4:模拟量输入口:线性霍尔组成的手柄调速电压输入口,单片机根据此电压高低来控制输出给电机的总功率,从而达到调整速度的目的。

5:模拟/数字量输入口:刹车信号电压输入口。

可以使用AD转换器判断,或根据电平高低判断,平时该脚为高电平,当有刹车信号输入时,该脚变成低电平,单片机收到该信号后切断给电机的供电,以减少不必要的损耗。

Mtouch16f72x实现流程AN1171

Mtouch16f72x实现流程AN1171

AN1171简介本应用笔记将介绍如何使用所有PIC16F72X 器件中的电容触摸传感模块(Capacitive Sensing Module,CSM)。

CSM简化了电容触摸传感应用中所需的硬件和软件设计。

只需在 PCB 上增加触摸传感焊盘。

推荐阅读应用笔记AN1101《电容触摸传感简介》,了解有关电容触摸传感的概念。

电容触摸传感模块CSM允许用户在无外部振荡电路的情况下设计电容触摸传感系统。

CSM具有其内部软件控制的振荡器。

它也可用来检测最多达16路的输入。

在典型应用中,CSM直接连接到PCB上被绝缘材料覆盖的焊盘。

当用户的手指接触焊盘上的绝缘材料时,焊盘的电容增加,从而导致 CSM中的频率偏移。

有关 CSM 硬件的更多信息,请参考器件的数据手册。

CSM简化了电容触摸传感的软件设计,它只需对一些寄存器进行初始化,然后设置测量频率变化的相应方法。

模块初始化初始化 CSM时,相应的电容检测输入必须初始化成模拟输入。

然后设置CSM 寄存器,如例1所示。

例 1:设置电容触摸传感模块频率测量一旦这些寄存器被置位,模块开始振荡。

现在就需要确定相应的频率测量方法。

可以使用的测量方法有:•使用Timer0 作为 CSM的定时器信号源。

•使用 Timer2 作为定时器信号源。

Timer2 使用PR2 来设置所需的时基,从而使Timer2在定义时基方面具有更大的灵活性。

•使用 WDT 从休眠事件中唤醒作为时基。

频率测量: TIMER1门控所有这些方法都使用 Timer1门控输入。

Timer1将作为一个计数器,它在电容触摸传感模块输出频率的每个上升沿递增计数。

选定的时基将启动和停止计数器。

用户通过读取Timer1的值,从而得到振荡器频率的测量值。

推荐使用 Timer1门控工作于单次模式,以便测量选定时基的整个周期长度。

作者:Enrique AlemanMicrochip Technology Inc.TRISA= 0x30;ANSELA= 0x30;//CPS7,CPS6初始化为模拟输入TRISB= 0x3F;ANSELB= 0x3F;//CPS0-CPS5初始化为模拟输入TRISD= 0xFF;ANSELD= 0xFF;//CPS8-CPS15初始化为模拟输入CPSCON0= 0x8C;// 打开电容触摸检测,高频率振荡器,CPSCON1= 0x00;//选择电容触摸通道输入0使用 PIC16F72X中的电容触摸传感模块2009 Microchip Technology Inc.DS01171B_CN第 1页AN1171DS01171B_CN 第 2页 2009 Microchip Technology Inc.选定时基溢出会触发Timer1门控事件结束,从而产生Timer1门控中断。

touch驱动代码

touch驱动代码

#include "touch.h"#include "lcd.h"#include "delay.h"#include "stdlib.h"#include "math.h"#include "24cxx.h"//////////////////////////////////////////////////////////////////////////////////reserved//***************************************************************************** ***//V2.0修改说明//增加对电容触摸屏的支持(需要添加:ctiic.c和ott2001a.c两个文件)//////////////////////////////////////////////////////////////////////////////////_m_tp_dev tp_dev={TP_Init,TP_Scan,TP_Adjust,0,0,0,0,0,0,0,0,};//默认为touchtype=0的数据.u8 CMD_RDX=0XD0;u8 CMD_RDY=0X90;//SPI写数据//向触摸屏IC写入1byte数据//num:要写入的数据void TP_Write_Byte(u8 num){u8 count=0;for(count=0;count<8;count++){if(num&0x80)TDIN=1;else TDIN=0;num<<=1;TCLK=0;TCLK=1; //上升沿有效}}//SPI读数据//从触摸屏IC读取adc值//CMD:指令//返回值:读到的数据u16 TP_Read_AD(u8 CMD){u8 count=0;u16 Num=0;TCLK=0; //先拉低时钟TDIN=0; //拉低数据线TCS=0; //选中触摸屏ICTP_Write_Byte(CMD);//发送命令字delay_us(6);//ADS7846的转换时间最长为6usTCLK=0;delay_us(1);TCLK=1; //给1个时钟,清除BUSYTCLK=0;for(count=0;count<16;count++)//读出16位数据,只有高12位有效{Num<<=1;TCLK=0; //下降沿有效TCLK=1;if(DOUT)Num++;}Num>>=4; //只有高12位有效.TCS=1; //释放片选return(Num);}//读取一个坐标值(x或者y)//连续读取READ_TIMES次数据,对这些数据升序排列,//然后去掉最低和最高LOST_VAL个数,取平均值//xy:指令(CMD_RDX/CMD_RDY)//返回值:读到的数据#define READ_TIMES 5 //读取次数#define LOST_VAL 1 //丢弃值u16 TP_Read_XOY(u8 xy){u16 i, j;u16 buf[READ_TIMES];u16 sum=0;u16 temp;for(i=0;i<READ_TIMES;i++)buf[i]=TP_Read_AD(xy);for(i=0;i<READ_TIMES-1; i++)//排序{for(j=i+1;j<READ_TIMES;j++){if(buf[i]>buf[j])//升序排列{temp=buf[i];buf[i]=buf[j];buf[j]=temp;}}}sum=0;for(i=LOST_VAL;i<READ_TIMES-LOST_VAL;i++)sum+=buf[i];temp=sum/(READ_TIMES-2*LOST_VAL);return temp;}//读取x,y坐标//最小值不能少于100.//x,y:读取到的坐标值//返回值:0,失败;1,成功。

PIC16F72单片机控制HT1621B驱动LCD(C程序)

PIC16F72单片机控制HT1621B驱动LCD(C程序)
#define WDTDIS1 0X0A //禁止WDT溢出标志输出
#define TIMERDIS 0X08 //时基输出禁能
#define SYSEN 0X02 //打开系统时钟
void delay() //延时
{
uchar i=0;
while(i<10)
i++;
}
void delay1s() //延时1S
{
uchar i;
uint j;
SENDCOMA(TIMERDIS);
}
/*******************************主函数******************************/
main() //主函数
{
TRISB=0X00;
{
START_HT1621();
SENDBIT(0X80,4);
SENDBYTE(com);
}
/*************************发送命令子函数B***************************/
void SENDCOMB(uchar adr) //发送命令B,发送显示数据
#define uchar unsigned char
#define uint unsigned int
void SENDBYTE (uchar dat);
void SENDBIT (uchar dat,uchar bitcnt);
/***************************延时子函数******************************/
for (i=0;i<8;i++)

触摸屏 python源代码

触摸屏 python源代码

触摸屏 python源代码下面是一个简单的 Python 代码示例,用于模拟触摸屏的操作:```pythonimport time# 模拟点击动作def click(x, y):print(f"点击屏幕坐标({x}, {y})")# 模拟滑动动作def swipe(start_x, start_y, end_x, end_y, duration):print(f"在屏幕上从({start_x}, {start_y})滑动到({end_x}, {end_y}),持续{duration}秒")# 测试代码if __name__ == "__main__":# 点击屏幕中心click(480, 320)# 从屏幕左上角滑动到右下角swipe(0, 0, 800, 600, 2)# 等待一段时间(模拟用户操作间隙)time.sleep(3)# 再次点击屏幕中心click(480, 320)```这个示例代码中定义了两个函数:`click`和`swipe`。

`click`函数用于模拟点击动作,接受屏幕坐标作为参数。

`swipe`函数用于模拟滑动动作,接受起始坐标、结束坐标和持续时间作为参数。

在测试代码中,我们调用了`click`函数点击屏幕中心,调用了`swipe`函数从屏幕左上角滑动到右下角,并在两次操作之间添加了一个等待时间。

请注意,这只是一个简单的示例代码,用于模拟触摸屏的基本操作。

在实际应用中,你可能需要根据具体的需求和平台进行相应的调整和扩展。

如果你有其他特定的需求或问题,请提供更多详细信息,我将尽力为你提供帮助。

pic16c72中文资料

pic16c72中文资料

PIC16C73 通信波特率为 9600bps;通信采用查询方式,差错控制采用奇偶校验法;数据的 帻格式为 1 位起止位、8 位数据位、1 位奇偶位、1 位停止位;双方设置的握手信号如下:
“FFH”:为 PC 机请求接收信号;
“01H”:为 PC 机接收信号完毕;
b.PIC16C73 与红外线遥控器的通信协议
PIC16C71 单片机按键换醒 CPU 源程序 ; p=pic16c71,xt=40000hz LIST P=16c71 ; Z EQU 2 RBPU EQU 7 TEMP EQU 10H OPTIONREG EQU 1H F EQU 1 PORT_B EQU 06H ; INCLUDE <P16c71.INC> LIST ; ORG 0 ;复位地址 GOTO START ; ORG 4 ;中断向量
电子发烧友 电子技术论坛
SCI 利用 RC6 和 RC7 两个引脚来作为通信线的二线制串行通信接口。它们可被定义为三种 方式:全双工异步方式、半双工同步主控方式和半双工同步从动方式。
SIC 部件含有两个 8 位的可读写状态和控制寄存器,分别为发送和控制寄存器 TXSTA、接 收和控制寄存器 RCSTA。
RC0~RC7:复用引脚,为 C 口双向数据信号线,C 口引脚均为多功能复用引脚。
RC0/T1OS0/T1CK1 可选择 TMR1 振荡器输出或 TMR1 时钟输入;
RC1/T1OS1/CCP2 可作为 TMR1 振荡器输入或捕捉器 2 输入/比较器输出/PWH2 输出;
电子发烧友 电子技术论坛
d.片内器件模块
●有 3 个定时/计数器和 3 个双向 I/O 口。
●含有 16 位捕捉/比较/PWM 模块。其中捕捉器的最大分辨率为 12.5ns;而比较器的最大分 辨率为 200ns;PWM 的分辨率为 10 位。

基于PIC16F72单片机的电动车电机控制器设计

基于PIC16F72单片机的电动车电机控制器设计

基于PIC16F72单片机的电动车电机控制器设计蒲斌【摘要】在分析电动车基本原理及组成的基础上介绍了以PIC16F72单片机为核心控制器件的电动车电机控制器的实现.作者给出了系统总体框图,详细介绍了智能处理控制、电源等相关部件,分析并给出了信号输入与预处理、驱动信号预处理、驱动功率开关等相关部分的原理与实现,给出了软件程序总体思想和程序总体流程图.【期刊名称】《西华师范大学学报(自然科学版)》【年(卷),期】2013(034)003【总页数】5页(P271-275)【关键词】控制器;PIC16F72;硬件;软件【作者】蒲斌【作者单位】西华师范大学计算机学院,四川南充637009【正文语种】中文【中图分类】TP319近年来,由于石油能源的日益紧张及人们环境保护意识的增强,电动助力车深受欢迎.电动车以电能驱动电动机,将电能转化为机械能,从而驱动电动车.改变电动机电枢电压,就可以改变电动机转速,从而进行速度控制.但是由于电动车电池电压基本恒定,要想实现速度控制,必须对电动机电枢电压进行变换.同时电动车在过载情况下可能发生电流过大的情况,容易烧毁电动机绕组或损毁电池.借助脉宽调制控制(PWM)机理,在电动机电池电压固定的情况下,采用断续供电的方法,改变电机电压的平均值,来控制电机速度和电流的大小,这种电机控制器控制方式很容易通过单片机得以实现.永磁直流无刷电机驱动已经成为电动车的发展方向.它由定子、转子和转子位置检测元件霍尔传感器等组成,既具备交流电机的结构简单、运行可靠、维护方便等优点,又具备了直流电机运行效率高,调速性能好等优点,在电动车等电器设备中得到广泛应用[1].本文设计了一种电动车无刷电机控制器,该控制器具有结构简单,抗干扰型强,稳定性好,环保节能等特点,广泛适用于电动车无刷电机中.1 系统组成电动车无刷电机控制器以PIC16F72单片机为核心控制器件,采用电机内置的霍尔传感器检测电机转子的位置,由PIC16F72单片机接收霍尔传感器输出的位置信号,与霍尔换相表进行比较,以控制无刷电机进行换相,无刷电机的转矩和转速采用PWM方式进行控制[2].本电动车无刷电机控制器主要由电源稳压部分;信号输入与预处理部分;智能信号处理、控制部分;驱动控制信号预处理部分;功率驱动开关部分部分[3,4],系统框图如图1所示:2 硬件电路设计2.1 智能处理控制智能处理控制是本设计的核心部分,其他的部分都是为智能处理控制部分服务或者被智能处理控制部分控制的[5].本设计的智能处理控制部分由PIC16F72单片机组成.PIC16F72单片机有28个引脚,去掉电源、复位、振荡器等,共有22个可以复用的IO口,其中的13脚是CCP1输出口,可以输出最大分辨率达10BIT的可调PWM 信号,另有AN0-AN4共5路AD模数转换输入口,可提供检测外部电路的电压,一个外部中断输入脚,可以处理突发事件[6].2.2 电源本电动车无刷电机控制器提供三组电源,电源电路图如图2所示:第一组是提供整个电动车供电的总电源.第二组电源提供12-15V的电压,这组电压主要提供给MOSFET的开通电压,由于场效应管的驱动要求比较特殊,必须有10V以上20V以下的电压才能很好的导通,所以必须要有合适的电压供给,同时该组电压也为后面5V稳压提供预稳压.第二组电压由电压转换芯片提供,输出大约13.5V,为了预先降压,又替电压转换芯片分担部分功耗,在第二组电路的前端加了一个大功率的电阻.第三组电源是5V,由电源稳压芯片提供.在整个系统中,由于逻辑电路,MCU等电源电压都不能过高,而且MCU的所有AD转换都是以5V电压为基准,当5V不准确会出现电流、欠压值、手柄控制等均不能达到设计的要求,因此该电压的范围应被严格限制在4.90-5.10V之间.2.3 信号输入与预处理信号输入与预处理主要完成信号的输入与预处理,该部分电路包括电源电压输入、工作电流比较、放大输入、手柄电压输入、电机转子位置传感器霍尔信号输入、刹车信号输入等信号输入电路.2.3.1 工作电流比较、放大输入电路工作电流比较、放大输入电路如图3所示,本设计电路采用运算放大器来实现,其中的一路用作放大电路,它将康铜丝采样过来的电流经过放大后送入单片机内进行处理.另一路用作比较器,在电路电流工作正常时,该比较器不会产生翻转.当电流由于某种原因突然增大到一定程度,该比较器会翻转从而触发单片机的外部中断,单片机就会完全关闭电机的输出进入保护状态,避免故障进一步扩大.2.3.2 电机转子位置传感器输入电机转子位置传感器输入部分主要用于接收无刷电机自带的位置传感器的霍尔信号输出.由于传感器安装在电机内部,采用开路输出的办法,所以除了提供传感器的工作电源5V电源外,每个传感器都接上拉电阻,并对其输出的信号进行阻容滤波以抗干扰,同时在电源处接二极管、接地采用细铜膜做保险丝,防止电机相线与霍尔信号线短路后高电压反串来损坏板子上别的零件.电机转子位置传感器输入部分电路如图4所示.2.4 驱动控制信号预处理在介绍驱动控制信号输入部分之前,先简单介绍下功率开关部分.功率开关部分是由三组半桥组成的三相开关,用于改变电机线圈的通电顺序和通电方向,我们一般把与电源正相接的功率管称为上桥,与电源地相接的功率管称为下桥,上桥的相位逻辑开关信号由A+、B+、C+提供,这三个控制信号必须与PWM信号合成后控制对应的上桥,下桥的相位逻辑开关信号由A-、B-、C-提供,直接用来控制下桥的开关[7]. 驱动控制信号大致由两种信号合成:PWM信号和相位逻辑开关信号.在驱动控制信号预处理部分主要实现的功能是同步续流.下面我们以A相上桥和C相下桥通电为例来进行说明.当A相上桥PWM占空比没有达到100%时,通过电机线圈的电流时断续的,当上桥关闭的时候,由于电机线圈是一个电感,线圈上必定会出现一个自感反电动势,这个电动势必须维持线圈电流的方向不变,由于A相上桥已经关闭,这个电流会通过原来已经通过的C相下桥,地,A相下桥的续流二极管流动.当总电流小时这个自感电流并不大,但当总电流大时,线圈中存储的能量多起来,这个自感电流就会相当大,而使MOSFET发热量相当大,引起下桥变得很烫.同步续流电路可以有效地减少当MOSFET关闭时所引起的下桥发热量大的问题.同步续流的实现如图5所示,单片机参生的PWM占空比信号一路通过与门,经电阻电容截波(缩小占空比)后输出,相位不变,形成PWM信号,此路PWM信号输出至上桥驱动,与上桥逻辑开关信号相与后驱动上桥MOSFET.另一路经电阻电容,反相器移相,在反相后,形成PWM-信号,最后合成至下桥驱动.此时的输出的PWM信号刚好套在PWM-信号的中间,两边作为MOSFET开关的死区.波形示意图如图5所示.3 软件设计本系统设计采用C语言进行程序的编写,主程序主要完成各种变量的定义、系统的初始化,根据相应的采样结果及刹车标志进行相应的处理.中断服务程序主要完成完成调速信号、电池电压信号、工作电流信号、刹车标志信号、电机霍尔信号的检测等[8-10].系统程序流程图如图6所示,其中系统出错主要包括电池电压过低、工作电流过大等;工作模式改变主要包括电机调速信号、刹车信号、电机霍尔信号改变等.综上所述,采用PIC16F72单片机为核心控制器构成的电动车电机控制器,充分利用PIC16F72单片机内部资源,大大降低了硬件电路设计的设计难度,减少了控制器的体积,而且该控制器具有结构简单,抗干扰型强,稳定性好,环保节能等特点,可广泛适用于电动车无刷电机中,具有很高的市场推广价值.参考文献:[1] 李兵.基于MC3305芯片的电动车无刷直流电机闭环控制器[J].轻工机械, 2007(5):61-63.[2] 李晓斌,张辉,刘建平.利用DSP实现无刷直流电机的位置控制[J].机电工程,2005,22(3):8-10.[3] 朱俊林,任志斌.基于P87LPC778单片机的电动车控制器[J].拖拉机与农用运输车, 2007(1):83-84.[4] 柳岸.基于PIC16F876的电动自行车控制器设计[J]. 电脑知识与技术,2009(4):986-987.[5] 范化明,卢文科,张健.基于ATmega88单片机的新型电动车控制器的设计[J].电子测量技术, 2009(11):80-84.[6] 江和.PIC16系列单片机C程序设计与PROTEUS值真[M].北京:北京航空航天大学出版社,2010.[7] 辜承林.机电动力系统分析[M].武汉:华中理工大学出版社,1998:28-30.[8] 金春林,邱慧芳,张皆喜.AVR单片机C语言编程及应用实例[M].北京:清华大学出版社, 2003.[9] 张明峰.PIC单片机入门与实战[M]. 北京:北京航空航天大学出版社, 2004.[10] 潘永雄.新编单片机原理与应用[M].西安:西安电子科技大学出版社,2003.。

PIC16F72T-IML;中文规格书,Datasheet资料

PIC16F72T-IML;中文规格书,Datasheet资料

SSP MODULEThe PIC® microcontrollers you have received all exhibit anomalous behavior in their Synchronous Serial Port (SSP) modules, as described in this document. They otherwise conform functionally to the descriptions pro-vided in their respective Device Data Sheets and Ref-erence Manuals, as amended by silicon release errata for particular devices.Users are encouraged to review the latest device data sheets and errata available for additional information concerning an individual device. These documents may be obtained directly from the Microchip corporate web site, at .Silicon ErrataThese issues are expected to be resolved in future silicon revisions of the designated parts.The silicon issues identified in this “Silicon Errata” section affect all silicon revisions of the following devices:1.Module:I2C™ (Slave Mode)In its current implementation, the module may fail to correctly recognize certain Repeated Start conditions. For this discussion, a Repeated Start is defined as a Start condition presented to the bus after an initial valid Start condition has been recog-nized and the Start status bit (SSPSTAT<3>) has been set and before a valid Stop condition is received.I f a Repeated Start is not recognized, a loss ofsynchronization between the Master and Slave may occur; the condition may continue until the module is reset. A NACK condition, generated by the Slave for any reason, will not reset the module.This failure has been observed only under two circumstances:• A Repeated Start occurs within the frame of adata or address byte. The unexpected Startcondition may be erroneously interpreted as adata bit, provided that the required conditionsfor setup and hold times are met.• A Repeated Start condition occurs between twoback-to-back slave address matches in the1)in both cases. (This circumstance is regardedas being unlikely in normal operation.)Work aroundA time-out routine should be used to monitor themodule’s operation. The timer is enabled upon the receipt of a valid Start condition; if a time-out occurs, the module is reset. The length of the time-out period will vary from application to application and will need to be determined by the user.Two methods are suggested to reset the module:1.Change the mode of the module to somethingother than the desired mode by changing the set-tings of bits, SSPM3:SSPM0 (SSPCON<3:0>);then, change the bits back to the desiredconfiguration.2.Disable the module by clearing the SSPEN bit(SSPCON<5>); then, re-enable the module bysetting the bit.Other methods may be available.•PIC14000•PIC16C923•PIC16C62•PIC16C924•PIC16C62A•PIC16C925•PIC16C62B•PIC16C926•PIC16C63•PIC16CR62•PIC16C63A•PIC16CR63•PIC16C64•PIC16CR64•PIC16C64A•PIC16CR65•PIC16C65•PIC16CR72•PIC16C65A•PIC16CR72A•PIC16C65B•PIC16F72•PIC16C66•PIC16F73•PIC16C67•PIC16F74•PIC16C717•PIC16F76•PIC16C72•PIC16F77•PIC16C72A•PIC16F87•PIC16C73•PIC16F88•PIC16C73A•PIC16F818•PIC16C73B•PIC16F819•PIC16C74•PIC18F2331•PIC16C74A•PIC18F2431•PIC16C74B•PIC18F4331•PIC16C76•PIC18F4431•PIC16C77SSP Module Silicon/Data Sheet Errata© 2007 Microchip Technology Inc.DS80132F-page 1SSP MODULEDS80132F-page 2© 2007 Microchip Technology Inc.Clarifications/Corrections to the Data Sheets1.Module:SSP (SPI Mode)The description of the operation of the CKE bit (SSPSTAT<6>) is clarified. Please substitute the description in Register 1, below, for all occurrences of the existing text for the SSPSTAT register, bit 6 (new text in bold ). 2.Module:SSP (SPI Slave Mode)The description of the operation of SPI Slave mode is clarified as follows:Before enabling the module in SPI Slave mode, the state of the clock line (SCK) must match the polarity selected for the dle state. The clock line can be observed by reading the SCK pin. The polarity of the Idle state is determined by the CKP bit (SSPCON<4>).This foregoing text should be added to the appropriate subsections of the “SSP Module” chapter, entitled “SPI Mode” and read in context with any discussions of SPI Slave mode.n the case of DS30234D, the text applies to both implementations of SP I mode, as described in Sections 11.2 and 11.3.REGISTER 1:SSPSTAT: SSP STATUS REGISTER (EXCERPT)Note:This correction applies to the Data Sheets for the following devices:•PIC16C62B/72A (DS35008B)•PIC16C63A/65B/73B/74B (DS30605C)•PIC16C923/924 (DS30444E)•PIC16C925/926 (DS39544A)•PIC16F72 (DS39597B)•PIC16F73/74/76/77 (DS30325B)•PIC18F2331/2431/4331/4431 (DS39616B)In addition, this clarification applies only to the following devices in the P C16C6X Data Sheet (DS30234D):•PIC16C66•PIC16C67In addition, this clarification applies only to the following devices in the P C16C7X Data Sheet (DS30390E):•PIC16C76•PIC16C77Any devices not explicitly listed in this section do not implement SPI mode and are not affected by this clarification.Note:This text refers only to the operation of the CKE bit in SPI mode; its operation in I 2C mode is unchanged.Note:This correction applies to the Data Sheets for the following devices:•PIC16C6X (DS30234D), except PIC16C61 (does not implement the SSP module)•PIC16C62B/72A (DS35008B)•PIC16C63A/65B/73B/74B (DS30605C)•PIC16C72/73/73A/74/74A/76/77 (DS30390E)•PIC16C923/924 (DS30444E)•PIC16C925/926 (DS39544A)•PIC16F72 (DS39597B)•PIC16F73/74/76/77 (DS30325B)•PIC18F2331/2431/4331/4431 (DS39616B)Any other devices not explicitly listed in this section do not implement SPI mode and are not affected by this clarification.bit 6CKE: SPI Clock Edge Select bit1 =Transmit occurs on transition from active to Idle clock state 0 =Transmit occurs on transition from Idle to active clock state Note:Polarity of clock state is set by the CKP bit (SSPCON<4>).© 2007 Microchip Technology Inc.DS80132F-page 3SSP MODULE3.Module:SSP (I 2C Mode)The description of the I 2C pins related to the TRIS bits is clarified. To ensure proper communication of the I 2C Slave mode, the TRIS bits (TRISx [SDA,SCL]) corresponding to the I 2C pins must be set to ‘1’. If any TRIS bits (TRISx<7:0>) of the port con-taining the 2C pins (PORTx [SDA, SCL]) are changed in software during I 2C communication using a Read-Modify-Write instruction (BSF , BCF ),then the I 2C mode may stop functioning properly and 2C communication may suspend. Do not change any of the TRISx bits (TRIS bits of the port containing the I 2C pins) using the instruction BSF or BCF during I 2C communication. If it is absolutely necessary to change the TR I Sx bits during communication, the following method can be used:Note:This correction applies to the Data Sheets for the following devices:•PIC14000 (DS40122B)•PIC16C6X (DS30234D) exceptPIC16C61 (does not implement SSP module)•PIC16C62B/72A (DS35008B)•PIC16C63A/65B/73B/74B (DS30605C)•PIC16C72/73/73A/74/74A/76/77 (DS30390E)•PIC16C923/924 (DS30444E)•PIC16C925/926 (DS39544A)•PIC16F72 (DS39597B)•PIC16F73/74/76/77 (DS30325B)MOVF TRISC, W ; Example for a 40-pin part such as the PIC16F73IORLW 0x18; Ensures <4:3> bits are ‘11’ANDLW B’11111001’; Sets <2:1> as output, but will not alter other bits; User can use their own logic here, such as IORLW, XORLW and ANDLWMOVWFTRISCSSP MODULEREVISION HISTORYRevision A Document (7/2002):Original version (I2C Slave Issue).Revision B Document (1/2003):Clarification of original issue to include Restartconditions. Addition of data sheet clarification 1 (SPIMode, CKE bit).Revision C Document (3/2003):Addition of data sheet clarification 2 (SPI Slave Mode,operation).Revision D Document (9/2004):Updated list of affected devices for silicon issue 1 (I2C– Slave Mode) and 2 (SSP – SP, Slave Mode),removed silicon issue 3 (I2C – Slave Mode). Updatedlist of affected devices for data sheet clarification 1(SSP – SPI Mode) and 2 (SSP – SPI Slave Mode).Added data sheet clarification 3 (SSP – I2C Mode).Revision E Document (7/2006):Removed silicon issue 2 (SSP – SPI Slave Mode).Revision F Document (2/2007):Added four devices to list of devices affected by thesilicon errata and clarified the related language.DS80132F-page 4© 2007 Microchip Technology Inc.© 2007 Microchip Technology Inc.DS80132F-page 5I nformation contained in this publication regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications.M I CROCH I P MAKES NO REPRESENTAT I ONS OR WARRANT ES OF ANY K ND WHETHER EXPRESS OR I MPL I ED, WR I TTEN OR ORAL, STATUTORY OR OTHERW I SE, RELATED TO THE I NFORMAT I ON,I NCLUD I NG BUT NOT L I M I TED TO I TS COND I T I ON,QUAL I TY , PERFORMANCE, MERCHANTAB I L I TY OR F TNESS FOR PURPOSE . Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyer’s risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims,suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights.TrademarksThe Microchip name and logo, the Microchip logo, Accuron,dsPIC, K EE L OQ , K EE L OQ logo, micro ID , MPLAB, PIC,PICmicro, PICSTART, PRO MATE, PowerSmart, rfPIC, and SmartShunt are registered trademarks of MicrochipTechnology Incorporated in the U.S.A. and other countries.AmpLab, FilterLab, Linear Active Thermistor, Migratable Memory, MXDEV, MXLAB, PS logo, SEEVAL, SmartSensor and The Embedded Control Solutions Company areregistered trademarks of Microchip Technology Incorporated in the U.S.A.Analog-for-the-Digital Age, Application Maestro, CodeGuard, dsPICDEM, , dsPICworks, ECAN, ECONOMONITOR, FanSense, FlexROM, fuzzyLAB,In-Circuit Serial Programming, ICSP , ICEPIC, Mindi, MiWi, MPASM, MPLAB Certified logo, MPLIB, MPLINK, PICkit, PICDEM, , PICLAB, PICtail, PowerCal, PowerInfo, PowerMate, PowerTool, REAL ICE, rfLAB, rfPICDEM, Select Mode, Smart Serial, SmartTel, TotalEndurance, UNI/O, WiperLock and ZENA are trademarks of Microchip Technology Incorporated in the U.S.A. and other countries.SQTP is a service mark of Microchip Technology Incorporated in the U.S.A.All other trademarks mentioned herein are property of their respective companies.© 2007, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved.Printed on recycled paper.Note the following details of the code protection feature on Microchip devices:•Microchip products meet the specification contained in their particular Microchip Data Sheet.•Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the intended manner and under normal conditions.•There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to ourknowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data Sheets. Most likely, the person doing so is engaged in theft of intellectual property.•Microchip is willing to work with the customer who is concerned about the integrity of their code.•Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not mean that we are guaranteeing the product as “unbreakable.”Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our products. Attempts to break Microchip’s code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.Microchip received ISO/TS-16949:2002 certification for its worldwide headquarters, design and wafer fabrication facilities in Chandler and Tempe, Arizona, Gresham, Oregon and Mountain View, California. The Company’s quality system processes and procedures are for its PIC ® MCUs and dsPIC ® DSCs, K EE L OQ ® code hopping devices, Serial EEPROMs, microperipherals, nonvolatile memory and analogproducts. In addition, Microchip’s quality system for the design and manufacture of development systems is ISO 9001:2000 certified.AMERICASCorporate Office2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel: 480-792-7200Fax: 480-792-7277 Technical Support: Web Address: AtlantaDuluth, GATel: 678-957-9614Fax: 678-957-1455BostonWestborough, MATel: 774-760-0087Fax: 774-760-0088 ChicagoItasca, ILTel: 630-285-0071Fax: 630-285-0075DallasAddison, TXTel: 972-818-7423Fax: 972-818-2924DetroitFarmington Hills, MITel: 248-538-2250Fax: 248-538-2260 KokomoKokomo, INTel: 765-864-8360Fax: 765-864-8387Los AngelesMission Viejo, CATel: 949-462-9523Fax: 949-462-9608Santa ClaraSanta Clara, CATel: 408-961-6444Fax: 408-961-6445 TorontoMississauga, Ontario, CanadaTel: 905-673-0699Fax: 905-673-6509ASIA/PACIFICAsia Pacific OfficeSuites 3707-14, 37th FloorTower 6, The GatewayHabour City, KowloonHong KongTel: 852-2401-1200Fax: 852-2401-3431Australia - SydneyTel: 61-2-9868-6733Fax: 61-2-9868-6755China - BeijingTel: 86-10-8528-2100Fax: 86-10-8528-2104China - ChengduTel: 86-28-8665-5511Fax: 86-28-8665-7889China - FuzhouTel: 86-591-8750-3506Fax: 86-591-8750-3521China - Hong Kong SARTel: 852-2401-1200Fax: 852-2401-3431China - QingdaoTel: 86-532-8502-7355Fax: 86-532-8502-7205China - ShanghaiTel: 86-21-5407-5533Fax: 86-21-5407-5066China - ShenyangTel: 86-24-2334-2829Fax: 86-24-2334-2393China - ShenzhenTel: 86-755-8203-2660Fax: 86-755-8203-1760China - ShundeTel: 86-757-2839-5507Fax: 86-757-2839-5571China - WuhanTel: 86-27-5980-5300Fax: 86-27-5980-5118China - XianTel: 86-29-8833-7250Fax: 86-29-8833-7256ASIA/PACIFICIndia - BangaloreTel: 91-80-4182-8400Fax: 91-80-4182-8422India - New DelhiTel: 91-11-4160-8631Fax: 91-11-4160-8632India - PuneTel: 91-20-2566-1512Fax: 91-20-2566-1513Japan - YokohamaTel: 81-45-471- 6166Fax: 81-45-471-6122Korea - GumiTel: 82-54-473-4301Fax: 82-54-473-4302Korea - SeoulTel: 82-2-554-7200Fax: 82-2-558-5932 or82-2-558-5934Malaysia - PenangTel: 60-4-646-8870Fax: 60-4-646-5086Philippines - ManilaTel: 63-2-634-9065Fax: 63-2-634-9069SingaporeTel: 65-6334-8870Fax: 65-6334-8850Taiwan - Hsin ChuTel: 886-3-572-9526Fax: 886-3-572-6459Taiwan - KaohsiungTel: 886-7-536-4818Fax: 886-7-536-4803Taiwan - TaipeiTel: 886-2-2500-6610Fax: 886-2-2508-0102Thailand - BangkokTel: 66-2-694-1351Fax: 66-2-694-1350EUROPEAustria - WelsTel: 43-7242-2244-39Fax: 43-7242-2244-393Denmark - CopenhagenTel: 45-4450-2828Fax: 45-4485-2829France - ParisTel: 33-1-69-53-63-20Fax: 33-1-69-30-90-79Germany - MunichTel: 49-89-627-144-0Fax: 49-89-627-144-44Italy - MilanTel: 39-0331-742611Fax: 39-0331-466781Netherlands - DrunenTel: 31-416-690399Fax: 31-416-690340Spain - MadridTel: 34-91-708-08-90Fax: 34-91-708-08-91UK - WokinghamTel: 44-118-921-5869Fax: 44-118-921-5820 W ORLDWIDE S ALES AND S ERVICE12/08/06DS80132F-page 6© 2007 Microchip Technology Inc.分销商库存信息: MICROCHIPPIC16F72T-I/ML。

PIC16F72单片机引脚功能介绍

PIC16F72单片机引脚功能介绍

PIC16F72单片机引脚功能介绍PIC16F72该单片机有28个引脚,去掉电源、复位、振荡器等,共有22个可复用的IO口,其中第13脚是CCP1输出口,可输出最大分辨率达10BIT的可调PWM信号,另有AN0-AN4共5路AD模数转换输入口,可提供检测外部电路的电压,一个外部中断输入脚,可处理突发事件。

各引脚应用如下:1:MCLR复位/烧写高压输入两用口2:模拟量输入口:放大后的电流信号输入口,单片机将此信号进行A-D转换后经过运算来控制PWM的输出,使电流不致过大而烧毁功率管。

正常运转时电压应在0-1.5V左右3:模拟量输入口:电源电压经分压后的输入口,单片机将此信号进行A-D转换后判断电池电压是否过低,如果低则切断输出以保护电池,避免电池因过放电而损坏。

正常时电压应在3V 以上4:模拟量输入口:线性霍尔组成的手柄调速电压输入口,单片机根据此电压高低来控制输出给电机的总功率,从而达到调整速度的目的。

5:模拟/数字量输入口:刹车信号电压输入口。

可以使用AD转换器判断,或根据电平高低判断,平时该脚为高电平,当有刹车信号输入时,该脚变成低电平,单片机收到该信号后切断给电机的供电,以减少不必要的损耗。

6:数字量输入口:1+1助力脉冲信号输入口,当骑行者踏动踏板使车前行时,该口会收到齿轮传感器发出的脉冲信号,该信号被单片机接收到后会给电机输出一定功率以帮助骑行者更轻松地往前走。

7:模拟/数字量输入口:由于电机的位置传感器排列方法不同,该口的电平高低决定适合于哪种电机,目前市场上常见的有所谓120°和60°排列的电机。

有的控制器还可以根据该口的电压高低来控制起动时电流的大小,以适合不同的力度需求。

8:单片机电源地。

9:单片机外接振荡器输入脚。

10:单片机外接振荡器反馈输出脚。

11:数字输入口:功能开关112:数字输入口:功能开关213:数字输出口:PWM调制信号输出脚,速度或电流由其输出的脉冲占空比宽度控制。

ruscvft触屏c语言代码

ruscvft触屏c语言代码

ruscvft触屏c语言代码篇一:下面是一个基本的ruscvft触屏C语言代码示例:```c#include <stdio.h>#include <stdlib.h>int main() {int touchX, touchY;printf('请输入触屏坐标(x, y):');scanf('%d %d', &touchX, &touchY);if (touchX >= 0 && touchX <= 800 && touchY >= 0 && touchY <= 600) { printf('触摸有效,坐标为 (%d, %d)', touchX, touchY);} else {printf('触摸无效');}return 0;}```该代码使用`scanf`函数从用户输入获取触屏坐标,并使用`if`条件来检查触摸的有效性。

如果触摸坐标在屏幕范围内(假设屏幕尺寸为800x600),则输出有效触摸的坐标。

否则,输出触摸无效的消息。

你可以根据实际需求进行进一步的拓展,例如添加更多的判断条件、处理触摸事件等。

篇二:在ruscvft触屏C语言代码方面,首先需要了解ruscvft触屏的基本特性和功能。

ruscvft触屏是一种常见的触摸屏技术,用于控制电子设备的操作,例如智能手机、平板电脑和触摸屏电脑等。

在C语言中,我们可以使用ruscvft触屏的API和库来实现与触摸屏的交互。

这些API和库提供了一系列的函数和方法,用于获取触摸屏的坐标、手势、手指压力等信息,并根据这些信息进行相应的操作。

例如,我们可以使用ruscvft触屏的API来获取触摸点的坐标,然后根据坐标来实现一些功能,比如绘制图形、移动对象等。

以下是一个简单的示例代码:```c#include <ruscvft_touchscreen.h>int main() {ruscvft_touchscreen_init(); // 初始化触摸屏while (1) {if (ruscvft_touchscreen_is_touched()) { // 判断是否有触摸操作 int x = ruscvft_touchscreen_get_x(); // 获取触摸点的X坐标 int y = ruscvft_touchscreen_get_y(); // 获取触摸点的Y坐标// 在屏幕上绘制一个圆形draw_circle(x, y, 10);}}ruscvft_touchscreen_deinit(); // 关闭触摸屏return 0;}```在上面的代码中,我们首先通过调用`ruscvft_touchscreen_init()`函数来初始化触摸屏。

我的触摸屏驱动源代码.docx

我的触摸屏驱动源代码.docx

我的触摸屏驱动源代码/*C 头文件 */ #include "au_types.h" #define DEVICE_NAME "tpanel" #define IRQ_1 7#define GPIO_1_PORT GPIO_1#define GPIO_1_PORT_ADDR GPIO_1_BASE // 触摸屏返回值结构体 typedef struct{uint32 pressure; uint32 x; uint32 y; }TS_RET;// 校准值结构体 typedef struct{int32 x; int32 y;}TS_POINT;static TS_POINT TsPoint[10];#define TS_IOC_MAGIC 0xd9#define CALIBRATE _IOW(TS_IOC_MAGIC, 1, sizeof(TsPoint))#define CALIBRATE_START _IOW(TS_IOC_MAGIC, 2, sizeof(uint8))#define ADS7843_DCLKS() writew(0xff, dclk = 1(p1.4)#define ADS7843_DCLKC() writew(0x00, dclk= 0// 以下为触摸屏控制器管脚设置#define ADS7843_CSS() writew(0xff, = 1 (p1.7)#define ADS7843_CSC() writew(0x00, = 0(GPIO_1_PORT_ADD+R0x200)) // cs (GPIO_1_PORT_ADD+R0x200)) // cs(GPIO_1_PORT_ADD+R0x40))// (GPIO_1_PORT_ADD+R0x40))#define ADS7843_DINS() writew(0xff, (GPIO_1_PORT_ADDR + 0x20)) // din = 1(p.3)#define ADS7843_DINC() writew(0x00, (GPIO_1_PORT_ADDR + 0x20)) // din = 0 #define ADS7843_DOUTR() readw(GPIO_1_PORT_ADDR + 0x10) // dout p1.2#define BUF_HEAD (TsDev.buf[TsDev.head]) // #define BUF_TAIL (TsDev.buf[TsDev.tail]) // #define INCBUF(x, mod) ((++(x)) & ((mod)-1)) // #define TS_TIMER_DELAY (HZ/28) // //#define TS_TIMER_DELAY (HZ/15) #define TS_TIMER_DELAY1 (HZ/10) ///*C 源代码 */#include <linux/config.h> #include <linux/module.h>#include <linux/moduleparam.h> #include <linux/types.h>#include <linux/kernel.h> // printk #include <linux/fs.h> // file 结构#include <linux/init.h> #include <linux/sched.h>// ADS7843 控制字#define AIN_X 0xD4#define AIN_Y0x94// ADS7846 控制字//#defin e AIN_X 0xD0//#defin eAIN_Y 0x90//#defineDELAY_200NS 200 //值)#define DELAY_200NS 400//#define PEN_DOWN 1 //#define PEN_UP 2 //#define PEN_FLEETING 4 //#define MAX_TS_BUF 16 //操作时序控制宏 ( 即延时控制操作时序控制宏 ( 即延时控制值 ) 笔按下 笔抬起笔拖拽取队列头值 取队列尾值位移加一定时时长为 36ms 定时时长为 100ms#include <linux/delay.h>#include <linux/string.h>#include <linux/poll.h>#include <linux/interrupt.h>#include <linux/devfs_fs_kernel.h>#include <linux/timer.h>#include <asm/hardware.h>#include <asm/irq.h>#include <asm/uaccess.h>#include <asm/io.h>#include <asm/ioctl.h>#include "hi_gpio.h"#include "touch_screen.h"#define _CALIBRATE_ 1 // 使用校准参数, 否则使用固定的校准值// 以下为触摸屏较正用#define SCREEN_WIDTH 800#define SCREEN_HEIGHT 460#define NR_EQUATIONS 6#define LSHIFT(x) ((x)<<10)#define RSHIFT(x) ((x)>>12)static int Vars[NR_EQUATIONS*4];static int CalibrateOk = FALSE; // 是否校准过#define Vars1 Vars#define Vars2 (Vars + NR_EQUATIONS)#define Vars3 (Vars + NR_EQUATIONS * 2)#define Vars4 (Vars + NR_EQUATIONS * 3)// 触摸屏设备结构体typedef struct{uint32 penStatus;TS_RET buf[MAX_TS_BUF];uint32 head, tail;wait_queue_head_t wq;spinlock_t lock;}TS_DEV;static TS_DEV TsDev;static struct timer_list ts_timer; // static uint32 touch_screen_major = 0; // static uint8 Ready = 1; /********************************************************* * 名称:DelayNo()* 功能:短软件延时。

PIC16F690做电容式触摸按键

PIC16F690做电容式触摸按键

设计参考了应用笔记AN1101-1104;使用串口通信来读取振荡频率,通过读取没有按下和按下按键的不同频率来确定阀值。

程序运行中也可读取每个按键通道的没有触摸时的1/16平均值,通道的扫描时间为10ms循环。

配置字是,__CONFIG(0x3BC4);#include<pic.h>#defineucharunsignedchar#defineuintunsignedintucharCOMP1[]={0x94,0x95,0x96,0x97};//按键通道切换ucharCOMP2[]={0xa0,0xa1,0xa2,0xa3};//按键通道切换uintaverage[]={0,0,0,0};//按键振荡计数平均值uinttrip[]={400,400,250,320};//按键振荡计数阀值ucharltmr1,htmr1;//计时器1的高8位和低8位暂存uintraw;//16位传感器当前振荡计数值ucharindex=0;//按键标号ucharkeya,keyb,keyc,keyd;//按键状态//-----------------------------ucharusdata=0;//串口发送数据端口号ucharrbuff;//接收缓存uchara1,a2,a3,a4,a5;voidinit();//初始化配置voidusart();//串口通信voidtouchkey();//按键判断voidmain(){init();//初始化配置while(1){usart();//串口通信touchkey();//按键判断}}voidinterruptintcon(){if((T0IF)&&(T0IE)){T0IF=0;//进入中断时,10ms读取tmr1的计数值htmr1=TMR1H;//读取计数器高8位ltmr1=TMR1L;//读取计数器低8位raw=raw|htmr1;raw=(raw<<8)|ltmr1;//按钮判断并置位按钮状态if(raw<((long)average[index]-(long)trip[index])){switch(index){case0: keya=1;break;case1: keyb=1;break;case2: keyc=1;break;case3: keyd=1;break;default:break;}}//按钮判断并置位按钮状态滞后量选200elseif(raw>((long)average[index]-(long)trip[index]+150)){switch(index){case0: keya=0;break;case1: keyb=0;break;case2: keyc=0;break;case3: keyd=0;break;default:break;}//求平均值average[index]=average[index]+((long)raw-(long)average[index])/16;}//按键通道切换每10ms切换index=(++index)&0x03;CM1CON0=COMP1[index];CM2CON0=COMP2[index];//清零寄存器为扫描下一通道准备raw=0;ltmr1=0;htmr1=0;TMR0=100;TMR1H=0;TMR1L=0;}if((TMR1IF)&&(TMR1IE)){TMR1IF=0;TMR1H=0;TMR1L=0;}if((RCIE)&&(RCIF)){rbuff=RCREG;//读取接收缓存的数据if(OERR==1){CREN=0;asm("nop");CREN=1;}/* TXEN=1; //打开发送使能TXREG=rbuff;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXEN=0; //关闭发送使能*/}}//*********初始化配置**************** voidinit(){OSCCON=0x70;//振荡器控制寄存器GIE=1;//总中断开PEIE=1;//------定时器0的配置----OPTION=0x86;//选项寄存器配置T0IF=0;//请定时器零中断标志位T0IE=1;//开定时器零中断TMR0=100;//----------------------//------计数器1的配置--------T1CON=0x07;TMR1IF=0;TMR1IE=1;TMR1H=0;TMR1L=0;//---------------------------//-------比较器的配置--------CM1CON0=0x94;CM2CON0=0xa0;VRCON=0xcd;SRCON=0xf0;CM2CON1=0x02;//---------------------------//---------USART的配置-------TXSTA=0x0c;//发送状态寄存器设置(暂时关闭要发时再开) RCSTA=0x90;//接收状态寄存器控制BAUDCTL=0x80;//波特率控制SPBRG=51;//波特率9600SPBRGH=0x00;//波特率9600RCIE=1; //接收中断打开TXIE=0; //发送中断关闭//---------------------------//-----IO口的配置-------ANSEL=0xf2;//|设为数字IO口ANSELH=0x00;//|TRISA=0x22;PORTA=0x00;TRISB=0x20;PORTB=0x00;TRISC=0x0f;PORTC=0x00;RA0=1;}//**********USART************** voidusart(){if(rbuff==0x74){//------------------------ a1=usdata/100;a2=usdata%100/1000;a3=usdata%1000/100;a4=usdata%100/10;a5=usdata%10;a1=a1|0x30;a2=a2|0x30;a3=a3|0x30;a4=a4|0x30;a5=a5|0x30;//------------------------TXEN=1; //打开发送使能TXREG=a1;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXREG=a2;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXREG=a3;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXREG=a4;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXREG=a5;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXEN=0; //关闭发送使能rbuff=0;}if(rbuff==0x72){//------------------------ a1=average[usdata]/100;a2=average[usdata]%100/1000;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;a5=a5|0x30;//------------------------TXEN=1; //打开发送使能TXREG=a1;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXREG=a2;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXREG=a3;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXREG=a4;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXREG=a5;//把接收到的数据送到发送缓存while(!TRMT);//等待发送完成TXEN=0; //关闭发送使能rbuff=0;}if(rbuff==0x30){usdata=0;rbuff=0;}if(rbuff==0x31){usdata=1;rbuff=0;}if(rbuff==0x32){usdata=2;rbuff=0;}if(rbuff==0x33){usdata=3;rbuff=0;}}//***************************//------按键判断voidtouchkey(){if(keya==1){RA2=1; RA4=0;RB4=0;RB6=1;RC5=1;RC6=1;RC7=1;}if(keyb==1){RA2=0;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;}if(keyd==1){RA2=1;RA4=0;RB4=0;RB6=1; RC5=1; RC6=0; RC7=0;}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (Buttons.BTN4) // called 'button_pressed' s.t. button_pressed=index.
DisplayLEDs(4); // Then, main loop code would simply require:
// Incorporated (the "Company") is intended and supplied to you, the
// Company抯 customer, for use solely and exclusively on Microchip
// products. The software is owned by the Company and/or its supplier,
// IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
//
//******************************************************************************
if (Buttons.BTN1) // more application code, but reduces isr code.
DisplayLEDs(1); // It also allows reaction to different buttons at
bank2 unsigned int threshold128; // Threshold of 1/128th = 1/128th of the average value
bank2 unsigned int threshold64; // ... used in computation of threshold variable
#if METHOD == 4
__CONFIG(INTIO & WDTEN & PWRTEN & MCLRDIS & UNPROTECT);
#else
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT);
#endif
/** Variables **/
bank2 unsigned int threshold32; // ... threshold is a selection of the sum of these
bank2 unsigned int threshold16; // "
bank2 unsigned int threshold8; // "
BButtons Buttons; // Buttons struct variable indicates button presses
unsigned int bigval; // current button bigval - for averaging technique
if (Buttons.BTN2) // the same time.
DisplayLEDs(2);
if (Buttons.BTN3) // ALTERNATIVE:
DisplayLEDs(3); // For ea. case in the isr, create and set a variable
bank1 unsigned int reading[NUM_BTTNS]; // current reading for each button
bank1 unsigned int average[NUM_BTTNS]; // running average for each button
//******************************************************************************
// Software License Agreement
//
// The software supplied herewith by Microchip Technology
while (1) { // Loop forever
// React to button presses in application main-loop
if (Buttons.BTN0)
DisplayLEDs(0); // Structuring code based off each button takes up
// When a pad is touched, the frequency on the Cap. sensing module changes due to the
// extra capacitance from the finger. The change in frequency is noted and the LEDs
bank1 unsigned int threshold; // tcrease from avg
unsigned char index; // index value relates ea. button and scanning sequence
if (Buttons.BTN5) // DisplayLEDs(button_pressed);
DisplayLEDs(5);
if (Buttons.BTN6)
// and is protected under applicable copyright laws. All rights are
// reserved. Any use in violation of the foregoing restrictions may
// subject the user to criminal sanctions under applicable laws, as
// *****************************************************************************
#include <pic.h>
#include "Cap_Sense.h"
#define METHOD 4 // 1= Timer0 Base; 2= Timer2 Base; 3= WDT base; 4=WDT Sleep Base
void RestartTimer1(void);
void SetNextChannel(void);
void CapInit(void);
void DisplayLEDs(char i);
void interrupt isr(void);
void SLEEP_NOP(void);
/*====================================================================
// This program scans 16 pads on a PCB. Each pad is sensed by the Capacitive
// Sensing Module at a fixed interval. The frequency of each pad at rest is averaged.l
bank2 unsigned int threshold4; // "
bank2 unsigned int threshold2; // Threshold value for 1/2
FFlags Flags; // Flags struct variable contains application status
// light up to indicate which button was pressed.
// *****************************************************************************
//
// Compiler: Hi-Tech PIC-C v.9.60
// *****************************************************************************
// Filename: Main727.c
// Date: Dec. 13, 2007
// Purpose: Illustrate the use of the Capacitive Sensing Module
// well as to civil liability for the breach of the terms and
// conditions of this license.
//
// THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES,
// WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
// TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
// PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
相关文档
最新文档