1. 程式人生 > >51微控制器(AT89C52)矩陣鍵盤檢測程式

51微控制器(AT89C52)矩陣鍵盤檢測程式

矩陣鍵盤檢測思路:行線設為輸出、列線設為輸入獲得列碼,行線設為輸入、列線設為輸出獲得行碼,由行列碼確定鍵值。

本程式可改進的地方:按鍵狀態機中,將等待按鍵釋放語句移到第三個狀態中,可進一步提高按鍵掃描程式效率。

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P3^0;
sbit wela=P3^1;
#define keyport (P1)
#define keystate0 0		//按鍵確認狀態
#define keystate1 1		//按鍵無動作狀態
char keystate=1;	//按鍵狀態初始化為按鍵無動作狀態
uchar keynum=0;
void delayms(uint x)	//1ms
{
	uint y,z;
	for(y=x;y>0;y--)
		for(z=111;z>0;z--);
}
uchar code table[]={	//共陽數碼管
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void smg()
{
	dula=0;
	wela=0;
	P2=0x01;
	wela=1;
	wela=0;
	P2=table[keynum];
	dula=1;
	dula=0;
	delayms(1);

	P2=0x02;
	wela=1;
	wela=0;
	P2=table[keynum];
	dula=1;
	dula=0;
	delayms(1);

	P2=0x04;
	wela=1;
	wela=0;
	P2=table[keynum];
	dula=1;
	dula=0;
	delayms(1);

	P2=0x08;
	wela=1;
	wela=0;
	P2=table[keynum];
	dula=1;
	dula=0;	
	delayms(1);

	P2=0x10;
	wela=1;
	wela=0;
	P2=table[keynum];
	dula=1;
	dula=0;
	delayms(1);

	P2=0x20;
	wela=1;
	wela=0;
	P2=table[keynum];
	dula=1;
	dula=0;
	delayms(1);

	P2=0x40;
	wela=1;
	wela=0;
	P2=table[keynum];
	dula=1;
	dula=0;
	delayms(1);

	P2=0x80;
	wela=1;
	wela=0;
	P2=table[keynum];
	dula=1;
	dula=0;
	delayms(1);
}
void keyscan()
{
	uchar temp1,temp2,column,row;
	switch(keystate)		
	{
		case keystate0:	//keystate0,按鍵按下確認狀態,下一狀態為keystate1(按鍵無動作狀態)
			keyport=0x0f;
			temp1=keyport;
			keyport=0xf0;
			temp2=keyport;			
			if((temp1|temp2)!=0xff)
			{
				temp1|=temp2;
				if(!(temp1&0x80))
					row=3;
				else 
					if(!(temp1&0x40))
						row=2;	
					else
						if(!(temp1&0x20))
							row=1;
						else
							if(!(temp1&0x10))
								row=0;
				if(!(temp1&0x08))
					column=3;
				else 
					if(!(temp1&0x04))
						column=2;	
					else
						if(!(temp1&0x02))
							column=1;
						else
							if(!(temp1&0x01))
								column=0;
				keynum=column*4+row;
				while(!(keyport==0x0f|keyport==0xf0));
				keystate=keystate1;
				break;				
				
			}
			else
				keystate=keystate1;
			break;
		case keystate1:	//keystate1,按鍵無動作狀態,下一狀態為keystate0(按鍵無動作狀態)
			keyport=0x0f;
			temp1=keyport;
			keyport=0xf0;
			temp2=keyport;			
			if((temp1|temp2)!=0xff)
			{
				keystate=keystate0;
			}
			else
				keystate=keystate1;
			break;
	}
}
void main()
{
	while(1)
	{
		keyscan();
		smg();
	}
}

相關推薦

51微控制器(AT89C52)矩陣鍵盤檢測程式

矩陣鍵盤檢測思路:行線設為輸出、列線設為輸入獲得列碼,行線設為輸入、列線設為輸出獲得行碼,由行列碼確定鍵值。 本程式可改進的地方:按鍵狀態機中,將等待按鍵釋放語句移到第三個狀態中,可進一步提高按鍵掃描程式效率。 #include<reg52.h> #define

利用51微控制器矩陣鍵盤按鍵顯示0--F在數碼管

程式碼如下:       #include <reg52.h> #define uchar unsigned char #define uint  unsigned int sbit we = P2^7; sbit du = P2^

基於51微控制器矩陣計算器設計

      當初本科的畢業設計不是很完美,一直想把它完善一下,這學期剛開始有點時間,就以一個小專案的方式,綜合自己這一年多來的程式碼閱讀收穫,重寫了這個工程。 一,平臺的重新搭建 Ø  在win7上重新安裝了proteus7.8用於模擬階段的測試,並從以前

雲龍51微控制器視訊教程+課件+程式程式碼+課後作業,零基礎入門視訊教程

教程巧妙地將對微控制器原理的講述與硬體實驗裝置結合起來,以通俗易懂的語言、現場互動的教學風格獲得了廣大讀者的一致好評,已被大量的培訓機構採用。只要你認真看,認真聽,保證讓你學會微控制器應用和C語言程式設計。全部資料打包下載地址:http://www.yunlon

CC2530,51微控制器 延時一秒程式 迴圈次數 演算法

//計算 //微控制器每秒執行的指令數:頻率*1                 (例:cc2530頻率為)32MHz //8051效率是PC的12分之一 //迴圈需要執行5條指令//公式為  32*1024*1024/5/12 = 559240.533 所以寫一個for迴

51微控制器 Keil C 延時程式的簡單(晶振12MHz,一個機器週期1us.)

一. 500ms延時子程式 void delay500ms(void) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;k--); } 產生的彙

