当前位置: 首页 > news >正文

app免费制作平台下载河北seo网站优化报价

app免费制作平台下载,河北seo网站优化报价,在线看seo网站,wordpress 首页描述IO 的使用–按键 本文主要涉及8051单片机按键的使用#xff0c;包括独立按键以及矩阵按键的使用以及其原理#xff0c;其中代码实例包括: 1.独立按键 K1 控制 D1 指示灯亮灭 2.通过数码管显示矩阵按键 S1-S16 按下后键值 0-F 文章目录 IO 的使用--按键一、按键消抖二、独立按…IO 的使用–按键 本文主要涉及8051单片机按键的使用包括独立按键以及矩阵按键的使用以及其原理其中代码实例包括: 1.独立按键 K1 控制 D1 指示灯亮灭 2.通过数码管显示矩阵按键 S1-S16 按下后键值 0-F 文章目录 IO 的使用--按键一、按键消抖二、独立按键独立按键 K1 控制 D1 指示灯亮灭 二、 矩阵按键通过数码管显示矩阵按键 S1-S16 按下后键值 0-F 按键是一种电子开关使用时轻轻按开关按钮就可使开关接通当松开手时, 开关断开。 在了解按键之前我们需要先了解一下按键消抖 一、按键消抖 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时电压信号 如下图所示 由于机械点的弹性作用按键开关在闭合时不会马上稳定的接通在断开时也不会一下子断开因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间的长短由按键的机械特性决定的一般为 5ms 到 10ms。 按键消抖有两种方式一种是硬件消抖另一种是软件消抖。为了使电路更加简单通常采用软件消抖。 常用的软件去抖动方法 1先设置 IO 口为高电平由于开发板 IO 都有上拉电阻所以默认 IO 为高 电平。 2读取 IO 口电平确认是否有按键按下。 3如有 IO 电平为低电平后延时几个毫秒。 4再读取该 IO 电平如果仍然为低电平说明按键按下。 5执行按键控制程序。 二、独立按键 独立按键电路构成是由各个按键的一个管脚连接在一起接地按键其他引脚分别接到单片机 IO 口。 独立按键的原理图如下 从上图中可以看出4 个独立按键的控制管脚连接到 51 单片机的 P3.0-P3.3脚上。其中 K1 连接在 P3.1 上K2 连接在 P3.0 上K3 连接在 P3.2 上K4 连接在 P3.3 上。4 个按键另一端全部连接在 GND当按键按下后对应 IO 口即为低电平。 独立按键 K1 控制 D1 指示灯亮灭 #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; //定义独立按键控制脚 sbit KEY1P3^1; sbit KEY2P3^0; sbit KEY3P3^2; sbit KEY4P3^3; //定义 LED1 控制脚 sbit LED1P2^0; //使用宏定义独立按键按下的键值 #define KEY1_PRESS 1 #define KEY2_PRESS 2 #define KEY3_PRESS 3 #define KEY4_PRESS 4 #define KEY_UNPRESS 0void delay_10us(u16 ten_us) { while(ten_us--); }u8 key_scan(u8 mode) {static u8 key1;if(mode)key1;//连续扫描按键if(key1(KEY10||KEY20||KEY30||KEY40))//任意按键按下{delay_10us(1000);//消抖key0;if(KEY10)return KEY1_PRESS;else if(KEY20)return KEY2_PRESS;else if(KEY30)return KEY3_PRESS;else if(KEY40)return KEY4_PRESS;}else if(KEY11KEY21KEY31KEY41) //无按键按下{key1;}return KEY_UNPRESS; } void main() { u8 key0; while(1) {keykey_scan(0);if(keyKEY1_PRESS)//检测按键 K1 是否按下LED1!LED1;//LED1 状态翻转 } }key_scan 函数带一个形参 mode该参数用来设定是否连续扫描按键如果mode 为 0只能操作一次按键只有当按键松开后才能触发下次的扫描这样做的好处是可以防止按下一次出现多次触发的情况。如果 mode 为 1函数是支持连续扫描的即使按键未松开在函数内部有 if(mode1)这条判断语句因此 key 始终是等于 1 的所以可以连续扫描按键当按下某个按键会一直返回这 个按键的键值这样做的好处是可以很方便实现连按操作. 二、 矩阵按键 无论是独立键盘还是矩阵键盘单片机检测其是否被按下的依据都是一样的也就是检测与该键对应的 I/O 口是否为低电平。独立键盘有一端固定为低电平此种方式编程比较简单。 而矩阵键盘两端都与单片机 I/O 口相连因此在检测时需编程通过单片机 I/O 口送出低电平。检测方法有多种最常用的是行列扫描和线翻转法。 行列扫描法检测时先送一列为低电平其余几列全为高电平(此时我们确定了列数)然后立即轮流检测一次各行是否有低电平若检测到某一行为低电平(这时我们又确定了行数)则我们便可确认当前被按下的键是哪一行哪一列的用同样方法轮流送各列一次低电平再轮流检测一次各行是否变为低电平这样即可检测完所有的按键当有键被按下时便可判断出按下的键是哪一个键。当然我们也可以将行线置低电平扫描列是否有低电平。从而达到整个键盘的检测。 线翻转法就是使所有行线为低电平时检测所有列线是否有低电平如果有就记录列线值然后再翻转使所有列线都为低电平检测所有行线的值由于有按键按下行线的值也会有变化记录行线的值。从而就可以检测到全部按键。 4*4 矩阵按键引出的 8 根控制线直接连接到 51 单片机的P1 口上。电路中的 P17 连接矩阵键盘的第 1 行P13 连接矩阵键盘第 1 列 通过数码管显示矩阵按键 S1-S16 按下后键值 0-F #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; #define KEY_MATRIX_PORT P1 //使用宏定义矩阵按键控制口 #define SMG_A_DP_PORT P0 //使用宏定义数码管段码口 //共阴极数码管显示 0~F 的段码数据 u8 gsmg_code[17]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay_10us(u16 ten_us) {while(ten_us--); } //行列式扫描方式 u8 key_matrix_ranks_scan(void) {u8 key_value0;KEY_MATRIX_PORT0xf7;//给第一列赋值 0其余全为 1if(KEY_MATRIX_PORT!0xf7)//判断第一列按键是否按下{delay_10us(1000);//消抖switch(KEY_MATRIX_PORT)//保存第一列按键按下后的键值{case 0x77: key_value1;break;case 0xb7: key_value5;break;case 0xd7: key_value9;break;case 0xe7: key_value13;break;}}while(KEY_MATRIX_PORT!0xf7);//等待按键松开KEY_MATRIX_PORT0xfb;//给第二列赋值 0其余全为if(KEY_MATRIX_PORT!0xfb)//判断第二列按键是否按下{delay_10us(1000);//消抖switch(KEY_MATRIX_PORT)//保存第二列按键按下后的键值{case 0x7b: key_value2;break;case 0xbb: key_value6;break;case 0xdb: key_value10;break;case 0xeb: key_value14;break;}}while(KEY_MATRIX_PORT!0xfb);//等待按键松开KEY_MATRIX_PORT0xfd;//给第三列赋值 0其余全为 1if(KEY_MATRIX_PORT!0xfd)//判断第三列按键是否按下{delay_10us(1000);//消抖switch(KEY_MATRIX_PORT)//保存第三列按键按下后的键值{case 0x7d: key_value3;break;case 0xbd: key_value7;break;case 0xdd: key_value11;break;case 0xed: key_value15;break;}}while(KEY_MATRIX_PORT!0xfd);//等待按键松开KEY_MATRIX_PORT0xfe;//给第四列赋值 0其余全为 1if(KEY_MATRIX_PORT!0xfe)//判断第四列按键是否按下{delay_10us(1000);//消抖switch(KEY_MATRIX_PORT)//保存第四列按键按下后的键值{case 0x7e: key_value4;break;case 0xbe: key_value8;break;case 0xde: key_value12;break;case 0xee: key_value16;break;}}while(KEY_MATRIX_PORT!0xfe);//等待按键松开return key_value; }//线翻转式扫描方式 u8 key_matrix_flip_scan(void) { static u8 key_value0; KEY_MATRIX_PORT0x0f;//给所有行赋值 0列全为 1 if(KEY_MATRIX_PORT!0x0f)//判断按键是否按下 {delay_10us(1000);//消抖if(KEY_MATRIX_PORT!0x0f) { //测试列 KEY_MATRIX_PORT0x0f; switch(KEY_MATRIX_PORT)//保存行为 0按键按下后的列值 {case 0x07: key_value1;break;case 0x0b: key_value2;break;case 0x0d: key_value3;break;case 0x0e: key_value4;break; } //测试行 KEY_MATRIX_PORT0xf0; switch(KEY_MATRIX_PORT)//保存列为 0按键按下后的键值 {case 0x70: key_valuekey_value;break;case 0xb0: key_valuekey_value4;break;case 0xd0: key_valuekey_value8;break;case 0xe0: key_valuekey_value12;break; }while(KEY_MATRIX_PORT!0xf0);//等待按键松开}}elsekey_value0;return key_value; }void main() { u8 key0; while(1) { keykey_matrix_ranks_scan(); if(key!0) SMG_A_DP_PORTgsmg_code[key-1];//得到的按键值减 1 换算成数组下标 对应 0-F 段码 } }上述学习资料都是来自普中科技
http://www.hkea.cn/news/14301927/

