1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第六章 人机交互,输入接口,一、,串口输入,/,输出应用,二、,键盘应用,三、,触摸屏应用,四、,附录,CH451,功能及应用,概述,随着计算机科学技术的飞速发展,嵌入式系统技术作为一门新兴的技术已经应用到人类活动的各个领域,而外围设备则在发展和应用过程中起着重要作用。,外围设备包括输入设备、输出设备、外存设备、通信设备等。,嵌入式应用系统不论是研制开发还是应用,必然都有人的积极参与,人机交互则是通过外围设备来提供联系通道。,常见的输入的手段有:,1,、串口输入;,2,、按键;,3,、触摸屏。,一、,串口输
2、入,/,输出应用,宿主机和嵌入式产品之间的数据交换借助符合,RS232,标准的串口来实现。,宿主机和嵌入式产品之间要通信就得将两者的电压相互转换。实现这种转换的芯片有很多,如,SP3232E,、,MAX232,。,SP3232E,是一个,2,驱动器,/2,接收器的器件,可以完成,2,路,TTL,电平与,RS-232,电平之间的转换。,芯片内主要由,3,个基本电路模块组成:,1,、驱动器:,它将,TTL/CMOS,逻辑电平转换为与输入逻辑电平相反的,EIA/TIA-232,电平;,2,、接收器:,接收器把,EIA/TIA-232,电平转换成,TTL,或,CMOS,逻辑输出电平;,3,、电荷泵:,
3、电荷泵仍然需要,4,个外接电容,运用一种,4,相电压转换技术,保持输出对称的,5.5V,电源。,SP3232E,的典型工作电路,1.1 SP3232E,芯片介绍,1.2,实验目的与内容,1,、,PC,机通过串口向,ARM,硬件实验板发送数据,,ARM,硬件实验板采用中断方式接收宿主机的信息。,2,、通过,UART0,接口接收上位机的数据,并根据接收的数字内容控制,LED,灯亮的数目。,1.3,与中断相关的寄存器描述,UART0,模块中与中断相关的寄存器,主要有,3,个:,1,、,FIFO,控制寄存器,U0FCR,;,2,、中断使能寄存器,U0IER,;,3,、中断标识寄存器,U0IIR,。,1
4、UART0 FIFO,控制寄存器(,U0FCR,),U0FCR,控制,UART0 Rx,(接收)和,Tx,(发送),FIFO,的操作,U0FCR,功能,描述,复位值,0,FIFO,使能,为,1,时使能对,UART0 Rx,和,Tx FIFO,以及,U0FCR7:1,的访问。该位的任何变化都将使,UART0 FIFO,清空。,0,1,Rx FIFO,复位,该位置位会清零,UART0 Rx FIFO,中的所有字节并复位指针逻辑。该位会自动清零。,0,2,Tx FIFO,复位,该位置位会清零,UART0 Tx FIFO,中的所有字节并复位指针逻辑。该位会自动清零。,0,5:3,保留,保留,用户软件
5、不要向其写入,1,NA,7:6,Rx,触发选择,00,:触发点,0,(默认,1,字节),01,:触发点,1,(默认,4,字节),10,:触发点,2,(默认,8,字节),11,:触发点,3,(默认,14,字节),这,2,位决定在激活中断前,接收,UART0 FIFO,必须写入多少字符。,4,个触发点由用户在编程时定义,可以选择所需要的触发深度。,0,2.UART0,中断使能寄存器(,U0IER,),U0IER,用于使能中断源,U0IER,功能,描述,复位值,0,RBR,中断使能,0,:禁止,RBR,中断,1,:使能,RBR,中断,0,1,THRE,中断使能,0,:禁止,THRE,中断,1,:使能
6、THRE,中断,该中断的状态可从,U0LSR5,读出。,0,2,Rx,线状态中断使能,0,:禁止,Rx,线状态中断,1,:使能,Rx,线状态中断,该中断的状态可从,U0LSR4:1,读出。,0,7:3,保留,保留,用户软件不要向其写入,1,NA,UART,可判断四种中断源:接收数据可用中断(,RDA,),接收超时中断,(CTI),,数据发送完中断(,THRE,),,Rx,线状态中断。,3,UART0,中断标识寄存器(,U0IIR,),U0IIR,提供状态代码用于指示一个挂起中断的中断源和优先级。,U0IIR,功能,描述,复位值,0,中断挂起,0,:至少有一个中断被挂起,1,:没有挂起的中断,
7、U0IIR0,为低有效。挂起的中断可通过,U0IIR3:1,查询,1,3:1,中断标识,011,:,1.,接收线状态(,RLS,),010,:,2a.,接收数据可用(,RDA,),110,:,2b.,字符超时指示(,CTI,),001,:,3.THRE,中断,U0IER,的,bit3,指示对应于,UART0 Rx FIFO,的中断。,0,5:4,保留,保留,用户软件不要向其写入,1,NA,7:6,FIFO,使能,这些位等效于,U0FCR,的,bit0,0,优先级高的中断事件屏蔽优先级低的中断事件。,UART0 RLS,中断是最高优先级的中断。,UART0 RDA,和,CTI,中断是第二优先级。
8、UART0 THRE,中断是第三优先级中断。,在退出中断服务程序前,必须清除中断标志。,UART0,中断源和中断使能关系图,1.4,电路原理图,1.5,主程序,uint8KeyCode;/,定义全局变量,/*,*,文件名:,main(),*,功能:接收,PC,机传送的数据,(08),,并用,LED,灯显示,*,/,int main(void),KeyCode=0;,LS164_Init();,/LS164,初始化,UART0_Init(115200);/UART0,模块初始化,while(1),/,通过,LS164,发送数据,控制,LED,LS164_SendData(KeyCode);,r
9、eturn(0);,当,PC,机发来数据,,A,RM,启动,UART0,的中断服务程序,把接收的数据放到,KeyCode,全局变量中。,程序中读取宿主机发来的数据,然后把接收的数据处理后,发送给全局变量,KeyCode,作为按键值,最后退出中断。,程序清单,UART0,中断服务程序,/*,*,文件名:,UART0_IRQ(),*,功能:,UART0,中断服务子程序,*,全局变量:,KeyCode,*/,void _irq UART0_IRQ(void),uint8Data;,Data=U0RBR;/,取得宿主机发来的数据,KeyCode=Data-0 x30;/,把数字字符转换成相应的数字,w
10、hile(U0IIR&0 x04)=0 x04),Data=U0IIR;/,通过读取,U0IIR,寄存器来清除中断标志,VICVectAddr=0;/,通知中断结束,UART0,中断服务程序,/*,*,名称:,UART0_Init(uint32 UART_BPS),*,功能:初始化串口,0,设置波特率,数据位长度,8,,停止位长度,1,,无奇偶校验,UART0,中断使能,设置中断服务程序地址,*,/,void UART0_Init(uint32 UART_BPS),uint16 Fdiv;,PINSEL0=0 x00000005;/,设置,I/O,连接到,UART0,U0LCR=0 x83;/
11、DLAB=1,,可设置波特率,Fdiv=(Fpclk/16)/UART_BPS;,/,计算分频值,U0DLM=Fdiv/256;,U0DLL=Fdiv%256;,U0LCR=0 x03;,/8,位字符长度、,1,个停止位、禁止奇偶效验,U0IER=0 x01;,/,使能,RDA,中断,/-,设置外部中断,-,VICIntSelect=0 x00000000;,/,设置所有的通道为,IRQ,中断,VICVectCntl6=0 x26;,/UART0,分配到,IRQ6,VICVectAddr6=(uint32)UART0_IRQ;,/,设置,UART0,中断服务程序的地址,VICIntEnable
12、VICIntEnable|(16);,/,使能,UART0,中断,UART0,初始化程序,1.6,实验结果,单击全速运行按钮(快捷键,F5,),程序会运行并停留在,main(),主函数处;继续全速运行,在,PC,机上的,“,串口调试助手,”,的发送对话框输入数字,如下图所示,实验板上的,LED,亮灭状态随着输入数字的不同发生相应的变化。,二、,键盘应用,键盘的用途:,用,PC,机键盘控制计算机;用手机键盘发送短信息;用遥控器控制家用电器等等。,键盘是最为直接的控制手段,也是最容易被人们接收的控制方法。应用键盘可以大大提高应用系统的灵活性和可控制性。,键盘,按照结构形式可分两大类:,编码键盘:
13、由专用键盘接口芯片连接的键盘电路模块;,非编码键盘:,采用直接,I/O,端口方式。,1.1,非编码键盘的电路组成结构,2,、矩阵式按键结构,矩阵式键盘由行线、列线及位于行列线交叉点上的按键组成。,需要通过读取连接到按键上的两根,I/O,口线的状态共同来确定,键的状态。,键盘状态的监测方法也有两种:查询方式和中断方式。,按键多时,与第一种按键结构相比,能节省,I/O,口资源。,1,、独立式按键结构,独立式键盘是指直接用,I/O,口线构成的单个按键电路。,微处理器通过向此,I/O,口发出读指令来得到当前按键的状态。,独立式键盘状态的监测方法主要有两种:查询方式和中断方式。,优点:配置灵活,软件简
14、单;,缺点:占用,I/O,资源多。,查询方式,在查询方式下不管有没有键按下,,CPU,需要不断地进行查询操作,以判断是否有键按下。,中断方式,在电路结构方面,中断方式并不复杂,比查询方式只多了一个与门,相与后的结果送入,CPU,的中断引脚。,查询方式的独立式按键结构,中断方式的独立式按键结构,独立式按键结构,矩阵式键盘由于采用矩阵式结构,需要通过连接到键上的两根,I/O,口线的状态共同来确定键的状态。通过确定按键的行数,由行数和列数就可以唯一确定按键位置。,矩阵式按键结构,矩阵式键盘状态的两种监测方法:查询方式和中断方式。,中断方式的矩阵式键盘电路图,1.2,按键位置判别的软件方法,1,扫描法
15、扫描法可以采用行扫描或列扫描。当所有行扫描完成之后,我们就可以确定按键的个数以及每个按键的位置。,2,行列反转法,行列反转法也是判别按键位置的常用方法,行列反转法只需要扫描两次就可以判定按键位置。在程序设计时,将各个键对应的代码放在一个表中,程序通过查表来确定具体按下的是哪一个键。,(a),行线输出,列线输入,(b),列线输出,行线输入,按键位置判别的软件方法,1.3,从电路或软件的角度应解决的问题,按键抖动波形 滤波消抖电路,1,消除抖动影响,为了确保,CPU,对一次按键动作只确认一次按键,必须消除抖动的影响。按键的消抖方法:硬件消抖和软件消抖。,2,采取串键保护措施,串键是指同时有一个以
16、上的键按下。采取的策略:单键按下有效,多键同时按下无效。,3,选择按键确认方式,按键有效的确认方式可分为两类:,第一类为“按下释放键”方式;,第二类为连击方式,就是一次按键可以产生多次击键效果,从电路或软件的角度应解决的问题,1.4,实验目的与内容,对,16,个矩阵式按键编号为,116,,当有按键事件发生时,蜂鸣器蜂鸣。,如果,1,号键按下则蜂鸣一声,,2,号键按下则蜂鸣两声,依此类推。,1.5,电路原理图,1,:控制列的引脚设置为输出,初始状态为低电平;控制行的引脚设置为输入。,2,:未按键时,行输入引脚都为高电平,经与门相与后仍为高电平,输入到,INT0,引脚;,当有按键发生时,行输入引脚
17、中至少有一个为低电平,经与门相与后为低电平,输入,到,INT0,引脚,触发外部中断通知,ARM,处理器,3,:,ARM,处理器接收到中断信号后,扫描键盘,判别按键位置。,1.6,按键扫描算法,按键识别中断服务程序,volatile uint8 Key;/,定义全局变量,保存按键值,/*,*,文件名:,KEY_IRQ(),*,功能:外部中断服务程序,判断两次按键值是否相等,*入口参数:无,*出口参数:按键值保存在全局变量,Key,中,*,/,void _irq KEY_IRQ(void),uint32 i,key1,key2;,for(i=0;i=1000;i+);/,延时一段时间,消抖,key
18、1=KEY_Scan();/,按键扫描,for(i=0;i=1000;i+);/,延时一段时间,key2=KEY_Scan();/,按键扫描,if(key1=key2),Key=key1;,/,如果两次扫描得到的键值相同,则保存这个按键,while(EXTINT&0 x01)!=0)/,清除中断标志,EXTINT=0 x01;,VICVectAddr=0;/,中断结束,按键扫描子程序,/*,*,文件名:,unsigned KEY_Scan(),*,功能:按键的扫描,扫描结束后返回按键的代码,.,*,出口参数:,key,,按键码,*,/,uint8 KEY_Scan(void),uint8 ke
19、y=0;,/-,扫描第,1,列,-,IO2CLR=COL1;,/,列线,COL1,输出置低,IO2SET=COL2;IO1SET=COL3|COL4;/,其他列线输出置高,if(IO2PIN,/,如果按键发生在第一行,if(IO2PIN,/,如果按键发生在第二行,if(IO2PIN,/,如果按键发生在第三行,if(IO2PIN,/,如果按键发生在第四行,/-,扫描第,2,列,-,IO2CLR=COL2;/,列线,COL2,输出置低,IO2SET=COL1;IO1SET=COL3|COL4;/,其他列线输出置高,if(IO2PIN,if(IO2PIN,if(IO2PIN,/-,扫描第,3,列,-
20、IO1CLR=COL3;/,列线,COL3,输出置低,IO2SET=COL1|COL2;IO1SET=COL4;/,其他列线输出置高,if(IO2PIN,if(IO2PIN,if(IO2PIN,if(IO2PIN,/-,扫描第,4,列,-,IO1CLR=COL4;/,列线,COL4,输出置低,IO2SET=COL1|COL2;IO1SET=COL3;/,其他列线输出置高,if(IO2PIN,if(IO2PIN,if(IO2PIN,if(IO2PIN,/-,四列全清,0-,IO1CLR=COL3|COL4;IO2CLR=COL1|COL2;,return(key);,/*,*,文件名:,mai
21、n(),*,功能:读键盘值,根据键盘值控制蜂鸣器响,*,/,int main(void),uint8i;,IO1DIR=IO1DIR|BEE;/,设置控制蜂鸣器引脚,P1.24,为,I/O,输出,KEY_Init();/,按键初始化,while(1),if(Key!=0),for(i=0;iKey;i+),BEEON();/,蜂鸣器响,DelayMS(10);,BEEOFF();/,关蜂鸣器,Key=0;,return(0);,主程序,实验结果,单击全速运行按钮(快捷键,F5,),程序会运行并停留在,main(),主函数处;继续全速运行,然后实验板等待用户按键,蜂鸣器根据接收按键码确定蜂鸣次数
22、以上参考程序中定义的按键与键码对应的关系图如下所示。(实验板上,S1,对应数字,1,,,S2,对应数字,2,,以此类推,注意:,Key,是一个独立的中断按键),三、,触摸屏应用,触摸屏由于其体积小、轻便和接口简单的特点,目前在嵌入式系统中已经成为一种应用广泛的输入设备。,触摸屏的基本类型:,1,、电阻技术触摸屏;,2,、电容技术触摸屏;,3,、表面声波技术触摸屏;,4,、红外线扫描技术触摸屏;,5,、向量压力传感技术触摸屏。,触摸屏系统一般包括两个部分:,1,、触摸检测装置;,2,、触摸屏控制器。,1.1,触摸检测装置,触摸检测装置一般由两层透明的阻性导体层和隔离层共,3,层组成。,1.2,
23、触摸屏的坐标系统,假设触摸屏,X,方向的电压值为从大到小(,Xmax,至,Xmin,),,Y,方向的电压值为从小到大(,Ymin,至,Ymax,),实际测量的电压值为(,Yv,,,Xv,),分辨率为,320240,的液晶显示屏。,X,、,Y,向的坐标(,x,y,)按下式计算:,x=(Yv-Xmin)/(Xmax-Xmin)320,y=(Xv-Ymin)/(Ymax-Ymin)240,ADS7843,控制芯片要完成两件事情:,其一,是完成电极电压的切换;,其二,是采集接触点处的电压值(即,A/D,)。,ADS7843,的引脚配置与典型应用电路,1.3,触摸屏的控制芯片,ADS7843,引脚号,引
24、脚名,功能描述,1,、,10,+Vcc,供电电源,2.75V,2,、,3,X+,、,Y+,接触摸屏正电极,内部,A/D,通道,4,、,5,X-,、,Y-,接触摸屏负电极,6,GND,电源地,7,、,8,IN3,、,IN4,两个附属,A/D,通道,9,V,REF,A/D,参考电压输入,11,PENIRQ,中断输出,必须外接上拉电阻,(触摸显示屏后引发一个中断),12,、,14,、,16,DOUT,、,DIN,、,DCLK,串行接口引脚,完成与,MCU,通信,13,BUSY,忙指示,低电平有效,15,CS,片选,芯片,ADS7843,的引脚说明,ADS7843,的内部结构,一种是,SER,单端模式
25、参考电压固定为,VREF,;一种是,DFR,差分模式,参考电压来自驱动电极。,两种输入模式的原理示意图,ADS7843,的两种参考电压输入模式,ADS7843,的具体工作通道的选择由控制字(,A2,、,A1,、,A0,)来决定。,A2,A1,A0,X+,Y+,IN3,IN4,X,开关,Y,开关,0,0,1,+IN,OFF,ON,1,0,1,+IN,ON,OFF,0,1,0,+IN,OFF,OFF,1,1,0,+IN,OFF,OFF,第,7,位,第,6,位,第,5,位,第,4,位,第,3,位,第,2,位,第,1,位,第,0,位,S,A2,A1,A0,MODE,SER/DFR,PD1,PD0,A
26、DS7843,的控制字,工作时序,2,:,16,个时钟周期,ADS7843,的工作时序,工作时序,1,:,20,个时钟周期,1.4,实验目的与内容,目的:,监测触摸屏触摸的位置,然后在显示屏上实时显示触摸位置的坐标。,内容:,1,、启动,ADS7843,芯片对数据进行采集,并等待,AD,转换完成,2,、从,ADS7843,芯片中读取转换完成后的数据,3,、根据公式将具体的数据转换成触摸屏位置坐标,4,、将位置坐标显示在屏幕上。,1.5,电路连接原理示意图,宏定义和,ADS7843,的初始化函数,#define DIN (119)/DIN,连接,P0.19,#define DOUT (118)/
27、DOUT,连接,P0.18,#define BUSY (120)/BUSY,连接,P1.20,#define DCLK (117)/DCLK,连接,P0.17,#define CS (114)/CS,连接,P0.14,#define PENIRQ (115)/PENIRQ,连接,P015 EINT2,#define DIN_High()IO0SET=DIN/DIN,引脚置,1,#define DIN_Low()IO0CLR=DIN/DIN,引脚清,0,#define DCLK_High()IO0SET=DCLK,#define DCLK_Low()IO0CLR=DCLK,#define CS_
28、High()IO0SET=CS,#define CS_Low()IO0CLR=CS,1.6,软件编写,/*,*,文件名:,ADS7843_Init(),*,功能:触摸屏模块所用的引脚初始化,包括引脚功能的选择,*,入口参数:无,*,出口参数:无,*,/,void ADS7843_Init(void),/,设置,CS,、,PENIRQ,、,DIN,、,DOUT,、,DCLK,为,GPIO,口,PINSEL0=PINSEL0,PINSEL1=PINSEL1,/CS,、,DCLK,、,DIN,等引脚为输出,,DOUT,脚为输入,IO0DIR=IO0DIR|CS|DCLK|DIN;,IO0DIR=IO
29、0DIR,IO1DIR=IO1DIR/BUSY,脚为输入,/*,*,文件名:,int ADS_Read(),*,功能:读函数,读触摸点值并返回,Number,位测量结果,*,入口参数:,Number,读取,Number,位测量结果,,Number=8,、,12,*,出口参数:返回结果,back,*,/,uint32 ADS7843_Read(uint8 Number),uint32 back,i,j;,back=0;/back,用于保存读取的数据,CS_Low();,DIN_Low(),;/,DCLK_Low();/DCLK,、,DIN,、,CS,输出低电平,for(i=0;iNumber;i
30、),/*,从,ADS7843,读出数据,先高位再低位*,/,back=1;/,左移,1,位,DCLK_High();/,从,DOUT,引脚读出数据,下降沿有效。,DCLK,置,1,for(j=0;j2;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;j2;j+);/,软件小段延时,DCLK_Low();/
31、DCLK,置,0,for(j=0;j2;j+);/,软件小段延时,return(back);,/*,*,文件名:,int ADS_Send(),*,功能:写函数,发送控制字给,ADS7843,*,入口参数:,uint8 command,*,/,void ADS7843_Send(uint8 command),uint8 i,j;,/*,启动,SPI,传输*,/,CS_Low();,DCLK_Low();,DIN_High();,DCLK_High();/,发送开始标志,S=1,for(j=0;j2;j+);/,软件小段延时,while(IO1PIN/,等待,ADS7843,的,busy,线变为
32、低电平,DCLK_Low();,/*,发送控制字,采用模拟时序,一次发送一个字节(起始标志位,S,已发送,只发送,7,个位)*,/,for(i=0;i7;i+)/,发送一个字节的控制字,其中高位在先,command=1;,if(command&0 x80)!=0)/,判断最高位是否为,1,DIN_High();/DIN,引脚输出,1,else DIN_Low();,DCLK_Low();/DCLK,清,0,,从,DIN,引脚输入数据,上升沿有效。,for(j=0;j2;j+);/,软件小段延时,DCLK_High();/DCLK,置,1,DCLK_Low();,1.7,坐标测量算法,触摸屏控制
33、的流程图,1.8 Read_Touch,函数,/*,*,文件名:,void Read_Touch(uint32*X,uint32*Y),*,功能:读取触摸屏的触摸位置,结果保存在,X,,,Y,指针变量中,*,入口参数:,X,保存,x,坐标,Y,保存,y,坐标,*,/,void Read_Touch(uint32*X,uint32*Y),uint32 DATA1,DATA2,i,;,*X=0;*Y=0;,/-,排除错误触发,-,for(i=0;i10;i+);/,软件延时小段时间,if(IO0PIN/,如果中断输出引脚,PENIRQ,不为,0,/-,软件去抖,设置,PINIRQ,引脚输出低电平,
34、DelayMS(10);/,软件延时,30ms,时间,IO0DIR=IO0DIR|PENIRQ;,IO0CLR=PENIRQ;,/-,测量,Y,坐标,-,ADS7843_Send(0 xd3);/,发一个字节的读,Y,坐标的控制字给,ADS7843(Y+,输入,),for(i=0;i4;i+);,while(IO1PIN /,等待,BUSY,为,0,如果,BUSY,信号不好使可以删除不用,DATA1=ADS7843_Read(12);,/,从,ADS7843,读出采集过来的,8,位数据,ADS7843_Send(0 xd3);,for(i=0;i4;i+);,while(IO1PIN,DA
35、TA2=ADS7843_Read(12);,while(DATA1!=DATA2)/,将读取两次的结果进行比较,DATA1=DATA2;,ADS7843_Send(0 xd3);,for(i=0;i4;i+);,while(IO1PIN,DATA2=ADS7843_Read(12);,*Y=DATA2;,/-,测量,X,坐标,-,ADS7843_Send(0 x93);/,发一个字节的读,X,坐标的控制字给,ADS7843,,选择转换精度,12,位,while(IO1PIN /,等待,BUSY,为,0,如果,BUSY,信号不好使可以删除不用,DATA1=ADS7843_Read(12);/,从
36、ADS7843,读出采集过来的,8,位数据,ADS7843_Send(0 x93);,while(IO1PIN,DATA2=ADS7843_Read(12);,while(DATA1!=DATA2)/,对两次采样的结果进行比较,DATA1=DATA2;,ADS7843_Send(0 x93);,for(i=0;i4;i+);,while(IO1PIN,DATA2=ADS7843_Read(12);,*X=DATA2;,ADS7843_Send(0 x90);/,发送控制字,0 x90,,,7843,芯片进入省电模式且中断允许,IO0DIR=IO0DIR/PINIRQ,设置为输入,DCLK_L
37、ow();,CS_High();,参考主程序,/8,位测量数据的边缘点,(x,y),坐标的经验值,#define Xmin0 x1A,#define Xmax0 xE7,#define Ymin0 x24,#define Ymax0 xDD,/*,*,函数名:,main(),*,功能:控制对,ADS7843,的读写,且将读出的数据进行换算,*,入口参数:无,*,出口参数:,0,*,/,int main(void),uint32 x,y;,GRA_Initialize();,GUI_SetColor(Black,White);,ADS7843_Init();/,系统初始化,ADS7843_Sen
38、d(0 x90);,while(1),if(IO0PIN&PENIRQ)=0),Read_Touch(,/-,坐标值计算,以触摸屏的左下角为原点,往右,X,值增长,往上,Y,值增长,-,if(x Xmax)x=Xmax;,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);/,根据缓冲区的内容刷新显示屏,return
39、 0;,1.9,实验步骤与结果,1.,在,Code Warrior IDE,集成开发环境中,使用“,Follow Me Study ARM”,工程模板建立新工程。然后在工程中添加本实验的程序代码,按,F7,快捷键编译链接整个工程。编译报错则修改源程序中的错误,如果编译通过则在相应的目录下产生我们所需要的二进制文件和可执行映像文件。,2.,运行,H-Flasher,软件,将产生的二进制文件烧写到实验板上。,3.,打开,AXD,调试环境,并加载刚刚产生的可执行映像文件进行调试。,4.,单击全速运行按钮(快捷键,F5,),程序会运行并停留在,main(),主函数处;继续全速运行,然后等待用户触摸触摸
40、屏。液晶屏上会实时显示触摸点位置的,X,与,Y,坐标。,四、,附录,-,CH451,功能及应用,CH451,是一个整合了数码管显示驱动和键盘扫描控制以及,P,监控的多功能外围芯片。,CH451,的电路结构示意图,1.1 CH451,功能特点,1.,显示驱动,内置大电流驱动级,段电流不小于,25mA,,每位字的电流不小于,150mA,。,动态显示扫描控制,直接驱动,8,位数码管或者,64,位发光管,LED,。,可选数码管的段与数据位相对应的不译码方式或者,BCD,译码方式。,数码管的字数据左移、右移、左循环、右循环。,各数码管数字独立闪烁控制。,通过占空比设定提供,16,级亮度控制。,支持段电流
41、上限调整,可以省去所有限流电阻。,扫描极限控制,支持,1,到,8,个数码管,只为有效数码管分配扫描时间。,2.,键盘控制,内置,64,键键盘控制器,基于,88,矩阵键盘扫描。,内置按键状态输入的下拉电阻,内置去抖动电路。,键盘中断,低电平有效输出。,提供按键释放标志位,可供查询按键按下与释放。,3.,其他功能,完全内置时钟振荡电路,通常不需要外接晶体或者阻容振荡。,内置上电复位和看门狗,Watch-Dog,,提供高电平有效和低电平有效复,CH451,功能特点,1.2,引脚与封装,CH451,的引脚描述,28,脚封装的引脚号,24,脚封装,的引脚号,引脚名称,类型,引脚说明,23,2,VCC,电
42、源,正电源端,9,15,GND,电源,公共接地端,25,4,LOAD,输入,串行接口的数据加载,内置上拉电阻,26,5,DIN,输入,串行接口的数据输入,内置上拉电阻,27,6,DCLK,输入,串行接口的数据时钟,内置上拉电阻,同时用于看门狗的清除输入,24,3,DOUT,输出,串行接口的数据输出和键盘中断,22,15,1,、,24,18,SEG7,SEG0,输入,/,输出,数码管的段驱动,高电平有效;,键盘扫描输入,高电平有效。,1,8,7,14,DIG7,DIG0,输出,数码管的字驱动,低电平有效;,键盘扫描输出,高电平有效。,12,16,RST,输出,上电复位和看门狗复位,高电平有效,1
43、7,NC,不连接,禁止使用,13,RST#,输出,上电复位和看门狗复位,低电平有效,14,ADJ,输入,段电流上限调整,内置强下拉电阻,10,CLK,输入,可选外接电阻电容调整内部时钟频率,11,CLKO,输出,CLK,引脚时钟的二分频输出,28,RSTI,输入,手工复位输入,高电平有效,1.3 CH451,的内部寄存器,CH451,内部具有一个,12,位的移位寄存器和一个,12,位的命令寄存器,处理器通过向命令寄存器发送,12,位的控制命令,从而控制,CH451,完成相应的功能。,CH451,通过以下,4,根线与处理器进行数据交换。,串行数据输入线,DIN,、,串行数据时钟线,DCLK,、,
44、串行数据加载线,LOAD,、,串行数据输出线,DOUT,。,处理器发送数据给命令寄存器的输出过程如下:,向,DIN,输出最低位数据,B0,,并向,DCLK,输出低电平脉冲;,输出位数据,B1,B11,;,向,LOAD,输出低电平脉冲。,输出数据过程示意图,1.4 CH451,的通信过程,1.5,CH451,的操作命令,种类,操作命令,位,11,位,10,位,9,位,8,位,7,位,6,位,5,位,4,位,3,位,2,位,1,位,0,控制,芯片内部复位,0,0,1,0,0,0,0,0,0,0,0,0,设置系统参数,0,1,0,0,0,0,0,0,0,Dog,Key,Disp,键盘,读取按键代码,
45、0,1,1,1,X,X,X,X,X,X,X,X,1.,芯片内部复位:,001000000001 B,内部复位命令将,CH451,的各个寄存器和各种参数复位到默认的状态。,2.,设定系统参数:,010000000WDOGKEYBDISP B,用于设定,CH451,的系统级参数。,3.,读取按键代码:,0111XXXXXXXX B,用于获得,CH451,最近检测到的有效按键的按键代码。,CH451,的操作命令均为,12,位。,1.6 CH451,的键盘连接图,1.7 CH451,的按键代码,按键代码,DIG0,DIG1,DIG2,DIG3,DIG4,DIG5,DIG6,DIG7,SEG0,40H,
46、41H,42H,43H,44H,45H,46H,47H,SEG1,48H,49H,4AH,4BH,4CH,4DH,4EH,4FH,SEG2,50H,51H,52H,53H,54H,55H,56H,57H,SEG3,58H,59H,5AH,5BH,5CH,5DH,5EH,5FH,SEG4,60H,61H,62H,63H,64H,65H,66H,67H,SEG5,68H,69H,6AH,6BH,6CH,6DH,6EH,6FH,SEG6,70H,71H,72H,73H,74H,75H,76H,77H,SEG7,78H,79H,7AH,7BH,7CH,7DH,7EH,7FH,1.8,键盘管理操作,处理
47、器从,CH451,获得按键代码的过程时序图。,CH451,的读取按键代码命令只有位数据,B8,B11,是有效的,所以处理器不必发出读取按键代码命令的,B0,B7,。,1.9,键盘管理过程时序图,2.0,实验箱上的电路连接图,2.1,驱动程序设计,#define DOUT(116)/P0.16,#define LOAD(120)/P2.20,#define DIN(118)/P2.18,#define DCLK(10;Length-),IO2CLR=DCLK;,if(Data,/DIN,置高,else,IO2CLR=DIN;,/DIN,清,0,IO2SET=DCLK;,/*,给,LOAD,线一个
48、低脉冲*,/,IO2CLR=LOAD;,IO2SET=LOAD;,驱动程序设计,-,写函数,/*,*,函数名:,CH451_Read(),*,功能:实现从,CH451,读键盘代码数据,*,入口参数:无,*,出口参数:键盘代码值,*,/,uint8 CH451_Read(),uint8 i,Data=0;,/*,读取,7,位数据,从高位接收起*,/,for(i=0;i7;Length-),IO2SET=DCLK;,Data=Data0;Key-),IO1SET=BEE;/,蜂鸣器响,DelayMS(10);,IO1CLR=BEE;/,关蜂鸣器,return(0);,思考与练习,1,、在与电子产品进行人机交互的过程中,常用的输入设备有哪些?,2,、请比较一下,TTL,电平定义与,RS232,标准中的电平定义的异同?,3,、请从电路结构、应用场合上来比较编码键盘和非编码键盘的异同?,4,、监测键盘状态的方法有哪些?哪种方法最能节省,CPU,的资源?,5,、在判别按键位置的软件方法中,请画出,“,扫描法,”,的程序流程图。,6,、请问有哪些途径可以消除按键抖动的影响?,7,、与其他实现人机输入的设备相比,触摸屏有什么特点?,8,、触摸屏可以分为哪些基本类型?,9,、请阐述一下,4,线制触摸屏的工作原理?,






