基於atmega48的掃瞄按鍵例子

2021-09-13 13:31:25 字數 1659 閱讀 4604

**圖:其中左邊的的溫度感測器等ad轉換與本例子無關

uchar segcode[4]=; //段碼 (存放解碼值)

uchar data[4]; //顯示資料

uchar keycode; //判斷按鍵位置

uchar n=0; //顯示重新整理標誌

uchar key=0; //鍵值 pinb!=0x0f

uchar digit=0;

/io口初始化函式/

void io_init(void)

/定時器t1初始化/

void t1_init(void)

/定時器t1中斷服務—資料重新整理/

void t1_refresh(void)

tifr1 = 0x02; //清標誌

}/解碼函式/

void decode(uchar *num)

else if(digit2)

else if(digit==3)

else if(digit>3)

else

;// segcode[0] &= ~0x80; // 加小數點

}/輸入移位函式/

void digit_move(uchar *b)

b[3]=key;

/按鍵掃瞄及資料處理/

void key_scan(void)

portb = ~0x20;delay(10);

keycode = (~pinb) & 0x0f;

while(pinb!=~0x20);

//delay(20000);

switch(keycode)

portb = ~0x40;delay(10);

keycode = (~pinb) & 0x0f;

while(pinb!=~0x40);

//delay(20000);

switch(keycode)

portb = ~0x80;delay(10);

keycode = (~pinb) & 0x0f;

while(pinb!=~0x80);

//delay(20000);

switch(keycode)

/主函式/

void main(void)

delay(30000);}

}/void delay(uint ms)

{uint i,j;

for(i=0;i/

基於ATMEGA128的密碼鎖

密碼鎖題目要求 使用微控制器實現簡易密碼鎖,通過輸入密碼,實現門鎖的開啟 控制繼電器 具體要求如下 1 當輸入正確密碼後,繼電器開啟。2 當三次輸入錯誤密碼後,密碼鎖禁止輸入 10 秒鐘,並進行相應的提示。3 在輸入正確的密碼後,可修改密碼和查詢 清除門開啟的次數。4 自製繼電器電路模組。5 實現密...

基於狀態機的新型按鍵消抖掃瞄程式

一般的按鍵輸入軟體介面程式非常簡單,在程式中一旦檢測到按鍵輸入口為低電平 有時可能為高 便採用軟體延時的方法來進行消抖,然後再次檢測按鍵輸入,如果再次確認為低電平則表示有按鍵按下,轉入執行按鍵處理程式。如果延時後檢測的電平為高電平則放棄本次按鍵檢測,重新開始一次按鍵檢測過程。在簡單的系統中這種方法比...

掃瞄按鍵的解決方法

在做專案 工程 的時候,我們經常要用到比較多的按鍵,而且io資源緊張,於是我們就想方設法地在別的模組 中節省io口,好不容易擠出一兩個io口,卻發現仍然不夠用,實在沒辦法了就新增乙個ic來掃鍵。乙個ic雖然 不高,但對於大批量生產而且產品利潤低 的廠家來說,這是一筆不菲的開支 那,我們能不能想到比較...