版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理及应用单片机原理及应用 光华学院光华学院 信息工程系信息工程系 pc机除了主 机以外还需要 哪些部分呢? 单片机电路有时候也需要键盘、显示等外设。 9.1 键盘接口键盘接口 q按键的特点及输入原理 q独立式按键 q矩阵式按键 按键的特点及输入原理 n按键的分类: 触点式:机械;无触点式:电气 n键输入原理: 通过按键的接通与断开,产生两种相反的逻辑状态 低电平“0”与高电平“1”。 n键功能的实现: 对于一组键或一个键盘,需通过接口电路与单 片机相连。可采用查询或中断方式测试有无键按下, 再确定是哪一个键按下,将该键号送入累加器a,然 后判断是数字键还是功能键,若是数字键,则将键 号
2、对应的数字送入相关输入缓冲区;若是功能键, 则通过跳转指令转入执行该键的功能程序,执行完 后再返回主程序。 键盘接口需要解决的问题 是否有键按下是否有键按下 按键识别:按键识别: 键抖动及消除:键抖动及消除: 机械按键抖动时间在机械按键抖动时间在 5 5msms10ms10ms之之间间 硬件方案硬件方案双稳态去抖电路双稳态去抖电路 软件方案软件方案延时延时10ms10ms20ms20ms后再次判断后再次判断 消除方法消除方法: 求键号求键号 独立式按键独立式按键 8 0 3 1 p1.0 p1.1 p1.2 p1.3 p1.4 p1.5 p1.6 p1.7 v c c 接口电路: 例例1 1:
3、用:用p1p1口检测三个按键的状态并完成相应的功能口检测三个按键的状态并完成相应的功能 解:资源分配: 用p1口的低3位检测3个按键的输入,为1则表示 按键没有按下,为0则表示相应按键被按下。 流程图: org 0000h kb: mov p1,#0ffh ;想从想从p1口取数时要先口取数时要先 ;将初始值;将初始值ff装入装入p1,再准备去取数!,再准备去取数! mov a,p1 ;读出读出p1口内容到口内容到a中中 cpl a ;将将a取反取反 anl a,#07h ;将将a的内容与的内容与07相与相与 jz kb ;判断判断a是否是是否是0,是,是0无键按下无键按下 ;跳转到;跳转到kb
4、 lcall d10ms ;由按键按下延时由按键按下延时10ms mov a,p1 ;读出读出p1口内容到口内容到a中中 cpl a ;将将a取反取反 anl a,#07h ;将将a的内容与的内容与07相与相与 jz kb ;判断判断a是否是是否是0,是,是0无键按下无键按下 ;跳转到;跳转到kb cjne a,#01h,kb01;是是1按键按下吗?按键按下吗? ;不是跳转到不是跳转到kb01 lcall pgm1 ;是,则调用是,则调用pgm1 sjmp kb ;返回返回kb kb01:cjne a,#02h,kb02;是是2按键按下吗?按键按下吗? ;不是跳转到不是跳转到kb02 lcal
5、l pgm2 ;是,则调用是,则调用pgm2 sjmp kb ;返回返回kb kb02:cjne a,#04h,kb ;是是1按键按下吗?按键按下吗? ;不是跳转到;不是跳转到kb01 lcall pgm3 ;是,则调用是,则调用pgm3 sjmp kb ;返回返回kb end 编程:按三个按键中 的任一键都对应一个 特定功能。 若判断键释 放应如何修 改? 矩矩 阵阵 式式 按按 键键 关键:如何关键:如何 判断键号?判断键号? 3210 4 765 111098 15141312 +5v p1.4 p1.3 p1.0 mcs-51 p1.7 p1.6 p1.5 p1.2 p1.1 接口电路
6、: 键盘扫描子程序一般包括以下内容: 1.判别有无键按下; 2.扫描获取闭合键的行、列值; 3.用计算法或查表法得到键值; 4.判断闭合键释放否,如没释放则继续等待; 5.保存闭合键号。 键按下键按下/ /释放判断释放判断 ks: mov a,#00h ; 将00放入a中 mov p1,a ;全扫描字#00h送p1口 mov p1,#0fh ; 为保证取p1口低4位,先应将其置高电平 mov a,p1 ;读入p1口状态 cpl a ;变正逻辑,高电平表示有键按下 anl a,#0fh ;取低4位 ret ;返回,a0表示有键按下 main: lcall ks jnz xxx 如果按下“2”号键
7、,那么p1.0-p1.7的值从原来的 0000,1111(0f)变化为0000,0111(0e),因此,a 的值变为0000,0111(0e)。取反,1111 1000(f8) 再与0000,1111(0f)相与,则为0000,1000(08) 不为0,有按键按下。 有按下情况的进一步处理程序 按键识别扫描法 流程: 当第0列处于低电平时,逐行查找是否有行线变低, 若有,则第0列与该行的交叉点按键按下;若无,则表示 第0列无键按下,再让下一列处在低电平,依此循环,这 种方式称为键盘扫描。 键号=行首键号(0、4、8、12)+列号(0、1、2、3) 原理: 在某一时刻只让一条列线处于低电平,其余
8、列 线均处于高电平,则当这一列有键按下时,该键所在 的行电平将会由高电平变为低电平,可判定该列相应 的行有键按下。 例2:键盘扫描程序 serch: mov r2,#0efh ;扫描初值1110 1111 mov r3,#00h ;列号为0 line0: mov a,r2 ;将r2,1110 1111送入a mov p1,a ;将a,1110 1111送入p1 mov a,p1 ;读p1口内容到a jb acc.3,line1;判断0行选中? mov a,#00h ;行首号送累加器a=00 ajmp tryk ;跳转到tryk line1: jb acc.2,line2;判断1行选中? mov
9、 a,#04h ;行首号送累加器a=04 ajmp tryk ;跳转到tryk line2: jb acc.1,line3 ;判断2行选中? mov a,#08h ;行首号送累加器a=08 ajmp tryk ;跳转到tryk line3: jb acc.0,line4 ;判断3行选中? mov a,#0ch ;行首号送累加器a=12 ajmp tryk ;跳转到tryk line4: inc r3 ;r3列号加1 mov a,r2 ;将r2,1110 1111送入a rl a ;循环左移1位1101 1111 jnb acc.0,back ;4列都没查到,应该重新开始 mov r2,a ;赋
10、扫描初值 ajmp line0 ;跳转到line0 tryk: add a,r3 ;列号+行号=键号 back: ret 例2:键盘扫描程序 定时扫描方式 定时扫描方式就是每隔一段时间对键 盘扫描一次,它利用单片机内部的定时器 产生一定时间(例如10 ms)的定时,当定 时时间到就产生定时器溢出中断。cpu响应 中断后对键盘进行扫描,并在有键按下时 识别出该键,再执行该键的功能程序。 ;将100放入r1 ;定时器1方式2, ;装入初值,定时100us ;启动定时器 ;判断tf1位是否为1, ;直到1跳转到tm1 ;r1减1不等0,则跳转到lk ;调用key测试,出口为a ;判断a是否为0?跳转
11、到tm ;延时10ms ;调用key测试,出口为a ;判断a是否为0?跳转到tm ;调用按键搜索程序 ;开全局中断,开定时器1中断 ;设置定时中断循环次数为100 ;设置定时器1工作方式2 ;计算并装入初值 ;启动定时器 ;等待 ;r1减1不等于0,则跳转到tm1 ;关全局中断,关定时器1中断 ;调用key测试,出口为a ;判断a是否为0?跳转到tm1 ;延时10ms ;调用key测试,出口为a ;判断a是否为0?跳转到tm1 ;调用按键搜索程序 mcs-51的的中断系统结构图中断系统结构图 中断标 志位 中断源 允许 总允许 中断优 先级 中断扫描方式 为提高cpu工作效率,可采用中断扫描工
12、作 方式。其工作过程如下:当无键按下时,cpu处 理自己的工作,当有键按下时,产生中断请求, cpu转去执行键盘扫描子程序,并识别键号。 p1.0 p1.1 p1.3 p1.2 p1.4 p1.5 p1.6 p1.7 int0 8031 向p1口写入f0 ;开全局中断,开外部中断0中断 ;等待 ;调用key测试,出口为a ;判断a是否为0?跳转到tm1 ;延时10ms ;调用key测试,出口为a ;判断a是否为0?跳转到tm1 ;调用按键搜索程序 p1.0 p1.1 p1.3 p1.2 p1.4 p1.5 p1.6 p1.7 int0 8031 v r/w(p3.1) =1; rsequp3.
13、0 rwequp3.1 eequp3.2 ve(p3.2): vr/w(p3.1)=1; vrs(p3.0)=0; setb rw ;rw=1 nop ;3条 clr rs ;rs=0 nop ;3条 setb e ;e=1 nop ;3条 mov a,p1 ;读入状态字读入状态字 nop ;3条 clr e ;e=0 nop ;3条 clr rw ;rw=0 stat: ret rsr/w操作操作 00写命令写命令操作(初始化、操作(初始化、 光标定位等)光标定位等) 01读状态读状态操作(读忙标操作(读忙标 志)志) 10写数据写数据操作(要显示操作(要显示 内容)内容) 11读数据读数据
14、操作(可以把操作(可以把 显示存储区中的数据显示存储区中的数据 反读出来)反读出来) 2. 写命令字 rsr/w操作操作 00写命令操作(初始化、光标写命令操作(初始化、光标 定位等)定位等) 01读状态操作(读忙标志)读状态操作(读忙标志) 10写数据操作(要显示的内容) 11读数据操作(可以把显示存 储区中的数据反读出来) v e: v rs=0; r/w=0; v 采用查询方式:读入状态字读入状态字,再判断忙标志acc.7。 rw=0 rs=1 e=1 命令字a,a p1 e=0 rs=0 返回 写数据 读入状态字a acc.7=0? 不忙吗? 延时 y n 动手做动手做 假定显示数据已
15、 存放到内部ram 的 21h单元 3. 命令字 指令名称指令名称 控制信号控制信号控制代码控制代码 rs rw d7 d6 d5 d4 d3 d2 d1 d0 清屏清屏 0 00 0 0 0 0 0 0 1 归归home位位 0 00 0 0 0 0 0 1 * 输入方式设置输入方式设置0 00 0 0 0 0 1 i/d s 显示状态设置显示状态设置0 00 0 0 0 1 d c b 光标画面滚动光标画面滚动0 00 0 0 1 s/c r/l * * 功能设置功能设置0 00 0 1 dl n f * * cgram地址设置地址设置 0 00 1 a5 a4 a3 a2 a1 a0 d
16、dram地址设置地址设置 0 01 a6 a5 a4 a3 a2 a1 a0 读读bf和和ac0 1 bf ac6 ac5 ac4 ac3 ac2 ac1 ac0 写数据写数据 1 0 数数 据据 读数据读数据 1 1 数数 据据 清除屏幕,置ac 为零01h 指令名称指令名称 控制信号控制信号控制代码控制代码 rs rw d7 d6 d5 d4 d3 d2 d1 d0 清屏清屏 0 00 0 0 0 0 0 0 1 归归home位位 0 00 0 0 0 0 0 1 * 输入方式设置输入方式设置0 00 0 0 0 0 1 i/d s 显示状态设置显示状态设置0 00 0 0 0 1 d c
17、 b 光标画面滚动光标画面滚动0 00 0 0 1 s/c r/l * * 功能设置功能设置0 00 0 1 dl n f * * cgram地址设置地址设置 0 00 1 a5 a4 a3 a2 a1 a0 ddram地址设置地址设置 0 01 a6 a5 a4 a3 a2 a1 a0 读读bf和和ac0 1 bf ac6 ac5 ac4 ac3 ac2 ac1 ac0 写数据写数据 1 0 数数 据据 读数据读数据 1 1 数数 据据 设光标移动方向并 指定整体显示是否 移动。 i/d=1:增量方式 i/d=0:减量方式 s=1:移位 s=0:不移位 0000011006h 设整体显示开关
18、 (d),光标显示 开关(c),光标 位的字符闪耀(b) d=1;c=0;b=0 000011000ch 指令名称指令名称 控制信号控制信号控制代码控制代码 rs rw d7 d6 d5 d4 d3 d2 d1 d0 清屏清屏 0 00 0 0 0 0 0 0 1 归归home位位 0 00 0 0 0 0 0 1 * 输入方式设置输入方式设置0 00 0 0 0 0 1 i/d s 显示开关控制显示开关控制0 00 0 0 0 1 d c b 光标画面滚动光标画面滚动0 00 0 0 1 s/c r/l * * 功能设置功能设置0 00 0 1 dl n f * * cgram地址设置地址设
19、置 0 00 1 a5 a4 a3 a2 a1 a0 ddram地址设置地址设置 0 01 a6 a5 a4 a3 a2 a1 a0 读读bf和和ac0 1 bf ac6 ac5 ac4 ac3 ac2 ac1 ac0 写数据写数据 1 0 数数 据据 读数据读数据 1 1 数数 据据 设接口数据位数 (dl),显示行数 (l),及字型(f) dl=1,8位 =0: 4位 n=1:2行 =0:1行 f=1:510 =0: 57 0011100038h 指令名称指令名称 控制信号控制信号控制代码控制代码 rs rw d7 d6 d5 d4 d3 d2 d1 d0 清屏清屏 0 00 0 0 0
20、0 0 0 1 归归home位位 0 00 0 0 0 0 0 1 * 输入方式设置输入方式设置0 00 0 0 0 0 1 i/d s 显示开关控制显示开关控制0 00 0 0 0 1 d c b 光标画面滚动光标画面滚动0 00 0 0 1 s/c r/l * * 功能设置功能设置0 00 0 1 dl n f * * cgram地址设置地址设置 0 00 1 a5 a4 a3 a2 a1 a0 ddram地址设置地址设置 0 01 a6 a5 a4 a3 a2 a1 a0 读读bf和和ac0 1 bf ac6 ac5 ac4 ac3 ac2 ac1 ac0 写数据写数据 1 0 数数 据
21、据 读数据读数据 1 1 数数 据据 设置ddram地 址,为显示定位 4. 初始化lcd 上电 延时20ms 功能设置 延时37us 显示状态设置 延时37us 清屏 延时1.52ms 输入方式设置 初始化结束 动手做动手做 5. 定位光标位置 把显示数据显示在某个位置,就是把显示数据写在相应的 ddram地址中,ddram地址占7位。set ddram address命令如下: row12345141516 line100h01h02h03h04h0dh0eh0fh line240h41h42h43h44h4dh4eh4fh noticenotice v光标定位,写入一个显示字符后,ddr
22、am地址会自动加自动加 1或减或减1,加或减由输入方式字设置; v 第1行ddram地址与第2行ddram地址并不连续并不连续。 80h81h82h83h84h8dh8eh8fh 0c0h0c1h0c2h0c3h0c4h0cdh0ceh0cfh 6. lcd显示程序设计 main lcd初始化 光标定位 显示字符 动手做动手做 sjmp $ 7. 显示数据 对于常用数字、字 母等显示数据为其 ascii码 end majpjmvcyzj21hlfrvy96dv02lppfygxus7iymzkyemz0kgeyzs3bplckyh1lt4ek7cxmux3ijoysoer7zuavwygz4epzruirvpmzzvntf1xzw5oswsxotfaejnocmfe1lzgnn1rsxg8wlcg8cvq3xpjmvodpfwcpiyjgzaznsepniaklysu7qsd1upaxmzdlpn9zw7kljfslcli26yv109ffbndh8lbun1g6acurq39eg12khl9txsz1j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 糖尿病药物联合用药
- 确保安全驾驶常规的关键要点
- 徐涛课件教学课件
- 3.1.1亚铁盐和铁盐课件高一上学期化学鲁科版(2019)必修第一册
- DB1304T 481-2024芝麻轻简化栽培技术规程
- 初中七年级家长会教案
- 级中 国美食说课稿
- 壶口瀑布说课稿
- 海洋与生命说课稿
- 格林巴利综合征治疗指南
- 人教版九年级数学下册 《图形的相似》相似教学课件
- 人员支援工作申请单
- 国家开放大学实验学院生活中的法律形考任务(一)-形考任务(一)答案
- 幼儿园教师师德师风考核表
- 2022年江苏省南京市栖霞区南外仙林分校小学部六上期中数学试卷
- 渠道下沉不能为了下沉而下沉
- 崇明三岛现代农业总体0810附件一基础汇编
- 定2墙上贴着字
- 几种离子交换装置
- 交接班制度(PPT31页)
- 真想变成大大的荷叶(详案)
评论
0/150
提交评论