人机接口电路设计及编程课件

PPT
  • 阅读 104 次
  • 下载 0 次
  • 页数 99 页
  • 大小 898.502 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
人机接口电路设计及编程课件
可在后台配置第一页与第二页中间广告代码
人机接口电路设计及编程课件
可在后台配置第二页与第三页中间广告代码
人机接口电路设计及编程课件
可在后台配置第三页与第四页中间广告代码
人机接口电路设计及编程课件
人机接口电路设计及编程课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 99
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】人机接口电路设计及编程课件.ppt,共(99)页,898.502 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-45574.html

以下为本文档部分文字说明:

5.4人机接口电路设计及编程5.4.1键盘电路设计及编程1.电路键盘接口电路如图5-12所示,板上扩展了一个4×4行列式矩阵键盘接口。该键盘采用中断扫描方式进行工作,行线选用PORTG4~7输出,列线选用PORTF5~8为输入。行线接上拉电阻保持高电平,

并通过“与”门将输出信号与MCU的中断EXINT0连接;列线接上拉电阻保持高电平。2.编程(1)I/O口和中断初始化①I/O引脚设置:rPDATE=0X60;rPCONF=0x2A;列线PORTF5~8为输入rPUPF=0x0;列线接上拉电阻rPDATG

=0x0;rPCONG=0x55FF;行线PORTG4~7输出,PORTG0作为EXINT0连接rPUPG=0x0;行线接上拉电阻②中断初始化rINTCON=0x5;//非向量模式,IRQ允许,FIQ禁止rINTMOD=0x0;//全

部IRQ模式rINTMSK=~(BIT_GLOBAL|BIT_EINT0);//EXINT0允许,所有中断屏蔽位允许pISR_EINT0=(unsigned)keyboard_ISR;//指定中断服务程序(2)程序将行线PORTG4~7输出为低电平,当有键盘按下时,该行线被拉为低电平

,使得EXINT0输入也为低电平,MCU产生中断。中断产生后通过对键盘的行和列进行扫描的方法,可以计算出是哪个键按下,并跳到相应的键盘处理程序中去。voidkeyboard_ISR(void){charx,y,xrecord,yrecord,temp;r

I_ISPC=BIT_EINT0;//clearpending_bitDelay(400);//delay40msif((rPDATF&0x1E0)==0x1E0){return0;//nokeyboardpress,return}else{x=1;y=1;xrecord=(~((rPDAT

F&0x1E0)>>1));xrecord=xrecord>>4;while(xrecord!=0x1)//judgerow{x=x+1;xrecord=xrecord>>1;if(xrecord==0){rPDATG=0X0F;//no,returnreturn0;}}Delay(200);

//delay20msrPDATG=0XEF;//inputhighwhile((rPDATF&0x1E0)==0x1E0){rPDATG=rPDATG<<1;temp=rPDATG;if((temp&0xf0)==0XF0)//noboardpress

,return{rPDATG=0X0F;return0;}}Delay(200);//delay10msyrecord=~((rPDATG&0xF0)>>4)&0x0F;while(yrecord!=0x1

)//judgeline{y=y+1;yrecord=yrecord>>1;if(yrecord==0){rPDATG=0X0F;//noboardpress,returnreturn0;}}Led_Display(x+(y-1)*4-1);Uart_Printf("%3d",x+(y-1)*4

-1);Delay(1200);//delay40msrPDATG=0X0F;}}5.4.2LCD接口电路设计及编程1.LCD接口信号EV44B0II现配有160×240的单色显示屏,4比特单扫描。EV44B0II将LCD控制信号线连接到JP6上,与LCD模块相连,其原理如图

5-13所示。在LCD模块上,集成了LCD驱动器和专门的电压转换电路,用以驱动LCD屏幕和适配LCD工作电压。LCD连接器的信号定义如表5-4所示。1.LCD接口信号EV44B0II现配有160×240的单色显示屏,4比特单扫描。EV44B0II将LCD控制信号线连接到JP6上,与LC

D模块相连,其原理如图5-13所示。在LCD模块上,集成了LCD驱动器和专门的电压转换电路,用以驱动LCD屏幕和适配LCD工作电压。LCD连接器的信号定义如表5-4所示。2.编程显示缓冲区与LCD象素对应关系图如图5-14所示。(1)LCD初始化程序通常采用S3C44B0X的PORT

