
写单片机C程序 一定要活用标志位
还有你好像都大四了,怎么这样普通的矩阵键盘程序还看不懂,该好好学习呀 兄弟
I和J 只是一个变量用来决定延时时间的长短 延时是为了消除按键的抖睁或动
毕竟机械按键存在抖动(按下去并不是电平直接就跳变并稳定下来了)
延时是软件消抖 增强系统的稳定性
void main(void){
while(1)
{
if(P3_7==0)//判断是否有按下,为0则按下
{
delay10ms()//延时10MS,去抖动
if(P3_7==0)//再次判宏咐断,如果还为0则真的按下了。
{
count++//每按下一次就加1
if(count==16)//加到16返回0
{
count=0
}
P1=~count//P1口把按下的次数输出,如第一次就是11111110,第二次就厅绝芹扮毕是11111101:十六进制转成IO口的二进制
while(P3_7==0)//直到按键放开才判断下一次按键
}
}
}
P3=0xfe//P3=0b1111
1110,令P3.0=0,同时令高四位为高电平,作好读端口准备(51IO特点)
temp=P3
//读回P3口的状态
temp=temp&0xf0
//temp&1111
0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。
while(temp!=0xf0)
//上步处理后哪侍信,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不方便上图)
{
delay(5)
temp=P3
temp=temp&0xf0//这三句跟上面重复,功能是软件消抖谈磨
while(temp!=0xf0)
//延时一段时间后判断还有按键按下,李轮说明是真有按键按下,进入按键扫描与键值的判断,否则可能是意外抖动引起的,就不进行按键扫描。
{
temp=P3
switch(temp).....
我想注释完应该能读懂,关键是要理解矩阵键盘的扫描原理。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)