相关文章:

  • 内蒙古电子商务网站wordpress lens 主题
  • 庐江县建设局网站信息互联网推广
  • 网站建设规划文档制作视频网站建设
  • 网站怎样在360做优化科技绘画作品图片大全
  • 山东省建设备案网站审批表oa系统办公软件怎么用
  • 宁波seo网络推广公司排名百度seo刷排名网址
  • 苏州网站建设布局网站seo优缺点
  • 智能科技网站模板汉鼎中国 网站建设
  • 建立网站就可以赚钱了吗开个网要多少钱
  • 免费网站一键生成印度软件外包
  • 长沙臻钬建站活动方案平面设计最好的网站
  • 推荐 网站空间公司网站开发语言
  • 从58做网站怎么做网站建设实训报告收获
  • 投标网站建设租整套房做民宿的网站
  • 青县做网站个人可以建设哪些网站
  • 邯郸开发网站有哪些开源手机网站模板
  • 肥西上派网站开发沈阳建站
  • 什么是网站根目录网站seo优化方案项目策划书
  • 河北沙河市规划局或建设局网站广州品牌策划公司有哪些
  • 永川区做网站临海手机网站设计
  • 电子商务网站怎么建设如何查看网页源代码
  • 建设个人技术网站网站高端设计公司哪家好
  • 贵州省中海工程建设有限公司网站深圳市工程建设交易中心官网
  • 网站建设推广软文发免费广告电话号码
  • 四川网站开发哪家好百度小说排行
  • 可信网站认证图标岳阳做公司网站
  • 企业网站怎样优化公司简介宣传册图片
  • 建立网站主页注意那些方面微网站开发与制作个人总结
  • 想要给网站投稿如何做河南广告制作公司网站
  • 网站图一般做多少分辨率玩具租赁网站开发与实现论文