人机接口电路设计方案及编程教学课件.ppt

上传人:本田雅阁 文档编号:3253329 上传时间:2019-08-06 格式:PPT 页数:117 大小:898.56KB
返回 下载 相关 举报
人机接口电路设计方案及编程教学课件.ppt_第1页
第1页 / 共117页
人机接口电路设计方案及编程教学课件.ppt_第2页
第2页 / 共117页
人机接口电路设计方案及编程教学课件.ppt_第3页
第3页 / 共117页
人机接口电路设计方案及编程教学课件.ppt_第4页
第4页 / 共117页
人机接口电路设计方案及编程教学课件.ppt_第5页
第5页 / 共117页
点击查看更多>>
资源描述

《人机接口电路设计方案及编程教学课件.ppt》由会员分享,可在线阅读,更多相关《人机接口电路设计方案及编程教学课件.ppt(117页珍藏版)》请在三一文库上搜索。

1、5.4 人机接口电路设计及编程,5.4.1 键盘电路设计及编程,1. 电路,键盘接口电路如图5-12所示,板上扩展了一个44行列式矩阵键盘接口。 该键盘采用中断扫描方式进行工作,行线选用PORTG47输出,列线选用PORTF58为输入。 行线接上拉电阻保持高电平,并通过“与”门将输出信号与MCU的中断EXINT0连接; 列线接上拉电阻保持高电平。,2. 编程,(1) I/O口和中断初始化 I/O引脚设置: rPDATE=0X60; rPCONF=0x2A; 列线PORTF58为输入 rPUPF=0x0; 列线接上拉电阻 rPDATG=0x0; rPCONG=0x55FF; 行线PORTG47输

2、出, PORTG0作为EXINT0连接 rPUPG=0x0; 行线接上拉电阻, 中断初始化 rINTCON=0x5; / 非向量模式,IRQ 允许,FIQ 禁止 rINTMOD=0x0; / 全部IRQ 模式 rINTMSK =(BIT_GLOBAL|BIT_EINT0); /EXINT0允许, 所有中断屏蔽位允许 pISR_EINT0=(unsigned)keyboard_ISR; /指定中断服务程序,(2) 程序 将行线PORTG47输出为低电平,当有键盘按下时,该行线被拉为低电平,使得EXINT0输入也为低电平,MCU产生中断。 中断产生后通过对键盘的行和列进行扫描的方法,可以计算出是哪

