标题: 键盘扫描程序用P3口有问题,P3口有什么不同么? [打印本页]

作者: 我很丑    时间: 2013-11-29 00:32
标题: 键盘扫描程序用P3口有问题,P3口有什么不同么?
本帖最后由 我很丑 于 2013-11-29 02:17 编辑

下面是4x4键盘扫描程序,按一个键后用一个共阳数码管显示一个值,用P1口接键盘正常显示,程序和接口都改到P3后只有第一行正常显示,按其它行都不变,这个是什么原因?
如果把P3作为显示输出,就是把下面程序中的P2都改成P3也是显示不正常.


#include<reg52.h>
unsigned char code duanma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳数码管显示0123456789abcdef
void delay(unsigned int t)    //延时函数 晶振12M时约1m秒
{
unsigned int j;
for(;t>0;t--)
for(j=0;j<124;j++);
}

void main(void)
{
unsigned char key;
while(1)
{
  P1=0xf0;         //11110000
  if(P1!=0xf0)     //是否有键按下
  {
   delay(50);     //去抖
   if(P1!=0xf0)   
   {
    key=P1&0xf0;
    P1=key|0x0f;
   }
  }
  
  switch(P1)
  {
   case 0xee:P2=duanma[3];break;
   case 0xde:P2=duanma[2];break;
   case 0xbe:P2=duanma[1];break;
   case 0x7e:P2=duanma[0];break;
   case 0xed:P2=duanma[7];break;
   case 0xdd:P2=duanma[6];break;
   case 0xbd:P2=duanma[5];break;
   case 0x7d:P2=duanma[4];break;
   case 0xeb:P2=duanma[11];break;
   case 0xdb:P2=duanma[10];break;
   case 0xbb:P2=duanma[9];break;
   case 0x7b:P2=duanma[8];break;
   case 0xe7:P2=duanma[15];break;
   case 0xd7:P2=duanma[14];break;
   case 0xb7:P2=duanma[13];break;
   case 0x77:P2=duanma[12];break;
  }
}
}

作者: admin    时间: 2013-11-29 13:57
p3的第2功能没有使用吧
作者: 我很丑    时间: 2013-11-29 15:09
没有使用,只是作为IO口用.
作者: 我很丑    时间: 2013-11-29 15:30
我用的是89C52换过89C54也是一样的现象,是不是这个P3口用于IO作用还应该加什么命令啊?
作者: 我很丑    时间: 2013-11-29 18:55
{:soso_e127:}找到毛病了,应该是开发板上面电路的问题,单独用面包板搭电路就好了.
作者: 我很丑    时间: 2013-11-29 19:30
本帖最后由 我很丑 于 2013-11-29 19:32 编辑

找到毛病了,开发板线路的问题,断开板上的RXD就好了.

作者: admin    时间: 2013-11-30 19:33
小问题




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1