C口和PPORTD口作为LCD驱动接口,因此需要设置它们工作在第3功能状态,设置I/O口控制寄存器的语句如下:rPDATC=0x8400;rPCONC=0x5F5FFFFF;rPUPC=0x33ff;

//shouldbeenabledrPCOND=0xaaaa;rPUPD=0xff;LCD初始化程序如下:voidLcd_MonoInit(void){//160x2401bit/1pixelLCD#defineMVAL_USED0rLCDCON1=(0)

|(1<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_MONO<<12);//disable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,rLCD

CON2=(LINEVAL)|(HOZVAL<<10)|(10<<21);//LINEBLANK=10rLCDSADDR1=(0x0<<27)|(((U32)frameBuffer1>>22)<<21)|M5D((U32)frameBuffer1

>>1);//monochrome,LCDBANK,LCDBASEUrLCDSADDR2=M5D((((U32)frameBuffer1+(SCR_XSIZE*LCD_YSIZE/8))>>1))|(MVAL<<

21)|(1<<29);rLCDSADDR3=(LCD_XSIZE/16)|(((SCR_XSIZE-LCD_XSIZE)/16)<<9);rLCDCON1=(1)|(1<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3

<<10)|(CLKVAL_MONO<<12);//enable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,}(2)LCD显示程序LCD显示程序如下:#defineframeBuffer10xc400000e

xternunsignedchar*Buf;voiddisplaylcd(void){unsignedint*pbuffer,temp_data;inti;pbuffer=(U32*)frameBuffer1;for(i=0;

i<(4800/4);i++){temp_data=(Buf[i*4+3]<<24)+(Buf[i*4+2]<<16)+(Buf[i*4+1]<<8)+(Buf[i*4]);pbuffer[i]=~temp_data;Delay(10);}}(3)LCD清屏程序LCD清屏程序如下

