找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求解为什么单片机P0.6和P0.7口一直输出高电平(动态扫描矩阵键盘)

[复制链接]
跳转到指定楼层
楼主
ID:901999 发表于 2021-4-25 13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在Proteus仿真的时候P0.6和P0.7口一直输出高电平
如图


我并没有按下任何按键,按理说应该是显示0才对。
程序如下
#include<reg51.h>   
sbit P14=P1^4;     
sbit P15=P1^5;     
sbit P16=P1^6;      
sbit P17=P1^7;
sbit P25=P2^5;
sbit P26=P2^6;

unsigned char code Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   
unsigned char keyval=0;   

void delay()   
{
  unsigned char i;
  for(i=0;i<230;i++);
}



void display(unsigned char k)
{     
        unsigned char a=0;
        P2=0;
  a=Tab[k/10];
        P0=a;
  P25=1;
  delay();
  a=0xff;
  P0=a;
        P25=0;
  a=Tab[k%10];
        P0 = a;
  P26=1;
  delay();
        P26=0;
        a=0xff;
  P0=a;
        //TR0 = 1;
}


void delay20ms(void)  
{
  unsigned char i,j;

  for(i=0;i<100;i++)
  for(j=0;j<60;j++);
}


void main(void)
{
  EA=1;                 
  ET0=1;              
        TMOD=0x01;           
        TH0=(65536-10000)/256;
        TL0=(65536-10000)%256;  
        TR0=1;               
        keyval=0x00;         
        P0=0xff;  
  while(1)               
    {
                        
                        display(keyval);  
    }
}


void time0_interserve(void) interrupt 1
{

TR0=0;                  

P1=0xf0;                 
if((P1&0xf0)!=0xf0)      
        {
                delay20ms();
        
                if((P1&0xf0)!=0xf0)      
                        {
                                P1=0xfe;            
                                if(P14==0)            
                                 keyval=1;            
                                if(P15==0)              
                                 keyval=2;            
                                if(P16==0)            
                           keyval=3;            
                    if(P17==0)            
                           keyval=4;  

                                
                          P1=0xfd;              
                                 if(P14==0)           
                            keyval=5;            
                     if(P15==0)              
                            keyval=6;            
                     if(P16==0)               
          keyval=7;            
                                 if(P17==0)            
                            keyval=8;            

                          P1=0xfb;              
                                if(P14==0)           
                           keyval=9;           
                    if(P15==0)           
                           keyval=10;         
                    if(P16==0)         
                           keyval=11;         
                    if(P17==0)           
                           keyval=12;        

                                P1=0xf7;              
                                if(P14==0)         
                           keyval=13;         
                    if(P15==0)           
                           keyval=14;         
                    if(P16==0)         
                            keyval=15;         
                    if(P17==0)           
                           keyval=16;      
                                }

                                }


  TH0=(65536-500)/256;   
  TL0=(65536-500)%256;  
        TR0=1;                                 

}

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

使用道具 举报

沙发
ID:894154 发表于 2021-4-25 16:55 | 只看该作者
没按按键的话,主函数keyval=0;P0=display(keyval)=display(0)=TAB[0]=0xc0=1100 0000 即P0.7&P0.6为高电平.
回复

使用道具 举报

板凳
ID:275826 发表于 2021-4-25 17:18 | 只看该作者
你这个电路提供不了共阳数码管公共端的高电平,电路错误
回复

使用道具 举报

地板
ID:901999 发表于 2021-4-25 17:26 来自手机 | 只看该作者
ANT1987 发表于 2021-4-25 16:55
没按按键的话,主函数keyval=0;P0=display(keyval)=display(0)=TAB[0]=0xc0=1100 0000 即P0.7&P0.6为 ...

是我搞错了,感谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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