




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.3 输入操作,作为51单片机片内并行I/O口输入信号,属于数字信号的“高、低电平”或脉冲信号的“上升沿、下降沿”两大类,这两类信号可以通过: “闸刀型开关”、“按钮型开关”两类开关来模拟。,3.3.1 闸刀型输入信号,常见的闸刀型开关有拨码开关、自锁按钮开关、面板用数字式拨码开关、电路板用数字式拨码开关等。,【例3-7】闸刀开关型输入信号。编程实现相应的开关闭合时,相应的灯亮。,#include sbit LED0=P10; sbit LED1=P11; sbit LED2=P12; sbit LED3=P13; sbit K0=P14; sbit K1=P15; sbit K2=P16;
2、 sbit K3=P17; void main( ) while(1) K0=1;K1=1;K2=1;K3=1; LED0=K0; LED1=K1; LED2=K2; LED3=K3; ,思考: 为什么在读键状态之前要先置1? 修改: (1)开关闭合时灯灭。 (2)K0控制LED3,K1控制LED2,K2控制LED1,K3控制LED0。,3.3.2 单个按钮型开关输入信号,开关去抖动的处理分为硬件去抖动和软件去抖动。硬件去抖动增加硬件投入。单片机一般采用软件去抖动。软件去抖动是执行一段软件延时程序(10ms左右)。需关注两个问题:去抖动、判断按键是否抬起。,【例3-8】按钮开关。编程实现S1按
3、钮按一下,4个灯一组亮、灭交替。,#include #define uchar unsigned char #define uint unsigned int sbit S1=P32; void dlxms(uint xms) uint t1,t2; for(t1=0;t1xms;t1+) for(t2=0;t2110;t2+); ,void main( ) P1=0 x0f; while(1) S1=1; if(S1=0) dlxms(10); if(S1=0) dlxms(10); P1=P1; while(S1=0); dlxms(10); ,【例3-9】开始是所有的灯都亮,按一下S1,
4、灯变为500ms闪烁,再按一下,变为全亮。,分析: 相当于S1为一个控制开关,控制着灯的亮、灭闪烁; 与例题3-8不同。定义一个位单元,按键每动作一次,该位单元取反:该单元为0时,灯全亮,该单元为1时,灯闪烁。,include #define uchar unsigned char #define uint unsigned int sbit S1=P32; bit key=0; /定义一个位,存储按键的动作(偶、奇) void dlxms( uint xms) uint t1, t2; for( t1=0; t1xms; t1+) for( t2=0; t2110; t2+); ,void
5、keyscan()/键检索 S1=1; if( S1=0) dlxms(10); if( S1=0) dlxms(10); key=key;/取反 while( S1=0); ,void main( ) P1=0 x00; while(1) keyscan();/调用键检索 if(key=0) P1=0 x00; else dlxms(500); P1=P1; ,3.3.3 多个按钮型开关键盘,1.键号、键值和键值表 (1)键号:用户在设计键盘程序时,为每一个按键定义一个号码,该号码称为键号。 (2)键值:用户在设计键盘程序时,每一个按键根据某种得法得到与其他按键不一样的值,该数值称为按键的键
6、值。 (3)键值表:用户在设计键盘程序时,将所有按键的键值,按照一定的顺利,在code区建立一个表格,该表格称为键值表。,3.3.3 多个按钮型开关键盘,2.独立式键盘接口技术 当按键的数量比较少(8)时,可采用独立式按键硬件结构。独立式按键是指直接采用一根 I/O口线构成的单个按键电路。每个独立式按键单独占用一根I/O口线,每根I/O口线上的按键的工作状态不会影响其他I/O口线的工作状态。,【例3-10】独立式按键示例。P1口作为并行接口按键的输入口,P3口接共阳极LED显示器,编程显示按键的键号07。,分析:1位共阳极静态显示。0号键按下时,P1口的内容为11111110B;7号键按下时,
7、P1口的内容为01111111B。,#include #define uchar unsigned char #define uint unsigned int uchar data keycode=8;/键值的初值设为8 uchar data dir_buf;/显示缓冲区 code uchar dirtab=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 xbf;/显示的代码表 code uchar keytab8=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/键值表 void dl_xm
8、s(uint xms)/延时xms毫秒 uint t1,t2; for(t1=xms;t10;t1-) for(t2=110;t20;t2-); void dir()/显示函数 P3=dirtabdir_buf; ,void keyscan( )/键盘扫描函数 uchar key1; P1=0 xff; key1=P1;/读键盘的值 if(key1!=0 xff)/如果有键按下 dl_xms(10); /延时消抖动 P1=0 xff; key1=P1;/再读键盘的值 if(key1!=0 xff)/继续按下 keycode=0; while(key1!=keytabkeycode)/查表得键号
9、 keycode=keycode+1; if(keycode=8) break; while(P1!=0 xff);/等待键抬起 ,void main( ) dir_buf=8; /缓冲区送8,显示- dir( ); while(1) keyscan( ); dir_buf=keycode; /键号送显示缓冲区 dir( ); ,3.矩阵键盘接口,当按键的数量比较多时,采用行列式键盘。行列式键盘又称为矩阵式键盘。 (1)行列式键盘的硬件结构:行列式键盘的结构比较简单,按键设置在行、列的交点上。 (2) 矩阵键盘行列扫描法分三步进行。1)第一步判断是否有按键按下。将全部行线置低电平,然后检测列线
10、的电平状态。有且只有一列的电平为低电平,则表示键盘中有键按下。若所有列线均为高电平,则键盘中无键按下。2)第二步是判断闭合按键具体所在的位置。逐行将行线置低电平,然后检测列线的电平状态。低电平列线相连的按键就是闭合按键。3)第三步确定闭合按键的键值编码。将所有行线电平状态与所有列线电平状态进行组合,就可以得到该闭合按键的键值编码。有按键按下时,只有一条行线的电平是低电平,其余行线的电平是高电平;只有一条列线的电平是低电平,其余列线的电平是高电平。 +,行线P14、P15、P16、P17分别与单片机引脚P1.4、P1.5、P1.6、P1.7相连,列线P10、P11、P12、P13分别与单片机引脚
11、P1.0、P1.1、P1.2、P1.3相连。,若采用行列扫描法,先判断是否有按键按下。给P1口赋值0 x0f,所有列线置高电平,所有的行线置低电平,读列线的电平状态。若所有列线都是高电平,则表示没有按键按下;反之,有按键按下。再确定闭合按键具体的位置,采用逐行送低电平的方法。 (1)给P1口赋值0 xef,然后读列线的电平状态。若有按键按下,则与该按键相连列线的电平为低电平。按键的键值编码就是行线和列线的电平状态组合,即为P1口8个引脚的电平状态。由之可得,加号键的键值编码是11100111(0 xe7),数字3的键值编码是11101011(0 xeb),数字2的键值编码是11101101(0
12、 xed),数字1的键值编码是11101110(0 xee)。,(2)若第一行没有按键按下,列线的电平状态都是高电平,P1口的值没有变化,还是0 xef。这时检测第二行是否有按键按下。给P1口赋值0 xdf,若有按键按下,通过读列线的电平状态可确定按键具体位置。减号键的键值编码是11010111(0 xd7),数字6的键值编码是11011011(0 xdb),数字5的键值编码是11011101(0 xdd),数字4的键值编码是11011110(0 xde)。 (3)若第一行和第二行都没有按键按下,给P1口赋值0 xbf,检测第三行是否有按键按下。第三行按键按下时的编码分别是:乘号键的键值编码是
13、10110111(0 xb7),数字9的键值编码是10111011(0 xbb),数字8的键值编码是10111101(0 xbd),数字7的键值编码是10111110(0 xbe)。,(4)若第一行、第二行和第三行都没有按键按下,给P1口赋值0 x7f,检测第四行是否有按键按下。第四行的按键按下时的编码分别是:除号键的键值编码是01110111(0 x77),等于号键值编码是01111011(0 x7b),数字0的键值编码是01111101(0 x7d),CE清除键键值编码是01111110(0 x7e)。,线翻转发法主要分分三步进行。 第一步将所有列线置低电平,所有行线置高电平,然后读所有行
14、线电平状态。如果所有行线电平状态是高电平,则表示没有按键按下;反之,则表示有按键按下,保留所有行线电平状态。行线电平状态即为行线相关的闭合按键的键值编码高半部分或低半部分。有且只有一条行线的电平由高电平变为低电平,这种现象称为电平翻转,这是这种方法命名由来。 第二步将所有行线置低电平,所有列线置高电平,然后读所有列线电平状态。如果所有列线电平状态是高电平,则表示没有按键按下。如果存在一条列线的电平由高电平变为低电平,则表示有按键按下,保留所有列线电平状态。列线电平状态即为列线相关的闭合按键的键值编码的低半部分或高半部分。,第三步确定闭合按键的键值编码。将第一步得到的行线相关键值编码的高半部分或
15、低半部分与第二步得到的列线相关的键值编码低半部分或高半部分进行组合,就得到了闭合按键完整的键值编码。,若采用线翻转发法,先给P1口赋值0 xf0,所有行线置高电平,所有的列线置低电平,读行线的电平状态。若有按键按下,有且只有一条行线的电平是低电平,行线电平状态即为与行线相关的闭合按键的键值编码高4位。 高4位键值编码,再给P1口赋值0 x0f,所有列线置高电平,所有的行线置低电平,读列线的电平状态。若有按键按下,有且只有一条列线的电平是低电平,列线电平状态即为与列线相关的闭合按键的键值编码低4位。,低4位键值编码,将闭合按键键值高4位编码和低4位编码进行组合,就可得到闭合按键键值的编码。与行列
16、扫描法相比,线翻转发法会占用更多的数据储存空间。但是,行列扫描法实现代码较长,线反转法实现程序较简单。 闭合按键键值编码,【例3-11】44矩阵键盘示例。P1.4P1.7接列线, P1.0P1.3接行线。P2口接LED显示数码管,显示按键的号码0F。分析:当键盘的结构在行和列的数量之和8时,将行的信息放在高位(或低位),将列的信息放在低位(或高位),二者组成一个字节就可以了。通用的算法是,将行的信息转变为行号(00001111),将列的信息转变为列号(00001111)。然后,将行号作为高4位(或低4位),将列号作为低4位(或高4位),二者组成一个字节。,#include #define uc
17、har unsigned char #define uint unsigned int uchar data dir_buf; /显示缓冲区 uchar key; /计算所得键值 uchar i2;/键号 code uchar dirtab=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 x40; /显示的代码表 code uchar keytab=0 xee,0 xed,0 xeb,0 xe7,0 xde,0 xdd,0 xdb,0 xd7,
18、0 xbe,0 xbd,0 xbb,0 xb7,0 x7e,0 x7d,0 x7b,0 x77; /键值表 void delay(uint) ; void keyscan( ) ; /键盘扫描函数 void dir( ) ; /显示函数,void main( ) i2=16; dir_buf=16; /显示- while(1) keyscan( ); /键扫描程序 dir_buf=i2; /显示- dir( ) ; void dir( ) /显示函数 P2=dirtabdir_buf ; void delay(uint xms) /延时xms uint t1, t2; for( t1=xms;
19、 t10; t1-) for( t2=110; t20; t2-) ; ,void keyscan( )/键扫描 uchar code_h, code_l, i1;/ code_h为行输出值,code_l为列输入值 P1=0 xf0; /所有的行输出0 code_l=P1; /读列值 code_l=code_l ,else break; P1=0 xff; /等待键抬起 while(P1!=0XFF); code_h=code_h ,3.4 实验,实验1 闸刀型开关输入/8段LED静态显示输出 实验目的:掌握51单片机并行I/O的输入/输出基本操作,掌握闸刀型开关输入信号的编程方法,掌握8段LED显示的编程方法。 电路分析:P1.0接闸刀型开关K0,P3接共阳极显示数码管。编程实现K0闭合时,显示“H”; K0断开时,显示“F”。,#include sbit K0=P10; unsigned char data dir_buf; code uchar dirtab=0 x8E,0 xf989; /F与H的显示代码 void dir() P3=dirtabdir_buf; void main( ) while(1) K0=1; if(K0=0) dir_buf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【台州】2025年浙江台州市温岭市事业单位公开选聘工作人员8人笔试历年典型考题及考点剖析附带答案详解
- 【成都】2025年上半年四川成都市国资委所属事业单位招聘工作人员2人笔试历年典型考题及考点剖析附带答案详解
- 天府教学课件下载
- 第五节三废的处理和利用DisposalandUtiliza
- 希沃教学目标课件
- 2025年苏州经贸职业技术学院单招职业技能考试题库带答案
- 小学生笔顺书写课件
- 2025年辽宁省西市区事业单位公开招聘医务工作者考前冲刺模拟带答案
- 口腔卫生健康知识课件
- 5G时代科技与互联网企业竞争格局深度剖析报告
- 永安污水处理厂工程可行性研究报告
- 机动车检测站设备维护管理制度
- 企业内部举报制度实施细则
- DB4420-T 51-2024 脆肉鲩鱼肉脆度的测定 质构仪法
- 江苏省南通市中考物理部分试题总结课件
- 2025届新高考政治复习备考策略及教学建议 课件
- 呼吸与危重症医学专科医师规范化培训基地认定细则
- JGJ/T235-2011建筑外墙防水工程技术规程
- CHT 8024-2011 机载激光雷达数据获取技术规范(正式版)
- 乒乓球竞赛规则、规程与裁判法
- 北川县楠木园水泥用石灰石矿矿山地质环境保护与土地复垦方案
评论
0/150
提交评论