




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
接口与系统扩展 2 本讲重点 键盘接口 键盘种类 矩阵键盘的行扫描与线反转法的电路 原理与编程 D A转换接口 DAC0832 A D转换接口 ADC0809 键盘接口 键盘单片机系统中完成控制参数输入及修改的基本输入设备 是人工干预系统的重要手段 单片机与计算机在键盘规模 键符设置等方面差别很大 键盘分类 按键值编码方式分 硬件 编码键盘与非 硬件 编码键盘 按键组连接方式分独立连接键盘与矩阵连接键盘 编码键盘 采用专用的编码 译码器件 被按下的键由该器件译码输出相应的键码 键值 特点 增加了硬件开销 编码因选用器件而异 编码固定 但编程简单 适用于规模大的键盘 非编码键盘 单片机系统多采用此类键盘采用软件编 译码的方式 通过扫描 对每个被按下的键判别输出相应的键码 键值 特点 不增加硬件开销 编码灵活 适用于小规模的键盘 特别是单片机系统 但编程较复杂 占CPU时间 还须软件 消颤 按键值编码方式 编码键盘与非编码键盘 按键组连接方式 独立连接键盘与矩阵连接键盘 独立连接键盘 每键相互独立 各自与一条I O线相连 CPU可直接读取该I O线的高 低电平状态 特点 占I O口线多 但判键速度快 多用于设置控制键 功能键 适用于键数少的场合 矩阵连接键盘 键按矩阵排列 各键处于矩阵行 列的结点处 CPU通过对连在行 列 的I O线送已知电平的信号 然后读取列 行 线的状态信息 逐线扫描 得出键码 特点 键多时占用I O口线少 但判键速度慢 多用于设置数字键 适用于键数多的场合 独立连接式键盘例1 特点 此子程序需不断 或定时 调用 否则可能漏判 4个键的优先级由指令顺序决定 P1 0P1 1P1 2P1 3 KEY JNBP1 0 FUNC1 逐键判别JNBP1 1 FUNC2JNBP1 2 FUNC3JNBP1 3 FUNC4RET 无任何键按下由此返回FUNC1 做P1 0要求的 功能1 RETFUNC2 做P1 1要求的 功能2 RETFUNC3 做P1 2要求的 功能3 RETFUNC4 做P1 3要求的 功能4 RET AT89C51 独立连接式键盘例2 特点 此子程序采用中断查询不会漏判 省时 键的优先级由指令顺序决定 为防止一次按键多次中断 在功能子程序里应安排 关 开中断指令 并 延时 P1 0P1 1P1 2P1 3 ORG0003HLJMPKEY KEY JNBP1 0 FUNC1 逐键判别JNBP1 1 FUNC2JNBP1 2 FUNC3JNBP1 3 FUNC4RETI 无任何键按下由此返回FUNC1 做P1 0要求的 功能1 RETIFUNC2 做P1 1要求的 功能2 RETIFUNC3 做P1 2要求的 功能3 RETIFUNC4 做P1 3要求的 功能4 RETI INT0 上拉 AT89C51 矩阵式键盘线反转法 AT89C51 P1 0P1 1P1 2P1 3P1 4P1 5P1 6P1 7 5v 0行 1行 2行 3行 0列 1列 2列 3列 原理 由行线输出全 0 读入列线 判有无键按下 若有键按下 再将读入的列线值由列线输出 读进行线的值 第一步读进的列线值与第二步读进的行线值相加 从而得到代表此键的唯一的特征值 线反转法因输入与输出线反过来用而得名 优点是判键速度快 两次即可 矩阵式键盘线反转法图例 AT89C51 P1 0P1 1P1 2P1 3P1 4P1 5P1 6P1 7 5v MOVP1 0F0H 低位送全 0 MOVA P1 读进P1口电平ANLA 0F0H 保留高4位CJNEA 0F0H MK3 若有键按下则P1 4 P1 7必有 0 位 跳转到MK3去处理 若无键按下则退出键扫描 0行 1行 2行 3行 0列 1列 2列 3列 设 第3行 第1列结点有键按下首先 11110000 P1然后读P1 P1 1101xxxx 只留高4位 A 11010000 因为有键按下 A 11110000 AT89C51 P1 0P1 1P1 2P1 3P1 4P1 5P1 6P1 7 5v MOVP1 0F0H 低位送全 0 MOVA P1 读进P1口电平ANLA 0F0H 保留高4位CJNEA 0F0H MK3 0行 1行 2行 3行 0列 1列 2列 3列 此时 R2 11010000 然后 A 11011111 返送P1口 11011111 P1再读P1口 P1 xxxx0111 只留低4位 A 00000111 特征值 A R2 11010111 MOVR2 A 暂存回R2ORLA 0FH 高4位保留 低4位充 1 MOVP1 A 新值返送P1口MOVA P1 再读进P1口电平ANLA 0FH 只留低4位ADDA R2 得到键特征值 矩阵式键盘线反转法图例 矩阵式键盘 AT89C51 8255 P0 ALE CE RESET AD0 7 EA RESET RD WR WR RD PA7PA6PA5PA4PA3PA2PA1PA0 PC0PC1PC2PC3 P2 7 ALE 5v 5v 行线 列线 0行 7行 0列 3列 0481216202428 1591317212529 26101418222630 37111519232631 8255控制寄存器 7003H8255A口地址 7000H8255C口地址 7002HA口为输出C口为输入口 0行1行2行3行4行5行6行7行 行线 PA0 PA7 列线PC0 3 0列 3列 0481216202428 1591317212529 26101418222630 37111519232631 1列 2列 0行1行2行3行4行5行6行7行 0列1列2列3列 0123 4567 891011 12131415 16171819 20212223 24252627 28293031 列线PC0 3 行线PA0 PA7 左右两图是一样的习惯说 横行竖列 矩阵式键盘名词注释 0行1行2行3行4行5行6行7行 行线 PA0 PA7 列线PC0 3 0列 3列 0481216202428 1591317212529 26101418222630 37111519232631 矩阵式键盘工作原理 先由行线送出数据 送全 0 或每次只送一位 0 然后读进列线 判有无键按下或按键的位置并算出键值 顺序扫描 1列 2列 行号 第0行 第7行 R3 0 1 2 3 4 5 6 7 行首值 R3 X4 R5 0 4 8 12 16 20 24 28 列值 C口低4位读进值 R4 0F 0E 0D 0B 07 0F 表示此行无键按下 0E 07 表示此行的0 3列有键按下 键值 查得最后结果 R5等于已知按键所在的行首值 再加上所在列的序号 同一行中 键值等于行首值连续依次加1 KEY1 LCALLKS1 查有无键闭合JNZLK1 有键闭合转消颤LJMPLK8 无键闭合则退出LK1 LCALLDL6ms 消颤12msLCALLDL6msLCALLKS1 再查有无键闭合JNZLK2 的确有 转处理LJMPLK8 确实无 退出去 查有无键闭合的子程序KS1 KS1 MOVDPTR 7000H 指向A口MOVA 00H 8条行线都送0MOVX DPTR A 送到行线上去INCDPTRINCDPTR 指向C口MOVXA DPTR 读列线的电平ANLA 0FH 保留C口低4位若确有键按下 则Acc中必有 0 ORLA 0F0H 将Acc高4位赋1CPLA Acc取反后 高4位 0 若有键按下 则低4位中必有 1 RET检查的结果 出口 若 A 0 则有键按下 若 A 0 则无键按下 行线 列线 0列 3列 1列 2列 0行1行2行3行4行5行6行7行 0481216202428 1591317212529 26101418222630 37111519232631 KEY1 LCALLKS1 查有无键闭合JNZLK1 有键闭合转消颤LJMPLK8 无键闭合则退出LK1 LCALLDL6ms 消颤12msLCALLDL6msLCALLKS1 再查有无键闭合JNZLK2 的确有 转处理LJMPLK8 确实无 退出去 LK2 MOVR3 00H R3 行号初值MOVR2 0FEH R2 行扫描初值LK3 MOVDPTR 7000H 指向8255A口MOVA R2 取行扫描值MOVX DPTR A 送到行线上去INCDPTRINCDPTR 指向8255C口MOVXA DPTR 读列线的电平ANLA 0FH 保留C口低4位MOVR4 A 列值暂存进R4CJNEA 0FH LK4 列值 全 1 表明此次送0的行有键按下 转LK4处理 若 全1 表明此次送0的行无键按下 行号 第0行 第7行 R3 0 1 2 3 4 5 6 7 行扫描值 0FEH R2 FE FD FB F7 EF DF BF 7F FEH 11111110B 首次扫描 FDH 11111101B 2次扫描 FBH 11111011B 3次扫描 F7H 11110111B 4次扫描 EFH 11101111B 5次扫描 DFH 11011111B 6次扫描 BFH 10111111B 7次扫描 7FH 01111111B 8次扫描 列值 0F 0E 0D 0B 07 从C口低4位读进 R4 0F 表示此行无键按下 0E 07 此行的0 3列有键按下 KEY1 LCALLKS1 查有无键闭合JNZLK1 有键闭合转消颤LJMPLK8 无键闭合则退出LK1 LCALLDL6ms 消颤12msLCALLDL6msLCALLKS1 再查有无键闭合JNZLK2 的确有 转处理LJMPLK8 确实无 退出去LK2 MOVR3 00H R3 行号初值MOVR2 0FEH R2 行扫描初值LK3 MOVDPTR 7000H 指向8255A口MOVA R2 取行扫描值MOVX DPTR A 送到行线上去INCDPTRINCDPTR 指向8255C口MOVXA DPTR 读列线的电平ANLA 0FH 保留C口低4位MOVR4 A 列值暂存进R4CJNEA 0FH LK4 列值 全 1 表明此次送0的行有键按下 转LK4处理 若 全1 表明此次送0的行无键按下 MOVA R2 取出此次行扫描值JNBACC 7 LK8 若已扫过最后一行就退出扫描 否则扫下一行 RLA Acc中的 0 左移一位MOVR2 A 新扫描值仍存进R2INCR3 行号加1指向下一行SJMPLK3 转LK3去扫描下一行 行号 第0行 第7行 R3 0 1 2 3 4 5 6 7 行扫描值 0FEH R2 FE FD FB F7 EF DF BF 7F FEH 11111110B 首次扫描 BFH 10111111B 7次扫描 7FH 01111111B 8次扫描 注意 只有第8次扫描值最高位 0 KEY1 LCALLKS1 查有无键闭合JNZLK1 有键闭合转消颤LJMPLK8 无键闭合则退出LK1 LCALLDL6ms 消颤12msLCALLDL6msLCALLKS1 再查有无键闭合JNZLK2 的确有 转处理LJMPLK8 确实无 退出去LK2 MOVR3 00H R3 行号初值MOVR2 0FEH R2 行扫描初值LK3 MOVDPTR 0101H 指向8155A口MOVA R2 取行扫描值MOVX DPTR A 送到行线上去INCDPTRINCDPTR 指向8155C口MOVXA DPTR 读列线的电平ANLA 0FH 保留C口低4位MOVR4 A 列值暂存进R4CJNEA 0FH LK4 列值 全 1 表明此次送0的行有键按下 转LK4处理 若 全1 表明此次送0的行无键按下 MOVA R2 取出此次行扫描值JNBACC 7 LK8 若已扫过最后一行就退出扫描 否则扫下一行 RLA Acc中的 0 左移一位MOVR2 A 新扫描值仍存进R2INCR3 行号加1指向下一行SJMPLK3 转LK3去扫描下一行 LK4 MOVA R3 此行有按键 取行号ADDA R3 行号乘4MOVR5 A 得行首值ADDA R5 即 0 4 8 12 MOVR5 A 暂存进R5 KEY1 LCALLKS1 查有无键闭合JNZLK1 有键闭合转消颤LJMPLK8 无键闭合则退出LK1 LCALLDL6ms 消颤12msLCALLDL6msLCALLKS1 再查有无键闭合JNZLK2 的确有 转处理LJMPLK8 确实无 退出去LK2 MOVR3 00H R3 行号初值MOVR2 0FEH R2 行扫描初值LK3 MOVDPTR 0101H 指向8155A口MOVA R2 取行扫描值MOVX DPTR A 送到行线上去INCDPTRINCDPTR 指向8155C口MOVXA DPTR 读列线的电平ANLA 0FH 保留C口低4位MOVR4 A 列值暂存进R4CJNEA 0FH LK4 列值 全 1 表明此次送0的行有键按下 转LK4处理 若 全1 表明此次送0的行无键按下 MOVA R2 取出此次行扫描值JNBACC 7 LK8 若已扫过最后一行就退出扫描 否则扫下一行 RLA Acc中的 0 左移一位MOVR2 A 新扫描值仍存进R2INCR3 行号加1指向下一行SJMPLK3 转LK3去扫描下一行 LK4 MOVA R3 此行有按键 取行号ADDA R3 行号乘4MOVR5 A 得行首值ADDA R5 即 0 4 8 12 MOVR5 A 暂存进R5 MOVA R4 列值只可能 0F 0E 0D 0B 07HLK5 RRCA 取列值的最低位到CyJNCLK6 Cy 0就找到了 即R5INCR5 否则行值增1 即同行中的下一个键值SJMPLK5 再转LK5判C键值LK6 PUSH05H 将找到的键值压栈保存起来 KEY1 LCALLKS1JNZLK1LJMPLK8LK1 LCALLDL6msLCALLDL6msLCALLKS1JNZLK2LJMPLK8LK2 MOVR3 00HMOVR2 0FEHLK3 MOVDPTR 0101HMOVA R2MOVX DPTR AINCDPTRINCDPTRMOVXA DPTRANLA 0FHMOVR4 ACJNEA 0FH LK4 MOVA R2JNBACC 7 LK8RLAMOVR2 AINCR3SJMPLK3LK4 MOVA R3ADDA R3MOVR5 AADDA R5MOVR5 AMOVA R4LK5 RRCA 取列值的最低位到CyJNCLK6 Cy 0就找到了 即R5INCR5 否则行值增1 即同行中的下一个键值SJMPLK5 再转LK5判C键值LK6 PUSH05H 将找到的键值压栈保存起来 LK7 LCALLDL6ms 延6msLCALLKS1 键释放 JNZLK7 未释放 等LCALLDL6ms 消颤LCALLDL6msPOPACC 键值 ARND RETLK8 MOVA 0FFH 无键闭合标志 ARET D A转换接口扩展 模拟量I O通道 模拟接口电路的任务 模拟电路的任务 00101101 10101100 工业生产过程 传感器 放大滤波 多路转换 采样保持 A D转换 放大驱动 D A转换 输出接口 微型计算机 执行机构 输入接口 物理量变换 信号处理 信号变换 I O接口 输入通道 输出通道 变送器 8位CMOS数模转换芯片DAC0832 CSVCC WR1ILE AGNDWR2 D3XFER D2D4 D1D5 D0D6 VrefD7 RfbIout2 DGNDIout1 DAC0832 20PINDIP封装 8位D A 分辨率 Vref 256 CMOS低功耗器件 5 15V单电源供电 电流输出型器件 需外接运放 具有双缓冲控制输出 参考电压源 10 10V DAC0832引脚定义 CSVCC WR1ILE AGNDWR2 D3XFER D2D4 D1D5 D0D6 VrefD7 RfbIout2 DGNDIout1 DAC0832 20PINDIP封装 D0 D7 8位数字量输入端 CS 片选端 低有效ILE 数据锁存允许 高有效 WR1 写控制信号1 低有效 WR2 写控制信号2 低有效 XFER 数据传送控制信号Iout1 电流输出端1Iout2 电流输出端2Rfb 内置反馈电阻端Vref 参考电压源 10 10VDGND 数字量地AGND 模拟量地Vcc 5 15V单电源供电端 DAC0832内部结构框图 1 1 1 1 0 0 0 0 1 1 LE2 ILE CE WR1 WR2 XFER D7D0 LE1 输入寄存器 寄存器 DAC 转换器 D A Vref Iout2 Iout1 Rfb LE 1 Q跟随DLE 0 Q锁存D D0 D7 8位数字量输入端 CS 片选端 低有效ILE 数据锁存允许 高有效 WR1 写控制信号1 低有效 WR2 写控制信号2 低有效 XFER 数据传送控制信号Iout1 电流输出端1Iout2 电流输出端2Rfb 内置反馈电阻端Vref 参考电压源 10 10VDGND 数字量地AGND 模拟量地Vcc 5 15V单电源供电端 工作模式 单缓冲模式双缓冲模式无缓冲模式 单缓冲模式 使输入锁存器或DAC寄存器二者之一处于直通 即芯片只占用一个端口地址 CPU只需一次写入即开始转换 无缓冲器模式 使内部的两个寄存器都处于直通状态 模拟输出始终跟随输入变化 不能直接与数据总线连接 需外加并行接口 如74LS373 8255等 双缓冲模式 标准模式 对输入寄存器和DAC寄存器均需控制 当输入寄存器控制信号有效时 数据写入输入寄存器中 再在DAC寄存器控制信号有效时 数据才写入DAC寄存器 并启动变换 此时芯片占用两个端口地址 优点 数据接收与D A转换可异步进行 可实现多个DAC同步转换输出分时写入 同步转换 工作时序 写输入寄存器 写DAC寄存器 DAC0832与单片机的连接 89C51单片机 DAC0832 P0 0 P0 7 P2 0 8位 DI0 DI7 EA WR XFER CS 5V 6MHz 30Px2 WR1 WR2 5V Vcc Vref ILE uA741 12V 12V GND AGND DGND Iout1 Iout2 Rfb 接示波器 D A转换器的应用 信号发生器用于闭环控制系统 向D A转换器写入某种按规律变化的数据 即可在输出端获得相应的各种波形 DAC0832的编程应用举例 例1产生矩形波 例2产生锯齿波 LL MOVA 00H 低电平MOVDPTR 0FEFFHMOVX DPTR A 送转换LCALLDMS1 低宽度MOVA 0FFH 高电平MOVX DPTR A 送转换LCALLDMS2 高宽度SJMPLL MOVA 00H 起始值MOVDPTR 0FEFFHMM MOVX DPTR A 送转换INCANOPNOPNOP 决定坡度SJMPMM DAC0832编程应用举例 例3产生三角波 MOVA 00HMOVDPTR 0FEFFHSS1 MOVX DPTR A 送转换NOPNOPNOPSS2 INCA 等速上升JNZSS1SS3 DECAMOVX DPTR ANOPNOPNOP 等速下降JNZSS3SJMPSS2 同样的编程思路 若要产生如下的梯形波 三角波 梯形波 A D转换接口扩展 IN3IN2 IN4IN1 IN5IN0 IN6ADDA IN7ADDB STARTADDC EOCALE D3D7 OED6 CLKD5 VCCD4 Vref D0 GNDVref D1D2 ADC0809 8位CMOS模数转换芯片ADC0809 8位A D CMOS低功耗器件 8通道多路开关输入切换电路 单电源 5 Vref 5VVin范围 单极性0 5V 每次转换时间 100 S60个时钟周期 fmax 640KHz 推荐CLK 500KHz 转换结果读取方式 延时读数 查询EOC 1 EOC申请中断 IN3IN2 IN4IN1 IN5IN0 IN6ADDA IN7ADDB STARTADDC EOCALE D3D7 OED6 CLKD5 VCCD4 Vref D0 GNDVref D1D2 ADC0809 IN0 IN7 8通道模拟量输入端D0 D7 8位数字量输出端ADDC ADDB ADDA 接地址锁存器的低三位地址ALE 地址锁存允许控制信号START 清0内寄存器 启动转换OE 允许读A D结果 高有效CLK 时钟输入端
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年济宁市市直卫生健康系统“校园双选会”笔试考前自测高频考点模拟试题附答案详解(黄金题型)
- 2025湖北随州市招募选派三支一扶高校毕业生80人考前自测高频考点模拟试题附答案详解
- 2025贵州省人民医院第十三届贵州人博会引进人才10人考前自测高频考点模拟试题参考答案详解
- 2025年商丘民权县消防救援大队招聘政府专职消防员32名模拟试卷完整参考答案详解
- 会员营销模式饭店营销方案
- 天津社区笔试题目及答案
- 企业人事管理咨询方案
- 企业厨房工程施工方案
- 企业文化项目咨询方案
- 我的中国骄傲演讲稿
- 【课件】数学建模活动:决定苹果的最佳出售时间点课件-2025-2026学年高一上学期数学人教B版(2019)必修第一册
- 施工队进场安全教育培训
- 母婴分离护理常规
- 污泥池清理管理制度
- 秩序员休假管理制度
- 保护环境的课件
- 2025年中国张裕产区葡萄酒特色与品牌国际化发展报告
- 图深度强化学习在配电网故障恢复中的应用研究
- (2017)海南省房屋建筑与装饰装修工程综合定额交底资料
- 2024-2025学年下学期高一英语人教版同步经典题精练之语法填空
- 《社会科学研究方法》课件
评论
0/150
提交评论