找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 444|回复: 4
收起左侧

单片机矩阵键盘显示电路 数码管显示是乱码的情况,怎么办

[复制链接]
ID:1104202 发表于 2023-12-13 22:44 | 显示全部楼层 |阅读模式
目的:矩阵键盘显示电路,采用4*4键盘,用4位数码管显示输入的数字,依次将输入数字组合在一起显示
51hei图片20231213224401.jpg
单片机源程序如下:
  1. #include <reg51.h>
  2. unsigned char  WEI[]={0x01,0x02,0x04,0x08,0x10,0x20};
  3. unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  4. unsigned char a[4] = {0,0,0,0};
  5. unsigned char temp;
  6. unsigned char key();
  7. unsigned char i,n,shu;
  8. void delayms(unsigned int ms);
  9. void keyscan(void);
  10. void shuma(unsigned char par,unsigned char dat)
  11. {
  12. P2 = WEI[par];
  13. P0 = table[dat];
  14. }

  15. void main()
  16. {
  17. i = n = 0;
  18.   while(1)
  19.   {
  20.    shu = key();
  21.    if(shu !=17)
  22.    {
  23.     a[n] = shu;
  24.     n++;
  25.     if(n>3) n = 0;
  26.    }
  27.    shuma(i,a[i]);
  28.    i++;
  29.    if(i>3) i = 0;
  30.    delayms(10);
  31.   }
  32. }
  33. unsigned char key()
  34. {
  35. unsigned char key1;
  36. key1 = 17;
  37. P3 = 0xEf;
  38. if (P3 != 0xEf)
  39. {
  40.   delayms(10);
  41.   switch(P3)
  42.   {
  43.    case 0xE7:key1 = 0;break;
  44.    case 0xEB:key1 = 1;break;
  45.    case 0xED:key1 = 2;break;
  46.    case 0xEE:key1 = 3;break;
  47.   }
  48.   while(P3 != 0xEf);
  49. }

  50. P3 = 0xDF;
  51. if (P3 != 0xDF)
  52. {
  53.   delayms(10);
  54.   switch(P3)
  55.   {
  56.    case 0xD7:key1 = 4;break;
  57.    case 0xDB:key1 = 5;break;
  58.    case 0xDD:key1 = 6;break;
  59.    case 0xDE:key1 = 7;break;
  60.   }
  61.   while(P3 != 0xDF);

  62. }

  63. P3 = 0xBF;
  64. if (P3 != 0xBF)
  65. {
  66.   delayms(10);
  67.   switch(P3)
  68.   {
  69.    case 0xb7:key1 = 8;break;
  70.    case 0xBB:key1 = 9;break;
  71.    case 0xBD:key1 = 10;break;
  72.    case 0xBE:key1 = 11;break;
  73.   }
  74.     while(P3 != 0xBF);
  75. }


  76. P3 = 0x7f;
  77. if (P3 != 0x7f)
  78. {
  79. delayms(10);
  80.   switch(P3)
  81.   {
  82.    case 0x77:key1 = 12;break;
  83.    case 0x7B:key1 = 13;break;
  84.    case 0x7D:key1 = 14;break;
  85.    case 0x7E:key1 = 15;break;
  86.   }
  87.   while(P3 != 0x7f);
  88. }

  89. return key1;
  90. }



  91. void delayms(unsigned int ms)
  92. {
  93.   unsigned int x,y;
  94. for (x=ms;x>0;x--)        
  95.   for(y=120;y>0;y--);
  96. }
复制代码

回复

使用道具 举报

ID:883242 发表于 2023-12-13 23:37 | 显示全部楼层
根本就没乱,那么显眼的“6512”四个数字看不见???
回复

使用道具 举报

ID:1104185 发表于 2023-12-13 23:52 | 显示全部楼层
送你模块化的程序

3.矩阵按键行列扫描法.rar

291.97 KB, 下载次数: 5

回复

使用道具 举报

ID:190832 发表于 2023-12-14 08:43 | 显示全部楼层
Hephaestus 发表于 2023-12-13 23:37
根本就没乱,那么显眼的“6512”四个数字看不见???

哈哈    好眼力
回复

使用道具 举报

ID:161164 发表于 2023-12-14 09:03 | 显示全部楼层
  1. void shuma(unsigned char par,unsigned char dat)
  2. {
  3. P0 = 0xFF;//消影
  4. P2 = WEI[par];
  5. P0 = table[dat];
  6. }
复制代码

先试试加消影
感觉共阴共阳弄错了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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