电子设计创新训练(提高)第四章 常用典型外设使用方法与编程技术_第1页
电子设计创新训练(提高)第四章 常用典型外设使用方法与编程技术_第2页
电子设计创新训练(提高)第四章 常用典型外设使用方法与编程技术_第3页
电子设计创新训练(提高)第四章 常用典型外设使用方法与编程技术_第4页
电子设计创新训练(提高)第四章 常用典型外设使用方法与编程技术_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章常用典型外设使用方法与编程技术,4-1常用键盘与显示器接口,单片机的应用越来越广泛,因此它的接口也是品种繁多,但是从类别上看,也不过是人机接口、模入模出和开入开出这么几类。在速度要求不是很高的情况下,从系统的简洁性考虑,目前MCU的系统中,串行接口的器件获得了越来越多的应用。串行器件的操作目前主要有三种接口标准:移位寄存器方式、SPI标准接口和I2C总线。本章将就一些常见的接口类型进行一些介绍,主要是讨论接口驱动编程。并口器件的驱动相对简单,而且几乎所有的接口类参考书中都有很详尽的介绍,因此本章不介绍标准并口器件的驱动,而是侧重于串行器件和简洁灵活的接口应用及编程介绍。,一、键盘接口驱动程序设计,图4-144扫描键盘电路,扫描式键盘是MCU系统中常用的输入设备,本小节的例子是使用51单片机的一个八位I/O口设计一组16键的小键盘。16键的小键盘比较常用,采用44方式,市场上甚至有很多成品的薄膜式16键盘组出售。见图4-1是本例的硬件原理图,采用51的P1口完成键盘硬件驱动。它的检测原理是:P1.4P1.7作为4行键盘的分时低电平驱动输出,P1.0P1.3作为4列键盘按键的输入检测。无键盘按下时,输入检测中P1.0P1.3获得的结果是高电平,而有按键输入时,扫描到相应按键所在行时,列输出将有低电平存在,根据输出和输入状态就可以确定是那个按键按下。,这里需要指出的是,在P1.0P1.3上分别加了10K的上拉电阻,使用目的是辅助上拉,保证无按键时输入高电平。尽管单片机的P1口有内部上拉,但很微弱,当键盘连接线很短时,可以不加上拉电阻,如果键盘连接线比较长,容易受到干扰,则需要使用这四只上拉电阻。下面是具体的驱动程序:,/键盘扫描函数,无键盘返回0,有则返回0 xf00 xff,低4位的0f表示键值号,高位标示有按键。key_scan_dat()unsignedchardataI,j,k;unsignedcharcodek_dat17=0 xe7,0 xd7,0 xb7,0 x77,0 xeb,0 xdb,0 xbb,0 x7b,0 xed,0 xdd,0 xbd,0 x7d,0 xee,0 xde,0 xbe,0 x7e,0 x00;/定义0F共16个键的行列扫描结果,制作键值时用,多定义了一个空白符用于非法按键判别P1=0 xff;/准备扫描,P1口全部输出高电平j=0 xf7;/准备扫描,下一个为P1.4,依次为P1.5、P1.6、P1.7k=0 x0f/预置输入状态为无键盘,准备输入while(j!=0 x70)/定义显示数据变量,为无符号整形unsignedchardatadiscount=0;/定义扫描显示状态变量,为03/T0中断函数,2ms间隔,每次扫描一位LED,4个扫描周期循环扫描4位LED。voidt0_int()interrupt1TH0=63536/256;/中断入口重新初始化计数器TL0=63536%256;switch(discount)/根据扫描状态计数器扫描4个LED中的1个case0:P1=(disdat/1000)/扫描十位,break;case3:P1=(disdat%1000)%100)%10),本例软件相当简洁,但该例有一些应用限制,首先是没有小数点显示,如果需要显示小数点,也只能在硬件上接固定位置的小数点,例如在图4-2中的LED3的小数点段上对+5V电源接一个150电阻就可以点亮十位上的小数点。其次是这个显示器没有考虑显示负数的问题,并且它的入口参数disdat的值不能超过9999。,(二)LED静态驱动方法及驱动程序在LED显示应用领域中,一般要求控制芯片使用简单、功能多样化、多级灰度调节、外围电路精简可靠、译码与功率驱动于一体。MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。MAX7219与SPI、QSPI以及MICROWIRE相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。整个设备包含一个150A的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。当使用多于8位LED时,只需将N片级联,便可轻松实现N8位LED显示。当N8时,应考虑到提高总线驱动能力。,图4-3MAX7219引脚,表4-1MAX7219引脚功能表,图4-4MAX7219内部结构原理图,图4-5MAX7219操作时序图,详细描述(一)MAX7219硬件特点(1):MAX7219的段驱动有上升速度限制,可以减少EMI;(2):MAX7219的串行口和SPI完全兼容。(二)串行地址格式对MAX7219来说,串行数据在DIN输入16位数据包,无论LOAD端处于何种状态,在时钟的上升沿数据均移入到内部16位移位寄存器。然后数据在LOAD/的上升沿被载入数据寄存器或控制寄存器。LOAD/端在第16个时钟的上升沿同时或之后,下个时钟上升沿之前变为高电平,否则数据将会丢失。在DIN端的数据传输到移位寄存器在16.5个时钟周期之后出现在DOUT端。数据位标记为D0-D15(如表4-2表示)。D8-D11为寄存器地址位。D0-D7为数据位。D12-D15为无效位。,表4-2MAX7219串行数据格式,表4-3数据寄存器与控制寄存器表,理论上,只使用3根I/O口即可进行多片MAX7219的级联,具体芯片数量只受片选与时钟端的总并联电容限制。采用级联的方法,可以驱动大量的LED。但是级联数量越大,驱动所需要的时间越长,因此在实际使用中,需要对驱动速度、驱动目标的数量及所使用的I/O口进行折中设计。下面的例子是扩展两片MAX7219,但不是采用级联的方法,而是仅二组显示器公用时钟和片选,数据输入采用独立输入端。这样,每扩展一个芯片需要增加一根I/O的开销,速度基本不降低。,图4-6MAX7219静态驱动原理图A,图4-7MAX7219静态驱动原理图B,/显示函数.二组显示器公用时钟和片选(锁存控制).第1,2组为MAX7219./显示函数1,对第1,2组显示器,仅输入一组信息,可以是命令或者数据.voiddisplay0(unsignedcharadd,unsignedchardat1,unsignedchardat2)unsignedchardatai;sclk=0;cs=0;for(i=0;i8;i+)din1=(addi),cs=1;din1=1;din2=1;sclk=1;/显示系统初始化函数voiddisplay_init()display0(0 x0f,0 x00,0 x00);/7219进入工作模式display0(0 x0c,0 xff,0 xff);/上电工作状态display0(0 x0b,0 x07,0 x07);/允许8个LED全部工作display0(0 x0a,0 x05,0 x05);/设定扫描电流占空比display0(0 x09,0 x00,0 x00);/工作在非译码状态/显示函数2,将全部显示器刷新.循环调用显示函数1.默认使用显示缓冲区displaybuf1,2/数组.实际上调用8次.调用前,显示缓冲区已经送好段码(芯片采用非七段译码).voiddisplay()unsignedchardatai;for(i=0;i8;i+)display0(i+1,displaybuf1i,displaybuf2i);,4-2MCU常用外围串行接口器件驱动程序设计,IMP705/706/707/708和IMP813L等CMOS监控电路能监控电源及电池电压和P/C的工作状况。当电源电压降至4.65V以下(IMP705/707/813L)或4.40V以下(IMP706/708)时,即产生复位。该系列产品能提供多种功能。每个器件在上电、掉电期间及在电压降低的情况下可产生一个复位信号。此外,IMP705/706/813L带有一个1.6秒的看门狗定时器。IMP707/708虽然无看门狗功能,但是同时具有高电平有效和低电平有效的复位输出,IMP813L的引脚和功能与IMP705相同但只具有高电平有效的复位输出。具有1.25V门限的电源故障报警电路可用于检测电池电压和非5V的电源。所有器件都具有手动复位(MR)输入。看门狗定时器的输出如果连接至MR将会触发复位信号。所有器件都具有8脚DIP、SO和MicroSO封装。,一、MCU系统监控芯片IMP705/706/707/708和IMP813L,系列芯片特点:l可替换Maxim公司的MAX705/6/7/8及MAX813Ll精确的电源监控4.65V门限(IMP705/707/813L)4.40V门限(IMP706/708)l去抖动的手动复位输入l电压监控1.25V门限电池监控/辅助电源监控l看门狗定时器(IMP705/706/813L)l200ms复位脉冲宽度l高电平有效的复位输出(IMP707/708/813L),图4-8监控芯片内部工作原理图,二、EEPROM存储器芯片93C46/56/66,AT93C46/56/66是ATMEL公司推出的低功耗、低电压电可擦除的可编程只读存储器。它采用CMOS技术和FairchildSemiconductor公司的Mi-croWire工业标准线串行接口,具有1KB/2KB/4KB的容量,并可通过ORG管脚配置成1288/2568/5128或6416/12816/25616等结构。该系列存储器可靠性高,能够重复写100万次,数据可以保存100年不丢失;采用8脚PDIP/SOIC封装和14脚SOI封装(SOI封装为JEDEC和EIAJ标准),与并行的EEPROM相比,AT93C46/56/66可大大节省印制板空间,且接线简单,因而在多功能的精密测试仪器中具有广阔的前途。,图4-9AT93C46/56/66引脚排列,表4-493C46引脚功能表,硬件特点:1、低的操作电压和保持电压(1)2.7V版本(2.7Vto5.5V);(2)1.8V版本(1.8Vto5.5V);2、接口3线串行;3、操作速度2MHz时钟;4、写入时间10ms最大;5、数据保存时间100年;6、封装形式8-leadPDIP;8-leadJEDECandEIAJSOIC;8-leadTSSOP;,图4-10AT93C46/56/66内部结构图,表4-593C46操作指令表,各指令的具体含义如下:1)擦写允许指令(EWEN)由于在上电复位后AT93C46/56/66首先将处于擦写不允许状态,故该指令必须在所有编程模式前执行,一旦该指令执行后,只要外部没有断电就可以对芯片进行编程。2)地址擦指令(ERASE)该指令用于强迫指定地址中所有数据位都为“1”。一旦信息在DI端上被译码,就需使CS信号保持至少250ns的低电平,然后将CS置为高电平,这时,DO端就会指示“忙”标志。DO为“”,表示编程正在进行;DO为“”,表示该指定地址的寄存器单元已擦完,可以执行下一条指令。3)地址写指令(WRITE)写指令时,先写地址,然后将16位或位的数据写入到指定地址中。当DI端输出最后一个数据位后,在CLK时钟的下一个上升沿以前,CS必须为低,且需至少保持250ns,然后将CS置为高电平。需要说明的是:写周期时,每写一个字节需耗时4ms。4)地址读指令(READ)读指令用于从指定的单元中把数据从高位到低位输出至DO端,但逻辑“0”位先于数据位输出。读指令在CLK的上升沿触发,且需经过一段时间方可稳定。为防止出错,建议在读指令结束后,再输出23个CLK脉冲。5)芯片擦指令(ERAL)该指令可将整个存贮器阵列置为1,其它功能与地址擦指令相同。6)芯片写指令(WRAL)该指令可将命令中指定的数据写入整个存贮器阵列,其它功能与地址写指令相同。该指令周期所花费时间的最大值为30ms。7)擦写禁止指令(EWDS)使用该指令可对写入的数据进行保护,操作步骤与擦写允许指令相同。,图4-1193C46读时序,图4-1293C46写时序,/*写入命令驱动函数,说明:通用前置输入,例如用于EWEN(30H),EWDS(00H)等命令,也可以用于通用读写的前*/*置地址及命令输入,调用后需要拉低CS*/voideeprom_com(command)unsignedcharcommand;unsignedchardatai;eeprom_clk=0;eeprom_cs=1;eeprom_di=1;/*首先写入1位1*/eeprom_clk=1;eeprom_clk=0;bb=command;/*bb为全局bdata型unsignedchar变量*/i=8;while(i!=0)eeprom_di=bb_7;/*对bb字节最高位进行位寻址*/eeprom_clk=1;eeprom_clk=0;bb=bb8;/*bb1是准备写入的字节,先送高8位.*/i=8;while(i!=0)bb=bb1;/*bb是输出的数据.*/eeprom_di=bb1_7;eeprom_clk=1;bb1=bb11;bb_0=eeprom_do;eeprom_clk=0;i-;,x=bb;x=x8;bb1=word;i=8;while(i!=0)bb=bb1;eeprom_di=bb1_7;eeprom_clk=1;bb1=bb11;bb_0=eeprom_do;eeprom_clk=0;i-;y=bb;x=x+y;eeprom_cs=0;dealy(15);/*延时15MS以上,防止写未结束*/eeprom_com(0 x00);/*写禁止*/eeprom_cs=0;eeprom_clk=1;eeprom_di=1;return(x);,三、X5045芯片应用(一)器件功能内含EEPROM的MCU(微处理器)监控芯片X5045将四项功能合于一体:上电复位控制、看门狗定时器、降压管理以及具有块保护功能的串行4KBitEEPROM(5128Bit)。它有助于简化应用系统的设计,减少印刷线路板的占用面积,提高可靠性。,图4-13X5045的引脚排列,上电及掉电检测为CPU提供可靠的电源波动保护;三种可选的看门狗溢出时间能够适应不同反应速度的系统,一旦设定,掉电后依然有效。,(二)操作过程1)上电复位当器件通电并超过VTRIP时,X5045内部的复位电路将会提供一个约为200mS的复位脉冲,让微处理器能够正常复位。2)降压检测工作过程中,X5045检测VCC端的电压下降,并且在VCC电压跌落到VTRIP以下时产生一个复位脉冲,这个复位脉冲一直有效,直到VCC降到1V以下在此过程中保证MCU处于复位状态,避免出现不可预知的错误操作。如果VCC在降落到VTRIP后上升,则在VCC超过VTRIP后延时约200ms,复位信号消失,使得微处理器可以继续工作。3)看门狗定时器看门狗定时器电路监测WDI的输入来判断微处理器是否正常工作,在设定的定时时间以内微处理器必须在WDI引脚上产生一个由高至低的电平变化,否则X5045将产生一个复位信号。可通过状态寄存器的控制位WD1、WD0设置看门狗定时器的溢出时间。4)SPI串行编程EEPROM该芯片内的串行EEPROM是具有Xicor公司的块锁保护CMOS串行4KBitEEPROM(5128Bit),其擦写周期至少有1000000次,并且写好的数据能够保存100年。芯片控制的指令被组织成一个字节(8bit),它由一个由四线构成的SPI总线方式进行操作。,表4-6X5045引脚功能表,图4-14X5045与8051连接图,(三)X25045与单片机接口应用MCU(微处理器)监控芯片X5045同AT89C51单片机接口的硬件电路连接方法如图4-14所示。因X5045的RESET端为开漏输出,需通过10K的上拉电阻与AT89C51的RST端相连,以确保微处理器能够正常复位。X25045的WP端通常可接高电平(VCC),为确保系统无误操作,可将WP端与MCU的某一I/O口(如图中P1.4)相连,仅在向X5045进行写操作时将WP端置“1”,否则均将WP置“0”。另外因对X5045的读、写操作不是同时进行的,因此X5045的SI、SO端可公用MCU的一个I/O口(如SI、SO均与P1.2相连接),这样可节省MCU的一个I/O口。由于AT89C51的P1口为准双向口,因此,为了防止数据错位,在向其P1口写数据时,必须先将P1口置“1”。,/x5045子程序:/在实际硬件设计中可以将ep_wip脚接高电平,可以将输入与输/出共用I/O/向5045中写入数据函数voidxinput(unsignedcharv)unsignedchardatav1;for(v1=0;v18;v1+)ep_sck=0;/拉低时钟ep_si=v/输入置1,当输入与输出公用I/O时为输入做准备.,/数据的读出函数/辅助函数:从x5045输入一个字节8位数据,首先输出高位.unsignedcharxout()unsignedchardatav1,x,y;ep_sck=0;/拉低时钟for(v1=0;v18;v1+)ep_sck=1;/拉高时钟x=x1;/输出字节先左移y=ep_so;/获得一位输出x=x|y;/组装输出结果ep_sck=0;returnx;,/辅助函数:写结束测试voidwip_poll()unsignedchardatav;doep_cs=1;ep_cs=0;xinput(0 x05);/准备读状态寄存器v=xout();ep_cs=1;v=v/测试寄存器低位,为零则写结束,/辅助函数:打开写开关,所有写操作前必须运行本程序,命令字为06Hvoidwren()/ep_wip=1;/打开硬件写开关ep_cs=1;ep_cs=0;xinput(0 x06);/发出打开开关命令ep_cs=1;/辅助函数:关闭写开关,所有写操作后必须运行本程序,以防止误写,命令字为04Hvoidwrdi()ep_cs=1;ep_cs=0;xinput(0 x04);ep_cs=1;/ep_wip=0;/关闭硬件写控制I/O,/说明:写状态寄存器,包含WREN_CMD命令./功能:改变块锁定控制位BL1,BL0(D3,D2)及看门狗超时控制/位WD1,WD0(D5,D4)./状态寄存器位状态寄存器位看门狗超时周期/被锁定的地址/BL1BL0WD1WD0(典型值)/00无001.4秒/01180H-1FFH01600毫秒/10100H-1FFH10200毫秒/11000H-1FFH11禁止/,/辅助函数:写状态寄存器,包含WREN_CMD命令./功能:改变块锁定控制位BL1,BL0(D3,D2)及看门狗超时控制位WD1,WD0(D5,D4)voidwrsr(unsignedcharxxxx)wren();/打开写开关ep_cs=1;ep_cs=0;xinput(0 x01);/送入命令xinput(xxxx);ep_cs=1;wip_poll();/测试写结束wrdi();/关闭写开关/辅助函数:读状态寄存器unsignedcharrdsr()unsignedchardatax;ep_cs=1;ep_cs=0;xinput(0 x05);x=xout();ep_cs=1;returnx;,/单字节写子程序,使用中调用wren().如果使用了块锁定,还需要先写状态寄存器/解除锁定./函数带有形参wrdat和wradd,前者为写入的字符型数据,后者为整形地址.voidbyte_write(unsignedcharwrdat,unsignedintwradd)unsignedchardatax;wren();ep_cs=1;ep_cs=0;if(wradd256)/据输入地址决定写前256地址块或者后256块xinput(0 x02);/02表示使用低256区块elsexinput(0 x0a);/0a表示使用高256区块x=wradd%256;/高位地址已经输入,此处只需要输入低8位地址xinput(x);xinput(wrdat);ep_cs=1;wip_poll();wrdi();,/单字节读子程序,本函数返回字符型结果unsignedcharbyte_read(unsignedintrdadd)unsignedchardatax;ep_cs=1;ep_cs=0;if(rdadd8;/写入高字节xinput(x);x=wrdat1%256;/写入低字节xinput(x);ep_cs=1;wip_poll();wrdi();,/双字节读子程序,本函数返回整形结果unsignedintword_read(unsignedintrdadd1)unsignedchardatax;unsignedintdatarddat1;ep_cs=1;ep_cs=0;if(rdadd1256)xinput(0 x03);elsexinput(0 x0b);rddat1=rdadd1%256;xinput(rddat1);x=xout();rddat1=256*x;x=xout();rddat1=rddat1+x;ep_cs=1;return(rddat1);,/看门狗清除函数voidrst_wdog()/如果开启了看门狗使用本函数定时清除它的计数器EA=0;ep_cs=0;/在X5045的片选上制造一个脉冲ep_cs=1;EA=1;/打开块锁定(整个块)voidblock_open()unsignedchardatai;i=rdsr();/打开块锁定i=i,四、A/D及系统监控芯片应用举例阶段总结应用举例,以TLC549与X5045在智能充电器中的应用举例。充电器性能设计要求:1、用于对12V,6AH的镍镉蓄电池组进行充电,1014小时内充满。2、要求尽量为恒流充电,并且充电电流应该逐渐减小。3、具有充电过程指示。4、自动判断充电结束点,并自动停止充电。5、能够对未充分放电的电池自动进行先放电后充电处理。6、整个充电器要求重量轻、坚固,方便外出作业携带。根据要求,分析并设计如下充电电路及控制系统电路方案。,设计方案分析:1、根据要求的35条,完成这样的任务采用MCU作为控制核心来设计系统较合适。任务工作量比较少,宜采用精简的MCU,这里采用ATMEL公司的AT89C2051

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论