代 碼
#include <reg52.h>
sbit led=P2^0;
sbit led2=P2^1;
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*以下函數就是反轉掃描的精華*/
unsigned char jpsm() //矩陣鍵盤反轉掃描
{
unsigned char i=0; //用于接收按鍵數值
P0 = 0x0f; //檢測低4位
if(0x0f != P0) //檢測按鍵是否按下
{
DelayMs(10); //去抖
if(0x0f != P0) //在次判斷按鍵是否真的按下而不是其他干擾
{
i = P0; //把低4位賦值給i
P0 = 0xf0; //檢測高4位
DelayUs2x(5); //稍微延時。。這條語句可以去掉
i = i | P0; //把低4位和高4位組合成完整的按鍵數值
while( 0xf0 != P0 ) //檢測按鍵是否松開
{
;
}
return i; //返回按鍵數值
}
}
return 0; //按鍵沒有按下返回0
}
void main()
{
unsigned char i=0xaa;
while(1)
{
if(126 ==jpsm()) //判斷按鍵1是否按下
{
/*i <<= 1; //注:在Keil編譯器中不管是左移還是右移,移出的數據都是放在CY中
led = CY;*/
i >>=1;
led = CY;
}
}
}
小結
1、什么是進制位
答:就是保存進位的。