51單片機的獨立鍵盤

這幾天打算好好開始看郭天祥的單片機視頻,自己也寫了一個獨立鍵盤的51單片機程序,開發環境爲Keil C51。

剛開始看,功能並不是很複雜,由51單片機的P1^7口接LED燈,P0口作爲6位數碼管的位選線和段選線,6位數碼管每次顯示相同的數字。位選和段選的控制由P2^7,P2^6口。按鍵只有一個,一端與地相連,一端接P3^7口。

當按下按鍵時,LED燈會發光,同時6位數碼管顯示的數字加1,從0~F後返回0。鬆開按鍵後,LED燈滅。

閒話少說,上代碼:

#include <reg52.h>
#define uchar   unsigned char

sbit RDKey=P3^7;
sbit LED=P1^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code   table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void ShortDelay();
void LongDelay();
void display(uchar num);
void main()
{
	uchar num=0;
	RDKey=1;
	LED=1;
	while(1)
	{
		if(RDKey==0)//鍵可能被被按下,需要消抖,用到了LongDelay函數
		{
      LongDelay();
      if(RDKey==0)   //鍵被按下,Do Something,這裏是數碼管顯示數字
      {
        LED=0;
        //Do something
        display(num);
        num++;
        if(num>=16)
          num=0;
      }
		}
		else
		{
			LED=1;
			//Do OtherThing
		}
	}
}

void display(uchar num)
{
  wela=1;
  P0=0xc0;
  wela=0;
  P0=0xff;
  dula=1;
  P0=table[num];
  dula=0;
  ShortDelay();   //數碼管動態顯示,用到的是ShortDelay函數
}

void ShortDelay()
{
  uchar a=100;
  while(a--);
}

void LongDelay()
{
  int a=10000;
  while(a--);
}


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章