Thông báo

Collapse
No announcement yet.

hỏi về giá trị của ma trận phím ấn hiển thị ra bộ hiển thị led 7 đoạn cathode chung

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • hỏi về giá trị của ma trận phím ấn hiển thị ra bộ hiển thị led 7 đoạn cathode chung

    chào các anh chị, em đang làm đồ án về ma trận phím hiển thị ra led 7 đoạn
    nội dung là :thực hiện đọc mã ma trận hiện thị lên 4 LED 7 đoạn, khi một phím mới được nhấn, mã phím cũ sẽ chuyển qua LED bên trái một vị trí, để mã phím mới hiện lên trên LED bên phải.
    các anh chị cho em xin code với ạ.
    em nghĩ là mình đang bí cái chỗ phân biệt các lần nhấn phím, vì em nghĩ khi nhấn phím mã led sẽ cho một giá trị mới và dịch chuyển sang led bên cạnh,nên đòi hỏi phải có sự phân biệt các lần nhấn, không biết có đúng không
    đây là code demo của em, mà không đúng,nó chỉ hiện ra 1 led ,khi nhấn lần 2 thì nó không dịch chuyển mã phím mới sang led bên cạnh , các anh chị xem giúp với ạ
    Code:
    #include <mega16.h>
    #include <delay.h>
    
    
    
    
    #define KEY4x4_COL1 PIND.4
    #define KEY4x4_COL2 PIND.5
    #define KEY4x4_COL3 PIND.6
    #define KEY4x4_COL4 PIND.7
    
    #define KEY4x4_ROW1 PORTD.3
    #define KEY4x4_ROW2 PORTD.2
    #define KEY4x4_ROW3 PORTD.1
    #define KEY4x4_ROW4 PORTD.0  
    
    
    static unsigned char led_7[10]={0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};
    
    
    //ham dem so chu so
    
    int dem_chuso(int number){
        int dem=0;
        while(number){
            number=number/10;
            dem=dem+1;
        }
        return dem;
    }
                                      
    void show_led7(unsigned int number){
    int i;
    int a;
    int x=0b00001110;
    int b=number;
    for(i=0;i<dem_chuso(number);i++){
           PORTC=0b00001111;
           PORTC=x;
           a=b%10;
           PORTA=led_7[a];
           delay_ms(1);
          
           b=b/10;
           x=(x<<1)+0b00000001;
          
    }
    }
    
    
    unsigned char KEY4x4_Ispush(void){
    if((KEY4x4_COL1==0)|(KEY4x4_COL2==0)|(KEY4x4_COL3==0)|(KEY4x4_COL4==0))
    return 1;
    else return 0;
    }
    void KEY4x4_checkROW(unsigned char i){
    KEY4x4_ROW1 =KEY4x4_ROW2 =KEY4x4_ROW3 =KEY4x4_ROW4 =1;
    if(i==0){
        KEY4x4_ROW1=0;
    }
    else if(i==1){
        KEY4x4_ROW2=0;
    }
    else if(i==2){
        KEY4x4_ROW3=0;
    }
    else{
        KEY4x4_ROW4=0;
    }  
    }
    static unsigned char KEY_4x4[4][4]={1,2,3,4,
                                        5,6,7,8,
                                        9,1,1,2,
                                        3,4,5,6};
    unsigned int KEY4x4_Getkey(void){
    unsigned char i;
    KEY4x4_ROW1=0;
    KEY4x4_ROW2=0;
    KEY4x4_ROW3=0;
    KEY4x4_ROW4=0;
    if(KEY4x4_Ispush()){
    delay_ms(5);
    if(KEY4x4_Ispush()){
    for(i=0;i<4;i++){
    KEY4x4_checkROW(i);
    if(!KEY4x4_COL1)  return KEY_4x4[i][0];
    if(!KEY4x4_COL2)  return KEY_4x4[i][1];
    if(!KEY4x4_COL3)  return KEY_4x4[i][2];
    if(!KEY4x4_COL4)  return KEY_4x4[i][3];
    }
    }
    }
    return 0;
    }
    // Declare your global variables here
    
    void main(void) {
    
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=T State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTA=0x00;
    DDRA=0b11111111;
    
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x00;
    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0b00001111;
    DDRC=0b00001111;
    
    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=P State6=P State5=P State4=P State3=1 State2=1 State1=1 State0=1
    PORTD=0xFF;
    DDRD=0x0F;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // USART initialization
    // USART disabled
    UCSRB=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;
    
    // SPI initialization
    // SPI disabled
    SPCR=0x00;
    
    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    
    while (1)
          {
          int key2
    #include <mega16.h>
    #include <delay.h>
    
    
    
    
    #define KEY4x4_COL1 PIND.4
    #define KEY4x4_COL2 PIND.5
    #define KEY4x4_COL3 PIND.6
    #define KEY4x4_COL4 PIND.7
    
    #define KEY4x4_ROW1 PORTD.3
    #define KEY4x4_ROW2 PORTD.2
    #define KEY4x4_ROW3 PORTD.1
    #define KEY4x4_ROW4 PORTD.0  
    
    
    static unsigned char led_7[10]={0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};
    
    
    //ham dem so chu so
    
    int dem_chuso(int number){
        int dem=0;
        while(number){
            number=number/10;
            dem=dem+1;
        }
        return dem;
    }
                                      
    void show_led7(unsigned int number){
    int i;
    int a;
    int x=0b00001110;
    int b=number;
    for(i=0;i<dem_chuso(number);i++){
           PORTC=0b00001111;
           PORTC=x;
           a=b%10;
           PORTA=led_7[a];
           delay_ms(1);
           
           b=b/10;
           x=(x<<1)+0b00000001;
           
    }
    }
    
    
    unsigned char KEY4x4_Ispush(void){
    if((KEY4x4_COL1==0)|(KEY4x4_COL2==0)|(KEY4x4_COL3==0)|(KEY4x4_COL4==0))
    return 1;
    else return 0;
    }
    void KEY4x4_checkROW(unsigned char i){
    KEY4x4_ROW1 =KEY4x4_ROW2 =KEY4x4_ROW3 =KEY4x4_ROW4 =1;
    if(i==0){
        KEY4x4_ROW1=0;
    }
    else if(i==1){
        KEY4x4_ROW2=0;
    }
    else if(i==2){
        KEY4x4_ROW3=0;
    }
    else{
        KEY4x4_ROW4=0;
    }   
    }
    static unsigned char KEY_4x4[4][4]={1,2,3,4,
                                        5,6,7,8,
                                        9,1,1,2,
                                        3,4,5,6};
    unsigned int KEY4x4_Getkey(void){
    unsigned char i;
    KEY4x4_ROW1=0;
    KEY4x4_ROW2=0;
    KEY4x4_ROW3=0;
    KEY4x4_ROW4=0;
    if(KEY4x4_Ispush()){
    delay_ms(5);
    if(KEY4x4_Ispush()){
    for(i=0;i<4;i++){
    KEY4x4_checkROW(i);
    if(!KEY4x4_COL1)  return KEY_4x4[i][0];
    if(!KEY4x4_COL2)  return KEY_4x4[i][1];
    if(!KEY4x4_COL3)  return KEY_4x4[i][2];
    if(!KEY4x4_COL4)  return KEY_4x4[i][3];
    }
    }
    }
    return 0;
    }
    // Declare your global variables here
    
    void main(void) {
    
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=T State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTA=0x00;
    DDRA=0b11111111;
    
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTB=0x00;
    DDRB=0x00;
    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0b00001111;
    DDRC=0b00001111;
    
    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=P State6=P State5=P State4=P State3=1 State2=1 State1=1 State0=1 
    PORTD=0xFF;
    DDRD=0x0F;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer1 Stopped
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // USART initialization
    // USART disabled
    UCSRB=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;
    
    // SPI initialization
    // SPI disabled
    SPCR=0x00;
    
    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    
    while (1)
          { int key1;
          key1=KEY4x4_Getkey();
          show_led7(key2);
       }
    }

Về tác giả

Collapse

conghuua1 Tìm hiểu thêm về conghuua1

Bài viết mới nhất

Collapse

Đang tải...
X