问大家一个关于IO口接受点阵键盘的问题~~

光行天下 2012-06-01 11:12:43
我用的是AVR单片机


最近学长送我一个 4*4 点阵键盘,8个接口,4个控制4列,4个控制4行。


我想象中以为是用PINC 接受每按下一个按键得出的唯一电平序列,然后用B口的8个小灯显示,记录这个序列。在代码里判断这个序列后 ,执行自己想要的操作,比如:数字一按键 就是使变量a为1,数字二按键 就是使变量a为2.


但实际操作中发现,这样做输出的是不稳定的电平,每次按复位键都会有不同的变化....这真难到我了。。


这是我的代码:
unsigned char a;
void main (void)
{
DDRB=0XFF;
DDRC=0x00;
//PORTD=0X0F;
//PORTB=0xf0;

while(1)
{
PORTB=PINC;
}
//PORTB=0x0f;

}
...全文
87 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
光行天下 2012-06-01
  • 打赏
  • 举报
回复
我想实现这个功能,该如何做呢~?~~~求教各位啦~~~
光行天下 2012-06-01
  • 打赏
  • 举报
回复
后来Q问学长,他要我做一个滤波处理。我写了代码后,显示还是不对劲:不论判断句改成什么,if里面的PORTB都会执行.....呜呜~




我写了如下代码:

void delay(void)
{
int a=0;
for(a=0;a<1;a++);
}

void main(void)
{
DDRB=0xff;
DDRC=0x00;
while(1)
{
if((PINC&0x41)==0) //这里判断PIN的值应该和里面if的一样,但是不论我怎么改,最内部的PORTB=0x0f都会显示....
{
delay();
if((PINC&0x44)==0)
{
PORTB=0x0f;
}
}

}

}

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