网站导航固定代码o2o网站建设价格
【实验目的】
 独立按键的识别方法、键盘消抖等。
 【实验现象】
 每按一次独立键盘的S2键,与P1口相连的八个发光二极管中点亮的一个往下移动一位。
 【实验说明】
 关于按键去抖动的解释,我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。
 【硬件电路】
 
 
 【程序代码】(程序源码在本博客资源里边,可自行下载使用)
 //独立按键的识别方法、键盘消抖等。
 //现象:每按一次独立键盘的S2键,与P1口相连的八个发光二极管中点亮的一个往下移动一位。
 #include <reg52.h>
 sbit BY1=P3^5; //定义按键的输入端S2键
 unsigned char count; //按键计数,每按一下,count 加1
 unsigned char temp;
 unsigned char a,b;
 void delay10ms(void) //延时程序
 {
 unsigned char i,j;
 for(i=40;i>0;i–)
 for(j=248;j>0;j–);
 }
 key() //按键判断程序
 {
 if(BY1=0) 
 //此处实际代码为if()判断P3^4口的状态 是否为0 (此编译器不支持)
 //判断是否按下键盘,当单片机上电时所有IO 口为高电平,
 //S2键一端接地另一端接P3.4,所以当键被按下时P3.4口直接接地,
 //此时检测P3.4肯定为低电平。
 {
 delay10ms(); //延时,软件去抖动干扰
 if(BY1=0) //此处实际代码为if()判断P3^4口的状态 是否为0 (此编译器不支持)//再次检测确认按键按下
 {
 count++; //按键计数加1
 if(count=8) //计8次重新计数 //此处实际代码为判断count变量是否为8
 {
 count=0; //将count清零
 }
 }
 while(BY1==0); //等待按键释放,如果键未释放则一直在此等待。
 }
 }
 move() //广告灯向下移动移动函数
 {
 a=temp<<count; //这三句为一个循环移位
 b=temp>>(8-count); 
 P1=a|b; 
 }
 main()
 {
 count=0; //初始化参数设置
 temp=0xfe;
 P1=0xff;
 P1=temp;
 while(1) //永远循环,扫描判断按键是否按下
 { 
 key(); //调用按键识别函数
 move(); //调用广告灯移动函数
 }
 }
