1第六章常用的接口芯片及其应用6.1I/O接口概述6.2简单接口6.3总线控制器8288及总线裁决器82896.4可编程并行接口82556.5可编程定时器6.6键盘显示接口6.7中断控制接口6.8可编程串行接口82516.9A/D及D/A变换器接口6.10DMA控制器8237沈阳航空工业学院26.6.1键盘及其接口键盘是微机系统的标准输入设备编码键盘:按键时自动产生编码输出,比如PC键盘在,按键与释放会自动向CPU送出16位的编码。非编码键盘:按键时不会自动产生编码输出,需要CPU主动去检查识别,在构成较为简单的嵌入式系统应用,以实现较为简单的数据输入,其结构可分为:简单按键——每个按键连接1根I/O线矩阵式键盘——多根行及列I/O线构成矩阵,按键跨接在交叉点上。沈阳航空工业学院3第1段:是否有键按下key1:moval,00movdx,rowport;rowport为连接行线的端口地址outdx,al;使所有行线为低电平movdx,colport;colport为连接列线的端口地址inal,dx;读取列值cmpal,0ffh;判断列线是否读到全1jzkey1;是,无闭合键,循环等待calldelay;否,延迟20ms清除抖动键盘扫描程序沈阳航空工业学院4第2段:识别按键(扫描)movcx,8;扫描行数送CXmovah,0feh;第一行扫描初值送AHkey2:moval,ahmovdx,rowportoutdx,al;输出行码(扫描码)movdx,colportinal,dx;读到列码键盘扫描程序沈阳航空工业学院5第2段:识别按键(判断)cmpal,0ffh;判断列线是否全1jnzkey3;否,有按键,转下一步处理rolah,1;是,无按键,扫描码移位loopkey2;拟扫下一行jmpkey1;所有行都没有键按下,返回粗扫key3:……;此时,al=列码,ah=行码键盘扫描程序沈阳航空工业学院62.行列反转法识别矩阵式键盘第一步,先将行线设为输出、列线设为检测输入CPU通过输出端口将行线(控制线)全部设置为低电平,然后从输入端口读取列线(检测线),若列码读到全1说明无键按下,否则有键按下,转第二步。第二步,将行线和列线作用反转,即列线设为输出,行线设为检测输入。将前一步读到的列码从列线端口输出,并读取行线的输入码(行码)当一个键被按下时,必然涉及一对特定的行码和列码,以此组成按键特定的识别码,通过查表环节可获得按键键值。条件:连接行线和列线的接口电路必须能动态地改变行线和列线的输入/输出方式沈阳航空工业学院7第1段:是否有键按下……;设置行线接输出端口,列线接输入端口key2:moval,00movdx,rowportoutdx,al;设置行线输出全0movdx,colportinal,dx;读取列码cmpal,0ffh;判是否全1jzkey2;是,无键闭合,循环等待pushax;否,有闭合键,保存列码pushax键盘扫描程序沈阳航空工业学院8第2段:识别按键(反转法)……;重新设置行线接输入口,列线接输出口movdx,colportpopaxoutdx,al;输出前面保存的列码movdx,rowportinal,dx;读取行码popbx;将行码、列码组合movah,bl;此时,al=行值,ah=列值键盘扫描程序沈阳航空工业学院9行列值表和键代码表;按键的识别码表tabledw0fefeh;键0的识别码(16位)dw0fdfeh;键1的识别码dw0fbfeh;键2的识别码……;其他键的识别码;按键键值表chardb0;键0的键值db1;键1的键值db2;键2的键值……;其他键的键值键盘扫描程序沈阳航空工业学院10第3段:查找键代码movsi,offsettable;识别码表首址movdi,offsetchar;键值表表首址movcx,64;CX=键的总数key3:cmpax,[si];ax与表中识别码相比较jzkey4;相同,说明找到,跳到key4incsi;不同,继续比较incsiincdiloopkey3jmpkey1;全部比较完,都不同,;说明是串键键盘扫描程序沈阳航空工业学院11第4段:等待按键释放key4:moval,[di];获取键代码送AL……;判断按键是否释放,没有则等待calldelay;按键释放,延时消除抖动……;后续处理键盘扫描程序沈阳航空工业学院123.按键抖动和串键问题机械按键按键和释放时存在按键抖动现象当键按下或释放时,因接触电阻的变化对数字电路来说会导致输入的不确定性。抖动的持续时间通常不大于10ms。可采用硬件消抖电路或软件延时的方法来去抖。串键指两个或多个键同时闭合出现串键时,读取的码值中必然出现一个以上的0用户决定是否给予识别处理。沈阳航空工业学院13串键处理认为是无效的按键——不予识别认为是有效的组合键——加以识别只承认先识别出来的键连锁法:直到所有键都释放后,读入下一个键巡回法:等被识别的键释放以后,就可以对其他闭合键作识别,而不必等待全部键释放沈阳航空工业学院1410.4LED数码管及其接口发光二极管LED是最简单的显示设备由8段LED组成的LED数码管LED数码管广泛用于单板微型机、微型机控制系统及数字化仪器中LED数码管可以显示内存地址和数据等沈阳航空工业学院15LED数码管的结构共阳极共阳极+5Vabcdefgh共阴极abcdefgh共阴极沈阳航空工业学院162.单个LED数码管的显示8255APA0PA1PA2PA3PA4PA5PA6PA7同相驱动电路abcdefghcom+5V对一般数字电路而言,其灌电流(输出低电平)的能力要大于拉电流(输出高电平)的能力共阳数码管送0点亮送0点亮沈阳航空工业学院17单个数码管的显示LEDtbdb0c0h,0f9h,0a4h;共阳七段码表db……moval,1;要显示的数码在表中的位置movbx,offsetLEDtb;bx指向七段码表xlat;通过换码取要显示的七段码;al←ds:[bx+al]movdx,portoutdx,al;输出七段码软件译码沈阳航空工业学院183.多个LED数码管的显示以动态扫描显示8个数码管为例硬件——使用两个8位的输出端口,其中:锁存输出七段码的端口,通过公用的段驱动电路来驱动多个数码管各段锁存输出位选通码的端口,每次只点亮一个数码管软件——用轮流点亮(扫描)的方法实现多位数码显示,扫描频率应控制在16次/秒以上,当扫描频率达50次/秒时,显示将无闪烁感。沈阳航空工业学院19段控制端口作用控制哪些段点亮,决定具体显示什么数码段控制端口送出七段码到数码管段控制端此端口为8个数码管的共用端口段控制:Di=0,相应段点亮D7D6D5D4D3D2D1D0hgfedcba通过位、段控制端口的共同作用才能确定哪个数码管显示什么数码沈阳航空工业学院20位控制端口作用位控制端口控制点亮哪位数码管(其余数码管暂不点亮)当位控制端口的控制码某位为0时,经反相驱动,便在相应数码管的公共阳极上加了高电平,该数码管将点亮并显示数据位控制:Di=0,相应数位的数码管可以发光D7D6D5D4D3D2D1D0位7位6位5位4位3位2位1位0沈阳航空工业学院21数码缓冲区;数据段LEDdtdb8dup(0);显示缓冲区,存放要显示;数码在七段码表中的序号;主程序movsi,offsetLEDdt;si指向显示缓冲区首址callLEDdisp;调用显示子程序沈阳航空工业学院22获取显示代码LEDdispprocpushaxpushbxpushdxmovbx,offsetLEDtbmovah,0feh;从最左边数码管开始LED1:lodsb;取显示数据xlat;换码得到要显示的七段码;AL←CS:[BX+AL]沈阳航空工业学院23数码显示movdx,segport;segport为段控制端口outdx,al;送出七段码moval,ah;取出位显示代码movdx,bitport;bitport为位控制端口outdx,al;送出位选通码calldelay;实现数码管延时显示沈阳航空工业学院24显示下位数码rolah,1;选通码移位,指向下个数码管cmpah,0feh;选通码又回最左边的数码管?jnzLED1;否,显示下一个数字popdx;是,显示完一轮,退出popbxpopaxretLEDtbdb0c0h,0f9h;共阳七段码表db……LEDdispendp沈阳航空工业学院25软件延时timer=10;延时常量delayprocpushbxpushcxmovbx,timer;外循环:timer确定的次数delay1:xorcx,cxdelay2:loopdelay2;内循环:216次循环沈阳航空工业学院26软件延时decbxjnzdelay1popcxpopbxretdelayendp通过控制重复频率和延时时间就可以得到各种显示效果沈阳航空工业学院27三、编码键盘(Intel8279)可编程键盘显示接口芯片Intel8279键盘控制管理单片机Intel8042沈阳航空工业学院281、8279的引脚信号8279为40引脚双列直插DIP芯片,除常规信号外,几个主要信号说明如下:(1)RESET:高电平有效的复位信号。复位状态:双键锁定:为两键同时按下提供保护,在去抖动周期如果有两键同时按下,则只有剩下的一键在保持按下位置时才能被确认。N键轮回:为N键同时按下提供保护,如果有多键同时按下,则键盘扫描能根据发现的顺序,依次将它们的状态送入FIFORAM。8/16个字符显示,左入口编码扫描键盘,双键锁定程序时钟编程值设定为31沈阳航空工业学院29CSA0:片选、端口地址选择信号。IRQ高电平有效的中断请求输出线键盘工作方式时,FIFORAM有键盘数据时有效,CPU读出后复位。CLK为8279提供内部定时的时钟输入线。8279内部定时时钟为100KHZ,根据时钟输入不同需写入不同的分频命令。SL0~SL3输出的用于键盘及显示的扫描线,可以编程设定为编码输出(16取1)或译码输出(4取1)RL0~RL7回复线,为键盘或传感器矩阵列信号输入线。SHIFTCONL上档、控制功能键状态输入。OUTA0~3OUTB0~3二组显示输出线,控制LED显示值。沈阳航空工业学院30FIFO/传感器RAM状态寄存器I/O控制数据缓冲器RDWRCSA0IRQ键盘反弹与控制回复8*8FIFO传感器RAM控制与定时寄存器16*8显示RAM显示地址寄存器定时与控制扫描计数器显示寄存器CNTL/STBSHIFTRL0~3SL0~3BDOUTA0~3OUTB0~3DB0~7CLKRESET沈阳航空工业学院31BD消隐控制输出线,通过硬件使7段LED显示熄灭。2、8279的组成和基本工作原理8279有三种键盘数据读入方法(1)一般扫描键(译码扫描,编码扫描)采用8*8矩阵,SL0~2提供扫描,当扫描矩阵中任何一个键按下时,即将按键位置信息存入键盘RAM中,IRQ置位申请中断。CPU可通过中断处理读入键盘RAM,取得键盘数据。CNTLSHIFTSCANRETURN沈阳航空工业学院32(2)传感器矩阵键盘矩阵种按键作为开关量传感器接点信号输入,矩阵中任一传感器的状态发生变化置IRQ有效,CPU写入地址后读出键盘RAM的值。RL7RL6RL5RL4RL3RL2RL1RL0(3)选通方式数据格式与传感器方式相同,但必须在STB输入正选通脉冲时方能将传感器开关状态锁存入键盘RAM。显示数据格式A3A2A1A0B3B2B1B0dcbadpgfe沈阳航空工业学院333、8279的控制命令(1)键入与显示方式设定000DDKKKDD=008字符显示左入口DD=0116字符显示左入口DD=108字符显示右入口DD=0016字符显示右入口KKK=000编码扫描键盘,双键锁定KKK=001译码扫描键盘,双键锁定KKK=010编码扫描键盘,N键轮回KKK=011译码扫描键盘,N键轮回沈阳航空工业学院34KKK=100编码扫描传感器矩阵