3、个键按下,并跳到相应的键盘处理程序中去。,void keyboard_ISR(void) char x,y,xrecord,yrecord,temp; rI_ISPC=BIT_EINT0; /clear pending_bit Delay(400); /delay 40ms if(rPDATF /no keyboard press,return ,else x=1; y=1; xrecord=(rPDATF,if(xrecord=0) rPDATG=0X0F; / no ,return return 0; Delay(200); /delay 20ms rPDATG=0XEF; /input

4、high,while(rPDATF ,Delay(200); /delay 10ms yrecord=(rPDATG ,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驱动器和专门的电压转换电路,用以驱动L

5、CD屏幕和适配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

6、口控制寄存器的语句如下: rPDATC=0x8400; rPCONC=0x5F5FFFFF; rPUPC=0x33ff; /should be enabled rPCOND=0xaaaa; rPUPD=0xff;,LCD初始化程序如下: void Lcd_MonoInit(void) /160x240 1bit/1pixel LCD #define MVAL_USED 0 rLCDCON1=(0)|(15)|(MVAL_USED7) |(0x38)|(0x310)|(CLKVAL_MONO12); /disable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk, rLCDCO

7、N2=(LINEVAL)|(HOZVAL10)|(1021); /LINEBLANK=10,rLCDSADDR1=(0x022) 1); / monochrome, LCDBANK, LCDBASEU rLCDSADDR2=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)|(0x38)| (0x310)|(CLKVAL_MONO12); /en

8、able,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk, ,(2) LCD 显示程序,LCD 显示程序如下: #define frameBuffer1 0xc400000 extern 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) +(

9、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;/(0x0FFFFFFFF); ,5.4.3 触摸屏电路设计及编程,1. 触摸屏的工作原理 触摸屏按其工作原理的不同分为表面声波屏、电容屏、电阻屏和红外屏几种。 常见的又数电阻触摸屏。如图5-15 所示,电阻触摸屏的屏体部分是一块与

10、显示器表面非常配合的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。,如图5-16所示,当手指或笔触摸屏幕时(图c),平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层(顶层)接通X 轴方向的5V 均匀电压场(图a),使得检测层(底层)的电压由零变为非零,控制器侦测到这个接通后,进行A/D 转换,并将得到的电压值与5V 相比即可得触摸点的X 轴坐标为(原点在靠近接地点的那端): Xi=LxVi/V(即分

11、压原理)同理得出Y 轴的坐标,这就是所有电阻触摸屏共同的最基本原理。,2.触摸屏电路控制,触摸屏的控制采用专用芯片,专门处理是否有笔或手指按下触摸屏,并在按下时分别给两组电极通电,然后将其对应位置的摸拟电压信号经过A/D 转换送回处理器 .,我们选取 GPG 口与 ADS7843 接口。共运用了 PG2PG7 口共 6 条口线。你也可以选择其它的 I/O 口,但注意不要与 I/O 口上已经设定的功能(例如串口)相冲突。参考电路图如下:按照下图用导线将两个模块连接起来。如图5-17所示。,3. 编程,(1) PCONG 寄存器配置 按照以上电路来设置,PG6和PG5输入,PG4PG2输出,PG7

12、作为中断EINT7且加内部上拉电阻,初始化语句如下: rPCONG=0x015f; rPUPG &=0x80;,(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 时,A0A2 输入设置,我们采用固定参考电压

13、模式,因此 SER/DFR1。 程序中首先探测 PENIRQ 是否为低电平,如果为高则认为触摸屏没有接触;如果探测到 PENIRQ 为低电平,则认为有接触。 利用软件模拟 DIN、DOUT、DCLK上的 3 线串行传输的时序,将读取 X 坐标数值或 Y 坐标数值的控制字串行送入 ADS7843,并串行读出坐标值。, 检测 PENIRQ,#define TOUCH_MSR_Y 0x9c; /读 Y 轴坐标命令 #define TOUCH_MSR_X 0xdc; /读 X 轴坐标命令 if(rPDATG , 送控制字并读取结果子程序,int ReadTouch(unsigned char comm

14、and) unsigned char temp,i,ack,j,k; ack=0; /PG7CS,PG3-DCLK,PG2-DIN rPDATG,for(i=0;i1; /移位 ,while(temp=(rPDATG,for(i=0;i7;i+)取得前 7 位坐标数据(高位在前) rPDATG|=0x08; /置高 dclk if(temp=rPDATG /置高 dclk,if(temp=rPDATG /返回接收结果 ,4.触摸屏与显示器的配合,ADS7843 送回控制器的X 与Y 值仅是对当前触摸点的电压值的A/D 转换值,它不具有实用价值。 这个值的大小不但与触摸屏的分辨率有关,而且也与触

15、摸屏与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);

16、最后得到的值,便可以尽可能得使LCD 坐标与触摸屏坐标一致,这样,更具有实际意义。,5.4.4 8段数码管电路设计及编程,1.电路设计 系统使用了一个8段数码LED,如图2-18所示。该数码管是共阳极的,低电平信号使LED点亮。 CPU数据总线DATA(07)经74LS573驱动器对数码管进行驱动。其片选信号由CPU的nGCS3信号选通,而8段的内容则由CPU低8位数据线决定。 口地址为0x6000000。,2. 编程,8段数码管显示程序如下: void Led_Display(unsigned char data) unsigned char * ledbuffer = (unsigned

17、char *) 0x6000000 switch(data) case 0: *ledbuffer=0x12; break; . case 0xf: *ledbuffer=0x68; 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.

18、 I/O接口配置初始化 对PORTC和PORTE初始化语句如下: rPCONC = 0x0f000000|rPCONC; rPUPC = 0x3000; /设置内部上拉 rPCONE = (rPCONE 2. UART初始化 对 UART 口进行初始化设置程序如下:,static int UartNum=0; void myUart_Init(int whichuart, int baud) /设置串口波特率等初始化工作。 if(whichuart=0) UartNum=0; rUFCON0=0x0; /不使用 FIFO rUMCON0=0x0; /不使用自动流控制 rULCON0=0x3;

19、/不采用红外线传输模式,无奇偶校验 位,1 个停止位, /8个数据位,rUCON0=0x245; /发送中断为电平方式,接收中断为 边沿方式,禁止超时 /中断,允许产生错误状态中断,禁止回 送模式,禁止中 /止信号,传输模式为中断请求模式,接 收模式也为中断 /请求模式。 rUBRDIV0=(int)(MCLK/16./baud + 0.5)-1); /根据波特率计算 UBRDIV0 的值 ,else if(whichuart=1) UartNum=1; rUFCON1=0x0; rUMCON1=0x0; rULCON1=0x3; rUCON1=0x245; rUBRDIV1 = ( (int

20、)(MCLK/16./baud + 0.5) -1 ); ,3.字符发送程序 #define WrUTXH0(ch)(*(volatile unsigned char*)0xld00020)=(unsigned char)(ch) #define WrUTXH0(ch)(*(volatile unsigned char*)0xld04020)=(unsigned char)(ch) Void myUart_SendByte(char ch) if(UartNum=0) if(ch=“n”) while(!(rUTRSTAT0 /发送字符 ,else if(ch=“n”) while(!(rUT

21、RSTAT1 ,字符接受程序 #define RdURXH0()(*(volatile unsigned char*)(0xld00027) #define RdURXH1()(*(volatile unsigned char*)(0xld04027) Char Uart_Getch(void) if(whichUart=0) /串口0 while(!(rUTRSTAT0 ,5.6 C接口电路设计及编程,5.6.1 EEPROM芯片介绍,目前,通用存储器芯片多为EEPTOM,其常用的协议主要有两线串行连接协议(C)和三线串行连接协议。 带C总线接口的EEPROM有许多型号,其中AT24Cxx系

22、列使用十分普遍,产品包括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 器

23、件/页面寻址地址输入端。在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缓冲器的装载。装载

24、完后启动一个自动写入逻辑将缓冲器中的全部数据一次写入EEPROM阵,对缓冲器的输人称为页写,缓冲器的容量 称为页写字节数。AT24C04的页写字节数为8,占用最低3位地址。当写入不超过页写字节数时,对EEPROM器件的写入操作与对SRAM的写入操作相同;当超过页写字节数时,应等候510 ms后再启动一次写操作。 由于EEPROM器件缓冲区容量较小(只占据最低3位),且不具备溢出进位检测功能,所以,从非零地址写入8个字节数或从零地址写入超过8个字节数会形成地址翻卷,导致写入出错。,2. 设备地址(DADDR) AT24C04xx的器件地址是1010。,3. AT24Cxx的数据操作格式 在IIC

25、总线中,对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

26、起连续写人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 .

27、 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 |= 0xa; /PF0:IICSCL, PF1:IICSDA rPUPF |= 0x3; /pull-up disable,

28、2. IIC中断使能 由于是采用中断的方式了解每个字节的传输是否成功。 因此需要定义中断处理程序入口,并且使能中断。采用以下语句实现: pISR_IIC= (unsigned)IIC_Int; /将 IIC 中断处理程序指针指向 IIC_Int rINTMSK= (BIT_GLOBAL|BIT_IIC); /使能中断,3. 初始化 IIC 接口 对 IICCON 进行设置: rIICCON = (17) | (06 ) | (15) | (0xf ); /使能 ACK的产生, IICCLK=MCLK/16, 使能发送/接收中断,清除 pending 位以便响应 /中断,Tx clock(64M

29、Hz/16)/(15+1) = 250KHz,4. 向24LC04B中写入数据子程序 #define IICBUFSIZE 0x20 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; /字节写入模式,数据格

30、式 参考教材内容 _iicData1=data; _iicDataCount=2; rIICDS=0xa0; /控制字节 rIICSTAT=0xf0; /主设备发送模式,产生起 始条件,使能发送/接收 while(_iicDataCount != -1); _iicMode=POLLACK;,while(1) rIICDS=slvAddr; _iicStatus=0x100; rIICSTAT=0xf0; /MasTx,Start rIICCON=0xaf; /resumes IIC operation. while(_iicStatus=0x100); if(!(_iicStatus /等待

31、,直到停止条件起作用,写入成功 ,5. 从24LC04B读出数据子程序 void Rd24LCxx(U32 slvAddr,U32 addr,U8 *data) _iicMode=SETRDADDR; _iicPt=0; _iicData0=(U8)addr; _iicDataCount=1; rIICDS=slvAddr; rIICSTAT=0xf0; /MasTx,Start,while(_iicDataCount != -1); _iicMode=RDDATA; _iicPt=0; _iicDataCount=1; rIICDS=slvAddr; rIICSTAT=0xb0; /MasR

32、x,Start rIICCON=0xaf; /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&0x8) / when bus arbitration is failed. if(iicSt&0x4) / when a slave add

33、ress is matched with IICADD if(iicSt&0x2) / when a slave address is 0000000b if(iicSt&0x1) / when ACK isnt received,switch(_iicMode) /根据当前操作模式进行相应处理 case POLLACK: /等待 ACK 模式 _iicStatus=iicSt; /读入 IICSTAT,第 0 位表示是否 接收到 ACK break; case RDDATA: /读数据模式 if(_iicDataCount -)=0) /只要读取 1 字节数据 _iicData_iicPt+

34、=rIICDS; rIICSTAT=0x90; /停止主设备读取模式 rIICCON=0xaf; /释放 IIC 操作 Delay(1); /等待直到停止条件起作用 break; ,_iicData_iicPt+=rIICDS; /未读完所有数据最后一个字节不能产生 ACK if(_iicDataCount)=0) /如果读完了所有数据(最后一个字节) rIICCON=0x2f; / 产生 NOACK.释放 IIC 操作 else rIICCON=0xaf; / 产生 ACK 释放 IIC 操作 break; case WRDATA: /写数据模式 if(_iicDataCount-)=0)

35、/如果数据写完 rIICSTAT=0xd0; /停止主设备发送传输 rIICCON=0xaf; /恢复 IIC 操作 Delay(1); /等待,直到停止条件起效 break; ,rIICDS=_iicData_iicPt+; /_iicData0 has dummy. for(i=0;i10;i+); /for setup time until rising edge of IICSCL rIICCON=0xaf; /释放 IIC 总线操作 break; case SETRDADDR: /设置读地址模式 /Uart_Printf(“S%d“,_iicDataCount);,if(_iicDa

36、taCount-)=0) break; /IIC operation is stopped because of IICCON4 rIICDS=_iicData_iicPt+ for(i=0;i10;i+); /for setup time until rising edge of IICSCL rIICCON=0xaf; /释放 IIC 总线操作 break; default: break; ,5.7 其他接口电路设计及编程,5.7.1 定时器编程,让定时器0的 TOUT0引脚输出频率为16K,占空比为 30的 PWM 脉冲调制波形;定时约0.5秒后产生定时中断。,1. 定时器初始化 (1)

37、 I/O 口设置 采用以下语句对 PE 口的工作方式进行设置,使之工作在定时器输出状态: rPCONE=0xaaa8; /Tout0/1/2/3/4, RxD0, TxD0 rPUPE |=0xf8; (2) 定时器时钟源频率设置 通过以下语句来设置定时器的时钟源: rTCFG0=0x1010101; / 预分频值为 1 rTCFG1=0x01; / 分割比例=1/4 经过设置后,定时器时钟源频率 = (MCLK/1)/4,(3) 设置输出波形频率 通过以下语句来设置输出波形的频率: rTCNTB0=1000; 经过设置,输出 PWM 波形的频率为 MCLK/4000; 由于系统采用的 MCL

38、K64M,因此,PWM 波形频率为 16K。 (4) 设置占空比 通过以下语句来设置输出波形的占空比: rTCMPB0=300; 针对实验要求:300/100030,(5) 设置定时器控制寄存器、启动定时器 rTCON=0xaaaa0a; /自动重载模式,关闭反转功能,手动更 新,关闭死区 rTCON=0x999909; /启动 PWM 操作 定时器启动后,可以采用示波器观察 TOUT0输出波形,是否满足要求。,2. 定时器中断主程序 参考程序如下: volatile int variable0; void Test_TimerInt(void) rINTMSK=(BIT_GLOBAL|BIT

39、_TIMER0) pISR_TIMER0=(int)Timer0Done; /修改中断处理函数的指针 rTCFG0=0x00f; /dead zone=0, pre0=0xf /设定时钟源频率 rTCFG1=0x04; /all interrupt, mux0=1/32 rTCNTB0=0xffff; /(1/(64MHz/15/32)*0xffff=0.49s,rTCON=0x02; /手动更新 timer0 的设置 rTCON=0x01; /T0=one shot,启动定时器 while(variable0=0); /等待中断发生 rTCON=0x0; /停止定时器 rINTMSK=BIT

40、_GLOBAL; /关闭中断 ,3. 定时中断服务程序 void _irq Timer0Done(void) rI_ISPC=BIT_TIMER0; /清中断 pending 位 variable0+; /更新变量 ,5.7.2 实时日历时钟RTC,1. 电路 如图5-25为 32.768KHZ 晶振的电路连接示例:,2. 编程 (1) 实时时钟初始化 初始化示例程序如下: #define TESTYEAR 0x99 #define TESTMONTH 0x12 #define TESTDAY 0x31 #define TESTDATE 0x06 /星期五 #define TESTHOUR 0

41、x23 #define TESTMIN 0x59 #define TESTSEC 0x30,void Rtc_Init(void) rRTCCON = 0x01; /读写使能, 1/32768, Normal(merge), No reset rBCDYEAR = 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 = TE

42、STSEC; rRTCCON = 0x00; /读写禁止 以上程序对控制寄存器进行了设置,并更新了 RTC 日期时间寄存器,从此刻开始 RTC就从设置的日期时间开始如钟表一样自动运转。,(2) 显示当前时间 示例程序如下: void Display_Rtc(void) int year, int month,day,weekday,hour,min,sec; rRTCCON = 0x01; /使能读写, 1/32768, Normal(merge), No reset,if(rBCDYEAR = 0x99) year = 0x1999; else year = 0x2000 + rBCDYEA

43、R; month=rBCDMON; day=rBCDDAY; weekday=rBCDDATE; hour=rBCDHOUR; min=rBCDMIN; sec=rBCDSEC; /显示(向串口输出)时间 rRTCCON = 0x0; / 禁止读写 ,5.7.3 A/D转换器电路设计及编程,1. 电路 如图5-26所示.手动调节电位器上的旋钮,产生缓慢变化的模拟信号,改变输入 ADC 的模拟电压值。,2. 编程 (1) ADC 控制寄存器初始化 采用以下语句对 ADC 相关寄存器进行初始化: CLKCON=0x7ff8; /时钟控制寄存器,使能 MCLK 作为 ADC 的时钟源 rADCCON

44、=0x1|(02); /启动 A/D 转换 Delay(100); /等待一定的时间使 ADC 的参电压稳定下来 rADCPSR=0x20; /设置时钟预分频值,(2) 读取 A/D 转换数值子程序 参考以下程序: int ReadAdc(int ch) /参数:采样通道 int i; static int prevCh=-1; if(prevCh!=ch) rADCCON=0x0|(ch2); /设置采样通道 for(i=0;i150;i+); /等待最小 15uS ,rADCCON=0x1|(ch2); /启动 A/D 转换 while(rADCCON /返回转换结果 ,5.8 本章小结,

45、本章主要介绍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 的控制字是什么?每一位代表什么意义?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1