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

  • bqviet
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi bqviet
    Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
    06-12-2025, 17:17
  • nguyendinhvan
    Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
    bởi nguyendinhvan
    Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
    05-12-2025, 19:59
  • afrendly
    Trả lời cho Đấu tắt điện cho máy tính bảng
    bởi afrendly
    Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
    04-12-2025, 01:27
  • nick22
    Trả lời cho Máy điện châm ?
    bởi nick22
    Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
    01-12-2025, 13:23
Đang tải...
X