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

          • mèomướp
            Trả lời cho Sửa bộ nguồn DC 60V 45A
            bởi mèomướp
            Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
            hôm nay, 13:11
          • tuyennhan
            Trả lời cho Sửa bộ nguồn DC 60V 45A
            bởi tuyennhan
            Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
            hôm nay, 09:25
          • tuyennhan
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi tuyennhan
            Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
            Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
            hôm nay, 09:10
          • Ng.Phuong.5
            Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
            bởi Ng.Phuong.5
            Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
            Mấy con...
            Hôm qua, 19:44
          • viettinh
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi viettinh
            Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
            Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
            Hôm qua, 18:12
          • nguyendinhvan
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi nguyendinhvan
            Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
            Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
            Cách đơn giản...
            Hôm qua, 00:04
          • mèomướp
            Trả lời cho Sửa bộ nguồn DC 60V 45A
            bởi mèomướp
            Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
            08-01-2025, 19:02
          • tuyennhan
            Trả lời cho Sửa bộ nguồn DC 60V 45A
            bởi tuyennhan
            Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
            08-01-2025, 15:43
          • tuyennhan
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi tuyennhan
            Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
            08-01-2025, 15:28
          • mèomướp
            Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
            bởi mèomướp
            Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
            08-01-2025, 11:44
          Đang tải...
          X