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 矩陣鍵盤 結果 ———————————————————————————————————————————— 分類: 按結構原理分: 觸點式開關按鍵 無觸點開關按鍵 接入方式 獨立式
【按鍵】短按,長按,按鍵釋放,三種模式的按鍵掃描程式(軟體消抖動)--- 矩陣鍵盤
請先閱讀上篇: 短按,長按,按鍵釋放,三種模式的按鍵掃描程式(軟體消抖動) 上面的程式適用於單個按鍵,那是不是也可以適用於矩陣鍵盤呢? 答案是肯定的。 接下來在這裡做一個簡單的擴充套件,具體框架不用改變,所以具體的框架內容和思路在這裡不詳述了,自行參考上篇文章,這裡就說說擴充套件