版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.3 输入操作 作为51单片机片内并行I/O口输入信号,属于数字信号的“高、低电平”或脉冲信号的“上升沿、下降沿”两大类,这两类信号可以通过: “闸刀型开关”、“按钮型开关”两类开关来模拟。3.3 输入操作 作为51单片机片内并行3.3.1 闸刀型输入信号 常见的闸刀型开关有拨码开关、自锁按钮开关、面板用数字式拨码开关、电路板用数字式拨码开关等。3.3.1 闸刀型输入信号 常见的闸刀型开关【例3-7】闸刀开关型输入信号。编程实现相应的开关闭合时,相应的灯亮。【例3-7】闸刀开关型输入信号。编程实现相应的开关闭合时,相#include sbit LED0=P10;sbit LED1=P11;s
2、bit LED2=P12;sbit LED3=P13;sbit K0=P14;sbit K1=P15;sbit K2=P16;sbit K3=P17;void main( ) while(1) K0=1;K1=1;K2=1;K3=1; LED0=K0; LED1=K1; LED2=K2; LED3=K3; #include 思考: 为什么在读键状态之前要先置1?修改:(1)开关闭合时灯灭。 (2)K0控制LED3,K1控制LED2,K2控制LED1,K3控制LED0。思考:3.3.2 单个按钮型开关输入信号 开关去抖动的处理分为硬件去抖动和软件去抖动。硬件去抖动增加硬件投入。单片机一般采用软件
3、去抖动。软件去抖动是执行一段软件延时程序(10ms左右)。需关注两个问题:去抖动、判断按键是否抬起。3.3.2 单个按钮型开关输入信号 开关去抖【例3-8】按钮开关。编程实现S1按钮按一下,4个灯一组亮、灭交替。【例3-8】按钮开关。编程实现S1按钮按一下,4个灯一组亮、#include#define uchar unsigned char#define uint unsigned intsbit S1=P32;void dlxms(uint xms) uint t1,t2; for(t1=0;t1xms;t1+) for(t2=0;t2110;t2+);#includevoid main(
4、) P1=0 x0f; while(1) S1=1; if(S1=0) dlxms(10); if(S1=0) dlxms(10); P1=P1; while(S1=0); dlxms(10); void main( )【例3-9】开始是所有的灯都亮,按一下S1,灯变为500ms闪烁,再按一下,变为全亮。分析: 相当于S1为一个控制开关,控制着灯的亮、灭闪烁; 与例题3-8不同。定义一个位单元,按键每动作一次,该位单元取反:该单元为0时,灯全亮,该单元为1时,灯闪烁。【例3-9】开始是所有的灯都亮,按一下S1,灯变为500msinclude#define uchar unsigned char
5、#define uint unsigned intsbit S1=P32;bit key=0; /定义一个位,存储按键的动作(偶、奇)void dlxms( uint xms) uint t1, t2; for( t1=0; t1xms; t1+) for( t2=0; t2110; t2+);includevoid keyscan()/键检索 S1=1; if( S1=0) dlxms(10); if( S1=0) dlxms(10); key=key;/取反 while( S1=0); void keyscan()/键检索void main( ) P1=0 x00; while(1) ke
6、yscan();/调用键检索 if(key=0) P1=0 x00; else dlxms(500); P1=P1; void main( )3.3.3 多个按钮型开关键盘1.键号、键值和键值表(1)键号:用户在设计键盘程序时,为每一个按键定义一个号码,该号码称为键号。(2)键值:用户在设计键盘程序时,每一个按键根据某种得法得到与其他按键不一样的值,该数值称为按键的键值。(3)键值表:用户在设计键盘程序时,将所有按键的键值,按照一定的顺利,在code区建立一个表格,该表格称为键值表。3.3.3 多个按钮型开关键盘1.键号、键值和键值表3.3.3 多个按钮型开关键盘2.独立式键盘接口技术 当按键
7、的数量比较少(8)时,可采用独立式按键硬件结构。独立式按键是指直接采用一根 I/O口线构成的单个按键电路。每个独立式按键单独占用一根I/O口线,每根I/O口线上的按键的工作状态不会影响其他I/O口线的工作状态。3.3.3 多个按钮型开关键盘2.独立式键盘接口技术【例3-10】独立式按键示例。P1口作为并行接口按键的输入口,P3口接共阳极LED显示器,编程显示按键的键号07。分析:1位共阳极静态显示。0号键按下时,P1口的内容为11111110B;7号键按下时,P1口的内容为01111111B。【例3-10】独立式按键示例。P1口作为并行接口按键的输入口#include#define uchar
8、 unsigned char#define uint unsigned intuchar data keycode=8;/键值的初值设为8uchar 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_xms(uint xms)/延时xms毫秒 uint t1,t2; for(t1=xms;t10
9、;t1-) for(t2=110;t20;t2-);void dir()/显示函数 P3=dirtabdir_buf;#includevoid 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)/查表得键号 keycode=keycode+1; if(keycode=8) break;
10、while(P1!=0 xff);/等待键抬起 void keyscan( )/键盘扫描函数void main( ) dir_buf=8; /缓冲区送8,显示- dir( ); while(1) keyscan( ); dir_buf=keycode; /键号送显示缓冲区 dir( ); void main( )3.矩阵键盘接口 当按键的数量比较多时,采用行列式键盘。行列式键盘又称为矩阵式键盘。 (1)行列式键盘的硬件结构:行列式键盘的结构比较简单,按键设置在行、列的交点上。 (2) 矩阵键盘行列扫描法分三步进行。1)第一步判断是否有按键按下。将全部行线置低电平,然后检测列线的电平状态。有且只
11、有一列的电平为低电平,则表示键盘中有键按下。若所有列线均为高电平,则键盘中无键按下。2)第二步是判断闭合按键具体所在的位置。逐行将行线置低电平,然后检测列线的电平状态。低电平列线相连的按键就是闭合按键。3)第三步确定闭合按键的键值编码。将所有行线电平状态与所有列线电平状态进行组合,就可以得到该闭合按键的键值编码。有按键按下时,只有一条行线的电平是低电平,其余行线的电平是高电平;只有一条列线的电平是低电平,其余列线的电平是高电平。+3.矩阵键盘接口 当按键的数量比较多 行线P14、P15、P16、P17分别与单片机引脚P1.4、P1.5、P1.6、P1.7相连,列线P10、P11、P12、P13
12、分别与单片机引脚P1.0、P1.1、P1.2、P1.3相连。 行线P14、P15、P16、P17分别与单片机引脚P1 若采用行列扫描法,先判断是否有按键按下。给P1口赋值0 x0f,所有列线置高电平,所有的行线置低电平,读列线的电平状态。若所有列线都是高电平,则表示没有按键按下;反之,有按键按下。再确定闭合按键具体的位置,采用逐行送低电平的方法。 (1)给P1口赋值0 xef,然后读列线的电平状态。若有按键按下,则与该按键相连列线的电平为低电平。按键的键值编码就是行线和列线的电平状态组合,即为P1口8个引脚的电平状态。由之可得,加号键的键值编码是11100111(0 xe7),数字3的键值编码
13、是11101011(0 xeb),数字2的键值编码是11101101(0 xed),数字1的键值编码是11101110(0 xee)。 若采用行列扫描法,先判断是否有按键按下。给P1 (2)若第一行没有按键按下,列线的电平状态都是高电平,P1口的值没有变化,还是0 xef。这时检测第二行是否有按键按下。给P1口赋值0 xdf,若有按键按下,通过读列线的电平状态可确定按键具体位置。减号键的键值编码是11010111(0 xd7),数字6的键值编码是11011011(0 xdb),数字5的键值编码是11011101(0 xdd),数字4的键值编码是11011110(0 xde)。 (3)若第一行和
14、第二行都没有按键按下,给P1口赋值0 xbf,检测第三行是否有按键按下。第三行按键按下时的编码分别是:乘号键的键值编码是10110111(0 xb7),数字9的键值编码是10111011(0 xbb),数字8的键值编码是10111101(0 xbd),数字7的键值编码是10111110(0 xbe)。单片机C语言-第3章51单片机P0-P3口的C51编程3 (4)若第一行、第二行和第三行都没有按键按下,给P1口赋值0 x7f,检测第四行是否有按键按下。第四行的按键按下时的编码分别是:除号键的键值编码是01110111(0 x77),等于号键值编码是01111011(0 x7b),数字0的键值编
15、码是01111101(0 x7d),CE清除键键值编码是01111110(0 x7e)。 (4)若第一行、第二行和第三行都没有按键按下,线翻转发法主要分分三步进行。第一步将所有列线置低电平,所有行线置高电平,然后读所有行线电平状态。如果所有行线电平状态是高电平,则表示没有按键按下;反之,则表示有按键按下,保留所有行线电平状态。行线电平状态即为行线相关的闭合按键的键值编码高半部分或低半部分。有且只有一条行线的电平由高电平变为低电平,这种现象称为电平翻转,这是这种方法命名由来。第二步将所有行线置低电平,所有列线置高电平,然后读所有列线电平状态。如果所有列线电平状态是高电平,则表示没有按键按下。如果
16、存在一条列线的电平由高电平变为低电平,则表示有按键按下,保留所有列线电平状态。列线电平状态即为列线相关的闭合按键的键值编码的低半部分或高半部分。线翻转发法主要分分三步进行。第三步确定闭合按键的键值编码。将第一步得到的行线相关键值编码的高半部分或低半部分与第二步得到的列线相关的键值编码低半部分或高半部分进行组合,就得到了闭合按键完整的键值编码。第三步确定闭合按键的键值编码。将第一步得到的行线相关键值编码若采用线翻转发法,先给P1口赋值0 xf0,所有行线置高电平,所有的列线置低电平,读行线的电平状态。若有按键按下,有且只有一条行线的电平是低电平,行线电平状态即为与行线相关的闭合按键的键值编码高4
17、位。高4位键值编码键号编码键号编码键号编码键号编码111102111031110加号1110411015110161101减号1101710118101191011乘号1011清除键011100111等于号0111除号0111若采用线翻转发法,先给P1口赋值0 xf0,所有行线置高电平,再给P1口赋值0 x0f,所有列线置高电平,所有的行线置低电平,读列线的电平状态。若有按键按下,有且只有一条列线的电平是低电平,列线电平状态即为与列线相关的闭合按键的键值编码低4位。键号编码键号编码键号编码键号编码111102110131011加号0111411105110161011减号01117111081
18、10191011乘号0111清除键111001101等于号1011除号0111低4位键值编码再给P1口赋值0 x0f,所有列线置高电平,所有的行线置低电平将闭合按键键值高4位编码和低4位编码进行组合,就可得到闭合按键键值的编码。与行列扫描法相比,线翻转发法会占用更多的数据储存空间。但是,行列扫描法实现代码较长,线反转法实现程序较简单。 闭合按键键值编码键号高4位低4位键号高4位低4位键号高4位低4位键号高4位低4位111101110211101101311101011加号111001110 xee0 xed0 xeb0 xe7411011110511011101611011011减号11010
19、1110 xde0 xdd0 xdb0 xd7710111110810111101910111011乘号101101110 xbe0 xbd0 xbb0 xb7清除键01111110001111101等于号01111011除号011101110 x7e0 x7d0 x7b0 x77将闭合按键键值高4位编码和低4位编码进行组合,就可得到闭合按【例3-11】44矩阵键盘示例。P1.4P1.7接列线, P1.0P1.3接行线。P2口接LED显示数码管,显示按键的号码0F。分析:当键盘的结构在行和列的数量之和8时,将行的信息放在高位(或低位),将列的信息放在低位(或高位),二者组成一个字节就可以了。通
20、用的算法是,将行的信息转变为行号(00001111),将列的信息转变为列号(00001111)。然后,将行号作为高4位(或低4位),将列号作为低4位(或高4位),二者组成一个字节。 【例3-11】44矩阵键盘示例。P1.4P1.7接列线,#include#define uchar unsigned char#define uint unsigned intuchar 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
21、, 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, 0 xbe,0 xbd,0 xbb,0 xb7,0 x7e,0 x7d,0 x7b,0 x77; /键值表void delay(uint) ;void keyscan( ) ; /键盘扫描函数void dir( ) ; /显示函数#includevoid main( )i2=16; dir_buf=16; /显示- while(1) k
22、eyscan( ); /键扫描程序 dir_buf=i2; /显示- dir( ) ; void dir( ) /显示函数 P2=dirtabdir_buf ;void delay(uint xms) /延时xms uint t1, t2; for( t1=xms; t10; t1-) for( t2=110; t20; t2-) ;void main( )void keyscan( )/键扫描 uchar code_h, code_l, i1;/ code_h为行输出值,code_l为列输入值 P1=0 xf0; /所有的行输出0 code_l=P1; /读列值 code_l=code_l&
23、0 xf0; /屏蔽掉低4位 if(code_l!=0 xf0) /如果有键按下 delay(6); /延时,消抖动,再读 code_l=P1; code_l=code_l&0 xf0;/屏蔽掉低4位 if(code_l!=0 xf0)/有键按下吗? code_h=0 xfe; for(i1=0; i14; i1+) P1=code_h; code_l=P1; code_l=code_l&0 xf0; if(code_l=0 xf0) code_h=(code_h1)|0 x01; void keyscan( )/键扫描else break; P1=0 xff; /等待键抬起 while(P1
24、!=0XFF); code_h=code_h&0 x0f; /行的信息屏蔽掉高4位 key=code_h+code_l; /得到计算键值(列值在高4位上,行值在 低4位上) for(i2=0; i216; i2+) /i2是键号 if(key=keytabi2) break; else break;3.4 实验 实验1 闸刀型开关输入/8段LED静态显示输出 实验目的:掌握51单片机并行I/O的输入/输出基本操作,掌握闸刀型开关输入信号的编程方法,掌握8段LED显示的编程方法。 电路分析:P1.0接闸刀型开关K0,P3接共阳极显示数码管。编程实现K0闭合时,显示“H”; K0断开时,显示“F”
25、。3.4 实验 实验1 闸刀型开关输入/8段LED静#includesbit 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; else dir_buf=0; dir(); #include实验2 按钮型开关输入/8段LED静态显示输出实验目的:掌握51单片机并行I/O输入/输出基本操作,掌握按钮型开关输入信号的编程方法,掌握8段LED显示的编程方法。电路分析:P3.2 和P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教职员工消防安全岗位责任制
- 轴线投测施工工艺流程
- 预制阳台吊装施工工艺流程
- 消防安全台账制度
- 2026年环保专员环保法律法规应用培训方案
- 2025年中国双机涂胶机市场调查研究报告
- 2025年中国单相电能量芯片市场调查研究报告
- 2025年中国凹凸棒抗盐土市场调查研究报告
- 2025年中国全棉印花套装市场调查研究报告
- 2025年中国人造石砂光机市场调查研究报告
- 2026年宝鸡市辛家山马头滩林业局招聘(12人)笔试参考试题及答案详解
- 2026届甘肃省武威市天祝藏族自治县第一中学高三下学期学科素养评价练习(二)历史试题(含答案)
- 养老护理员服务意识与责任感培养
- 2026年天津市和平区中考一模英语试卷和答案
- 地理信息安全在线培训考试系统题库及答案
- 2026中国生物可吸收胶原蛋白植入物行业发展形势与前景动态预测报告
- 2026年江苏省南通市中小学教师招聘考试真题及答案
- DB61T 5113-2024 建筑施工全钢附着式升降脚手架安全技术规程
- 建立模糊专家系统实验报告
- 医院科室人员信息一览表
- 家庭社会工作PPT完整全套教学课件
评论
0/150
提交评论