找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2105|回复: 19
打印 上一主题 下一主题
收起左侧

stc15单片机按键无法显示

[复制链接]
跳转到指定楼层
楼主
ID:876099 发表于 2021-8-2 15:09 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我写了一个按键检测程序按下后只显示00,按键不管用不知道哪里有问题希望有大佬帮忙解答一下

单片机源程序如下:
#include <STC15F2K60S2.H>
#define uint unsigned int
#define uchar unsigned char
uchar sce,temp,i;
const uchar LED7Code[]={0xC0,0xF9,0xA4,0xB0,
                        0x99,0x92,0x82,0xF8,        
                        0x80,0x90,0x88,0x83,
                                                0xC6,0xA1,0x86,0x8E        
                       };
void  anjian()
{
  uchar aa,aa1,aa2;
   P1=0xf0;
   if(P1!=0xf0)
   {
    P2=0xff;
     aa=P1;
         P1=0x0f;
         if(P1!=0x0f)
         {aa1=P1;}
   }
   aa2=aa|aa1;
   switch(aa2)
   {
     case  0xee:sce=0;break;
         case  0xed:sce=1;break;
         case  0xeb:sce=2;break;
         case  0xe7:sce=3;break;
         case  0xde:sce=4;break;
         case  0xdd:sce=5;break;
         case  0xdb:sce=6;break;
         case  0xd7:sce=7;break;
         case  0xbe:sce=8;break;
         case  0xbd:sce=9;break;
         case  0xbb:sce=10;break;
         case  0xb7:sce=11;break;
         case  0x7e:sce=12;break;
         case  0x7d:sce=13;break;
         case  0x7b:sce=14;break;
         case  0x77:sce=15;break;
         default:break;
   }
}

void IO_Init()
{
        P0M0 = 0x00;P0M1 = 0x00;  
        P1M0 = 0x00;P1M1 = 0x00;
        P2M0 = 0x00;P2M1 = 0x00;
        P3M0 = 0x00;P3M1 = 0x00;
        P4M0 = 0x00;P4M1 = 0x00;
        P5M0 = 0x00;P5M1 = 0x00;
        P6M0 = 0x00;P6M1 = 0x00;
        P7M0 = 0x00;P7M1 = 0x00;
        P0 = 0x00;P1 = 0x00;P2 = 0xff;P3 = 0x00;
        P4 = 0x00;P5 = 0x00;P6 = 0x00;P7 = 0x00;
}


void main()
{
P2=0;
IO_Init();
while(1)
{
    anjian();
        P0=LED7Code[sce];
}
}   

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

20#
ID:849376 发表于 2021-8-11 13:22 | 只看该作者
做电路图得注意某些特殊功能的引脚
回复

使用道具 举报

19#
ID:876099 发表于 2021-8-10 11:55 | 只看该作者
xuyaqi 发表于 2021-8-7 20:36
stc15 P1口 有ADC功能,硬件结构和普通51不一样,不要用P1口既做输出又做输入来读组合按键键值,换其他口 ...

好的感谢感谢我换成P6不需要任何上拉或下拉就可以实现功能了
回复

使用道具 举报

18#
ID:94031 发表于 2021-8-7 20:36 | 只看该作者
1045964948 发表于 2021-8-7 19:00
但是开发板上面的矩阵按键我加不了下拉电阻所以还是不行,目前我在想办法解决

stc15 P1口 有ADC功能,硬件结构和普通51不一样,不要用P1口既做输出又做输入来读组合按键键值,换其他口。
回复

使用道具 举报

17#
ID:876099 发表于 2021-8-7 19:00 | 只看该作者
但是开发板上面的矩阵按键我加不了下拉电阻所以还是不行,目前我在想办法解决
回复

使用道具 举报

16#
ID:876099 发表于 2021-8-7 19:00 | 只看该作者
谢谢大家我在P1口加了下拉电阻问题得到解决
回复

使用道具 举报

15#
ID:507641 发表于 2021-8-4 11:28 | 只看该作者
        P0M1 = 0;        P0M0 = 0;        //设置为准双向IO口
        P1M1 = 0;        P1M0 = 0;       
        P2M1 = 0;        P2M0 = 0;       
        P3M1 = 0;        P3M0 = 0;       
        P4M1 = 0;        P4M0 = 0;       
        P5M1 = 0;        P5M0 = 0;       
        P6M1 = 0;        P6M0 = 0;       
        P7M1 = 0;        P7M0 = 0;       
回复

使用道具 举报

