找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1874|回復: 0
打印 上一主題 下一主題
收起左側

單片機矩陣鍵盤用Proteus仿真在數(shù)碼管顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:756422 發(fā)表于 2020-5-20 14:03 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
矩陣鍵盤用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)


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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表