2017-03-23 20 views
0

나는 그런 프로그램을 가지고있다. LED 디스플레이의 버튼을 눌러 번호를 얻습니다. 그러나이 프로그램을 변경해야만 * 또는 #을 누르면 디스플레이에 마지막으로 누른 숫자가 2 개 표시됩니다. 예를 들어 '1 2 3 4 5 #'을 (를) 누릅니다. 디스플레이에는 마지막 숫자 인 '4 5'만 표시됩니다. 어떻게해야합니까? 대신 P1을 할당하는 각 버튼을 누를에 대해 다음과 같이매트릭스 키보드와 LED 디스플레이가있는 마이크로 컨트롤러 8051

#include <REGX52.h> 
#define SEG P1 
#define keypad P2 

sbit r1 = P2^0; 
sbit r2 = P2^1; 
sbit r3 = P2^2; 
sbit r4 = P2^3; 

sbit c1 = P2^4; 
sbit c2 = P2^5; 
sbit c3 = P2^6; 
sbit c4 = P3^7; 

void scan(void); 

unsigned int Display[12] = {0x0, 0x1, 0x2, 0x3,0x4,0x5,0x6,0x7,0x8,0x9}; 

void main(void) 
{ 
while(1) 
{ 
    scan(); 
} 
} 

void scan(void){ 
r1=0; 
r2=r3=r4=1; 

if(c1==0) 
{ 
    while(c1==0){ 
     P1=Display[1]; 
    } 
} 
    if(c2==0) 
    { 
     while(c2==0){ 
      P1=Display[2]; 
} 
} 
    if(c3==0) 
{ 
    while(c3==0){ 
     P1=Display[3]; 
    } 
} 
r2=0; 
r1=r3=r4=1; 
if(c1==0) 
{ 
    while(c1==0){ 
     P1=Display[4]; 
    } 
} 
if(c2==0) 
    { 
     while(c2==0){ 
      P1=Display[5]; 
} 
} 
    if(c3==0) 
{ 
    while(c3==0){ 
     P1=Display[6]; 
    } 
} 
r3=0; 
r1=r2=r4=1; 
if(c1==0) 
{ 
    while(c1==0){ 
     P1=Display[7]; 
    } 
} 
if(c2==0) 
    { 
     while(c2==0){ 
      P1=Display[8]; 
} 
} 
    if(c3==0) 
{ 
    while(c3==0){ 
     P1=Display[9]; 
    } 
} 
r4=0; 
r1=r2=r3=1; 
if(c2==0) 
{ 
    while(c2==0){ 
     P1=Display[0]; 
} 
    } 

schema

답변

0
unsigned int last_two_buttons[2] = {0x0, 0x0}; /* array of 2 elements to remember the last two buttons pressed. */ 

unsigned int update_display = 0; //flag to indicate if LED display needs to be updated. 

이제 = 디스플레이 [X], 당신은 단순히 버튼이 배열 누르면/저장을 기억

last_two_buttons[0] = last_two_buttons[1]; 
last_two_buttons[1] = Display[x]; //x here indicates the button pressed, the same way as you have been using in your code. 

이제 * 및 # 버튼을 감지하도록 scan()을 향상 시키십시오. 여기

r4=0; 
r1=r2=r3=1; 
if(c1==0) 
{ 
    while(c1==0){ 
     update_display = 1; // * button pressed 
} 

if(c3==0) 
{ 
    while(c3==0){ 
     update_display = 1; // # button pressed 
} 

if(update_display) 
{ 

    P1 = last_two_buttons[0] <<4 + last_two_buttons[1]; 
    update_display = 0; //reset the variables for next scan. 
    last_two_buttons[0] = 0; 
    last_two_buttons[1] = 0; 

} 

가정은 사용자가 하나의 버튼을 누를 때, 우리는 지난 2 0 5 표시되며, 다음 5 # 말 버튼을 누르면 점이다.

희망이 도움이됩니다.