找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机程序只能扫描行 不能扫描列 求大神帮助

[复制链接]
跳转到指定楼层
楼主
ID:667884 发表于 2019-12-25 09:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
30黑币
#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

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

使用道具 举报

沙发
ID:437615 发表于 2019-12-25 17:34 | 只看该作者
你这问的,什么叫只能扫描行 不能扫描列,问的也不清楚,如果说的是这个二维数组,二维数组是没有多行单列这种概念的
回复

使用道具 举报

板凳
ID:584814 发表于 2019-12-26 18:21 | 只看该作者
zhy123654 发表于 2019-12-25 17:34
你这问的,什么叫只能扫描行 不能扫描列,问的也不清楚,如果说的是这个二维数组,二维数组是没有多行单列 ...

可能指8*8键盘只扫到行出不了列的意思,这样的程序网上大把可找。
回复

使用道具 举报

地板
ID:636210 发表于 2019-12-26 20:27 | 只看该作者
这程序出错了,P0=0xff;
  switch(P0&0xff)       //
这个P0已经给值了,后面一名开关语言还有什么用。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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