?? skey.c
字號:
/*******************************************
文件:SKEY.C
環(huán)境:編譯為ICC AVR6.25A,仿真為AVR Studio4.10
硬件:ATMEGA16芯片
日期:2006年12月10日
功能:驅(qū)動開發(fā)板上的獨(dú)立按鍵,按下不同的鍵,數(shù)碼管顯示0-3四個數(shù)字
備注:參考《AVR系列單片機(jī)C語言編程與應(yīng)用實(shí)例》(清華大學(xué)出版社)
/******************************************/
#include <iom16v.h> //包含型號頭文件
#include <macros.h> //包含"位"操作頭文件
#include <stdio.h> //標(biāo)準(zhǔn)輸入輸出頭文件
/*******************************************
函數(shù)名稱: Skey_press
功 能: 檢測是否有鍵按下
參 數(shù): 無
返回值 : pressed--有鍵按下時為TRUE,否則為FALSE
/********************************************/
uchar Skey_press(void)
{
uchar pressed;
KEY_DDR=OUT; //定義數(shù)據(jù)端口為輸出
KEY_PORTO|=0x0F; //輸出數(shù)據(jù)(輸出檢測碼)
KEY_DDR=IN; //定義數(shù)據(jù)端口為輸入
if((KEY_PORTI&0x0F)!=0x0F) //檢測是否有鍵按下
pressed=TRUE; //有鍵按下則返回TRUE
else
pressed=FALSE; //無鍵按下則返回FALSE
KEY_DDR=OUT; //數(shù)據(jù)端口還原為輸出
return pressed;
}
/*******************************************
函數(shù)名稱: Skey_scan
功 能: 掃描所按的鍵并返回鍵值
參 數(shù): 無
返回值 : keycode--被按下鍵值
/********************************************/
uchar Skey_scan(void)
{
uchar keycode=0xFF;
Delayms(15); //延時消抖
if(Skey_press()==TRUE) //如果有鍵按下
{
KEY_DDR=IN; //定義數(shù)據(jù)端口為輸入
keycode=KEY_PORTI; //讀入原始鍵碼
keycode&=0x0F; //屏蔽高4位
switch(keycode) //翻譯原始鍵碼為0~3
{
case 0x0E:
keycode=0;
break;
case 0x0D:
keycode=1;
break;
case 0x0B:
keycode=2;
break;
case 0x07:
keycode=3;
break;
default:
keycode=0x00;
}
do
{
}while(Skey_press()==TRUE); //等待按鍵釋放(為了防止按一次,執(zhí)行多次的現(xiàn)象)
}
return keycode;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -