標(biāo)題:
單片機(jī)按鍵掃描程序
[打印本頁(yè)]
作者:
daxiao
時(shí)間:
2015-3-21 16:45
標(biāo)題:
單片機(jī)按鍵掃描程序
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
/*sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;
sbit LED9=P2^0;
sbit LED10=P2^1;
sbit LED11=P2^2;
sbit LED12=P2^3;
sbit LED13=P2^4;
sbit LED14=P2^5;
sbit LED15=P2^6;
sbit LED16=P2^7;*/
//延時(shí)函數(shù) 毫秒延時(shí)
void delay(uint xms)
{
int x,y;
for(x=0;x<xms;x++)
for(y=130;y>0;y--);
}
//鍵盤(pán)掃描函數(shù)
void scankey(void)
{
uchar temp=0;
/******************掃描第一行*********************/
P1=0xfe;//選擇第一行 1111 1110
temp=P1;//把P0口的電平變化實(shí)時(shí)給temp
temp=temp&0xf0;//屏蔽低四位,只考慮高四位控制的列
if(temp!=0xf0)
{
delay(10);
temp=P1;//把P0口的電平變化實(shí)時(shí)給temp
temp=temp&0xf0;//屏蔽低四位,只考慮高四位控制的列
if(temp!=0xf0)
{
temp=P1;//由于temp被前面的0xf0改變了,所以在此需要再獲得一次P0的值
switch(temp)
{
case 0x7e:LED1=~LED1 ; break;//第一行第一列按鍵按下
case 0xbe:LED2=~LED2 ; break;//第一行第二列按鍵按下
case 0xde:LED3=~LED3 ; break;//第一行第三列按鍵按下
case 0xee:LED4=~LED4; break;//第一行第四列按鍵按下
}
while(temp!=0xf0)//按鍵釋放程序
{
temp=P1; //再次讀取P0的值,看看有沒(méi)有釋放,如果釋放高四位全是1
temp=temp&0xf0;
}
}
}
}
void main()
{
while(1)
{
scankey();
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1