找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2112|回复: 3
收起左侧

写的单片机矩阵键盘的程序不知道那边出现了错误,求大神

[复制链接]
ID:154562 发表于 2017-1-9 15:11 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit keyinx1=P3^0;
  5. sbit keyinx2=P3^1;
  6. sbit keyinx3=P3^2;
  7. sbit keyinx4=P3^3;
  8. sbit keyout1=P3^4;
  9. sbit keyout2=P3^5;
  10. sbit keyout3=P3^6;
  11. sbit keyout4=P3^7;

  12. sbit dula=P2^6;
  13. sbit wela=P2^7;

  14. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  15. uchar zankey[4][4]={
  16.                                    {1,1,1,1},
  17.                                    {1,1,1,1},
  18.                                    {1,1,1,1},
  19.                                    {1,1,1,1}
  20.                                    };

  21. void main(void)
  22. {
  23.         uchar i,j;
  24.         uchar beikey[4][4]={
  25.                                                 {1,1,1,1},
  26.                                                 {1,1,1,1},
  27.                                                 {1,1,1,1},
  28.                                                 {1,1,1,1}
  29.                                                 };
  30.         
  31.         dula=1;           //让右一数码管显示
  32.         P0=table[0];
  33.         dula=0;
  34.         P0=0xff;
  35.         wela=1;
  36.         P0=0xdf;
  37.         wela=0;
  38.         
  39.         TMOD=0x01;           //定义定时器0
  40.         TH0=(65535-200000)>>8;
  41.         TL0=(65535-20000);
  42.         EA=1;
  43.         ET0=1;
  44.         TR0=1;
  45.         
  46.         while(1)
  47.         {
  48.                 for(i=0;i<4;i++)
  49.                 {
  50.                          for(j=0;j<4;j++)
  51.                          {
  52.                                   if(beikey[i][j]!=zankey[i][j])
  53.                                   {
  54.                                           if(beikey[i][j]==0)
  55.                                           {
  56.                                                    dula=1;           
  57.                                                 P0=table[i*4+j];
  58.                                                 dula=0;
  59.                                                 P0=0xff;
  60.                                                 wela=1;
  61.                                                 P0=0xdf;
  62.                                                 wela=0;

  63.                                           }
  64.                                           beikey[i][j]=zankey[i][j];
  65.                                   }
  66.                          }
  67.                 }
  68.         }

  69. }
  70. void T0_time() interrupt 1
  71. {
  72.         uchar i;
  73.         static uchar keyout=0;
  74.         static uchar butter[4][4]={
  75.         {0xff,0xff,0xff,0xff},
  76.         {0xff,0xff,0xff,0xff},
  77.         {0xff,0xff,0xff,0xff},
  78.         {0xff,0xff,0xff,0xff}
  79.         };
  80.         
  81.         TH0=(65535-20000)>>8;
  82.         TL0=(65535-20000);
  83.         
  84.         butter[keyout][0]=(butter[keyout][0]<<1)|keyinx1;
  85.         butter[keyout][1]=(butter[keyout][1]<<1)|keyinx2;
  86.         butter[keyout][2]=(butter[keyout][2]<<1)|keyinx3;
  87.         butter[keyout][3]=(butter[keyout][3]<<1)|keyinx4;
  88.         
  89.         switch(keyout)
  90.         {
  91.                  case 0:keyout1=0;keyout2=1;keyout3=1;keyout4=1;break;
  92.                  case 1:keyout1=1;keyout2=0;keyout3=1;keyout4=1;break;
  93.                  case 2:keyout1=1;keyout2=1;keyout3=0;keyout4=1;break;
  94.                  case 3:keyout1=1;keyout2=1;keyout3=1;keyout4=0;break;
  95.                  default:break;
  96.                
  97.         }

  98.         keyout++;
  99.         keyout&=0x03;
  100.         
  101.         for(i=0;i<4;i++)
  102.         {
  103.                  if((butter[keyout][i]&0x0f)==0x00)
  104.                  {
  105.                           zankey[keyout][i]=0;
  106.                  }
  107.                  else if(butter[keyout][i]&0x0f==0x0f)
  108.                  {
  109.                            zankey[keyout][i]=1;
  110.                  }
  111.         }
  112.         
  113. }
复制代码

求大神帮我看看那边有错误    单片机是郭天祥的板子  不知道那边有问题

回复

使用道具 举报

ID:111634 发表于 2017-1-10 08:15 | 显示全部楼层
先学习正确的程序。
回复

使用道具 举报

ID:154562 发表于 2017-1-10 22:32 | 显示全部楼层
zl2168 发表于 2017-1-10 08:15
先学习正确的程序。

????
回复

使用道具 举报

ID:161247 发表于 2017-1-11 07:00 来自手机 | 显示全部楼层
写的不够精简,用编译软件编译
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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