版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人机交互输入接口第1页,课件共72页,创作于2023年2月概述随着计算机科学技术的飞速发展,嵌入式系统技术作为一门新兴的技术已经应用到人类活动的各个领域,而外围设备则在发展和应用过程中起着重要作用。外围设备包括输入设备、输出设备、外存设备、通信设备等。嵌入式应用系统不论是研制开发还是应用,必然都有人的积极参与,人机交互则是通过外围设备来提供联系通道。常见的输入的手段有:
1、串口输入;
2、按键;
3、触摸屏。第2页,课件共72页,创作于2023年2月一、串口输入/输出应用宿主机和嵌入式产品之间的数据交换借助符合RS232标准的串口来实现。
宿主机和嵌入式产品之间要通信就得将两者的电压相互转换。实现这种转换的芯片有很多,如SP3232E、MAX232。
SP3232E是一个2驱动器/2接收器的器件,可以完成2路TTL电平与RS-232电平之间的转换。第3页,课件共72页,创作于2023年2月
芯片内主要由3个基本电路模块组成:1、驱动器:
它将TTL/CMOS逻辑电平转换为与输入逻辑电平相反的EIA/TIA-232电平;2、接收器:
接收器把EIA/TIA-232电平转换成TTL或CMOS逻辑输出电平;3、电荷泵:
电荷泵仍然需要4个外接电容,运用一种4相电压转换技术,保持输出对称的5.5V电源。SP3232E的典型工作电路1.1SP3232E芯片介绍第4页,课件共72页,创作于2023年2月1.2实验目的与内容
1、PC机通过串口向ARM硬件实验板发送数据,ARM硬件实验板采用中断方式接收宿主机的信息。2、通过UART0接口接收上位机的数据,并根据接收的数字内容控制LED灯亮的数目。第5页,课件共72页,创作于2023年2月1.3与中断相关的寄存器描述UART0模块中与中断相关的寄存器,主要有3个: 1、FIFO控制寄存器U0FCR;
2、中断使能寄存器U0IER; 3、中断标识寄存器U0IIR。第6页,课件共72页,创作于2023年2月1.UART0FIFO控制寄存器(U0FCR)
U0FCR控制UART0Rx(接收)和Tx(发送)FIFO的操作
U0FCR功能描述复位值0FIFO使能为1时使能对UART0Rx和TxFIFO以及U0FCR[7:1]的访问。该位的任何变化都将使UART0FIFO清空。01RxFIFO复位该位置位会清零UART0RxFIFO中的所有字节并复位指针逻辑。该位会自动清零。02TxFIFO复位该位置位会清零UART0TxFIFO中的所有字节并复位指针逻辑。该位会自动清零。05:3保留保留,用户软件不要向其写入1NA7:6Rx触发选择00:触发点0(默认1字节)01:触发点1(默认4字节)10:触发点2(默认8字节)11:触发点3(默认14字节)这2位决定在激活中断前,接收UART0FIFO必须写入多少字符。4个触发点由用户在编程时定义,可以选择所需要的触发深度。0第7页,课件共72页,创作于2023年2月2.UART0中断使能寄存器(U0IER) U0IER用于使能中断源U0IER功能描述复位值0RBR中断使能0:禁止RBR中断1:使能RBR中断01THRE中断使能0:禁止THRE中断1:使能THRE中断该中断的状态可从U0LSR5读出。02Rx线状态中断使能0:禁止Rx线状态中断1:使能Rx线状态中断该中断的状态可从U0LSR[4:1]读出。07:3保留保留,用户软件不要向其写入1NAUART可判断四种中断源:接收数据可用中断(RDA),接收超时中断(CTI),数据发送完中断(THRE),Rx线状态中断。第8页,课件共72页,创作于2023年2月3.UART0中断标识寄存器(U0IIR)
U0IIR提供状态代码用于指示一个挂起中断的中断源和优先级。U0IIR功能描述复位值0中断挂起0:至少有一个中断被挂起1:没有挂起的中断U0IIR0为低有效。挂起的中断可通过U0IIR[3:1]查询13:1中断标识011:1.接收线状态(RLS)010:2a.接收数据可用(RDA)110:2b.字符超时指示(CTI)001:3.THRE中断U0IER的bit3指示对应于UART0RxFIFO的中断。05:4保留保留,用户软件不要向其写入1NA7:6FIFO使能这些位等效于U0FCR的bit00
第9页,课件共72页,创作于2023年2月优先级高的中断事件屏蔽优先级低的中断事件。①UART0RLS中断是最高优先级的中断。②UART0RDA和CTI中断是第二优先级。③UART0THRE中断是第三优先级中断。在退出中断服务程序前,必须清除中断标志。UART0中断源和中断使能关系图第10页,课件共72页,创作于2023年2月1.4电路原理图第11页,课件共72页,创作于2023年2月1.5主程序
uint8 KeyCode; //定义全局变量/*******************************************************文件名:main()*功能:接收PC机传送的数据(0~8),并用LED灯显示******************************************************/intmain(void){
KeyCode=0;
LS164_Init();
//LS164初始化
UART0_Init(115200); //UART0模块初始化
while(1)
//通过LS164发送数据,控制LEDLS164_SendData(KeyCode);
return(0);}当PC机发来数据,ARM启动UART0的中断服务程序,把接收的数据放到KeyCode全局变量中。第12页,课件共72页,创作于2023年2月
程序中读取宿主机发来的数据,然后把接收的数据处理后,发送给全局变量KeyCode作为按键值,最后退出中断。程序清单UART0中断服务程序/*********************************************************************文件名:UART0_IRQ()*功能:UART0中断服务子程序*全局变量:KeyCode********************************************************************/void__irqUART0_IRQ(void){ uint8 Data; Data=U0RBR; //取得宿主机发来的数据
KeyCode=Data-0x30; //把数字字符转换成相应的数字
while((U0IIR&0x04)==0x04) Data=U0IIR; //通过读取U0IIR寄存器来清除中断标志
VICVectAddr=0; //通知中断结束}UART0中断服务程序第13页,课件共72页,创作于2023年2月/***************************************************************************名称:UART0_Init(uint32UART_BPS)*功能:初始化串口0,设置波特率,数据位长度8,停止位长度1,无奇偶校验
UART0中断使能,设置中断服务程序地址**************************************************************************/voidUART0_Init(uint32UART_BPS){ uint16 Fdiv; PINSEL0=0x00000005; //设置I/O连接到UART0 U0LCR=0x83; //DLAB=1,可设置波特率
Fdiv=(Fpclk/16)/UART_BPS; //
计算分频值
U0DLM=Fdiv/256; U0DLL=Fdiv%256; U0LCR=0x03;
//8位字符长度、1个停止位、禁止奇偶效验
U0IER=0x01;
//使能RDA中断
//----------设置外部中断---------- VICIntSelect=0x00000000; //设置所有的通道为IRQ中断
VICVectCntl6=0x26;
//UART0分配到IRQ6 VICVectAddr6=(uint32)UART0_IRQ;
//设置UART0中断服务程序的地址
VICIntEnable=VICIntEnable|(1<<6);
//使能UART0中断 }
UART0初始化程序第14页,课件共72页,创作于2023年2月1.6实验结果单击全速运行按钮(快捷键F5),程序会运行并停留在main()主函数处;继续全速运行,在PC机上的“串口调试助手”的发送对话框输入数字,如下图所示,实验板上的LED亮灭状态随着输入数字的不同发生相应的变化。第15页,课件共72页,创作于2023年2月二、键盘应用键盘的用途:
用PC机键盘控制计算机;用手机键盘发送短信息;用遥控器控制家用电器等等。
键盘是最为直接的控制手段,也是最容易被人们接收的控制方法。应用键盘可以大大提高应用系统的灵活性和可控制性。键盘按照结构形式可分两大类: 编码键盘:
由专用键盘接口芯片连接的键盘电路模块; 非编码键盘:
采用直接I/O端口方式。
第16页,课件共72页,创作于2023年2月1.1非编码键盘的电路组成结构2、矩阵式按键结构矩阵式键盘由行线、列线及位于行列线交叉点上的按键组成。需要通过读取连接到按键上的两根I/O口线的状态共同来确定键的状态。
键盘状态的监测方法也有两种:查询方式和中断方式。按键多时,与第一种按键结构相比,能节省I/O口资源。1、独立式按键结构
独立式键盘是指直接用I/O口线构成的单个按键电路。微处理器通过向此I/O口发出读指令来得到当前按键的状态。
独立式键盘状态的监测方法主要有两种:查询方式和中断方式。优点:配置灵活,软件简单;缺点:占用I/O资源多。
第17页,课件共72页,创作于2023年2月①查询方式在查询方式下不管有没有键按下,CPU需要不断地进行查询操作,以判断是否有键按下。
②中断方式在电路结构方面,中断方式并不复杂,比查询方式只多了一个与门,相与后的结果送入CPU的中断引脚。查询方式的独立式按键结构中断方式的独立式按键结构独立式按键结构第18页,课件共72页,创作于2023年2月矩阵式键盘由于采用矩阵式结构,需要通过连接到键上的两根I/O口线的状态共同来确定键的状态。通过确定按键的行数,由行数和列数就可以唯一确定按键位置。矩阵式按键结构第19页,课件共72页,创作于2023年2月 矩阵式键盘状态的两种监测方法:查询方式和中断方式。
中断方式的矩阵式键盘电路图
第20页,课件共72页,创作于2023年2月1.2按键位置判别的软件方法1.扫描法扫描法可以采用行扫描或列扫描。当所有行扫描完成之后,我们就可以确定按键的个数以及每个按键的位置。第21页,课件共72页,创作于2023年2月 2.行列反转法
行列反转法也是判别按键位置的常用方法,行列反转法只需要扫描两次就可以判定按键位置。在程序设计时,将各个键对应的代码放在一个表中,程序通过查表来确定具体按下的是哪一个键。(a)行线输出,列线输入(b)列线输出,行线输入按键位置判别的软件方法第22页,课件共72页,创作于2023年2月1.3从电路或软件的角度应解决的问题按键抖动波形滤波消抖电路1.消除抖动影响为了确保CPU对一次按键动作只确认一次按键,必须消除抖动的影响。按键的消抖方法:硬件消抖和软件消抖。第23页,课件共72页,创作于2023年2月2.采取串键保护措施
串键是指同时有一个以上的键按下。采取的策略:单键按下有效,多键同时按下无效。3.选择按键确认方式
按键有效的确认方式可分为两类: 第一类为“按下→释放键”方式; 第二类为连击方式,就是一次按键可以产生多次击键效果从电路或软件的角度应解决的问题第24页,课件共72页,创作于2023年2月1.4实验目的与内容对16个矩阵式按键编号为1~16,当有按键事件发生时,蜂鸣器蜂鸣。如果1号键按下则蜂鸣一声,2号键按下则蜂鸣两声,依此类推。第25页,课件共72页,创作于2023年2月1.5电路原理图1:控制列的引脚设置为输出,初始状态为低电平;控制行的引脚设置为输入。2:未按键时,行输入引脚都为高电平,经与门相与后仍为高电平,输入到INT0引脚;当有按键发生时,行输入引脚中至少有一个为低电平,经与门相与后为低电平,输入到INT0引脚,触发外部中断通知ARM处理器3:ARM处理器接收到中断信号后,扫描键盘,判别按键位置。第26页,课件共72页,创作于2023年2月1.6按键扫描算法
第27页,课件共72页,创作于2023年2月按键识别中断服务程序volatileuint8Key; //定义全局变量,保存按键值/*********************************************************************文件名:KEY_IRQ()*功能:外部中断服务程序,判断两次按键值是否相等*入口参数:无*出口参数:按键值保存在全局变量Key中********************************************************************/void__irqKEY_IRQ(void){ uint32i,key1,key2;
for(i=0;i<=1000;i++); //延时一段时间,消抖
key1=KEY_Scan(); //按键扫描
for(i=0;i<=1000;i++); //延时一段时间key2=KEY_Scan(); //按键扫描if(key1==key2) Key=key1;
//如果两次扫描得到的键值相同,则保存这个按键
while((EXTINT&0x01)!=0) //清除中断标志
{EXTINT=0x01;}
VICVectAddr=0; //中断结束}第28页,课件共72页,创作于2023年2月按键扫描子程序/****************************************************************文件名:unsignedKEY_Scan()*功能:按键的扫描,扫描结束后返回按键的代码.*出口参数:key,按键码***************************************************************/uint8KEY_Scan(void){ uint8key=0;
//--------------扫描第1列--------------
IO2CLR=COL1;
//列线COL1输出置低
IO2SET=COL2;IO1SET=COL3|COL4; //其他列线输出置高
if((IO2PIN&ROW1)==0)key=1;
//如果按键发生在第一行
if((IO2PIN&ROW2)==0) key=2;
//如果按键发生在第二行
if((IO2PIN&ROW3)==0) key=3;
//如果按键发生在第三行
if((IO2PIN&ROW4)==0) key=4;
//如果按键发生在第四行第29页,课件共72页,创作于2023年2月
//--------------扫描第2列--------------IO2CLR=COL2; //列线COL2输出置低
IO2SET=COL1; IO1SET=COL3|COL4; //其他列线输出置高
if((IO2PIN&ROW1)==0) key=5; if((IO2PIN&ROW2)==0) key=6;if((IO2PIN&ROW3)==0) key=7;//--------------扫描第3列--------------IO1CLR=COL3; //列线COL3输出置低
IO2SET=COL1|COL2;IO1SET=COL4; //其他列线输出置高
if((IO2PIN&ROW1)==0) key=9;if((IO2PIN&ROW2)==0) key=10;if((IO2PIN&ROW3)==0) key=11;if((IO2PIN&ROW4)==0) key=12;//--------------扫描第4列--------------IO1CLR=COL4; //列线COL4输出置低
IO2SET=COL1|COL2;IO1SET=COL3; //其他列线输出置高
if((IO2PIN&ROW1)==0) key=13;if((IO2PIN&ROW2)==0) key=14;if((IO2PIN&ROW3)==0) key=15;if((IO2PIN&ROW4)==0) key=16;//----------------四列全清0----------------------IO1CLR=COL3|COL4;IO2CLR=COL1|COL2;return(key); }第30页,课件共72页,创作于2023年2月/*********************************************************************文件名:main()*功能:读键盘值,根据键盘值控制蜂鸣器响********************************************************************/intmain(void){uint8 i;IO1DIR=IO1DIR|BEE; //设置控制蜂鸣器引脚P1.24为I/O输出
KEY_Init(); //按键初始化
while(1){ if(Key!=0){ for(i=0;i<Key;i++) { BEEON(); //蜂鸣器响
DelayMS(10); BEEOFF(); //关蜂鸣器}Key=0;}}return(0);}主程序第31页,课件共72页,创作于2023年2月实验结果单击全速运行按钮(快捷键F5),程序会运行并停留在main()主函数处;继续全速运行,然后实验板等待用户按键,蜂鸣器根据接收按键码确定蜂鸣次数。以上参考程序中定义的按键与键码对应的关系图如下所示。(实验板上S1对应数字1,S2对应数字2,以此类推,注意:Key是一个独立的中断按键)第32页,课件共72页,创作于2023年2月三、触摸屏应用
触摸屏由于其体积小、轻便和接口简单的特点,目前在嵌入式系统中已经成为一种应用广泛的输入设备。触摸屏的基本类型:
1、电阻技术触摸屏;
2、电容技术触摸屏;
3、表面声波技术触摸屏;
4、红外线扫描技术触摸屏;
5、向量压力传感技术触摸屏。触摸屏系统一般包括两个部分:
1、触摸检测装置;
2、触摸屏控制器。第33页,课件共72页,创作于2023年2月
1.1触摸检测装置触摸检测装置一般由两层透明的阻性导体层和隔离层共3层组成。第34页,课件共72页,创作于2023年2月1.2触摸屏的坐标系统
假设触摸屏X方向的电压值为从大到小(Xmax至Xmin),Y方向的电压值为从小到大(Ymin至Ymax),实际测量的电压值为(Yv,Xv),分辨率为320×240的液晶显示屏。X、Y向的坐标(x,y)按下式计算:
x=((Yv-Xmin)/(Xmax-Xmin))×320
y=((Xv-Ymin)/(Ymax-Ymin))×240第35页,课件共72页,创作于2023年2月ADS7843控制芯片要完成两件事情: 其一,是完成电极电压的切换; 其二,是采集接触点处的电压值(即A/D)。ADS7843的引脚配置与典型应用电路1.3触摸屏的控制芯片ADS7843第36页,课件共72页,创作于2023年2月引脚号引脚名功能描述1、10+Vcc供电电源2.7~5V2、3X+、Y+接触摸屏正电极,内部A/D通道4、5X-、Y-接触摸屏负电极6GND电源地7、8IN3、IN4两个附属A/D通道9VREFA/D参考电压输入
11PENIRQ中断输出,必须外接上拉电阻(触摸显示屏后引发一个中断)12、14、16DOUT、DIN、DCLK串行接口引脚,完成与MCU通信13BUSY忙指示,低电平有效15CS片选芯片ADS7843的引脚说明第37页,课件共72页,创作于2023年2月ADS7843的内部结构第38页,课件共72页,创作于2023年2月一种是SER单端模式,参考电压固定为VREF;
一种是DFR差分模式,参考电压来自驱动电极。两种输入模式的原理示意图ADS7843的两种参考电压输入模式第39页,课件共72页,创作于2023年2月
ADS7843的具体工作通道的选择由控制字(A2、A1、A0)来决定。A2A1A0X+Y+IN3IN4X开关Y开关001+INOFFON101+INONOFF010+INOFFOFF110+INOFFOFF第7位第6位第5位第4位第3位第2位第1位第0位SA2A1A0MODESER/DFRPD1PD0ADS7843的控制字第40页,课件共72页,创作于2023年2月 工作时序2:16个时钟周期ADS7843的工作时序 工作时序1:20个时钟周期第41页,课件共72页,创作于2023年2月1.4实验目的与内容目的:监测触摸屏触摸的位置,然后在显示屏上实时显示触摸位置的坐标。内容:
1、启动ADS7843芯片对数据进行采集,并等待AD转换完成2、从ADS7843芯片中读取转换完成后的数据3、根据公式将具体的数据转换成触摸屏位置坐标4、将位置坐标显示在屏幕上。第42页,课件共72页,创作于2023年2月1.5电路连接原理示意图第43页,课件共72页,创作于2023年2月 宏定义和ADS7843的初始化函数#defineDIN(1<<19)//DIN连接P0.19#defineDOUT(1<<18)//DOUT连接P0.18#defineBUSY(1<<20)//BUSY连接P1.20#defineDCLK(1<<17)//DCLK连接P0.17#defineCS(1<<14)//CS连接P0.14#definePENIRQ(1<<15)//PENIRQ连接P015EINT2#defineDIN_High() IO0SET=DIN //DIN引脚置1#defineDIN_Low() IO0CLR=DIN //DIN引脚清0#defineDCLK_High() IO0SET=DCLK#defineDCLK_Low() IO0CLR=DCLK#defineCS_High() IO0SET=CS#defineCS_Low() IO0CLR=CS1.6软件编写第44页,课件共72页,创作于2023年2月/*********************************************************************文件名:ADS7843_Init()*功能:触摸屏模块所用的引脚初始化,包括引脚功能的选择*入口参数:无*出口参数:无********************************************************************/voidADS7843_Init(void){
//设置CS、PENIRQ、DIN、DOUT、DCLK为GPIO口 PINSEL0=PINSEL0&0x0FFFFFFF;
PINSEL1=PINSEL1&0xFFFFFF03;
//CS、DCLK、DIN等引脚为输出,DOUT脚为输入
IO0DIR=IO0DIR|CS|DCLK|DIN;
IO0DIR=IO0DIR&(~DOUT)&(~PENIRQ); IO1DIR=IO1DIR&(~BUSY); //BUSY脚为输入}第45页,课件共72页,创作于2023年2月/*********************************************************************文件名:intADS_Read()*功能:读函数,读触摸点值并返回Number位测量结果*入口参数:Number读取Number位测量结果,Number=8、12*出口参数:返回结果back********************************************************************/uint32ADS7843_Read(uint8Number){
uint32back,i,j; back=0; //back用于保存读取的数据
CS_Low();
DIN_Low();//DCLK_Low();//DCLK、DIN、CS输出低电平 for(i=0;i<Number;i++)
/*从ADS7843读出数据,先高位再低位*/
{
back<<=1; //左移1位
DCLK_High(); //从DOUT引脚读出数据,下降沿有效。DCLK置1
for(j=0;j<2;j++); //软件小段延时
if(DOUT&IO0PIN)//如果为1,将back相对应的位置1 back++;
DCLK_Low(); //DCLK置0
} for(;i<(16-Number);i++)
/*发送多余的脉冲周期*/
{
DCLK_High(); //从DOUT引脚读出数据,下降沿有效。DCLK置1
for(j=0;j<2;j++); //软件小段延时
DCLK_Low(); //DCLK置0
for(j=0;j<2;j++); //软件小段延时
}
return(back);
}
第46页,课件共72页,创作于2023年2月/*********************************************************************文件名:intADS_Send()*功能:写函数,发送控制字给ADS7843*入口参数:uint8command********************************************************************/
voidADS7843_Send(uint8command)
{ uint8i,j; /*启动SPI传输*/ CS_Low(); DCLK_Low(); DIN_High(); DCLK_High(); //发送开始标志S=1 for(j=0;j<2;j++); //软件小段延时
while(IO1PIN&BUSY); //等待ADS7843的busy线变为低电平
DCLK_Low(); /*发送控制字,采用模拟时序,一次发送一个字节(起始标志位S已发送,只发送7个位)*/ for(i=0;i<7;i++) //发送一个字节的控制字,其中高位在先
{ command<<=1; if((command&0x80)!=0)//判断最高位是否为1 DIN_High(); //DIN引脚输出1 else DIN_Low(); DCLK_Low(); //DCLK清0,从DIN引脚输入数据,上升沿有效。
for(j=0;j<2;j++); //软件小段延时
DCLK_High(); //DCLK置1 } DCLK_Low();
}第47页,课件共72页,创作于2023年2月1.7坐标测量算法触摸屏控制的流程图第48页,课件共72页,创作于2023年2月1.8Read_Touch函数/*********************************************************************文件名:voidRead_Touch(uint32*X,uint32*Y)*功能:读取触摸屏的触摸位置,结果保存在X,Y指针变量中*入口参数:X保存x坐标Y保存y坐标********************************************************************/voidRead_Touch(uint32*X,uint32*Y){ uint32DATA1,DATA2,i; *X=0;*Y=0; //-------------------排除错误触发--------------------------- for(i=0;i<10;i++); //软件延时小段时间
if((IO0PIN&PENIRQ)!=0) return; //如果中断输出引脚PENIRQ不为0
//-----------软件去抖,设置PINIRQ引脚输出低电平------------- DelayMS(10); //软件延时30ms时间
IO0DIR=IO0DIR|PENIRQ;
IO0CLR=PENIRQ; //-----------------------测量Y坐标--------------------------- ADS7843_Send(0xd3);//发一个字节的读Y坐标的控制字给ADS7843(Y+输入) for(i=0;i<4;i++); while(IO1PIN&BUSY); //等待BUSY为0,如果BUSY信号不好使可以删除不用
DATA1=ADS7843_Read(12);
//从ADS7843读出采集过来的8位数据
ADS7843_Send(0xd3); for(i=0;i<4;i++); while(IO1PIN&BUSY); DATA2=ADS7843_Read(12);
第49页,课件共72页,创作于2023年2月
while(DATA1!=DATA2) //将读取两次的结果进行比较
{ DATA1=DATA2; ADS7843_Send(0xd3); for(i=0;i<4;i++); while(IO1PIN&BUSY); DATA2=ADS7843_Read(12); } *Y=DATA2; //-----------------------测量X坐标--------------------------- ADS7843_Send(0x93);//发一个字节的读X坐标的控制字给ADS7843,选择转换精度12位
while(IO1PIN&BUSY); //等待BUSY为0,如果BUSY信号不好使可以删除不用
DATA1=ADS7843_Read(12);//从ADS7843读出采集过来的8位数据
ADS7843_Send(0x93); while(IO1PIN&BUSY); DATA2=ADS7843_Read(12); while(DATA1!=DATA2) //对两次采样的结果进行比较
{ DATA1=DATA2; ADS7843_Send(0x93); for(i=0;i<4;i++); while(IO1PIN&BUSY); DATA2=ADS7843_Read(12); } *X=DATA2; ADS7843_Send(0x90);//发送控制字0x90,7843芯片进入省电模式且中断允许
IO0DIR=IO0DIR&(~PENIRQ);//PINIRQ设置为输入
DCLK_Low(); CS_High();}第50页,课件共72页,创作于2023年2月参考主程序//8位测量数据的边缘点(x,y)坐标的经验值#defineXmin 0x1A#defineXmax 0xE7#defineYmin 0x24#defineYmax 0xDD/*********************************************************************函数名:main()*功能:控制对ADS7843的读写,且将读出的数据进行换算*入口参数:无*出口参数:0********************************************************************/intmain(void){ uint32x,y; GRA_Initialize(); GUI_SetColor(Black,White); ADS7843_Init();//系统初始化
ADS7843_Send(0x90);
第51页,课件共72页,创作于2023年2月
while(1) { if((IO0PIN&PENIRQ)==0) {
Read_Touch(&x,&y);
//---坐标值计算,以触摸屏的左下角为原点,往右X值增长,往上Y值增长---
if(x<Xmin) x=Xmin;
if(x>Xmax) x=Xmax;
if(y<Ymin) y=Ymin;
if(y>Ymax) y=Ymax;
x=(320*(x-Xmin))/(Xmax-Xmin);
x=320-x;
y=(240*(y-Ymin))/(Ymax-Ymin); y=240-y;
//把坐标值输出在屏幕上
DISP_XY(150,100,white,x,y);
GRA_Refresh(100,80,220,170);//根据缓冲区的内容刷新显示屏
} }return0;}第52页,课件共72页,创作于2023年2月1.9实验步骤与结果1.在CodeWarriorIDE集成开发环境中,使用“FollowMeStudyARM”工程模板建立新工程。然后在工程中添加本实验的程序代码,按F7快捷键编译链接整个工程。编译报错则修改源程序中的错误,如果编译通过则在相应的目录下产生我们所需要的二进制文件和可执行映像文件。2.运行H-Flasher软件,将产生的二进制文件烧写到实验板上。3.打开AXD调试环境,并加载刚刚产生的可执行映像文件进行调试。4.单击全速运行按钮(快捷键F5),程序会运行并停留在main()主函数处;继续全速运行,然后等待用户触摸触摸屏。液晶屏上会实时显示触摸点位置的X与Y坐标。第53页,课件共72页,创作于2023年2月四、附录--CH451功能及应用
CH451是一个整合了数码管显示驱动和键盘扫描控制以及μP监控的多功能外围芯片。CH451的电路结构示意图第54页,课件共72页,创作于2023年2月1.1CH451功能特点1.显示驱动内置大电流驱动级,段电流不小于25mA,每位字的电流不小于150mA。动态显示扫描控制,直接驱动8位数码管或者64位发光管LED。可选数码管的段与数据位相对应的不译码方式或者BCD译码方式。数码管的字数据左移、右移、左循环、右循环。各数码管数字独立闪烁控制。通过占空比设定提供16级亮度控制。支持段电流上限调整,可以省去所有限流电阻。扫描极限控制,支持1到8个数码管,只为有效数码管分配扫描时间。第55页,课件共72页,创作于2023年2月2.键盘控制内置64键键盘控制器,基于8×8矩阵键盘扫描。内置按键状态输入的下拉电阻,内置去抖动电路。键盘中断,低电平有效输出。提供按键释放标志位,可供查询按键按下与释放。3.其他功能
完全内置时钟振荡电路,通常不需要外接晶体或者阻容振荡。内置上电复位和看门狗Watch-Dog,提供高电平有效和低电平有效复CH451功能特点第56页,课件共72页,创作于2023年2月1.2引脚与封装
第57页,课件共72页,创作于2023年2月CH451的引脚描述28脚封装的引脚号24脚封装的引脚号引脚名称类型引脚说明232VCC电源正电源端915GND电源公共接地端254LOAD输入串行接口的数据加载,内置上拉电阻265DIN输入串行接口的数据输入,内置上拉电阻276DCLK输入串行接口的数据时钟,内置上拉电阻同时用于看门狗的清除输入243DOUT输出串行接口的数据输出和键盘中断22~151、24~18SEG7~SEG0输入/输出数码管的段驱动,高电平有效;键盘扫描输入,高电平有效。1~87~14DIG7~DIG0输出数码管的字驱动,低电平有效;键盘扫描输出,高电平有效。1216RST输出上电复位和看门狗复位,高电平有效17NC不连接,禁止使用13RST#输出上电复位和看门狗复位,低电平有效14ADJ输入段电流上限调整,内置强下拉电阻10CLK输入可选外接电阻电容调整内部时钟频率11CLKO输出CLK引脚时钟的二分频输出28RSTI输入手工复位输入,高电平有效第58页,课件共72页,创作于2023年2月1.3CH451的内部寄存器 CH451内部具有一个12位的移位寄存器和一个12位的命令寄存器,处理器通过向命令寄存器发送12位的控制命令,从而控制CH451完成相应的功能。 CH451通过以下4根线与处理器进行数据交换。 串行数据输入线DIN、 串行数据时钟线DCLK、 串行数据加载线LOAD、 串行数据输出线DOUT。第59页,课件共72页,创作于2023年2月 处理器发送数据给命令寄存器的输出过程如下: ①向DIN输出最低位数据B0,并向DCLK输出低电平脉冲; ②输出位数据B1~B11; ③向LOAD输出低电平脉冲。输出数据过程示意图1.4CH451的通信过程第60页,课件共72页,创作于2023年2月1.5CH451的操作命令种类操作命令位11位10位9位8位7位6位5位4位3位2位1位0控制芯片内部复位001000000000设置系统参数010000000DogKeyDisp键盘读取按键代码0111XXXXXXXX1.芯片内部复位:001000000001B
内部复位命令将CH451的各个寄存器和各种参数复位到默认的状态。2.设定系统参数:010000000[WDOG][KEYB][DISP]B 用于设定CH451的系统级参数。3.读取按键代码:0111XXXXXXXXB 用于获得CH451最近检测到的有效按键的按键代码。CH451的操作命令均为12位。第61页,课件共72页,创作于2023年2月1.6CH451的键盘连接图第62页,课件共72页,创作于2023年2月1.7CH451的按键代码按键代码DIG0DIG1DIG2DIG3DIG4DIG5DIG6DIG7SEG040H41H42H43H44H45H46H47HSEG148H49H4AH4BH4CH4DH4EH4FHSEG250H51H52H53H54H55H56H57HSEG358H59H5AH5BH5CH5DH5EH5FHSEG460H61H62H63H64H65H66H67HSEG568H69H6AH6BH6CH6DH6EH6FHSEG670H71H72H73H74H75H76H77HSEG778H79H7AH7BH7CH7DH7EH7FH第63页,课件共72页,创作于2023年2月1.8键盘管理操作第64页,课件共72页,创作于2023年2月处理器从CH451获得按键代码的过程时序图。
CH451的读取按键代码命令只有位数据B8~B11是有效的,所以处理器不必发出读取按键代码命令的B0~B7。1.9键盘管理过程时序图第65页,课件共72页,创作于2023年2月2.0实验箱上的电路连接图第66页,课件共72页,创作于2023年2月2.1驱动程序设计
#defineDOUT (1<<16) //P0.16#defineLOAD (1<<20) //P2.20#defineDIN (1<<18) //P2.18#defineDCLK (1<<16) //P2.16CH451的写函数CH451_Write(uint16Data,uint8Length),CH451的读函数uint8CH451_Read()两个驱动程序我们先对几个要用到的IO引脚定义如下:第67页,课件共72页,创作于2023年2月
/******************************************************************** *函数名:CH451_Write() *功能:实现对CH451写入给定长度的数据 *入口参数:uint16Data 待发送的数据 *uint8 Length
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSHE 0010-2023压缩空气储能电站投资编制导则
- 旅游产品顾问服务考核表
- 金融行业文档归档命名规范方案
- 晋中市左权县2025-2026学年中考冲刺卷数学试题含解析
- 山东省滨州市2026年中考数学考试模拟冲刺卷含解析
- IT技术人员项目执行能力考核表
- 电视台编导节目策划及制作水平KPI考核表
- 航空客舱乘务员服务效能与响应速度考核表
- 银行业客户服务及风险控制能力绩效衡量表
- 聚丙烯装置操作工安全宣贯强化考核试卷含答案
- 2026年全国煤炭生产经营单位(安全生产管理人员)考试题库含答案
- 2026新教材数学 2.1.1 第1课时 有理数加法法则
- 2026新版检验检测机构管理评审报告
- 职业卫生技术服务机构质量管理体系手册
- 2026年新疆事实政治专升本考试真题及参考答案
- 妊娠剧吐试题及答案
- 2026年智慧海洋国际合作案例:技术共享与联合研发项目分析
- 大连理工大学《光学》2024 - 2025 学年第一学期期末试卷
- 仓库先进先出管理培训
- 《机械制图》电子教材
- 术后恶心呕吐防治专家共识课件
评论
0/150
提交评论