欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    人机接口电路设计及编程.ppt

    • 资源ID:57194420       资源大小:930KB        全文页数:117页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    人机接口电路设计及编程.ppt

    人机接口电路设计及编程 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望5.4.1 键盘电路设计及编程1.电路 键盘接口电路如图5-12所示,板上扩展了一个44行列式矩阵键盘接口。该键盘采用中断扫描方式进行工作,行线选用PORTG47输出,列线选用PORTF58为输入。行线行线接上拉电阻保持高电平,并通过“与”门将输出信号与MCU的中断EXINT0连接;列线列线接上拉电阻保持高电平。2.编程 (1)I/O口和中断初始化 I/O引脚设置:rPDATE=0X60;rPCONF=0 x2A;列线PORTF58为输入rPUPF=0 x0;列线接上拉电阻rPDATG=0 x0;rPCONG=0 x55FF;行线PORTG47输出,PORTG0作为EXINT0连接rPUPG=0 x0;行线接上拉电阻 中断初始化 rINTCON=0 x5;/非向量模式,IRQ 允许,FIQ 禁止 rINTMOD=0 x0;/全部IRQ 模式 rINTMSK =(BIT_GLOBAL|BIT_EINT0);/EXINT0允许,所有中断屏蔽位允许 pISR_EINT0=(unsigned)keyboard_ISR;/指定中断服务程序 (2)程序 将行线PORTG47输出为低电平,当有键盘按下时,该行线被拉为低电平,使得EXINT0输入也为低电平,MCU产生中断。中断产生后通过对键盘的行和列进行扫描的方法,可以计算出是哪个键按下,并跳到相应的键盘处理程序中去。void keyboard_ISR(void)char x,y,xrecord,yrecord,temp;rI_ISPC=BIT_EINT0;/clear pending_bit Delay(400);/delay 40ms if(rPDATF&0 x1E0)=0 x1E0)return 0;/no keyboard press,return else x=1;y=1;xrecord=(rPDATF&0 x1E0)1);xrecord=xrecord4;while(xrecord!=0 x1)/judge row x=x+1;xrecord=xrecord1;if(xrecord=0)rPDATG=0X0F;/no,return return 0;Delay(200);/delay 20ms rPDATG=0XEF;/input highwhile(rPDATF&0 x1E0)=0 x1E0)rPDATG=rPDATG4)&0 x0F;while(yrecord!=0 x1)/judge line y=y+1;yrecord=yrecord1;if(yrecord=0)rPDATG=0X0F;/no board press,return return 0;Led_Display(x+(y-1)*4-1);Uart_Printf(%3d,x+(y-1)*4-1);Delay(1200);/delay 40ms rPDATG=0X0F;5.4.2 LCD接口电路设计及编程1.LCD接口信号 EV44B0 II现配有160240的单色显示屏,4比特单扫描。EV44B0 II将LCD控制信号线连接到JP6上,与LCD模块相连,其原理如图5-13所示。在LCD模块上,集成了LCD驱动器和专门的电压转换电路,用以驱动LCD屏幕和适配LCD工作电压。LCD连接器的信号定义如表5-4所示。1.LCD接口信号 EV44B0 II现配有160240的单色显示屏,4比特单扫描。EV44B0 II将LCD控制信号线连接到JP6上,与LCD模块相连,其原理如图5-13所示。在LCD模块上,集成了LCD驱动器和专门的电压转换电路,用以驱动LCD屏幕和适配LCD工作电压。LCD连接器的信号定义如表5-4所示。2.编程 显示缓冲区与LCD象素对应关系图如图5-14所示。(1)LCD 初始化程序 通常采用S3C44B0X的PORTC口和PPORTD口作为LCD驱动接口,因此需要设置它们工作在第3功能状态,设置I/O口控制寄存器的语句如下:rPDATC=0 x8400;rPCONC=0 x5F5FFFFF;rPUPC=0 x33ff;/should be enabled rPCOND=0 xaaaa;rPUPD=0 xff;LCD初始化程序如下:void Lcd_MonoInit(void)/160 x240 1bit/1pixel LCD#define MVAL_USED 0rLCDCON1=(0)|(15)|(MVAL_USED7)|(0 x38)|(0 x310)|(CLKVAL_MONO12);/disable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,rLCDCON2=(LINEVAL)|(HOZVAL10)|(1021);/LINEBLANK=10rLCDSADDR1=(0 x022)1);/monochrome,LCDBANK,LCDBASEUrLCDSADDR2=M5D(U32)frameBuffer1+(SCR_X SIZE*LCD_YSIZE/8)1)|(MVAL21)|(129);rLCDSADDR3=(LCD_XSIZE/16)|(SCR_X SIZE-LCD_XSIZE)/16)9);rLCDCON1=(1)|(15)|(MVAL_USED7)|(0 x38)|(0 x310)|(CLKVAL_MONO12);/enable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,(2)LCD 显示程序 LCD 显示程序如下:#define frameBuffer1 0 xc400000extern unsigned char*Buf;void displaylcd(void)unsigned int*pbuffer,temp_data;int i;pbuffer=(U32*)frameBuffer1;for(i=0;i(4800/4);i+)temp_data=(Bufi*4+3 24)+(Bufi*4+2 16)+(Bufi*4+1 8)+(Bufi*4);pbufferi=temp_data;Delay(10);(3)LCD 清屏程序 LCD 清屏程序如下:void clrscreen(void)int i,j;unsigned int*pbuffer;pbuffer=(U32*)frameBuffer1;for(i=0;i4800/4;i+)pbufferi=0;/(0 x0FFFFFFFF);5.4.3 触摸屏电路设计及编程1.触摸屏的工作原理 触摸屏按其工作原理的不同分为表面声波屏表面声波屏、电容屏电容屏、电阻屏电阻屏和红外屏红外屏几种。常见的又数电阻触摸屏。如图5-15 所示,电阻触摸屏的屏体部分是一块与显示器表面非常配合的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。如图5-16所示,当手指或笔触摸屏幕时(图c),平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层(顶层)接通X 轴方向的5V 均匀电压场(图a),使得检测层(底层)的电压由零变为非零,控制器侦测到这个接通后,进行A/D 转换,并将得到的电压值与5V 相比即可得触摸点的X 轴坐标为(原点在靠近接地点的那端):Xi=LxVi/V(即分压原理)同理得出Y 轴的坐标,这就是所有电阻触摸屏共同的最基本原理。2.触摸屏电路控制 触摸屏的控制采用专用芯片,专门处理是否有笔或手指按下触摸屏,并在按下时分别给两组电极通电,然后将其对应位置的摸拟电压信号经过A/D 转换送回处理器.我们选取 GPG 口与 ADS7843 接口。共运用了 PG2PG7 口共 6 条口线。你也可以选择其它的 I/O 口,但注意不要与 I/O 口上已经设定的功能(例如串口)相冲突。参考电路图如下:按照下图用导线将两个模块连接起来。如图5-17所示。3.编程(1)PCONG 寄存器配置 按照以上电路来设置,PG6和PG5输入,PG4PG2输出,PG7作为中断EINT7且加内部上拉电阻,初始化语句如下:rPCONG=0 x015f;rPUPG&=0 x80;(2)ADS7843 编程 ADS7843的控制字如表5-5所示,其中S为数据传输起始标志位,该位必为。A2A0进行通道选择。MODE用来选择A/D转换的精度,1-选择位,-选择12位。SER/DFR选择参考电压的输入模式。PD1和PD0选择省电模式:00-为省电模式允许,在两次A/D转换之间掉电,且中断允许;01同00,只是不允许中断;10保留;11禁止省电模式。A0A2 用来进行开关切换,如表5-6所示。我们采用固定参考电压模式,因此 SER/DFR1。程序中首先探测 PENIRQ 是否为低电平,如果为高则认为触摸屏没有接触;如果探测到 PENIRQ 为低电平,则认为有接触。利用软件模拟 DIN、DOUT、DCLK上的 3 线串行传输的时序,将读取 X 坐标数值或 Y 坐标数值的控制字串行送入 ADS7843,并串行读出坐标值。检测 PENIRQ#define TOUCH_MSR_Y 0 x9c;/读 Y 轴坐标命令#define TOUCH_MSR_X 0 xdc;/读 X 轴坐标命令if(rPDATG&0 x80)=0)/PENIRQ 电平为低/TouchState.pressed=1;_State.Pressed=1;/说明已经按下temp=TOUCH_MSR_X;_State.x=ReadTouch(temp);temp=TOUCH_MSR_Y;_State.y=ReadTouch(temp);送控制字并读取结果子程序int ReadTouch(unsigned char command)unsigned char temp,i,ack,j,k;ack=0;/PG7-PENIRQ,PG6-BUSY,PG5CS,PG3-DCLK,PG2-DINrPDATG&=0 xe7;/cs 置低;dclk 置低temp=0 x80;for(i=0;i1;/移位 while(temp=(rPDATG&0 x40)=0);等待 BUSY 变低 rPDATG&=0 xdf;/din 清零/再 1 个时钟以后开始接收数据 rPDATG|=0 x08;/置高 dclk delay(2);rPDATG&=0 xf7;/清零 dclk delay(2);for(i=0;i7;i+)取得前 7 位坐标数据(高位在前)rPDATG|=0 x08;/置高 dclkif(temp=rPDATG&0 x20)/取得 din 上的 1 位数据ack+=1;ack=ack1;delay(2);rPDATG&=0 xf7;/清零 dclkdelay(2);rPDATG|=0 x08;/置高 dclkif(temp=rPDATG&0 x20)/接收最后 1 位ack+=1;delay(2);rPDATG&=0 xf7;/清零 dclkrPDATG|=0 x10;/置高 csreturn ack;/返回接收结果4.触摸屏与显示器的配合 ADS7843 送回控制器的X 与Y 值仅是对当前触摸点的电压值的A/D 转换值,它不具有实用价值。这个值的大小不但与触摸屏的分辨率有关,而且也与触摸屏与LCD 贴合的情况有关。而且,LCD 分辨率与触摸屏的分辨率一般来说是不一样,坐标也不一样。因此,如果想得到体现LCD 坐标的触摸屏位置,还需要在程序中进行转换。假设LCD 分辨率是320240,坐标原点在左上角;触摸屏分辨率是900900,坐标原点在左上角,则转换公式如下:xLCD=320*(x-x2)/(x1-x2);yLCD=240*(y-y2)/(y1-y2);如果坐标原点不一致,比如LCD 坐标原点在右下角,而触摸屏原点在左上角,则还可以进行如下转换:xLCD=320-320*(x-x2)/(x1-x2);yLCD=240-240*(y-y2)/(y1-y2);最后得到的值,便可以尽可能得使LCD 坐标与触摸屏坐标一致,这样,更具有实际意义。5.4.4 8段数码管电路设计及编程1.电路设计 系统使用了一个8段数码LED,如图2-18所示。该数码管是共阳极的,低电平信号使LED点亮。CPU数据总线DATA(07)经74LS573驱动器对数码管进行驱动。其片选信号由CPU的nGCS3信号选通,而8段的内容则由CPU低8位数据线决定。口地址为0 x6000000。2.编程8段数码管显示程序如下:void Led_Display(unsigned char data)unsigned char*ledbuffer=(unsigned char*)0 x6000000 switch(data)case 0:*ledbuffer=0 x12;break;.case 0 xf:*ledbuffer=0 x68;break;5.5 串行接口电路设计及编程串行接口电路设计及编程5.5.1 串行电路接口 串行接口电路如图5-19所示。系统提供两个RS232标准串行接口(DB9),UART0/l可与PC或MODOM进行串行通信。PORTC1015分别作为nRTS1、nCTS1、TXD1、RXD1、nRTS0和nCTS0信号,PE1和PE2作为TXD0和RXD0信号。两个接口则采用两片MAX2322C作为电平转换器。5.5.2 编程1.I/O接口配置初始化 对PORTC和PORTE初始化语句如下:rPCONC=0 x0f000000|rPCONC;rPUPC=0 x3000;/设置内部上拉 rPCONE=(rPCONE&0 xfc3)|0 xeb;rPUPE=0 x6;2.UART初始化 对 UART 口进行初始化设置程序如下:static int UartNum=0;void myUart_Init(int whichuart,int baud)/设置串口波特率等初始化工作。if(whichuart=0)UartNum=0;rUFCON0=0 x0;/不使用 FIFO rUMCON0=0 x0;/不使用自动流控制 rULCON0=0 x3;/不采用红外线传输模式,无奇偶校验 位,1 个停止位,/8个数据位 rUCON0=0 x245;/发送中断为电平方式,接收中断为 边沿方式,禁止超时 /中断,允许产生错误状态中断,禁止回 送模式,禁止中 /止信号,传输模式为中断请求模式,接 收模式也为中断 /请求模式。rUBRDIV0=(int)(MCLK/16./baud+0.5)-1);/根据波特率计算 UBRDIV0 的值else if(whichuart=1)UartNum=1;rUFCON1=0 x0;rUMCON1=0 x0;rULCON1=0 x3;rUCON1=0 x245;rUBRDIV1=(int)(MCLK/16./baud+0.5)-1);3.字符发送程序#define WrUTXH0(ch)(*(volatile unsigned char*)0 xld00020)=(unsigned char)(ch)#define WrUTXH0(ch)(*(volatile unsigned char*)0 xld04020)=(unsigned char)(ch)Void myUart_SendByte(char ch)if(UartNum=0)if(ch=“n”)while(!(rUTRSTAT0&0 x2);/等待,直到发送缓冲区为空 Delay(10);/超级中断的响应速度较慢 WrUTXH0(“r”);/发送回车符 while(!(rUTRSTAT0&0 x2);/等待,知道发送缓冲区为空 Delay(10);WrUTXH0(ch);/发送字符 else if(ch=“n”)while(!(rUTRSTAT1&0 x2);Delay(10);/因为超级终端响应较慢 rUTXH1=“r”;While(!(rUTRSTAT1&0 x2);/等待THR空。Delay(10);WrUTXH1(ch);字符接受程序#define RdURXH0()(*(volatile unsigned char*)(0 xld00027)#define RdURXH1()(*(volatile unsigned char*)(0 xld04027)Char Uart_Getch(void)if(whichUart=0)/串口0 while(!(rUTRSTAT0&0 x1);/读出接收到的数据(一直到读完)return RdURXH0();/URXH0:UART0接收缓冲寄存器 else /串口1 while(!(rUTRSTAT1&0 x1);/Receive data ready return rURXH1;5.6 C接口电路设计及编程5.6.1 EEPROM芯片介绍 目前,通用存储器芯片多为EEPTOM,其常用的协议主要有两线串行连接协议(C)和三线串行连接协议。带C总线接口的EEPROM有许多型号,其中AT24Cxx系列使用十分普遍,产品包括AT2401/02/04/08/16等,其容量(字节数页)分别为1288/2568/5128/10248/20488,适用于25V的低电压操作,具有低功耗和高可靠性等优点。AT24系列存储器芯片采用CMOS工艺制造,内置有高压泵,可在单电压供电条件下工作。其标准封装为8引脚DIP封装形式,如图5-20所示。1.SCL 串行时钟。遵循ISO/IEC7816同步协议;漏极开路,需接上拉电阻;在该引脚的上升沿,系统将数据输入到每个EEPROM器件,在下降沿输出。2.SDA 双向串行数据线,漏极开路,需接上拉电阻,可与其它开路器件“线或”。3.A0、A1、A2 器件/页面寻址地址输入端。在AT24C01/02中,引脚被硬连接。其他AT24Cxx均可接寻址地址线。4.WP 读/写保护。接低电平时可对整片空间进行读/写;接高电平时不能对受保护区进行读/写。5.VCC/GND +5V的工作电压。5.6.2 EEPROM读写操作1.AT24C04结构与应用简述 AT24C04由输入缓冲器和EEPROM阵列组成。由于EEPROM的半导体工艺特性写入时间为510 ms,如果从外部直接写入EEPROM,则每写一个字节都要等候510ms,成批数据写入时就要等候更长时间。具有SRAM输入缓冲器的EEPROM器件,其写入操作变成对SRAM缓冲器的装载。装载完后启动一个自动写入逻辑将缓冲器中的全部数据一次写入EEPROM阵 对缓冲器的输人称为页写页写,缓冲器的容量 称为页写字节数页写字节数。AT24C04的页写字节数为8,占用最低3位地址。当写入不超过页写字节数时,对EEPROM器件的写入操作与对SRAM的写入操作相同;当超过页写字节数时,应等候510 ms后再启动一次写操作。由于EEPROM器件缓冲区容量较小(只占据最低3位),且不具备溢出进位检测功能,所以,从非零地址写入8个字节数或从零地址写入超过8个字节数会形成地址翻卷,导致写入出错。2.设备地址(DADDR)AT24C04xx的器件地址是1010。3.AT24Cxx的数据操作格式 在IIC总线中,对AT24C04内部存储单元读写,除了要给出器件的设备地址(DADDR)外,还须指定读写的页面地址(PADDR)。两者组成操作地址(OPADDR)如下:1010 A2 A1 R/W (“”为无效)系统中引脚A2A1A0为000,因此,系统可寻址AT24C04全部页面,共4K位。按照AT24C04器件手册读写地址(ADDR1010 A2 A1R/W)中的数据操作格式如下:(1)写入操作格式 任意写一个字节到地址ADDR_W,其时序图如图5-21所示,写入操作格式为:START_C OPADDR_W ACK ADDR_W ACK data ACK STOP_C 从地址ADDR_W起连续写人n个字节(同一页面),其时序图如图5-22所示,写人格式为:START_C OPADDR_W ACK ADDR_W ACK data1 ACK data2 ACK.datan ACK STOP_C(2)读出操作格式 从任意地址ADDR_R读一个字节的时序图如图5-23所示,读出操作格式为:START_C OPADDR_W ACK ADDR_R ACK OPADDR_R ACK data STOP_C 从地址ADDR_R起连续读出n个字节(同一页面),其时序图如图5-24所示,读出操作格式为:START_C OPADDR_R ACK data1 ACK data2 ACK.datan ACK STOP_C 在读任意地址操作中,除了发送读地址外,还要发送页面地址(PADDR);因此,在连续读出72个字节操作前,要进行1个字节PADDR写入操作,然后重新启动读操作。注意,读操作完成后没有ACK。5.6.3 编程1.I/O 端口 IIC 功能设置 我们采用PF0口和PF1口工作在第2功能模式下,分别作为 IIC总线的SCL和SDA与24LC04B相连。因此,需要设置PF0和PF1工作在第2功能模式下。采用以下语句:rPCONF|=0 xa;/PF0:IICSCL,PF1:IICSDA rPUPF|=0 x3;/pull-up disable2.IIC中断使能 由于是采用中断的方式了解每个字节的传输是否成功。因此需要定义中断处理程序入口,并且使能中断。采用以下语句实现:pISR_IIC=(unsigned)IIC_Int;/将 IIC 中断处理程序指针指向 IIC_Int rINTMSK=(BIT_GLOBAL|BIT_IIC);/使能中断3.初始化 IIC 接口 对 IICCON 进行设置:rIICCON=(17)|(06)|(15)|(0 xf);/使能 ACK的产生,IICCLK=MCLK/16,使能发送/接收中断,清除 pending 位以便响应 /中断,Tx clock(64MHz/16)/(15+1)=250KHz4.向24LC04B中写入数据子程序#define IICBUFSIZE 0 x20 U8 _iicDataIICBUFSIZE;/写数据缓存 volatile int _iicDataCount;/数据长度 volatile int _iicStatus;volatile int _iicMode;int _iicPt;void Wr24LCxx(U32 slvAddr,U32 addr,U8 data)_iicMode=WRDATA;/写数据模式 _iicPt=0;_iicData0=(U8)addr;/字节写入模式,数据格式 参考教材内容 _iicData1=data;_iicDataCount=2;rIICDS=0 xa0;/控制字节 rIICSTAT=0 xf0;/主设备发送模式,产生起 始条件,使能发送/接收 while(_iicDataCount!=-1);_iicMode=POLLACK;while(1)rIICDS=slvAddr;_iicStatus=0 x100;rIICSTAT=0 xf0;/MasTx,Start rIICCON=0 xaf;/resumes IIC operation.while(_iicStatus=0 x100);if(!(_iicStatus&0 x1)break;/成功接收到 ACK rIICSTAT=0 xd0;/产生停止条件 rIICCON=0 xaf;/释放 IIC 操作 Delay(1);/等待,直到停止条件起作用,写入成功 5.从24LC04B读出数据子程序void Rd24LCxx(U32 slvAddr,U32 addr,U8*data)_iicMode=SETRDADDR;_iicPt=0;_iicData0=(U8)addr;_iicDataCount=1;rIICDS=slvAddr;rIICSTAT=0 xf0;/MasTx,Startwhile(_iicDataCount!=-1);_iicMode=RDDATA;_iicPt=0;_iicDataCount=1;rIICDS=slvAddr;rIICSTAT=0 xb0;/MasRx,StartrIICCON=0 xaf;/resumes IIC operation.while(_iicDataCount!=-1);*data=_iicData1;6.IIC中断处理子程序void _irq IIC_Int(void)U32 iicSt,i;rI_ISPC=BIT_IIC;/清除 pending 位iicSt=rIICSTAT;/读入 IIC 总线单前状态,以 便进行各种错误处理if(iicSt&0 x8)/when bus arbitration is failed.if(iicSt&0 x4)/when a slave address is matched with IICADDif(iicSt&0 x2)/when a slave address is 0000000bif(iicSt&0 x1)/when ACK isnt receivedswitch(_iicMode)/根据当前操作模式进行相应处理case POLLACK:/等待 ACK 模式_iicStatus=iicSt;/读入 IICSTAT,第 0 位表示是否 接收到 ACKbreak;case RDDATA:/读数据模式if(_iicDataCount-)=0)/只要读取 1 字节数据_iicData_iicPt+=rIICDS;rIICSTAT=0 x90;/停止主设备读取模式rIICCON=0 xaf;/释放 IIC 操作Delay(1);/等待直到停止条件起作用break;_iicData_iicPt+=rIICDS;/未读完所有数据最后一个字节不能产生 ACKif(_iicDataCount)=0)/如果读完了所有数据(最后一个字节)rIICCON=0 x2f;/产生 NOACK.释放 IIC 操作elserIICCON=0 xaf;/产生 ACK 释放 IIC 操作break;case WRDATA:/写数据模式if(_iicDataCount-)=0)/如果数据写完rIICSTAT=0 xd0;/停止主设备发送传输rIICCON=0 xaf;/恢复 IIC 操作Delay(1);/等待,直到停止条件起效break;rIICDS=_iicData_iicPt+;/_iicData0 has dummy.for(i=0;i10;i+);/for setup time until rising edge of IICSCLrIICCON=0 xaf;/释放 IIC 总线操作break;case SETRDADDR:/设置读地址模式/Uart_Printf(S%d,_iicDataCount);if(_iicDataCount-)=0)break;/IIC operation is stopped because of IICCON4rIICDS=_iicData_iicPt+for(i=0;i10;i+);/for setup time until rising edge of IICSCLrIICCON=0 xaf;/释放 IIC 总线操作break;default:break;5.7 其他接口电路设计及编程5.7.1 定时器编程 让定时器0的 TOUT0引脚输出频率为16K,占空比为 30的 PWM 脉冲调制波形;定时约0.5秒后产生定时中断。1.定时器初始化(1)I/O 口设置 采用以下语句对 PE 口的工作方式进行设置,使之工作在定时器输出状态:rPCONE=0 xaaa8;/Tout0/1/2/3/4,RxD0,TxD0 rPUPE|=0 xf8;(2)定时器时钟源频率设置 通过以下语句来设置定时器的时钟源:rTCFG0=0 x1010101;/预分频值为 1rTCFG1=0 x01;/分割比例=1/4经过设置后,定时器时钟源频率=(MCLK/1)/4(3)设置输出波形频率 通过以下语句来设置输出波形的频率:rTCNTB0=1000;经过设置,输出 PWM 波形的频率为 MCLK/4000;由于系统采用的 MCLK64M,因此,PWM 波形频率为 16K。(4)设置占空比 通过以下语句来设置输出波形的占空比:rTCMPB0=300;针对实验要求:300/100030(5)设置定时器控制寄存器、启动定时器 rTCON=0 xaaaa0a;/自动重载模式,关闭反转功能,手动更 新,关闭死区rTCON=0 x999909;/启动 PWM 操作 定时器启动后,可以采用示波器观察 TOUT0输出波形,是否满足要求。2.定时器中断主程序 参考程序如下:volatile int variable0;void Test_TimerInt(void)rINTMSK=(BIT_GLOBAL|BIT_TIMER0)pISR_TIMER0=(int)Timer0Done;/修改中断处理函数的指针 rTCFG0=0 x00f;/dead zone=0,pre0=0 xf /设定时钟源频率 rTCFG1=0 x04;/all interrupt,mux0=1/32 rTCNTB0=0 xffff;/(1/(64MHz/15/32)*0 xffff=0.49srTCON=0 x02;/手动更新 timer0 的设置rTCON=0 x01;/T0=one shot,启动定时器while(variable0=0);/等待中断发生rTCON=0 x0;/停止定时器rINTMSK=BIT_GLOBAL;/关闭中断3.定时中断服务程序void _irq Timer0Done(void)rI_ISPC=BIT_TIMER0;/清中断 pending 位variable0+;/更新变量5.7.2 实时日历时钟RTC1.电路 如图5-25为 32.768KHZ 晶振的电路连接示例:2.编程(1)实时时钟初始化初始化示例程序如下:#define TESTYEAR 0 x99#define TESTMONTH 0 x12#define TESTDAY 0 x31#define TESTDATE 0 x06/星期五#define TESTHOUR 0 x23#define TESTMIN 0 x59#define TESTSEC 0 x30void Rtc_Init(void)rRTCCON=0 x01;/读写使能,1/32768,Normal(merge),No resetrBCDYEAR=TESTYEAR;rBCDMON=TESTMONTH;rBCDDAY=TESTDAY;/SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7 rBCDDATE=TESTDATE;rBCDHOUR=TESTHOUR;rBCDMIN=TESTMIN;rBCDSEC=TESTSEC;rRTCCON=0 x00;/读写禁止 以上程序对控制寄存器进行了设置,并更新了 RTC 日期时间寄存器,从此刻开始 RTC就从设置的日期时间开始如钟表一样自动运转。(2)显示当前时间示例程序如下:void Display_Rtc(void)int year,int month,day,weekday,hour,min,sec;rRTCCON=0 x01;/使能读写,1/32768,Normal(merge),No resetif(rBCDYEAR=0 x99)year=0 x1999;elseyear=0 x2000+rBCDYEAR;month=rBCDMON;day=rBCDDAY;weekday=rBCDDATE;hour=rBCDHOUR;min=rBCDMIN;sec=rBCDSEC;/显示(向串口输出)时间rRTCCON=0 x0;/禁止读写5.7.3 A/D转换器电路设计及编程1.电路 如图5-26所示.手动调节电位器上的旋钮,产生缓慢变化的模拟信号,改变输入 ADC 的模拟电压值。2.编程(1)ADC 控制寄存器初始化采用以下语句对 ADC 相关寄存器进行初始化:CLKCON=0 x7ff8;/时钟控制寄存器,使能 MCLK 作为 ADC 的时钟源 rADCCON=0 x1|(02);/启动 A/D 转换 Delay(100);/等待一定的时间使 ADC 的参电压稳定下来 rADCPSR=0 x20;/设置时钟预分频值(2)读取 A/D 转换数值子程序参考以下程序:int ReadAdc(int ch)/参数:采样通道int i;static int prevCh=-1;if(prevCh!=ch)rADCCON=0 x0|(ch2);/设置采样通道for(i=0;i150;i+);/等待最小 15uSrADCCON=0 x1|(ch2);/启动 A/D 转换while(rADCCON&0 x1);/To avoid The first FLAG error case./(The START bit is cleared in one ADC clock.)while(!(rADCCON&0 x40);/A/D 转换是否结束?for(i=0;irADCPSR;i+);/To avoid The second FLAG error caseprevCh=ch;return rADCDAT;/返回转换结果 5.8 本章小结 本章主要介绍EV44B0II开发板的存储和I/O地址空间分布,介绍了Boot loader在存储地址空间的分布情况。给出了电源时钟复位电路、Boot FLASH 接口电路、SDRAM接口电路、网络USB及IIS接口电路、键盘数码管接口电路、LCD接口电路、触摸屏接口电路、串行口接口电路、IIC接口电路和A/D等接口电路等的设计及编程。练习题1.Boot loader的作用。2.简述EV44B0II的地址空间分布情况。3.简述IIS接口电路原理。4.简述矩阵式键盘循环扫描检测法工作原理。5.假设要将 44b0X 的 UART1 设置为:波特率 9600bps,7位数据位,2个停止位,1位奇偶校验位,并采用流控制工作,该如何设置?给出完成该设置功能的代码段。6.如何设置定时器的时钟源频率?工作在主频64M下,要获得4M的时钟源频率,应该如何设置?7.24LC04B具有多大的存储空间?在 IIC 总线上它是作为主器件还是从器件?8.S3C44B0X 具有哪些与 ADC 相关的寄存器,它们的作用分别是什么?9.ADS7843 的控制字是什么?每一位代表什么意义?

    注意事项

    本文(人机接口电路设计及编程.ppt)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开