Thông báo

Collapse
No announcement yet.

hỏi đáp ý tưởng lập trình code C.

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

  • hỏi đáp ý tưởng lập trình code C.

    Dưới đây là code C của em, chương trình này có chức năng nhập số từ bàn phím, phát ra loa tần số giá trị nhập vào từ bàn phím, em gặp các vấn đề sau:
    + Hàm hiển thị led của em tách hàng đơn vị, hàng chục riêng---> không thể giữ trạng thái Led sáng cùng lúc (em dùng con 7seg-LPX2-CC) khi nhấn phím.
    + Em làm gần xong rồi nhưng yêu cầu của Thầy dạy vi xử lí là tạo thêm một nút stop (ở đây em chọn phím 0) khi nhấn nút stop-->Loa ngừng kêu.
    Các Anh có ý tưởng xin hướng dẫn cho em với, gần tới ngày báo cáo rồi, còn vướng chỗ này thôi.
    Code:
    #include <REGX51.H>
    sbit led1 = P2^0;
    sbit led2 = P2^1;
    sbit loa  = P1^7;
    
    //HAM DELAY CO BAN
    void delay_us(int time)
    {
    while(time--);
    }
    
      //CAC GIA TRI THEO HEX XUAT RA LED 0-->9
    unsigned char seg7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
    void sang(int n)
         {
    int c,dv,i;
    c=n/10;
    dv=n%10;
     
      P0=seg7[c];
      led1=1;led2=0;
      delay_us(500);
     
      P0=0xff; delay_us(200);
      
      P0=seg7[dv];
      led2=1;led1=0;
      delay_us(500);
    
      P0=0xff;delay_us(200);
      
    
             
     
        }
    void delay(unsigned char time){//Chuong trinh tao tre
            unsigned int t;
            for(t=0;t<time;t++){
                    TMOD=0x01;
                    TH0=0xff;
                    TL0=0xce;
                    TR0=1;
                    while(!TF0);
                    TF0=TR0=0;
            }
    }
    //phimduocan
     void phim_duoc_an(unsigned char phim)
       {
    switch(phim)// Tuy vao so lan
           {
    case 0: { sang(0); break; }
    case 1: { {sang(1); loa=1; delay(20);loa=0;delay(20);  break; }}
    case 2: { {sang(2); loa=1; delay(40);loa=0;delay(40);  break; } }
    case 3: { {sang(3); loa=1; delay(60);loa=0;delay(60);  break; } }
    case 4: { {sang(4); loa=1; delay(80);loa=0;delay(80);  break; } }
    case 5: { {sang(5); loa=1; delay(100);loa=0;delay(100);  break; } }
    case 6: {{sang(6); loa=1; delay(120);loa=0;delay(120);  break; } }
    case 7: { {sang(7); loa=1; delay(140);loa=0;delay(140);  break; } }
    case 8: { {sang(8); loa=1; delay(160);loa=0;delay(160);  break; } }
    case 9: { {sang(9); loa=1; delay(180);loa=0;delay(180);  break; } }
    case 10:{{sang(10); loa=1; delay(200);loa=0;delay(200);  break; }}
    case 11:{{sang(11); loa=1; delay(220);loa=0;delay(220);  break; }}
    case 12:{{sang(12); loa=1; delay(240);loa=0;delay(240);  break; }}
    case 13:{{sang(13); loa=1; delay(260);loa=0;delay(260);  break; }}
    case 14:{{sang(14); loa=1; delay(280);loa=0;delay(280);  break; }}
    case 15:{{sang(15); loa=1; delay(300);loa=0;delay(300);  break; }}
           }
        }
    unsigned char quetphim[4]={0xFE,0xFD,0xFB,0xF7};
    //HAM Quet PHIM
    #define solanquetphim 100 
    unsigned char quetbanphim(void)
         {
    unsigned char giatribanphim;
    unsigned char x,y;
    
    for(x=0; x<4;x++)
     {
    P3=quetphim[x];// Dua lan luot cac hang xuong 0
    for(y=0;y<solanquetphim;y++)// Kiem tra solanquetphim lan
       {
    if(P3_4==0) giatribanphim=0+4*x;// Gia tri phim tuong ung
    if(P3_5==0) giatribanphim=1+4*x;// Tuy thuoc vao hang x
    if(P3_6==0) giatribanphim=2+4*x;// La may ma gia tri cua
    if(P3_7==0) giatribanphim=3+4*x;// gia tri ban phim tuong ung.
        }
     }
    return(giatribanphim);
         }
    
    
    //Hàm Main.
    void main(void)
     {
    unsigned char i;
    while(1)
      {
    i=quetbanphim();
    phim_duoc_an(i);
       }
     }
    Em đã thử sửa lại vd :case 1: { keep: {sang(1); loa=1; delay(20);loa=0;delay(20); while (1) {goto keep; } break; }} thì đèn đã giữ được trạng thái sáng, và loa (p1.7) kêu, nhưng không làm sao cho nó thoát được, nhấn phím khác thì không ăn thua.

  • #2
    Nguyên văn bởi doublemint_1 Xem bài viết
    Dưới đây là code C của em, chương trình này có chức năng nhập số từ bàn phím, phát ra loa tần số giá trị nhập vào từ bàn phím, em gặp các vấn đề sau:
    + Hàm hiển thị led của em tách hàng đơn vị, hàng chục riêng---> không thể giữ trạng thái Led sáng cùng lúc (em dùng con 7seg-LPX2-CC) khi nhấn phím.
    + Em làm gần xong rồi nhưng yêu cầu của Thầy dạy vi xử lí là tạo thêm một nút stop (ở đây em chọn phím 0) khi nhấn nút stop-->Loa ngừng kêu.
    Các Anh có ý tưởng xin hướng dẫn cho em với, gần tới ngày báo cáo rồi, còn vướng chỗ này thôi.
    Code:
    #include <REGX51.H>
    sbit led1 = P2^0;
    sbit led2 = P2^1;
    sbit loa  = P1^7;
    
    //HAM DELAY CO BAN
    void delay_us(int time)
    {
    while(time--);
    }
    
      //CAC GIA TRI THEO HEX XUAT RA LED 0-->9
    unsigned char seg7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
    void sang(int n)
         {
    int c,dv,i;
    c=n/10;
    dv=n%10;
     
      P0=seg7[c];
      led1=1;led2=0;
      delay_us(500);
     
      P0=0xff; delay_us(200);
      
      P0=seg7[dv];
      led2=1;led1=0;
      delay_us(500);
    
      P0=0xff;delay_us(200);
      
    
             
     
        }
    void delay(unsigned char time){//Chuong trinh tao tre
            unsigned int t;
            for(t=0;t<time;t++){
                    TMOD=0x01;
                    TH0=0xff;
                    TL0=0xce;
                    TR0=1;
                    while(!TF0);
                    TF0=TR0=0;
            }
    }
    //phimduocan
     void phim_duoc_an(unsigned char phim)
       {
    switch(phim)// Tuy vao so lan
           {
    case 0: { sang(0); break; }
    case 1: { {sang(1); loa=1; delay(20);loa=0;delay(20);  break; }}
    case 2: { {sang(2); loa=1; delay(40);loa=0;delay(40);  break; } }
    case 3: { {sang(3); loa=1; delay(60);loa=0;delay(60);  break; } }
    case 4: { {sang(4); loa=1; delay(80);loa=0;delay(80);  break; } }
    case 5: { {sang(5); loa=1; delay(100);loa=0;delay(100);  break; } }
    case 6: {{sang(6); loa=1; delay(120);loa=0;delay(120);  break; } }
    case 7: { {sang(7); loa=1; delay(140);loa=0;delay(140);  break; } }
    case 8: { {sang(8); loa=1; delay(160);loa=0;delay(160);  break; } }
    case 9: { {sang(9); loa=1; delay(180);loa=0;delay(180);  break; } }
    case 10:{{sang(10); loa=1; delay(200);loa=0;delay(200);  break; }}
    case 11:{{sang(11); loa=1; delay(220);loa=0;delay(220);  break; }}
    case 12:{{sang(12); loa=1; delay(240);loa=0;delay(240);  break; }}
    case 13:{{sang(13); loa=1; delay(260);loa=0;delay(260);  break; }}
    case 14:{{sang(14); loa=1; delay(280);loa=0;delay(280);  break; }}
    case 15:{{sang(15); loa=1; delay(300);loa=0;delay(300);  break; }}
           }
        }
    unsigned char quetphim[4]={0xFE,0xFD,0xFB,0xF7};
    //HAM Quet PHIM
    #define solanquetphim 100 
    unsigned char quetbanphim(void)
         {
    unsigned char giatribanphim;
    unsigned char x,y;
    
    for(x=0; x<4;x++)
     {
    P3=quetphim[x];// Dua lan luot cac hang xuong 0
    for(y=0;y<solanquetphim;y++)// Kiem tra solanquetphim lan
       {
    if(P3_4==0) giatribanphim=0+4*x;// Gia tri phim tuong ung
    if(P3_5==0) giatribanphim=1+4*x;// Tuy thuoc vao hang x
    if(P3_6==0) giatribanphim=2+4*x;// La may ma gia tri cua
    if(P3_7==0) giatribanphim=3+4*x;// gia tri ban phim tuong ung.
        }
     }
    return(giatribanphim);
         }
    
    
    //Hàm Main.
    void main(void)
     {
    unsigned char i;
    while(1)
      {
    i=quetbanphim();
    phim_duoc_an(i);
       }
     }
    Em đã thử sửa lại vd :case 1: { keep: {sang(1); loa=1; delay(20);loa=0;delay(20); while (1) {goto keep; } break; }} thì đèn đã giữ được trạng thái sáng, và loa (p1.7) kêu, nhưng không làm sao cho nó thoát được, nhấn phím khác thì không ăn thua.
    Đến giờ thì sao rồi bạn? đã làm được chưa?

    Comment


    • #3
      em học vi xử lí cơ bản thôi, nghành của em là Điện tử viễn thông mà Thầy cho bt ngon thật,hehe đến giờ vẫn chưa làm được,

      Comment


      • #4
        Nguyên văn bởi doublemint_1 Xem bài viết
        em học vi xử lí cơ bản thôi, nghành của em là Điện tử viễn thông mà Thầy cho bt ngon thật,hehe đến giờ vẫn chưa làm được,
        thầy có tâm quá rồi còn gì

        Comment


        • #5
          Bài này thực chất không khó nhưng cách mà bạn thực hiện làm cho bài trở lên khó mà thôi. Bạn còn bao lâu nữa để làm cái này? và đã hiểu được nhiều về 89xx chưa? biết dùng timer chưa? vì cái này nếu làm theo hướng timer thì nhẹ nhàng và đơn giản hơn rất nhiều, quét phím và quét LED bạn đổi sang dùng timer thì không cần đến delay nữa mà khi nhấn nhả phím thì "thời gian đáp ứng gần như tức thời".

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          • nguyendinhvan
            Trả lời cho Vấn đề về tốc độ quay
            bởi nguyendinhvan
            Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
            Hôm qua, 19:50
          • Andrea14
            Vấn đề về tốc độ quay
            bởi Andrea14
            Chào mọi người,

            Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
            12-12-2025, 12:42
          • 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
          Đang tải...
          X