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

QQ登錄

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

帖子
查看: 2875|回復(fù): 1
收起左側(cè)

單片機(jī)16位鍵盤(pán)響應(yīng) 在4位數(shù)碼管上相應(yīng)顯示123456789ABCDEF16位符號(hào)

[復(fù)制鏈接]
ID:421049 發(fā)表于 2019-3-9 13:01 | 顯示全部樓層 |閱讀模式
16位鍵盤(pán),按下那個(gè)鍵,在4位數(shù)碼管上相應(yīng)顯示123456789ABCDEF16位符號(hào)。

單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code table[]={0x44,0x5F,0x34,0x15,0x0F,0x85,0x84,0x57,0x04,0x05,0x06,0x8C,0xE4,0x1C,0xA4,0xA6};
  5. void delayms(uint xms)
  6. {
  7.   uint i,j;
  8.         for(i=xms;i>0;i--)
  9.           for(j=110;j>0;j--);
  10. }
  11. void display(uchar num)
  12. {
  13.         P3=0X00;
  14.   P1=table[num];
  15. }
  16. void matrixkeyscan()
  17. {
  18.   uchar temp,key;
  19.         P2=0Xfe;
  20.         temp=P2;
  21.         temp=temp&0xf0;
  22.         if(temp != 0xf0)
  23.         {
  24.           delayms(10);
  25.                 temp=P2;
  26.                 temp=temp & 0xf0;
  27.                 if(temp != 0xf0)
  28.                 {
  29.                   temp=P2;
  30.                         switch(temp)
  31.                         {
  32.                           case 0x7e:    key=0;
  33.                                               break;
  34.                                 case 0xbe:    key=1;
  35.                                               break;
  36.                                 case 0xde:    key=2;
  37.                                               break;
  38.                                 case 0xee:    key=3;
  39.                                               break;
  40.                         }
  41.                         while(temp != 0Xf0)
  42.                         {
  43.                           temp=P2;
  44.                                 temp=temp&0xf0;
  45.                         }
  46.                         display(key);
  47.                 }
  48.         }
  49.         P2=0Xfd;
  50.         temp=P2;
  51.         temp=temp&0xf0;
  52.         if(temp != 0xf0)
  53.         {
  54.           delayms(10);
  55.                 temp=P2;
  56.                 temp=temp & 0xf0;
  57.                 if(temp != 0xf0)
  58.                 {
  59.                   temp=P2;
  60.                         switch(temp)
  61.                         {
  62.                           case 0x7d:    key=4;
  63.                                               break;
  64.                                 case 0xbd:    key=5;
  65.                                               break;
  66.                                 case 0xdd:    key=6;
  67.                                               break;
  68.                                 case 0xed:    key=7;
  69.                                               break;
  70.                         }
  71.                         while(temp != 0Xf0)
  72.                         {
  73.                           temp=P2;
  74.                                 temp=temp&0xf0;
  75.                         }
  76.                         display(key);
  77.                 }
  78.         }
  79.                 P2=0Xfb;
  80.         temp=P2;
  81.         temp=temp&0xf0;
  82.         if(temp != 0xf0)
  83.         {
  84.           delayms(10);
  85.                 temp=P2;
  86.                 temp=temp & 0xf0;
  87.                 if(temp != 0xf0)
  88.                 {
  89.                   temp=P2;
  90.                         switch(temp)
  91.                         {
  92.                           case 0x7b:    key=8;
  93.                                               break;
  94.                                 case 0xbb:    key=9;
  95.                                               break;
  96.                                 case 0xdb:    key=10;
  97.                                               break;
  98.                                 case 0xeb:    key=11;
  99.                                               break;
  100.                         }
  101.                         while(temp != 0Xf0)
  102.                         {
  103.                           temp=P2;
  104.                                 temp=temp&0xf0;
  105.                         }
  106.                         display(key);
  107.                 }
  108.         }
  109.         P2=0Xf7;
  110.         temp=P2;
  111.         temp=temp&0xf0;
  112.         if(temp != 0xf0)
  113.         {
  114.           delayms(10);
  115.                 temp=P2;
  116.                 temp=temp & 0xf0;
  117.                 if(temp != 0xf0)
  118.                 {
  119.                   temp=P2;
  120.                         switch(temp)
  121.                         {
  122.                           case 0x77:    key=12;
  123.                                               break;
  124.                                 case 0xb7:    key=13;
  125.                                               break;
  126.                                 case 0xd7:    key=14;
  127.                                               break;
  128.                                 case 0xe7:    key=15;
  129.                                               break;
  130.                         }
  131.                         while(temp != 0Xf0)
  132.                         {
  133.                           temp=P2;
  134.                                 temp=temp&0xf0;
  135.                         }
  136.                         display(key);
  137.                 }
  138.         }       
  139. }
  140. void main()
  141. {
  142.   P3=0x00;
  143.         while(1)
  144.         {
  145.           matrixkeyscan();
  146.         }       
  147. }
復(fù)制代碼

所有資料51hei提供下載:
keyscan.zip (21.25 KB, 下載次數(shù): 13)



回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2019-3-11 00:17 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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