標題: 單片機矩陣鍵盤用Proteus仿真在數(shù)碼管顯示 [打印本頁]

作者: lumancui    時間: 2020-5-20 14:03
標題: 單片機矩陣鍵盤用Proteus仿真在數(shù)碼管顯示
矩陣鍵盤用Proteus仿真在數(shù)碼管顯示


單片機源程序如下:
  1. /*******************************************************************************  
  2. 文件名稱: main.c
  3. 作 者:   
  4. 版 本:    V1.00
  5. 說 明:    矩陣鍵盤掃描實驗
  6. 修改記錄:  
  7. *******************************************************************************/
  8. /*******************************************************************************   
  9. * 功能描述:                                                              *
  10. *          掃描矩陣鍵盤                                                  *
  11. *          當有鍵按下時按照按鍵的位置                                    *
  12. *          顯示當前的鍵值

  13. *接線說明:P00~P07-SA~SG,P10~P13-R1~R4,P14~P17-C1~C4,P20-C0                                               
  14. *******************************************************************************/
  15. #include <reg52.h>
  16. #include<intrins.h>

  17. #define uchar unsigned char
  18. #define uint unsigned int

  19. #define PSEG P0
  20. #define PKEY P1

  21. sbit C0  = P2^0;//位定義

  22. void delayms(uint);
  23. uchar scan(void);

  24. uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  25. /**********主函數(shù)******************************************/
  26. void main(void)
  27. {
  28.         uchar key;
  29.         C0=1;
  30.         while(1)
  31.         {
  32.                 key=scan();     //讀取鍵盤值
  33.                 if(key!=16)
  34.                 PSEG=seg[key];  //顯示
  35.         }
  36. }
  37. /***********延時函數(shù)***************************************/
  38. void delayms(uint j)
  39. {
  40. uchar i;
  41. for(;j>0;j--)
  42.           {
  43.          i=250;
  44.             while(--i);
  45.             i=249;
  46.             while(--i);
  47.            }
  48. }
  49. /***********鍵盤掃描函數(shù)***********************************/
  50. uchar scan(void)
  51. {
  52. uchar k=16,m,n,in;
  53. PKEY=0xf0;                //掃描所有行
  54. if((PKEY&0xf0)!=0xf0)
  55.         {
  56.         for(m=0;m<4;m++)
  57.                 {
  58.                  PKEY=~(0x01<<m);
  59.                  for(n=0;n<4;n++)
  60.                         {
  61.                          in=PKEY;
  62.                          in=in>>(4+n);
  63.                          if((in&0x01)==0)
  64.                                 {
  65.                                  delayms(10);
  66.                                  if((in&0x01)==0){k=n+m*4;break;}
  67.                                 }
  68.                         }
  69.                  if(k!=16){break;}
  70.                 }
  71.         }
  72. return(k);
  73. }
復制代碼

所有資料51hei提供下載:
Proteus.zip (24.5 KB, 下載次數(shù): 28)







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