當前位置:編程學習大全網 - 編程語言 - 4X4 矩陣鍵盤,實現自己定義鍵號為0~9,A~F,編程實現按下按鍵擡起後在多位數碼管上將當前顯示數字左移壹位

4X4 矩陣鍵盤,實現自己定義鍵號為0~9,A~F,編程實現按下按鍵擡起後在多位數碼管上將當前顯示數字左移壹位

#include?<REGX51.H>

#define?uchar?unsigned?char

#define?uint?unsigned?int

uchar?Bits=0,Ten=0,Hundred=0,Thousand=0;

uchar?code?ledshow[16]={?0x3F,/*0*/

0x06,/*1*/

0x5B,/*2*/

0x4F,/*3*/

0x66,/*4*/

0x6D,/*5*/

0x7D,/*6*/

0x07,/*7*/

0x7F,/*8*/

0x6F,/*9*/

0x77,/*A*/

0x7C,/*b*/

0x39,/*C*/

0x5E,/*d*/

0x79,/*E*/

0x71,/*F*/} ;?//***陰數碼管代碼

uchar?code?jz_code[17]={0xff,

0xee,0xed,0xeb,0xe7,

0xde,0xdd,0xdb,0xd7,

0xbe,0xbd,0xbb,0xb7,

0x7e,0x7d,0x7b,0x77};?//鍵盤代碼

void?delay(unsigned?char?a) ?//延時

{

unsigned?char?i;

while(a--)

for(i=100;i>0;i--);

}

uchar?kbscan(void)?//鍵盤掃描

{

unsigned?char?hang,lie,key;

P1=0xf0;

delay(5);

lie=P1;

P1=0x0f;

delay(5);

hang=P1;

for(key=16;key>0;key--)

{

?if(jz_code[key]==(hang|lie))?break;

}

return?(key);

}

void?data_l(void) ?//左移

{

uchar?i;

static?keytemp=0;

i= kbscan();

if(i!=0)

{

if(!(keytemp==i))

{

keytemp=i;

Thousand=Hundred;?//千位

Hundred=Ten;//百位

Ten=Bits; //十位

Bits=i-1; //個位

}

}

else?keytemp=0;

}

void?display(void)//數碼管顯示,調試方法:數碼管間隔跳動函數中?delay(5);四個,調小

{

data_l();

P0=ledshow[Thousand];

P2_0=0;

delay(5);

P2_0=1;

P0=ledshow[Hundred];

P2_1=0;

delay(5);

P2_1=1;

P0=ledshow[Ten];

P2_2=0;

delay(5);

P2_2=1;

P0=ledshow[Bits];

P2_3=0;

delay(5);

P2_3=1;

}

?

void?main(void)

{?

P2=0xff;

while(1)

{

display();

}

}

  • 上一篇:串行端口數據編程
  • 下一篇:996到底是什麽,妳會選擇996嗎?
  • copyright 2024編程學習大全網