OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3867|回复: 7

单片机板块人太少了,向大家请教一个6*6矩阵键盘的问题,内有程序和原理图

[复制链接]

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
发表于 2015-11-11 15:22:10 | 显示全部楼层 |阅读模式
5金钱


这是原理图 用的单片机为PIC16F913

最佳答案

查看完整内容[请看2#楼]

问题解决了,是单片机在启动时RC0-2被复用成其他的功能了,设置成普通IO就行了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 15:22:11 | 显示全部楼层
问题解决了,是单片机在启动时RC0-2被复用成其他的功能了,设置成普通IO就行了
回复

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2015-11-11 15:24:26 | 显示全部楼层
那请问你的问题是……???
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 15:24:27 | 显示全部楼层
[mw_shl_code=c,true]void scan() { uchar key_tem; PORTA=0xdf;//1101 1111 PORTC=0xff; key_num=PORTC; key_num=key_num&0xff; if(key_num!=0xff) { delay(10); key_num=PORTC; key_num=key_num&0xff; if(key_num!=0xff) //确实有键按下 { key_tem=key_num; while(key_tem!=0xff) //松手检测 { key_tem=PORTC; key_tem=key_tem&0xff; } switch(key_num) { case 0xdf:key_num=0x11;break; case 0xef:key_num=0x12;break; case 0xf7:key_num=0x13;break; case 0xfb:key_num=0x14;break; case 0xfd:key_num=0x15;break; case 0xfe:key_num=0x16;break; default:break; } } }[/mw_shl_code]
这是我写的检测第一行的程序,现在是没有按键按下,就直接进了if的循环里,最后一直在while循环里出不来了
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 15:24:55 | 显示全部楼层
回复【2楼】hpeng1874:
---------------------------------
好快啊你,看下面
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 15:27:40 | 显示全部楼层
[mw_shl_code=c,true]void scan() { uchar key_tem; PORTA=0xdf;//1101 1111 PORTC=0xff; key_num=PORTC; key_num=key_num&0xff; if(key_num!=0xff) { delay(10); key_num=PORTC; key_num=key_num&0xff; if(key_num!=0xff) //确实有键按下 { key_tem=key_num; while(key_tem!=0xff) //松手检测 { key_tem=PORTC; key_tem=key_tem&0xff; RB2=1; delay(500); RB2=0; delay(500); } switch(key_num) { case 0xdf:key_num=0x11;break; case 0xef:key_num=0x12;break; case 0xf7:key_num=0x13;break; case 0xfb:key_num=0x14;break; case 0xfd:key_num=0x15;break; case 0xfe:key_num=0x16;break; default:break; } } }[/mw_shl_code]
奇怪 上面的怎么看不到void 和if
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 15:28:08 | 显示全部楼层
void scan()
{
uchar key_tem;
PORTA=0xdf;//1101 1111
PORTC=0xff;
key_num=PORTC;
key_num=key_num&0xff;

if(key_num!=0xff)  
{
delay(10);
key_num=PORTC;
key_num=key_num&0xff;

if(key_num!=0xff) //确实有键按下
{
key_tem=key_num;
while(key_tem!=0xff) //松手检测
{
key_tem=PORTC;
key_tem=key_tem&0xff;
RB2=1;
delay(500);
RB2=0;
delay(500);
}
switch(key_num)
{
case 0xdf:key_num=0x11;break;
case 0xef:key_num=0x12;break;
case 0xf7:key_num=0x13;break;
case 0xfb:key_num=0x14;break;
case 0xfd:key_num=0x15;break;
case 0xfe:key_num=0x16;break;
default:break;
}
}
}
回复

使用道具 举报

17

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
328
金钱
328
注册时间
2015-7-3
在线时间
68 小时
 楼主| 发表于 2015-11-11 15:29:38 | 显示全部楼层
真是服了,直接贴代码怎么看不到关键字啊,大家凑活看5楼吧,代码不多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 04:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表