:voidclrscreen(void){inti,j;unsignedint*pbuffer;pbuffer=(U32*)frameBuffer1;for(i=0;i<4800/4;i++){pbuffer[i]=0;//(0x0FFFFFFFF);}}5.4.3

触摸屏电路设计及编程1.触摸屏的工作原理触摸屏按其工作原理的不同分为表面声波屏、电容屏、电阻屏和红外屏几种。常见的又数电阻触摸屏。如图5-15所示,电阻触摸屏的屏体部分是一块与显示器表面非常配合的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处

理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。如图5-16所示,当手指或笔触摸屏幕时(图c),平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一

面导电层(顶层)接通X轴方向的5V均匀电压场(图a),使得检测层(底层)的电压由零变为非零,控制器侦测到这个接通后,进行A/D转换,并将得到的电压值与5V相比即可得触摸点的X轴坐标为(原点在靠近接地点的那端):Xi=Lx*Vi/V(即分压原理)同理得出Y轴的坐标,这就是所有电阻触摸屏共同的

最基本原理。2.触摸屏电路控制触摸屏的控制采用专用芯片,专门处理是否有笔或手指按下触摸屏,并在按下时分别给两组电极通电,然后将其对应位置的摸拟电压信号经过A/D转换送回处理器.我们选取GPG口与ADS7843接口。共运用了PG2~PG7口共6条

口线。你也可以选择其它的I/O口,但注意不要与I/O口上已经设定的功能(例如串口)相冲突。参考电路图如下:按照下图用导线将两个模块连接起来。如图5-17所示。3.编程(1)PCONG寄存器配置按照以上电路来设置,PG6和PG5输入,PG4~PG2输出,PG7作为中断EINT7且

加内部上拉电阻,初始化语句如下:rPCONG=0x015f;rPUPG&=0x80;(2)ADS7843编程ADS7843的控制字如表5-5所示,其中S为数据传输起始标志位,该位必为1。A2~A0进行通道选择。MODE用来选择A/D转换的精度,1--选择8位,0-

-选择12位。SER/DFR选择参考电压的输入模式。PD1和PD0选择省电模式:00--为省电模式允许,在两次A/D转换之间掉电,且中断允许;01同00,只是不允许中断;10保留;11禁止省电模式。A0~A2用来进行开关切换,如表5-6所示。我

们采用固定参考电压模式,因此SER/DFR=1。程序中首先探测PENIRQ是否为低电平,如果为高则认为触摸屏没有接触;如果探测到PENIRQ为低电平,则认为有接触。利用软件模拟DIN、DOUT、DCLK上的3线串行传输的

时序,将读取X坐标数值或Y坐标数值的控制字串行送入ADS7843,并串行读出坐标值。①检测PENIRQ#defineTOUCH_MSR_Y0x9c;//读Y轴坐标命令#defineTOUCH_MSR_X0xdc;//读X轴坐标命令……if((rPDATG&0x80)==0)//PENIRQ电平为低

{//TouchState.pressed=1;_State.Pressed=1;//说明已经按下temp=TOUCH_MSR_X;_State.x=ReadTouch(temp);temp=TOUCH_MSR_Y;_State

.y=ReadTouch(temp);……}②送控制字并读取结果子程序intReadTouch(unsignedcharcommand){unsignedchartemp,i,ack,j,k;ack=0;//PG7<-PENIRQ,

PG6<-BUSY,PG5<-DOUT,PG4->CS,PG3->DCLK,PG2->DINrPDATG&=0xe7;//cs置低;dclk置低temp=0x80;for(i=0;i<8;i++)//发送1个字节{if(command&temp)//将控制字分解为位rPD

ATG|=0x04;//将din置1elserPDATG&=0xfb;//将din清0rPDATG|=0x08;//置高dclkdelay(2);rPDATG&=0xf7;//清除dclk,1位送出delay(2);temp=temp>

>1;//移位}while((temp=(rPDATG&0x40))==0);等待BUSY变低rPDATG&=0xdf;//din清零//再1个时钟以后开始接收数据rPDATG|=0x08;//置高dclkdel

ay(2);rPDATG&=0xf7;//清零dclkdelay(2);for(i=0;i<7;i++)取得前7位坐标数据(高位在前){rPDATG|=0x08;//置高dclkif(temp=rPDATG&0x20)//取得din上的1位数据ack+=1;ack=ack<<1;dela

y(2);rPDATG&=0xf7;//清零dclkdelay(2);}rPDATG|=0x08;//置高dclkif(temp=rPDATG&0x20)//接收最后1位ack+=1;delay(2);rPDATG&=0xf7;//清零dclkrPDATG|=

0x10;//置高csreturnack;//返回接收结果}4.触摸屏与显示器的配合ADS7843送回控制器的X与Y值仅是对当前触摸点的电压值的A/D转换值,它不具有实用价值。这个值的大小不但与触摸屏的分辨率有关,而且也与触摸屏与LCD贴合的情况有关。而且,LCD分辨率与触摸屏的分辨率一

般来说是不一样,坐标也不一样。因此,如果想得到体现LCD坐标的触摸屏位置,还需要在程序中进行转换。假设LCD分辨率是320×240,坐标原点在左上角;触摸屏分辨率是900×900,坐标原点在左上角,则转换公式如下: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.48段数码管电路设计及编程1.电路设计系统使用了一个8段数码LED,如图2-18所示。该数码管是共阳极的,低电平信号使LED点亮。CPU数据总线DATA(0~7)经74LS573驱动器对数码管进行驱动。其片选信

号由CPU的nGCS3信号选通,而8段的内容则由CPU低8位数据线决定。口地址为0x6000000。2.编程8段数码管显示程序如下:voidLed_Display(unsignedchardata){u

nsignedchar*ledbuffer=(unsignedchar*)0x6000000switch(data){case0:*ledbuffer=0x12;break;...case0xf:*led

buffer=0x68;break;}}5.5串行接口电路设计及编程5.5.1串行电路接口串行接口电路如图5-19所示。系统提供两个RS232标准串行接口(DB9),UART0/l可与PC或MODOM进行串行通信。PORTC10~15分别作为

nRTS1、nCTS1、TXD1、RXD1、nRTS0和nCTS0信号,PE1和PE2作为TXD0和RXD0信号。两个接口则采用两片MAX2322C作为电平转换器。5.5.2编程1.I/O接口配置初始化对PORTC和PORTE初始化语句如下:rPCONC=0x0f000

000|rPCONC;rPUPC=0x3000;//设置内部上拉rPCONE=(rPCONE&0xfc3)|0xeb;rPUPE=0x6;2.UART初始化对UART口进行初始化设置程序如下:staticintUartNum=0;voidmyUart_Init(

intwhichuart,intbaud)//设置串口波特率等初始化工作。{if(whichuart==0){UartNum=0;rUFCON0=0x0;//不使用FIFOrUMCON0=0x0;//不使用自动流控制rULCON0=0x3;//不

采用红外线传输模式,无奇偶校验位,1个停止位,//8个数据位rUCON0=0x245;//发送中断为电平方式,接收中断为边沿方式,禁止超时//中断,允许产生错误状态中断,禁止回送模式,禁止中//止信号,传输模式为中断请求模式,接收模式也为中断//请求模式。rUBRDIV0=((in

t)(MCLK/16./baud+0.5)-1);//根据波特率计算UBRDIV0的值}elseif(whichuart==1){UartNum=1;rUFCON1=0x0;rUMCON1=0x0;rULCON1=0x3;rUCON1=0x245;rUBRDIV1=((int)(

