标题: 单片机程序只能扫描行 不能扫描列 求大神帮助 [打印本页]

作者: ludoctor    时间: 2019-12-25 09:25
标题: 单片机程序只能扫描行 不能扫描列 求大神帮助
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit B1=P3^6;
sbit B2=P3^7;
sbit buzzer=P3^5;
sbit clear=P3^4;       // ???????B1,B2,BUZZER,CLEAR
uchar code distab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code keytab[8][8]={{1,2,3,4,5,6,7,8},         // ????????
       {9,10,11,12,13,14,15,16},
       {17,18,19,20,21,22,23,24},
       {25,26,27,28,29,30,31,32},
       {33,34,35,36,37,38,39,40},
       {41,42,43,44,45,46,47,48},
       {49,50,51,52,53,54,55,56},
       {57,58,59,60,61,62,63,64},
      };      
uchar bed_NO;
uchar btime;
uchar itime;       //???????bed_NO??uchar btime??uchar itime
void delay(uint x)         //???????????
{   uint i,j;
for(i=0;i<x;i++)
{
  for(j=0;j<10;j++)
  {;;}
}
}
void display(void)        //??????????
{
uchar a10,a1;
a10=bed_NO/10;
a1=bed_NO%10;
P1=distab[a10];
B1=1;
delay(10);
B1=0;
P1=distab[a1];
B2=1;
delay(10);
B2=0;
}
void key(void)             //???????
{
uchar hang,lie;
P0=0x00;P2=0xff;
delay(1);         
if(P2!=0xff)
{
  delay(5);       //????5???????????
  if(P2!=0xff)
  {
   switch(P2&0xff)        //??????
    {
    case 0xfe:lie=0;break;
    case 0xfd:lie=1;break;
    case 0xfb:lie=2;break;
    case 0xf7:lie=3;break;
    case 0xef:lie=4;break;
    case 0xdf:lie=5;break;
    case 0xbf:lie=6;break;
    case 0x7f:lie=7;break;
    }
  P2=0xff;P0=0xff;
  switch(P0&0xff)       // ??????
    {
    case 0xfe:hang=0;break;
    case 0xfd:hang=1;break;
    case 0xfb:hang=2;break;
    case 0xf7:hang=3;break;
    case 0xef:hang=4;break;
    case 0xdf:hang=5;break;
    case 0xbf:hang=6;break;
    case 0x7f:hang=7;break;
    }
  P2=0xff;P0=0x00;
  while(P2!=0xff);
  bed_NO=keytab[hang][lie];TR0=1;       //??????????bed_NO
  }
else
  bed_NO=0;
}  
}
void time_init(void)        // ????????????
{
TMOD=0x01;
TH0=(65536-8333)/256;        //  ?????
TL0=(65536-8333)%256;
EA=1;
ET0=1;
}
void time(void) interrupt 1 using 1      // ?????ж??
{
TH0=(65536-8333)/256;
TL0=(65536-8333)%256;
itime++;
if(itime>=100)
{
  itime=0;
  btime++;
  if(btime>3){TR0=0;btime=0;}
  buzzer=!buzzer;
}
}
void main(void)
{
time_init();
for(;;)
{
  key();
  display();
  if(TR0==0){buzzer=1;}
  if(clear==0)           //???????????
  {
   delay(10);
   if(clear==0)
   {
    bed_NO=0;
   }
   }
}
}

新建文件夹.rar

42.52 KB, 下载次数: 6


作者: zhy123654    时间: 2019-12-25 17:34
你这问的,什么叫只能扫描行 不能扫描列,问的也不清楚,如果说的是这个二维数组,二维数组是没有多行单列这种概念的
作者: man1234567    时间: 2019-12-26 18:21
zhy123654 发表于 2019-12-25 17:34
你这问的,什么叫只能扫描行 不能扫描列,问的也不清楚,如果说的是这个二维数组,二维数组是没有多行单列 ...

可能指8*8键盘只扫到行出不了列的意思,这样的程序网上大把可找。
作者: liuyongjun000a    时间: 2019-12-26 20:27
这程序出错了,P0=0xff;
  switch(P0&0xff)       //
这个P0已经给值了,后面一名开关语言还有什么用。




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