1、前言
线与
开关合上后,都是0(0&1 = 0)即,两端只要有一端是0,合上就是0,两端都是1,合上才是1;
线或
右边是高阻态;左边是0,合上就是0,左边是1,合上就是1.
2、独立键盘电路图
51单片机,P1、P2、P3均自带上拉电阻,只有P0需要单独接上拉电阻。
3、独立键盘的驱动原理:
查I/O口的状态;
检查过程,先给对应的I/O口置1,再读这个I/O口,若还是1,说明按键未被按下,若是0说明按键按下了。
例如:
P3 = 0xff; //需要先将I/O口输出1.,只有先输出1,才能被当做输入使用。
//按键按下,二极管亮,按键松,二极管灭;按键按下后数码管示数加1
#include sbit key1 = P3^2; sbit led1 = P2^0; unsigned char code smg_du[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void main() { P3 = 0xff; unsigned char num; while(1) { if(key1 == 0) { led1 = 0; //灯亮 num++; if(num ==10) num = 0; while(!key1);//按键按下时间相较单片机执行时间,很长,导致按一下,数码管跳变,故添加词条代码 } else led1 =1; //灯灭 P1 = smg_du[num]; } } 左图为软件消抖,右图为硬件消抖; //按键时间一般都20ms, #include sbit key1 = P3^2; sbit led1 = P2^0; unsigned char code smg_du[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //12MHz下,延时50us void delay_50us(unsigned int t) { unsigned char j; for(;t>0;t--); for(j =19;j>0;j--); } void main() { P3 = 0xff; unsigned char num; while(1) { if(key1 == 0) { delay_50us(200);//延时5ms if(key1 == 0) { led1 = 0; //灯亮 num++; if(num ==10) num = 0; while(!key1);//按键按下时间相较单片机执行时间,很长,导致按一下,数码管跳变,故添加词条代码 } delay_50us(200);//延时5ms; while(!key1); } else led1 =1; //灯灭 P1 = smg_du[num]; } }
上一篇:80C51定时器中断
下一篇:数码管简介
设计资源 培训 开发板 精华推荐
- MIC2182,适用于多种应用的高效同步降压稳压器 DC/DC 转换评估板
- uPG2250T5N-EVSAW24-A,用于评估 NEC uPG2250T5N 功率放大器性能的评估板
- DC1625A-D,使用 LTC4227-4 双路理想二极管和热插拔控制器的演示板
- #第四届立创大赛#迷你绘图机
- 0.8 至 3.3V DC 至 DC 单输出笔记本电源
- EVAL01-HMC1197LP7F,基于 HMC1197LP7FE 正交调制器 100 至 4000 MHz 正交调制器的评估板,带小数 N PLL 和压控振荡器
- Cube-415_USB显示器
- 扩展灯板12孔
- DAC0832波形发生器_基于51单片机
- NCV2902DTBR2G 维恩桥振荡器运算放大器的典型应用