微控制器矩陣鍵盤和LCD1602

 1602液晶模組內部的字元發生儲存器(CGROM)已經儲存了128個不同的點陣字元圖形,這些字元有:阿拉伯數字、英文字母的大小寫、常用的符號等,每一個字元都有一個固定的程式碼(ASCII字符集字型檔),比如大寫的英文字母“A”的程式碼是01000001B(41H),顯示時模組把地址41H中的點陣字元圖形顯示

51微控制器之LCD1602的驅動程式

#include <reg52.h> #include "./delay/delay.h" #define LCDPORT P0 #define LCD_WRITE_DATA 1 #define LCD_WRITE_COM 0 sbit RS = P

4X4矩陣鍵盤掃描程式

4X4矩陣鍵盤掃描: 1. 4根行線的GIO均設為Output,根列線的GIO均設為Input; 2. 4根行線的GIO分別置為0111、1011、1101、1110,讀逐一讀取列線GIO的值,可確定是哪一個按鍵; 電路圖如下: 注意: 1. 圖中用作輸入的GIO,一

VHDL實現矩陣鍵盤檢測

矩陣鍵盤相比獨立鍵盤,其實就是起到節約IO口的作用,尤其在需要多個按鍵的時候。原理圖(摘自其他地方): 比如0鍵,沒按下時,ROW0因為上拉而為高電平。當0按下時,如果此時COL0為低電平,則ROW

樹莓派的矩陣鍵盤掃描程式,python開發

樹莓派可以很方便的拓展矩陣鍵盤用做人機互動,今天教大家如何驅動4*4矩陣鍵盤。 先貼上程式碼: import time class keypad(object):KEYPAD=[['1','2','3','*'],['4','5','6','#'],['7','8','9

51微控制器STC89C52 獨立按鍵檢測

KEY1 BIT P3.4 LED1 BIT P1.0 LED2 BIT P1.1 ORG 0000H LOOP: SETB KEY1 JNB KEY1,KEY1DOWN0 SJMP LOOP K

AVR微控制器教程——矩陣鍵盤

本文隸屬於AVR微控制器教程系列。   開發板上有4個按鍵,我們可以把每一個按鍵連線到一個微控制器引腳上,來實現按鍵狀態的檢測。但是常見的鍵盤有104鍵,是每一個鍵分別連線到一個引腳上的嗎?我沒有考證過,但我們確實有節省引腳的方法。 矩陣鍵盤 這是一個4*4的矩陣鍵盤,共有16個按鍵只需要8個引

51微控制器——矩陣鍵盤檢測

4x4鍵盤檢測程式,按下鍵後相應的程式碼顯示在數碼管上 #include<reg51.h> sbit dula=P2^6; sbit wela=P2^7; unsigned char i=100; unsigned char j,k,temp,key; void del

51微控制器之獨立按鍵和矩陣鍵盤(概念及原理)

一、基本知識         1.按鍵分類與輸入原理         按鍵按照結構原理科分為兩類,一類是觸點式開關按鍵,如機械式開關、導電橡膠式開關燈;另一類是無觸點式開關按鍵,如電氣式按鍵,磁感應按鍵等。前者造價低,後者壽命長。目前,微機系統中最常見的是觸點式開關按鍵。

51微控制器應用行列反轉法操縱矩陣鍵盤

應用行列反轉法操縱矩陣鍵盤   行列反轉法的簡單實用,我自己整理了一下,分享給大家。根據開發板原理圖可知,P3口接為矩陣鍵盤,其中P3.0~P3.3接行線,P3.4~P3.7接列線,P0口接共陰極6段數碼管。                   圖 1 反轉法的原理:反

51微控制器矩陣鍵盤編碼方法

搬運到CSDN的舊文件 眾所周知,51微控制器一般的鍵盤檢測原理為非編碼鍵盤檢測,沒有專門用來產生鍵編碼號或鍵值的電路晶片;而我們使用的電腦鍵盤為編碼鍵盤,通過編碼電路晶片為每個按鍵產生一個編碼號,可以通過序列匯流排把鍵值傳輸給電腦。在進行矩陣鍵盤檢測時,

關於獨立按鍵與矩陣按鍵的程式(51微控制器)

發一個51微控制器的鍵盤掃描程式,演算法簡單有效                                       再給大家分享一個不錯按鍵程式(來自ourdev)/**************************************** 鍵盤_不採用定時

51單片機實現矩陣鍵盤行掃描

order 方式 [] image 51單片機 char borde 矩陣鍵盤 結果 ———————————————————————————————————————————— 分類: 按結構原理分: 觸點式開關按鍵 無觸點開關按鍵 接入方式 獨立式

【按鍵】短按,長按,按鍵釋放,三種模式的按鍵掃描程式(軟體消抖動)--- 矩陣鍵盤

請先閱讀上篇: 短按,長按,按鍵釋放,三種模式的按鍵掃描程式(軟體消抖動) 上面的程式適用於單個按鍵,那是不是也可以適用於矩陣鍵盤呢? 答案是肯定的。 接下來在這裡做一個簡單的擴充套件,具體框架不用改變,所以具體的框架內容和思路在這裡不詳述了,自行參考上篇文章,這裡就說說擴充套件