矩陣鍵盤用Proteus仿真在數碼管顯示
51hei.png (25.61 KB, 下載次數: 31)
下載附件
2020-5-20 17:03 上傳
單片機源程序如下:
- /*******************************************************************************
- 文件名稱: main.c
- 作 者:
- 版 本: V1.00
- 說 明: 矩陣鍵盤掃描實驗
- 修改記錄:
- *******************************************************************************/
- /*******************************************************************************
- * 功能描述: *
- * 掃描矩陣鍵盤 *
- * 當有鍵按下時按照按鍵的位置 *
- * 顯示當前的鍵值
- *接線說明:P00~P07-SA~SG,P10~P13-R1~R4,P14~P17-C1~C4,P20-C0
- *******************************************************************************/
- #include <reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define PSEG P0
- #define PKEY P1
- sbit C0 = P2^0;//位定義
- void delayms(uint);
- uchar scan(void);
- uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- /**********主函數******************************************/
- void main(void)
- {
- uchar key;
- C0=1;
- while(1)
- {
- key=scan(); //讀取鍵盤值
- if(key!=16)
- PSEG=seg[key]; //顯示
- }
- }
- /***********延時函數***************************************/
- void delayms(uint j)
- {
- uchar i;
- for(;j>0;j--)
- {
- i=250;
- while(--i);
- i=249;
- while(--i);
- }
- }
- /***********鍵盤掃描函數***********************************/
- uchar scan(void)
- {
- uchar k=16,m,n,in;
- PKEY=0xf0; //掃描所有行
- if((PKEY&0xf0)!=0xf0)
- {
- for(m=0;m<4;m++)
- {
- PKEY=~(0x01<<m);
- for(n=0;n<4;n++)
- {
- in=PKEY;
- in=in>>(4+n);
- if((in&0x01)==0)
- {
- delayms(10);
- if((in&0x01)==0){k=n+m*4;break;}
- }
- }
- if(k!=16){break;}
- }
- }
- return(k);
- }
復制代碼
所有資料51hei提供下載:
Proteus.zip
(24.5 KB, 下載次數: 28)
2020-5-20 14:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|