標(biāo)題: 單片機(jī)4X4矩陣鍵盤掃描的proteus仿真和程序源碼 [打印本頁]

作者: 云之凡    時(shí)間: 2018-7-27 07:16
標(biāo)題: 單片機(jī)4X4矩陣鍵盤掃描的proteus仿真和程序源碼
4X4矩陣鍵盤掃描仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define SCANPORT P1
  5. sbit spk=P2^3;                                                                        //按鍵提示音驅(qū)動端口
  6. uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,
  7.                                          0x6d,0x7d,0x07,0x7f,0x6f,  //數(shù)碼管顯示代碼
  8.                                          0x77,0x7c,0x39,0x5e,0x79,
  9.                                          0x71};
  10. uchar a_LineScan[4]={0xEF,0xDF,0xBF,0x7F};            //列掃描賦值

  11. void delay(uchar x)
  12. {
  13.   uchar j;
  14.   while(x--)  
  15.   for(j=110;j>0;j--);
  16. }

  17. uchar KeyScan()                                                                    //掃描函數(shù)
  18. {
  19.         uchar Temp=0;                                 
  20.         uchar i=0,j=0;            

  21.         for(i=0;i<4;i++)       
  22.                 {
  23.                         SCANPORT=a_LineScan[i];                        //定義掃描端口          
  24.                         Temp=SCANPORT & 0x0F;                            //取低四位掃描信號
  25.                         if(Temp!=0)
  26.                         {
  27.                         delay(10);                                                    //消抖函數(shù)
  28.                         if(Temp!=0)
  29.                         {                                               
  30.                         if(Temp!=0x0F)                                             //掃描按鍵是否按下
  31.                                 {                                                                         
  32.                                 switch(Temp)
  33.                                         {
  34.                                         case 0x0E: j=10;break;            //第一列
  35.                                         case 0x0D: j=20;break;                //第二列
  36.                                         case 0x0B: j=30;break;                //第三列
  37.                                         case 0x07: j=40;break;                //第四列
  38.                                         default:   j=50;break;                //輸入錯誤
  39.                                         }
  40.                                 break;
  41.                                 }
  42.                         }
  43.                         }
  44.                 }
  45.         return i+j+1;                                                                 //送出返回值
  46. }
  47. void KeyProcess(unsigned char KeyCode)                    //數(shù)碼管顯示函數(shù)
  48. {
  49.                
  50.         switch(KeyCode)
  51.                 {                                                                                //j=10
  52.                 case 11:P0=table[0];spk=1;break;            //'0'
  53.                 case 12:P0=table[1];spk=1;break;                //'1'
  54.                 case 13:P0=table[2];spk=1;break;               
  55.                 case 14:P0=table[3];spk=1;break;               
  56.                                                                                                   //j=20
  57.                 case 21:P0=table[4];spk=1;break;                //'4'
  58.                 case 22:P0=table[5];spk=1;break;                //'5'
  59.                 case 23:P0=table[6];spk=1;break;
  60.                 case 24:P0=table[7];spk=1;break;
  61.                                                                                                   //j=30
  62.                 case 31:P0=table[8];spk=1;break;                //'8'
  63.                 case 32:P0=table[9];spk=1;break;                //'9'
  64.                 case 33:P0=table[10];spk=1;break;               
  65.                 case 34:P0=table[11];spk=1;break;               
  66.                                                                                                 //j=40
  67.                 case 41:P0=table[12];spk=1;break;                //'C'
  68.                 case 42:P0=table[13];spk=1;break;                //'d'
  69.                 case 43:P0=table[14];spk=1;break;               
  70.                 case 44:P0=table[15];spk=1;break;               

  71.                 default:break;                                                        //無法識別
  72.                 }
  73. }
  74. void main()
  75. {                                                                                                  
  76.         spk=0;                                                                                //揚(yáng)聲器初始化
  77.         P0=0;
  78.         while(1)
  79.         {
  80.                 KeyProcess(KeyScan());
  81.                 spk=0;                                                                        //復(fù)位揚(yáng)聲器
  82.         }
  83. }
復(fù)制代碼

所有資料51hei提供下載:

20161111144-李作鑫4×4鍵盤矩陣按鍵.rar (66.55 KB, 下載次數(shù): 130)



作者: zwmwcj    時(shí)間: 2020-3-24 09:00
謝謝學(xué)習(xí)
作者: yayayunyun    時(shí)間: 2022-1-17 10:50
你好!請問一下,顏色怎么修改的?我試過了修改背景,但是沒有實(shí)現(xiàn)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1