标题: 我是自学小白,麻烦问一下,如何控制4*4矩阵键盘在阳极管上显示数字? [打印本页]

作者: kkch9    时间: 2020-6-18 22:35
标题: 我是自学小白,麻烦问一下,如何控制4*4矩阵键盘在阳极管上显示数字?
这是我写的键盘扫描

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define ulong unsigned long
  5. #define uint unsigned int
  6. uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
  7. uchar Digits[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  8. #define uchar unsigned char
  9.         void main()
  10.         {uchar i;
  11.                 uchar firstnum,nextnum,keynum;
  12.      while(1)
  13. { for(i=0;i<8;i++)
  14.     { P0=DSY_CODE[i];
  15.        P2=Digits[i]; } }
  16.                
  17.         
  18.                 while(1)
  19.                 {
  20.                   P1=0x0f;
  21.                         firstnum=P1;
  22.                         P1=0xf0;
  23.                         nextnum=P1;
  24.                         keynum=nextnum|firstnum;
  25.                         switch(keynum)
  26.                                 {case 0x11:P0=0x3f ;break;
  27.                                 case 0x12: P0=0x06; break;
  28.                                         case 0x14: P0=0x5b; break;
  29.                                         case 0x18:P0=0x4f ; break;
  30.                                         case 0x21: P0=0x66; break;
  31.                                         case 0x22:P0=0x6d ; break;
  32.                                         case 0x24:P0=0x7d ; break;
  33.                                         case 0x28:P0=0x07 ; break;
  34.                                         case 0x41:P0=0x7f ; break;
  35.                                         case 0x42:P0=0x67; break;
  36.                                         case 0x44:P0=0x77 ; break;
  37.                                         case 0x48:P0=0x7c ; break;
  38.                                         case 0x81:P0=0x39; break;
  39.                                         case 0x82:P0=0x5c ; break;
  40.                                         case 0x84:P0=0x79 ; break;
  41.                                         case 0x88:P0=0x71 ; break;
  42.                 }
  43.         }        
  44.         
  45.         }
复制代码
但是,在keil上验证时没反应,看看是啥问题?


作者: xianfajushi    时间: 2020-6-19 07:37
数码管显示需要延时才能符合眼光暂留现象,要写延时。
作者: Chellson    时间: 2020-6-19 09:44
建议使用一个for循环。
作者: wufeng391    时间: 2020-6-19 11:03
你可能更加需要一些基础的视频教程!你可能拥有一定的C语言基础,不过很多东西要自学都很费劲!并不说学不了,学不成,而是自学的时候遇到很多问题你连问都无法正确表达。入门还是需要有人带的,在网上有很多视频教程,可以先选择一种看,开发板自己看吧,可以借,可以买,因为要看到实际的效果还是需要触手可及的东西,模拟没有那种感觉,再说你自学都能写出这么长的程序确实很厉害。加油吧,刚开始学,要全部手动,避免什么复制之类的操作,因为单片机是实践性极强的东西,动手是必需的,你可以看看宋雪松的视频,51的,虽然比较早了,但可以参考一下。要有耐心的,视频不懂可以多看几遍,如果程序真是你自己写的,我想你的进度应该会很快的。但不要着急!B站上有免费的!




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