《单片机原理及应用(C语言版)》由会员分享,可在线阅读,更多相关《单片机原理及应用(C语言版)(118页珍藏版)》请在金锄头文库上搜索。
1、 单片机原理及应用 C语言版 第9章单片机系统配置及接口 主编 周国运本章制作 鲁庆宾中国水利水电出版社 第9章单片机系统配置及接口 目录9 1键盘接口9 2LED显示接口9 3A D转换接口9 4D A转换接口9 5开关器件接口 本章要点单片机主要应用于测控系统中 应用系统通常需要人的干预 本章主要讲述键盘 显示器 A D转换器 D A转换器 开关器件等的工作原理及接口电路 第9章单片机系统配置及接口 图9 1单片机应用系统配置框图 9 1键盘接口 主要内容9 1 1键盘基本问题9 1 2键盘结构及处理程序9 1 3中断扫描方式 1 键的识别当按键K未被按下时 P1 0输入为高电平 当K闭合
2、时 P1 0输入为低电平 9 1 1键盘基本问题 图9 2按键电路 2 键的抖动由于机械触点的弹性作用 按键在闭合时不会马上稳定地接通 在断开时也不会一下子断开 在闭合及断开的瞬间均伴随有一连串的抖动 如图9 3所示 抖动时间一般为5 10ms 抖动会引起一次按键被误读多次 为确保CPU对键的一次闭合仅做一次处理 必须去除键抖动 9 1 1键盘基本问题 9 1 1键盘基本问题 图9 3按键时的抖动 9 1 1键盘基本问题 一 独立式键盘独立式按键是指各按键相互独立地接通一条输入数据线 当任何一个键按下时 与之相连的输入数据线即可读入数据0 而没有按下时读入1 9 1 2键盘结构及处理程序 优点
3、 电路简单 缺点 键数较多时 要占用较多的I O线 图9 4独立式键盘 例9 1设计一个独立式按键的键盘接口 并编写键扫描程序 电路原理图如图9 4所示 键号从上到下分别为0 7 C语言程序清单 includevoidkey unsignedchark P1 0 xff 输入时P1口置全1k P1 读取按键状态if k 0 xff 无键按下 返回return delay20ms 有键按下 延时去抖 9 1 2键盘结构及处理程序 k P1 if k 0 xff 确认键按下return 抖动引起 返回while P1 0 xff 等待键释放switch k case 0 xfe 0号键按下时执行程
4、序段break case 0 xfd 1号键按下时执行程序段break 9 1 2键盘结构及处理程序 2 6号键程序省略case 0 x7f 7号键按下时执行程序段break 汇编语言程序清单 KEY MOVP1 0FFH P1口为输入口MOVA P1 读取按键状态CPLA 取正逻辑JZEKEY 无键按下 返回 9 1 2键盘结构及处理程序 LCALLDELAY20MS 有键按下 去抖MOVA P1CPLAJZEKEY 抖动引起 返回MOVB A 存键值KEY1 MOVA P1 以下等待键释放CPLAJNZKEY1 未释放 等待MOVA B 取键值送AJBACC 0 PKEY0 K0按下转PK
5、EY0JBACC 1 PKEY1 K1按下转PKEY1 9 1 2键盘结构及处理程序 JBACC 7 PKEY7 K7按下转PKEY7EKEY RETPKEY1 LCALLK0 K0命令处理程序RETPKEY2 LCALLK1 K1命令处理程序RET PKEY4 LCALLK7 K7命令处理程序RET 9 1 2键盘结构及处理程序 二 行列式键盘为了减少键盘与单片机接口时所占用I O线的数目 在键数较多时 通常都将键盘排列成行列矩阵形式 每一水平线 行线 与垂直线 列线 的交叉处通过一个按键来连通 图9 54 4矩阵键盘接口 利用这种结构只需N条行线和M条列线 即可组成具有N M个按键的键盘
6、9 1 2键盘结构及处理程序 图9 54 4矩阵键盘接口 9 1 2键盘结构及处理程序 1 行扫描法工作原理判别键盘中有无键按下 向行线输出全0 读入列线状态 如果有键按下 总有一列线被拉至低电平 从而使列输入不全为1 查找按下键所在位置 依次给行线送低电平 查列线状态 全为1 则所按下的键不在此行 否则所按下的键必在此行且是在与零电平列线相交的交点上的那个键 对按键位置进行编码 找到所按下按键的行列位置后 对按键进行编码 即求得按键键值 9 1 2键盘结构及处理程序 2 键盘扫描识别子程序C语言程序清单 includecharkey charrow col k 1 定义行 列 返回值P1 0
7、 xf0 if P1 抖动引起 返回 9 1 2键盘结构及处理程序 for row 0 row 4 row 行扫描 P1 1 row 扫描值送P1k P1 返回键值 9 1 2键盘结构及处理程序 汇编语言程序清单 返回键值 在累加器A中 KEY LCALLKS 判断是否有键按下JZEKEY 无键按下 返回LCALLDELAY20MS 延时去抖LCALLKSJZEKEY 抖动引起 返回SKEY MOVR0 0 行扫描计数器R0清0MOVR1 0 列计数器R1清0MOVR3 0FEH R3为行扫描字暂存SKEY1 MOVP1 R3 输出行扫描字 9 1 2键盘结构及处理程序 MOVA P1 读列值
8、MOVR1 A 暂存列值CPLAANLA 0F0HJNZSKEY2 键在该列 转SKEY2INCR0 行计数器加1SETBCMOVA R3RLCAMOVR3 A 进行下一行扫描CJNER0 4 SKEY1 4未完成 转SKEY1EKEY MOVA 0FFH 无键返回0FFHRET 9 1 2键盘结构及处理程序 SKEY2 MOVA R1JNBACC 4 SKEY3JNBACC 5 SKEY4JNBACC 6 SKEY5JNBACC 7 SKEY6SKEY3 MOVR2 0 存0列号SJMPDKEYSKEY4 MOVR2 1 存1列号SJMPDKEYSKEY5 MOVR2 2 存2列号SJMPD
9、KEY 9 1 2键盘结构及处理程序 SKEY6 MOVR2 3 存3列号SJMPDKEYDKEY MOVA R0 行号送AMOVB 4MULABADDA R2 行号 4 列号 键值PUSHACCLK LCALLKS 等待键释放JNZLKPOPACCRET 9 1 2键盘结构及处理程序 是否有键按下子程序 有返回非0 无返回0KS MOVP1 0F0HMOVA P1CPLAANLA 0F0HRET 9 1 2键盘结构及处理程序 3 行列反转法工作原理判别键盘中有无键按下 方法同行扫描法 输入变输出 再读 将上一步读取到的列线输入值从列线输出 读取行线值 定位求键值 根据上一步输出的列线值和读取
10、到的行线值就可以确定所按下键所在的位置 从而查表确定键值 9 1 2键盘结构及处理程序 4 行列反转法识别子程序C语言程序代码 includecharkey charcodekeycode 0 xee 0 xde 0 xbe 0 x7e 0 xed 0 xdd 0 xbd 0 x7d 0 xeb 0 xdb 0 xbb 0 x7b 0 xe7 0 xd7 0 xb7 0 x77 键盘表 定义16个按键的行列组合值 9 1 2键盘结构及处理程序 charrow col k 1 i 定义行 列 返回值 循环控制变量P1 0 xf0 if P1 列值输出 读取行值 9 1 2键盘结构及处理程序 查找
11、行列组合值在键盘表中位置for i 0 i 16 i if row col keycode i 找到 i即为键值 否则 返回 1key i 对重复键 该方法break 处理为无键按下 P1 0 xf0 while P1 返回键值 9 1 2键盘结构及处理程序 9 1 3中断扫描方式 为了提高CPU的效率 可以采用中断扫描工作方式 即只有在键盘有键按下时才产生中断申请 CPU响应中断 进入中断服务程序进行键盘扫描 并做相应处理 也可以采用定时扫描方式 即系统每隔一定时间进行键盘扫描 并做相应处理 9 1 3中断扫描方式 图9 6中断方式键盘接口 9 2LED显示接口 主要内容9 2 1LED显示
12、器结构原理9 2 2LED显示器接口及显示方式9 2 3LED显示器与89C52接口及显示子程序 9 2 1LED显示器结构原理 单片机中通常使用7段LED构成字型为 8 且加一个小数点的数码管 以显示数字 符号及小数 常见数码管如下图 显示器有共阴极和共阳极两种 发光二极管的阳极连在一起的称为共阳极显示器 阴极连在一起的称为共阴极显示器 一位显示器由8个发光二极管组成 其中 7个发光二极管构成字型 8 的各个笔划 另一个为小数点 当在某段发光二极管上施加一定的正向电压时 该段笔划即亮 不加电压则暗 9 2 1LED显示器结构原理 以共阴极显示器为例 当a b c三段送1时 数码管显示数字7
13、c 引脚配置外形图 b 共阳极 a 共阴极 9 2 1LED显示器结构原理 表9 1共阴极和共阳极7段LED显示字型编码表 以上为8段 8段最高位为小数点段 表中为小数点不点亮段码 9 2 1LED显示器结构原理 9 2 2LED显示器接口及显示方式 LED有静态显示和动态显示两种方式 1 LED静态显示方式静态显示就是当显示器显示某个字符时 相应的段 发光二极管 恒定地导通或截止 直到显示另一个字符为止 共阴极 公共端K0 接地 共阳极 公共端K0 接 5V电源 每位的段选线 a dp 分别与一个8位锁存器的输出口相连 显示器中的各位相互独立 优点 亮度较高 编程容易 管理简单 缺点 但占用
14、I O口线资源较多 2 LED动态显示方式在多位LED显示时 为了简化电路 降低成本 将所有位的段选线并联在一起 由一个8位I O口控制 而共阴 或共阳 极公共端K分别由相应的I O线控制 实现各位的分时选通 图9 8为6位共阴极LED动态显示接口电路 9 2 2LED显示器接口及显示方式 图9 86位LED动态显示接口电路 9 2 2LED显示器接口及显示方式 各位扫描显示 由于6位LED所有段选线皆由P1口控制 要想每位显示不同的字符 就必须采用扫描方流点亮各位LED 在每一瞬间只使某一位显示字符 段选码 位选码控制 P1口输出相应字符段选码 P2口在该显示位送入选通电平 保证该位显示相应
15、字符 如此轮流 扫描延时 段选码 位选码每送入一次后延时1ms 保证每位有一定亮度 因人眼的视觉暂留效果 看上去每个数码管总在亮 9 2 2LED显示器接口及显示方式 9 2 3显示器与89C52接口及显示子程序 下页图为89C52P1口和P2口控制的6位共阴极LED动态显示接口电路 P1口输出段选码 P2口输出位选码 位选码占用输出口的线数决定于显示器位数 74LS245是双向8位缓冲器 在此分别作为段选和位选驱动器 逐位轮流点亮各个LED 每一位保持1ms 在10 20ms之内再一次点亮 重复不止 这样 利用人的视觉暂留 好像6位LED同时点亮一样 图9 9数码管动态显示接口 9 2 3显
16、示器与89C52接口及显示子程序 C语言程序清单 includeunsignedcharcodeLED 0 x3f 0 x06 0 x5b 0 x4f 0 x66 0 x6d 0 x7d 0 x07 0 x7f 0 x6f unsignedcharbuf 6 定义字型码和显示缓冲区voiddisp unsignedchari for i 0 i i 位码送P2口delay1ms 延时1ms 9 2 3显示器与89C52接口及显示子程序 汇编语言程序清单 DISP MOVR0 DISPBUF R0指向显示缓冲区MOVR2 0DFH 位码送R2MOVR3 6 6位显示MOVDPTR TAB DPTR指向段码表LOOP MOVP2 R2 位码送P2口MOVA R0 取显示数据MOVCA A DPTR 取出字型码MOVP1 A 送出显示LCALLDELAY1MS 延时1msINCR0 数据缓冲区地址加1MOVA R2RRA 位码右移一位MOVR2 A 9 2 3显示器与89C52接口及显示子程序 DJNZR3 LOOP 扫描到最左边显示位 RETTAB DB3FH 06H 5BH 4FH