MCLK/16./baud+0.5)-1);}}3.字符发送程序#defineWrUTXH0(ch)(*(volatileunsignedchar*)0xld00020)=(unsignedchar)(ch)#defineW

rUTXH0(ch)(*(volatileunsignedchar*)0xld04020)=(unsignedchar)(ch)VoidmyUart_SendByte(charch){if(UartNum==0){if(ch==“\

n”){while(!(rUTRSTAT0&0x2));//等待,直到发送缓冲区为空Delay(10);//超级中断的响应速度较慢WrUTXH0(“\r”);//发送回车符}while(!(rUTRSTAT0&0x2));//等待,知道发送缓冲区为空D

elay(10);WrUTXH0(ch);//发送字符}else{if(ch==“\n”){while(!(rUTRSTAT1&0x2));Delay(10);//因为超级终端响应较慢rUTXH1=“\r”;}While(!(rUTRSTAT1&0x2));//等待THR空。Delay(10);

WrUTXH1(ch);}}字符接受程序#defineRdURXH0()(*(volatileunsignedchar*)(0xld00027))#defineRdURXH1()(*(volatileunsig

nedchar*)(0xld04027))CharUart_Getch(void){if(whichUart==0)//串口0{while(!(rUTRSTAT0&0x1));//读出接收到的数据(一直到读完)returnRdURXH0()

;//URXH0:UART0接收缓冲寄存器}else//串口1{while(!(rUTRSTAT1&0x1));//ReceivedatareadyreturnrURXH1;}}5.6ⅡC接口电路设计及编程5.6.1EEPROM芯片介绍目前,通用存储器

芯片多为EEPTOM,其常用的协议主要有两线串行连接协议(ⅡC)和三线串行连接协议。带ⅡC总线接口的EEPROM有许多型号,其中AT24Cxx系列使用十分普遍,产品包括AT2401/02/04/08/16等,其容量(字节数×页)分别为128×8/256×8/512×8/1024×8/204

8×8,适用于2~5V的低电压操作,具有低功耗和高可靠性等优点。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.2EEPROM读/写操作1.AT24C04结构与应用简述AT24C04由输入缓冲器和EEPROM阵列组成。由于EEPROM的半导体工艺特性写入时间为5~10ms,如果从外部直接写入EEPROM,则每写一个字节都要等候5

~10ms,成批数据写入时就要等候更长时间。具有SRAM输入缓冲器的EEPROM器件,其写入操作变成对SRAM缓冲器的装载。装载完后启动一个自动写入逻辑将缓冲器中的全部数据一次写入EEPROM阵对缓冲器的输人称为页写,缓冲器的容量称为页写字节数。AT24C04的页写字节数为

8,占用最低3位地址。当写入不超过页写字节数时,对EEPROM器件的写入操作与对SRAM的写入操作相同;当超过页写字节数时,应等候5~10ms后再启动一次写操作。由于EEPROM器件缓冲区容量较小(只占据最低3位),且不具备溢出进位检测功能,所以,从非零地址写入8个字节数或从

零地址写入超过8个字节数会形成地址翻卷,导致写入出错。2.设备地址(DADDR)AT24C04xx的器件地址是1010。3.AT24Cxx的数据操作格式在IIC总线中,对AT24C04内部存储单元读/写,除了要给出器件的设备地址(DADDR)外,还须指定读/写的页面地址(

PADDR)。两者组成操作地址(OPADDR)如下:1010A2A1–R/W(“–”为无效)系统中引脚A2A1A0为000,因此,系统可寻址AT24C04全部页面,共4K位。按照AT24C04器件手册读/写地址(ADDR=1010A2A1–R/W)中的数据操作格式如下:(1)

写入操作格式任意写一个字节到地址ADDR_W,其时序图如图5-21所示,写入操作格式为:START_COPADDR_WACKADDR_WACKdataACKSTOP_C从地址ADDR_W起连续写人n个字节(同一页面),其时序图如图5-22所示,写人格式为:S

TART_COPADDR_WACKADDR_WACKdata1ACKdata2ACK...datanACKSTOP_C(2)读出操作格式从任意地址ADDR_R读一个字节的时序图如图5-23所示,读出操作格式为:START_COPADDR_WACKADDR_RACKOPADDR_R

ACKdataSTOP_C从地址ADDR_R起连续读出n个字节(同一页面),其时序图如图5-24所示,读出操作格式为:START_COPADDR_RACKdata1ACKdata2ACK...datanACKSTOP_C在读任意地址操作中,除了发送读地址外,还要发送页面地址(

PADDR);因此,在连续读出72个字节操作前,要进行1个字节PADDR写入操作,然后重新启动读操作。注意,读操作完成后没有ACK。5.6.3编程1.I/O端口IIC功能设置我们采用PF0口和PF1口工作在第2功能模式下,分别作为IIC总线的SCL和SDA与24LC04B相连

。因此,需要设置PF0和PF1工作在第2功能模式下。采用以下语句:rPCONF|=0xa;//PF0:IICSCL,PF1:IICSDArPUPF|=0x3;//pull-updisable2.IIC中断使能由于是采用中断的方式了解每个字节的传输是否成功。因

此需要定义中断处理程序入口,并且使能中断。采用以下语句实现:pISR_IIC=(unsigned)IIC_Int;//将IIC中断处理程序指针指向IIC_IntrINTMSK=~(BIT_GLOBAL|BIT_IIC);//使能中断3.初始化IIC接口对IICCON进行设置:rIICCO

N=(1<<7)|(0<<6)|(1<<5)|(0xf);//使能ACK的产生,IICCLK=MCLK/16,使能发送/接收中断,清除pending位以便响应//中断,Txclock=(64MHz/16)/(15+1)=250KHz4.向24LC04B中写入数据子程序#defi

neIICBUFSIZE0x20U8_iicData[IICBUFSIZE];//写数据缓存volatileint_iicDataCount;//数据长度volatileint_iicStatus;volatileint_iicMode;i

nt_iicPt;voidWr24LCxx(U32slvAddr,U32addr,U8data){_iicMode=WRDATA;//写数据模式_iicPt=0;_iicData[0]=(U8)addr;//字节写入模式,数据格式参考教材内容_iicData[1]=

data;_iicDataCount=2;rIICDS=0xa0;//控制字节rIICSTAT=0xf0;//主设备发送模式,产生起始条件,使能发送/接收while(_iicDataCount!=-1);_iicMode=PO

LLACK;while(1){rIICDS=slvAddr;_iicStatus=0x100;rIICSTAT=0xf0;//MasTx,StartrIICCON=0xaf;//resumesIICoperation.while(_iicStatus==0x100)

;if(!(_iicStatus&0x1))break;//成功接收到ACK}rIICSTAT=0xd0;//产生停止条件rIICCON=0xaf;//释放IIC操作Delay(1);//等待,直到停止条件起作用,写入成功}5.从24LC0

4B读出数据子程序voidRd24LCxx(U32slvAddr,U32addr,U8*data){_iicMode=SETRDADDR;_iicPt=0;_iicData[0]=(U8)addr;_i

icDataCount=1;rIICDS=slvAddr;rIICSTAT=0xf0;//MasTx,Startwhile(_iicDataCount!=-1);_iicMode=RDDATA;_iicPt=0;_iicD

ataCount=1;rIICDS=slvAddr;rIICSTAT=0xb0;//MasRx,StartrIICCON=0xaf;//resumesIICoperation.while(_iicDataCo

unt!=-1);*data=_iicData[1];}6.IIC中断处理子程序void__irqIIC_Int(void){U32iicSt,i;rI_ISPC=BIT_IIC;//清除pending位iicSt=rIICSTAT;//读入

IIC总线单前状态,以便进行各种错误处理if(iicSt&0x8){}//whenbusarbitrationisfailed.if(iicSt&0x4){}//whenaslaveaddressismatchedwithIICADDif(iicSt&0x2){}//whenasl

aveaddressis0000000bif(iicSt&0x1){}//whenACKisn'treceivedswitch(_iicMode)//根据当前操作模式进行相应处理{casePOLLACK://等待ACK模式_ii

cStatus=iicSt;//读入IICSTAT,第0位表示是否接收到ACKbreak;caseRDDATA://读数据模式if((_iicDataCount--)==0)//只要读取1字节数据{_iicData[_iicPt++]=rIICDS;rIICSTAT=0x90;//停止主设备

读取模式rIICCON=0xaf;//释放IIC操作Delay(1);//等待直到停止条件起作用break;}_iicData[_iicPt++]=rIICDS;//未读完所有数据最后一个字节不能产生ACKif((_iicDataCount)==0)//

如果读完了所有数据(最后一个字节)rIICCON=0x2f;//产生NOACK.释放IIC操作elserIICCON=0xaf;//产生ACK释放IIC操作break;caseWRDATA://写数据模式if((_iicDataCount--)==0)//如果数据写完{

rIICSTAT=0xd0;//停止主设备发送传输rIICCON=0xaf;//恢复IIC操作Delay(1);//等待,直到停止条件起效break;}rIICDS=_iicData[_iicPt++];//_iicData[0]hasd

ummy.for(i=0;i<10;i++);//forsetuptimeuntilrisingedgeofIICSCLrIICCON=0xaf;//释放IIC总线操作break;caseSETRDADDR://设置读地址模式//Uart_Printf("[S%d]",_iicDataCo

unt);if((_iicDataCount--)==0){break;//IICoperationisstoppedbecauseofIICCON[4]}rIICDS=_iicData[_iicPt++]for(i=0;i<10;i++

);//forsetuptimeuntilrisingedgeofIICSCLrIICCON=0xaf;//释放IIC总线操作break;default:break;}}5.7其他接口电路设计及编程5.7.1定时器编程让定时器0的TOUT0引脚输出频率为16K,占空比为30%的

PWM脉冲调制波形;定时约0.5秒后产生定时中断。1.定时器初始化(1)I/O口设置采用以下语句对PE口的工作方式进行设置,使之工作在定时器输出状态:rPCONE=0xaaa8;//Tout0/1/2/3/4,RxD0,TxD0rPUPE|=

0xf8;(2)定时器时钟源频率设置通过以下语句来设置定时器的时钟源:rTCFG0=0x1010101;//预分频值为1rTCFG1=0x01;//分割比例=1/4经过设置后,定时器时钟源频率=(MCLK/1)/4(3)设置输出波形频率通过以下语句来设置输出波形

的频率:rTCNTB0=1000;经过设置,输出PWM波形的频率为MCLK/4000;由于系统采用的MCLK=64M,因此,PWM波形频率为16K。(4)设置占空比通过以下语句来设置输出波形的占空比:rTCMPB0=300;针对实验要求:300/1000=30%(5)设置定时器控

制寄存器、启动定时器rTCON=0xaaaa0a;//自动重载模式,关闭反转功能,手动更新,关闭死区rTCON=0x999909;//启动PWM操作定时器启动后,可以采用示波器观察TOUT0输出波形,是否满足要求。2.定时器中断主程序参考程

序如下:volatileintvariable0;voidTest_TimerInt(void){rINTMSK=~(BIT_GLOBAL|BIT_TIMER0)pISR_TIMER0=(int)Timer0Done;//修改中断处理函数的指针rTCFG0=0x00f;//deadzo

ne=0,pre0=0xf//设定时钟源频率rTCFG1=0x04;//allinterrupt,mux0=1/32rTCNTB0=0xffff;//(1/(64MHz/15/32))*0xffff=0.49srTCON=

0x02;//手动更新timer0的设置rTCON=0x01;//T0=oneshot,启动定时器while(variable0==0);//等待中断发生rTCON=0x0;//停止定时器rINTMSK=BIT_GLOBAL;/

/关闭中断}3.定时中断服务程序void__irqTimer0Done(void){rI_ISPC=BIT_TIMER0;//清中断pending位variable0++;//更新变量}5.7.2实时日历时钟RTC1.

电路如图5-25为32.768KHZ晶振的电路连接示例:2.编程(1)实时时钟初始化初始化示例程序如下:#defineTESTYEAR0x99#defineTESTMONTH0x12#defineTESTDAY0x31#defineTESTDATE

0x06//星期五#defineTESTHOUR0x23#defineTESTMIN0x59#defineTESTSEC0x30voidRtc_Init(void){rRTCCON=0x01;//读写使能,1/32768,Normal(merge),NoresetrBCDYEAR=TESTYEA

R;rBCDMON=TESTMONTH;rBCDDAY=TESTDAY;//SUN:1MON:2TUE:3WED:4THU:5FRI:6SAT:7rBCDDATE=TESTDATE;rBCDHOUR=TESTHOUR;rBCDMIN=TESTMIN;rBCDSEC=TESTSEC;rRTCCON

=0x00;//读写禁止}以上程序对控制寄存器进行了设置,并更新了RTC日期时间寄存器,从此刻开始RTC就从设置的日期时间开始如钟表一样自动运转。(2)显示当前时间示例程序如下:voidDisplay_Rtc(void){intyear,in

tmonth,day,weekday,hour,min,sec;rRTCCON=0x01;//使能读写,1/32768,Normal(merge),Noresetif(rBCDYEAR==0x99)year=0x1999;elseyear=0x2000+rBCDYEAR;mon

th=rBCDMON;day=rBCDDAY;weekday=rBCDDATE;hour=rBCDHOUR;min=rBCDMIN;sec=rBCDSEC;//显示(向串口输出)时间rRTCCON=0x0;//禁止读写}5.7.3A/D转换器电路设计及编程1.电路如

图5-26所示.手动调节电位器上的旋钮,产生缓慢变化的模拟信号,改变输入ADC的模拟电压值。2.编程(1)ADC控制寄存器初始化采用以下语句对ADC相关寄存器进行初始化:CLKCON=0x7ff8;//时钟控制寄存器,使能MCLK作为ADC的时钟源rADCCON=0x1|(0<<2);//启动A

/D转换Delay(100);//等待一定的时间使ADC的参电压稳定下来rADCPSR=0x20;//设置时钟预分频值(2)读取A/D转换数值子程序参考以下程序:intReadAdc(intch)//

参数:采样通道{inti;staticintprevCh=-1;if(prevCh!=ch){rADCCON=0x0|(ch<<2);//设置采样通道for(i=0;i<150;i++);//等待最小15uS}rADCCON=0x

1|(ch<<2);//启动A/D转换while(rADCCON&0x1);//ToavoidThefirstFLAGerrorcase.//(TheSTARTbitisclearedinoneADCclock.)while(!(rADCCON&0x40));/

/A/D转换是否结束?for(i=0;i<rADCPSR;i++);//ToavoidThesecondFLAGerrorcaseprevCh=ch;returnrADCDAT;//返回转换结果}5.8本章小结本章主要介绍EV44B0I

I开发板的存储和I/O地址空间分布,介绍了Bootloader在存储地址空间的分布情况。给出了电源时钟复位电路、BootFLASH接口电路、SDRAM接口电路、网络USB及IIS接口电路、键盘数码管接口电路、LCD接口电路、触摸屏接口电路、串行口接口电

路、IIC接口电路和A/D等接口电路等的设计及编程。练习题1.Bootloader的作用。2.简述EV44B0II的地址空间分布情况。3.简述IIS接口电路原理。4.简述矩阵式键盘循环扫描检测法工作原理。5

.假设要将44b0X的UART1设置为:波特率9600bps,7位数据位,2个停止位,1位奇偶校验位,并采用流控制工作,该如何设置?给出完成该设置功能的代码段。6.如何设置定时器的时钟源频率?工作在主频64M下,要获得4M的时钟源频率,应该如何设置?7.24LC04B具有多大的存储

空间?在IIC总线上它是作为主器件还是从器件?8.S3C44B0X具有哪些与ADC相关的寄存器,它们的作用分别是什么?9.ADS7843的控制字是什么?每一位代表什么意义?

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?