14#
ID:507641 发表于 2021-8-4 11:26 | 只看该作者
        P0M1 = 0;        P0M0 = 0;        //éèÖÃÎa׼˫Ïò¿ú
        P1M1 = 0;        P1M0 = 0;        //éèÖÃÎa׼˫Ïò¿ú
        P2M1 = 0;        P2M0 = 0;        //éèÖÃÎa׼˫Ïò¿ú
        P3M1 = 0;        P3M0 = 0;        //éèÖÃÎa׼˫Ïò¿ú
        P4M1 = 0;        P4M0 = 0;        //éèÖÃÎa׼˫Ïò¿ú
        P5M1 = 0;        P5M0 = 0;        //éèÖÃÎa׼˫Ïò¿ú
        P6M1 = 0;        P6M0 = 0;        //éèÖÃÎa׼˫Ïò¿ú
        P7M1 = 0;        P7M0 = 0;        //éèÖÃÎa׼˫Ïò¿ú
回复

使用道具 举报

13#
ID:934353 发表于 2021-8-3 15:15 | 只看该作者
1045964948 发表于 2021-8-3 08:55
额,还是没有变化,我看51的仿真里面按键按下后是高电平被拉低,然后我看15里面是低电平被拉高,会不会是 ...

接下拉电阻试试看,15的io口上电复位高电平来着
回复

使用道具 举报

12#
ID:161164 发表于 2021-8-3 09:15 | 只看该作者
1045964948 发表于 2021-8-3 08:55
额,还是没有变化,我看51的仿真里面按键按下后是高电平被拉低,然后我看15里面是低电平被拉高,会不会是 ...

如我所说,灌电流不足以拉低电平
回复

使用道具 举报

11#
ID:876099 发表于 2021-8-3 08:55 | 只看该作者
wulin 发表于 2021-8-2 20:27
1T单片机太快了,在主循环最后加1ms延时试试。

额,还是没有变化,我看51的仿真里面按键按下后是高电平被拉低,然后我看15里面是低电平被拉高,会不会是这个原因
回复

使用道具 举报

10#
ID:213173 发表于 2021-8-2 20:27 | 只看该作者
1045964948 发表于 2021-8-2 19:26
我这个程序在51中运行也没问题,就是在15中就没变化

1T单片机太快了,在主循环最后加1ms延时试试。
回复

使用道具 举报

9#
ID:876099 发表于 2021-8-2 19:26 | 只看该作者
wulin 发表于 2021-8-2 18:51
给你一个示例参考

我这个程序在51中运行也没问题,就是在15中就没变化
回复

使用道具 举报

8#
ID:213173 发表于 2021-8-2 18:51 | 只看该作者
1045964948 发表于 2021-8-2 18:04
我换了开关还是不行

给你一个示例参考
矩阵键盘数码管显示 仿真示例.zip (103.67 KB, 下载次数: 5)

回复

使用道具 举报

7#
ID:876099 发表于 2021-8-2 18:04 | 只看该作者

我换了开关还是不行
回复

使用道具 举报

6#
ID:161164 发表于 2021-8-2 17:25 | 只看该作者
1045964948 发表于 2021-8-2 17:18
但是这样不就是相当于独立按键了吗,请问一下没有实物不用这种电路还有其他办法吗

我也想知道
回复

使用道具 举报

5#
ID:876099 发表于 2021-8-2 17:18 | 只看该作者
lkc8210 发表于 2021-8-2 16:36
Proteus 某些版本的单片机脚灌电流能力不足
引致不能拉底电平
如P1=B11110000

但是这样不就是相当于独立按键了吗,请问一下没有实物不用这种电路还有其他办法吗
回复

使用道具 举报

地板
ID:161164 发表于 2021-8-2 16:36 | 只看该作者
Proteus 某些版本的单片机脚灌电流能力不足
引致不能拉底电平
如P1=B11110000
按下某键
会出现P1=B11110100
而不是P1=B10110000

解决方法:
1. 上真东西
2. 取巧用以下电路代替

回复

使用道具 举报

板凳
ID:876099 发表于 2021-8-2 16:16 | 只看该作者
开心就好hhhh 发表于 2021-8-2 15:59
你程序写的互相矛盾呐,比如下面:
P1=0xf0;
   if(P1!=0xf0)

后面我把这个删了还是不行
回复

使用道具 举报

沙发
ID:934353 发表于 2021-8-2 15:59 | 只看该作者
你程序写的互相矛盾呐,比如下面:
P1=0xf0;
   if(P1!=0xf0)
就很奇怪,你都已经定义了让P0=0xf0了,if语句里当然条件不成立,就进不了if语句,然后 aa2=aa|aa1;也就没有用了,因为你没有改变这三个参数的值,也就是说还是0,所以后面就都错了,所以当然无法通过按键改变显示的值了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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