找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1599|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)矩陣鍵盤(pán)顯示電路 數(shù)碼管顯示是亂碼的情況,怎么辦

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1104202 發(fā)表于 2023-12-13 22:44 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
目的:矩陣鍵盤(pán)顯示電路,采用4*4鍵盤(pán),用4位數(shù)碼管顯示輸入的數(shù)字,依次將輸入數(shù)字組合在一起顯示

單片機(jī)源程序如下:
  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. }
復(fù)制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:883242 發(fā)表于 2023-12-13 23:37 | 只看該作者
根本就沒(méi)亂,那么顯眼的“6512”四個(gè)數(shù)字看不見(jiàn)???
回復(fù)

使用道具 舉報(bào)

板凳
ID:1104185 發(fā)表于 2023-12-13 23:52 | 只看該作者
送你模塊化的程序

3.矩陣按鍵行列掃描法.rar

291.97 KB, 下載次數(shù): 6

回復(fù)

使用道具 舉報(bào)

地板
ID:190832 發(fā)表于 2023-12-14 08:43 | 只看該作者
Hephaestus 發(fā)表于 2023-12-13 23:37
根本就沒(méi)亂,那么顯眼的“6512”四個(gè)數(shù)字看不見(jiàn)???

哈哈    好眼力
回復(fù)

使用道具 舉報(bào)

5#
ID:161164 發(fā)表于 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. }
復(fù)制代碼

先試試加消影
感覺(jué)共陰共陽(yáng)弄錯(cuò)了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表