摘要:行列總共使用個(gè)口,可以掃描個(gè)按鍵的開關(guān)狀態(tài),這就是矩陣鍵盤的優(yōu)勢(shì)??谥g必須串聯(lián)電阻。
按鍵按下去之后,往往會(huì)有抖動(dòng)的問題,按鍵本身的彈性,按鍵按下去或者放開,都會(huì)形成撞擊的不穩(wěn)定過程,這個(gè)過程需要一定的時(shí)間,所以單片機(jī)在這個(gè)過程中不能讀取IO狀態(tài),可以軟件延遲或者硬件延遲
沒有制作GIF的原因是做完一直不小于1M導(dǎo)致我typora插入我不顯示,因此狠心投稿到B站,今后B站就是我的視頻庫
上面按鍵就是一按一按沒有什么吸引人的地方,沒有什么亮點(diǎn),所以我們推倒重來
加了長(zhǎng)按標(biāo)志的展示
丐版展示
//按鍵掃描void Key_Scan_Drive(){ static bit flag = 0;//長(zhǎng)短按標(biāo)志 static bit key_down = 0;//按下標(biāo)志,由于雙擊也用這個(gè),所以標(biāo)記范圍得擴(kuò)大 static u8 count1 = 0;//計(jì)數(shù)器1,因?yàn)?00以內(nèi),所以u(píng)8足夠了 static u16 count2 = 0;//計(jì)數(shù)器2,大于255就用u16 if(key_down)//檢測(cè)按鍵是否被按下過 { count2++; if(count2>250) { count2 = 0; flag = 1; //長(zhǎng)按程序 LCD12864_Write_Cmd(0x8c); LCD12864_Write_Data(0x30); LCD12864_Write_Data(0x30+LCD12864_Num_Buffer[1]); } if(KEY1) { key_down = 0;//松開就把標(biāo)志清零 count2 = 0; if(flag) { flag = 0; } else { //短按程序 LCD12864_Write_Cmd(0x8c); LCD12864_Write_Data(0x30); LCD12864_Write_Data(0x30+LCD12864_Num_Buffer[3]); } } } else { if(!KEY1) { count1++; if(count1>20) { count1 = 0; if(!KEY1) { key_down = 1; } } } } }
P6^0 P6^1 P6^2 P6^3 四線是行掃描,P6^4 P6^5 P6^6 P6^7 四線是列掃描。4 行 4 列總共使用 8 個(gè) IO 口,可以掃描 16 個(gè)按鍵的開關(guān)狀態(tài),這就是矩陣鍵盤的優(yōu)勢(shì)。( IO 口之間必須串聯(lián)電阻 )。
#include "all.h"u8 code KEY4x4_Buffer[4] = {0xef,0xdf,0xbf,0x7f};//列輸入 /列控制數(shù)組u8 xdata KEY4x4_Read_Byte = 0; //讀到/檢測(cè)到的字節(jié)void KEY4x4_Drive_Init(){ P6M1 = 0; P6M0 = 0; }void KEY4x4_Scan_Drive(){ static xdata u16 count = 0; u8 i = 0; u8 j = 0;//循環(huán)掃描變量 u8 Value = 0;//檢測(cè)行變量 count++; if(count>10)//通過計(jì)數(shù)的方式來減少循環(huán)次數(shù),還消抖 { count = 0; for(i = 0;i<4;i++)//列輸入 /列控制 { P6 = KEY4x4_Buffer[i]; Value = 0x08; for(j = 0;j<4;j++) { if(!(Value&P6))//哪個(gè)位被拉成0了就會(huì)被檢測(cè)到 { KEY4x4_Read_Byte = j*4+i+1; } Value >>= 1;//右移一位 } } P6 = 0xff;//P6口用完拉高,因?yàn)橐院髸?huì)用到他 } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/122126.html
摘要:復(fù)位后初值是子函數(shù)調(diào)用,中斷響應(yīng)過程調(diào)用子函數(shù)處理中斷響應(yīng)的時(shí)候,程序計(jì)數(shù)器的值以及相關(guān)數(shù)據(jù)會(huì)先壓入堆棧,然后去處理子函數(shù)中斷服務(wù)。聯(lián)動(dòng)文章身家過億的帝都富豪對(duì)小碼農(nóng)說你時(shí)空復(fù)雜度會(huì)了嗎 ...
摘要:否則可能會(huì)導(dǎo)致電平顛倒完美的計(jì)數(shù)糟糕的線條再來一個(gè)測(cè)試組我們來實(shí)現(xiàn)一個(gè)呼吸燈的效果呼吸燈波形為了賢淑妻子,咳咳,賢淑才女,小碼農(nóng)必定讓控制時(shí)間什么是脈寬調(diào)制中間動(dòng)的線是電流線,電流通斷,電流小就暗,電流大就亮。 ...
摘要:對(duì)于電壓或者電流連續(xù)變化的信號(hào),就需要通過模數(shù)轉(zhuǎn)換電路,變成單片機(jī)可以識(shí)別的數(shù)字電平信號(hào)。目前來說,常見的有兩種方式,一種是并行比較,一種是逐次比較。具有成本低元件簡(jiǎn)單等優(yōu)勢(shì),而且容易做出高精度的轉(zhuǎn)換器,所以被廣泛使用。 ...
摘要:目前,所有型號(hào)串口的輸入是輸出是。串口全雙工通信是沒有時(shí)鐘脈沖的,只能依靠晶振脈沖定時(shí)器的溢出脈沖。中斷中讀取,清標(biāo)志,然后返回給計(jì)算機(jī),等待發(fā)送完畢防重疊最少時(shí)間次位定時(shí)器時(shí)間。實(shí)現(xiàn)燒錄程序的目的。 ...
摘要:前言今天下班突然看到一篇刷屏朋友圈的文章為什么甲骨文被裁員工不值得同情來自一個(gè)財(cái)經(jīng)的微信公眾號(hào)剛看題目我以為文章是會(huì)分析甲骨文公司內(nèi)部的財(cái)經(jīng)類問題所以就戳開看了畢竟本人不喜歡看打雞血的文章。 為工薪層能合理取得報(bào)酬而發(fā)聲,為大眾選擇不同生活狀態(tài)都能獲得尊重而發(fā)聲,為不同職場(chǎng)層次的職場(chǎng)人都能有健康的工作環(huán)境而發(fā)聲。 前言 今天下班突然看到一篇刷屏朋友圈的文章來自一個(gè)XX財(cái)經(jīng)的微信公眾號(hào),...
閱讀 3077·2021-11-18 10:07
閱讀 3855·2021-11-17 17:00
閱讀 2167·2021-11-15 18:01
閱讀 987·2021-10-11 10:58
閱讀 3519·2021-09-10 10:50
閱讀 3675·2021-08-13 15:05
閱讀 1279·2019-08-30 15:53
閱讀 2711·2019-08-29 13:01